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

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

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 = norm(x-t)^2;
prob2 = optimproblem("Objective",obj2);
% Check to see the default solver
opts = optimoptions(prob2)
opts = 

  lsqlin options:
...

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

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

  quadprog options:
...

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

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

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

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

  lsqnonlin options:
...

Эквивалентно, запишите цель как норму в квадрате.

obj5 = norm(expr - ydata)^2; % norm squared
prob5 = optimproblem("Objective",obj5);
% Check to see the default solver
opts = optimoptions(prob5)
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 + cos(x(1))^2;
prob = optimproblem('Objective',R1 + R2 + R3);
options = optimoptions(prob)
options = 

  lsqnonlin options:
...

Похожие темы