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

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

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:
...

Похожие темы