Matlab,符号函数之和

时间:2019-03-03 15:44:24

标签: matlab math

我正在尝试在matlab中实现以下函数,其中除“ o”以外的所有变量都是已知的。然后,在定义函数后,使用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'   “双”。

有人可以帮我实现该功能,以便与lsqnonlin一起使用吗?

1 个答案:

答案 0 :(得分:0)

这里是使用两个不同求解器的示例(起初,我无权访问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