Напишите целевую функцию для основанных на проблеме наименьших квадратов

Чтобы задать целевую функцию для основанных на проблеме наименьших квадратов, напишите цель явно как сумму квадратов. При явном использовании формулировки методом наименьших квадратов вы получаете наиболее подходящий и эффективный решатель для вашей задачи. Для примера,

t = randn(10,1); % Data for the example
x = optimvar('x',10);

obj = sum((x - t).^2); % Explicit sum of squares

prob = optimproblem("Objective",obj);
% Check to see the default solver
opts = optimoptions(prob)
opts = 

  lsqlin options:
...

Напротив, выражение цели как математически эквивалентного выражения дает задачу, которую программное обеспечение интерпретирует как общую квадратичную задачу.

obj2 = (x - t)'*(x - t); % Equivalent to a sum of squares,
                         % but not interpreted as a sum of squares
prob2 = optimproblem("Objective",obj2);
% Check to see the default solver
opts = optimoptions(prob2)
opts = 

  quadprog options:
...

Точно так же записывайте нелинейные методы наименьших квадратов как явные суммы квадратов оптимизационных выражений.

t = linspace(0,5); % Data for the example
A = optimvar('A');
r = optimvar('r');
expr = fcn2optimexpr(@(A,r)A*exp(r*t),A,r);
ydata = 3*exp(-2*t) + 0.1*randn(size(t));

obj3 = sum((expr - ydata).^2); % Explicit sum of squares

prob3 = optimproblem("Objective",obj3);
% Check to see the default solver
opts = optimoptions(prob3)
opts = 

  lsqnonlin options:
...

Наиболее общей формой, которую программное обеспечение интерпретирует как задачу наименьших квадратов, является сумма выражений, Rn из этой формы:

Rn=an+k1(k2(k3(...kjen2)))

  • en - любое выражение. Если многомерный, en должен быть квадратурным термином за терминами .^2.

  • an является скалярным числовым значением.

  • Эти kj являются положительными скалярными числовыми значениями.

Каждый Rn выражения должен вычисляться скаляром, а не многомерным значением. Для примера,

x = optimvar('x',10,3,4);
y = optimvar('y',10,2);
t = randn(10,3,4); % Data for example
u = randn(10,2); % Data for example
a = randn; % Coefficient
k = abs(randn(5,1)); % Positive coefficients
% Explicit sums of squares:
R1 = a + k(1)*sum(k(2)*sum(k(3)*sum((x - t).^2,3)));
R2 = k(4)*sum(k(5)*sum((y - u).^2,2));
R3 = 1 + (fcn2optimexpr(@cos,x(1)))^2;
prob = optimproblem('Objective',R1 + R2 + R3);
options = optimoptions(prob)
options = 

  lsqnonlin options:
...

Похожие темы