Слишком много входных аргументов с помощью fmincon в Matlab - PullRequest
0 голосов
/ 06 февраля 2019

Я играю с функцией 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 не может продолжить.

1 Ответ

0 голосов
/ 07 февраля 2019

(1) Ваша ошибка, вероятно, вызвана некоторой ошибкой в ​​определении «err1_convert», возможно, в определении функции «transf_funct», которую вы здесь не указали.Убедитесь, что количество входных переменных в определении функции и при ее вызове одинаково.

.

(2) Вероятно, это не является причиной этой конкретной ошибки,но есть еще одна вещь, которую вам нужно исправить, чтобы избежать (другой) ошибки: ваш параметр - это вектор длины 2, и поэтому, если вы добавите к fmincon 3-й и 4-й параметры (A и b),тогда A ("real_distance") должна быть матрицей 2x2, а b (ideal_distance) должна быть вектором длины 2 (в то время как согласно коду они оба являются скалярами). Если A = [a11,a12 ; a21,a22] и b = [b1;b2], тоограничения: a11*x1 + a12*x2 <= b1 и a21*x1 + a22*x2 <= b2.

Если вы подразумевали, что «real_distance» и «ideal_distance» означают нижнюю и верхнюю границы, вы должны написать (предполагая: real_distance

fmincon(err1_convert, param_1, [], [], [], [], real_distance, ideal_distance)

Поскольку lb и ub (нижняя и верхняя граница) являются 7-м и 8-м параметрами в fmincon, а не 3-м и 4-м.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...