【问题标题】:Minimization of a three variables function in MatlabMatlab中三变量函数的最小化
【发布时间】:2016-07-08 12:57:53
【问题描述】:

我正在尝试使用 Matlab 文档中给出的最小化函数示例并在 Matlab R2016a 中运行它,但它会产生错误。 这是示例:

这是我基于此编写的代码:

function b = test_algo(v)
x = v(1);
y = v(2);
z = v(3);
b = x.^2 + 2.5*sin(y) - z^2*x^2*y^2;

v = [-0.6 -1.2 0.135];
a = fminsearch(@test_algo,v);

disp('a', a);

但是我得到一个错误而不是预期的结果:

Not enough input arguments.

Error in test_algo (line 3)
x = v(1);

知道为什么吗?谢谢!

【问题讨论】:

    标签: matlab function math minimize


    【解决方案1】:

    根据您执行代码的方式,您必须将fminsearch 的调用放在单独的函数中:

    function test()
    
    v = [-0.6 -1.2 0.135];
    a = fminsearch(@test_algo,v);
    
    disp(a);
    
    function b = test_algo(v)
    x = v(1);
    y = v(2);
    z = v(3);
    b = x.^2 + 2.5*sin(y) - z^2*x^2*y^2;
    

    如果我将所有内容放在一个 m 文件中并执行它,上面的示例对我有用。

    【讨论】:

      【解决方案2】:

      您需要将目标函数test_algo 与调用它的代码分开定义。由于您不需要太多代码来定义目标函数,因此可以使用匿名函数来定义它:

      b = @(v) v(1).^2 + 2.5*sin(v(2)) - v(3)^2*v(1)^2*v(2)^2;
      v0 = [-0.6 -1.2 0.135];
      a = fminsearch(b,v0);
      disp(a);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        • 1970-01-01
        • 2015-08-26
        • 1970-01-01
        相关资源
        最近更新 更多