Вот пример использования двух разных решателей (сначала я не имел доступа к Optimization Toolbox
и использовал доступный fminsearch
)
function [] = main()
z = [1 2 3;
4 5 6;
7 8 9];
a = [1;3;5];
b = [1;7;2];
opt_fms = optimset('Display','iter');
x0 = 1;
%[x, fval] = fminsearch(@myfun,x0, opt_fms, z, a, b)
[x, fval] = lsqnonlin(@myfun,x0, [], [], opt_fms, z, a, b)
end
function F = myfun(o, z, a, b)
F = 0;
n = numel(a);
for i = 1:n
for j = 1:n
F = F + (z(i, j) - (sqrt(a(i, 1)+b(j, 1)) + o)).^2;
end
end
end
lsqnonlin результат (возвращаемое значение функции встепень 2):
x =
2.5631
fval =
2.1663e+03
Результат fminsearch:
x =
2.5631
fval =
46.5441
Вот график функции с результатом оптимизации (из fminsearch):