【问题标题】:Matlab, sum of symbolic fucntionsMatlab,符号函数的总和
【发布时间】:2019-03-03 15:44:24
【问题描述】:

我正在尝试在 matlab 中实现以下函数,其中除了“o”之外的所有变量都是已知的。然后在定义函数时,使用 lsqnonlin 方法根据初始猜测找到最小值。

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 一起使用吗?

【问题讨论】:

标签: matlab math


【解决方案1】:

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

fmin搜索结果:

x =
    2.5631
fval =
   46.5441

这是函数的优化结果图(来自 fminsearch):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多