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