Matlab, сумма символических функций - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь реализовать следующую функцию в matlab, где известны все переменные, кроме "o".И затем, когда функция определена, найдите min на основе первоначального предположения, используя метод lsqnonlin.enter image description here

Код Matlab:

%%
x0 = 23;
[x,resnorm] = lsqnonlin(@myfun,x0);

%%

function F = myfun(x)
k = 1:5;
p = 1:5;
F = max_index_values_5(k,p)-(sqrt(a(k)-b(p))+x);
end

Где max_index_values ​​- матрица 5 * 5, a и b - векторы длины 5, а u * v приводит кноль, поэтому его нет в коде Matlab.Когда я запускаю код, я получаю следующую ошибку:

Неопределенная функция 'max_index_values_5' для входных аргументов типа 'double'.

Может кто-нибудь помочь мне реализоватьфункция так работает с lsqnonlin?

1 Ответ

0 голосов
/ 05 марта 2019

Вот пример использования двух разных решателей (сначала я не имел доступа к 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):

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...