exponenta event banner

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

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

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.

  • - скалярное числовое значение.

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

Связанные темы