Я играю с функцией Matlab fmincon
, но думаю, что не понимаю, как заставить ее работать должным образом.
Мне нужно оптимизировать значение двух параметров: err1
и err2
действует на один параметр param_1
, чтобы найти значение param_1
, позволяющее err1
и err2
достичь идеальных параметров ideal1
и ideal2
Два идеальныхпараметры известны.Для вычисления err1
и err2
я использую две функции, которые в основном одинаковы, одна с выводом err1
, а другая дает err2
в качестве вывода.
До оптимизации у меня есть одна функция, дающаяв качестве выходных данных два параметра, и я вычисляю расстояние, которое я буду использовать как ограничение
ideal1 = [0;0.3536;0.0000;-0.3536;-0.5000;-0.3536;-0.0000;0.3536;0.5000];
ideal2 = [0;0.3536;0.5000;0.3536;0.0000;-0.3536;-0.5000;-0.3536;-0.0000];
err1 = [0;0.1750;-0.1167;-0.2917;-0.3500;-0.1750;0.1167;0.3500;0.3500];
err2 = [0;0.2917;0.2917;0.1750;-0.1167;-0.2917;-0.2917;-0.1167;0.1167];
ideal_distance = sum(sqrt(ideal1.^2+ideal2.^2))
real_distance = sum(sqrt(err1.^2+err2.^2))
Я думаю, что проблема заключается в количестве входных параметров в этих двух функциях: 20 входных параметров, где большинство из них являютсяскалярные значения и некоторые из них - матрицы, файлы и т. д. *
err1 = @(param_1) compute_err1_funct(param_1,param_2,param_3,...,param_20);
err2 = @(param_1) compute_err2_funct(param_1,param_2,param_3,...,param_20);
Затем мне нужны две другие функции для преобразования двух err1
, err2
в два нужных мне значения:
err1_convert = @(param_1) transf_funct( -7 inputs- )
err2_convert = @(param_1) transf_funct( -7 inputs- )
и наконец я пытаюсь найти оптимальный результат
param_1 = [1,2]
fmincon(err1_convert,param_1,real_distance,ideal_distance)
Здесь я получаю ошибку
Слишком много входных аргументов.
, который распространяется внутри fmincon
Ошибка в fmincon (строка 546) initVals.f = feval (funfcn {3}, X, varargin {:});
Причина: ошибка в оценке исходной целевой функции.FMINCON не может продолжить.