【问题标题】:matlab find min value without constraintmatlab找到没有约束的最小值
【发布时间】:2015-09-11 02:46:00
【问题描述】:

我是 matlab 新手。
我要找到函数的最小值:x(1)^2 - 2*x(1)*x(2) + 6*x(1) + x(2)^2 - 6*x(2 )

我试图在不使用匿名函数的情况下编写 matlab 代码,但我现在被困在这里。

这是我的代码:

function minFun()
    res = fminsearch(@f2, [0,0]);

    function out = f2([x(1) x(2)])
        out = x(1)^2 - 2*x(1)*x(2) + 6*x(1) + x(2)^2 - 6*x(2);
    end
end

但它提到这是function out = f2([x(1) x(2)]) 中的语法错误。我应该如何解决这个问题?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    如果我理解正确,您有 2 个文件。在您的 f2.m 文件中,您应该使用

    function out = f2(x)
        out = x(1)^2 - 2*x(1)*x(2) + 6*x(1) + x(2)^2 - 6*x(2);
    

    输入 x 已经是一个向量。

    如果只有一个文件,那么语法应该是这样的:

    function minFun()
        res = fminsearch(@f2, [0,0])
    
    function out = f2(x)
        out = x(1)^2 - 2*x(1)*x(2) + 6*x(1) + x(2)^2 - 6*x(2);
    

    请注意,我留下了 res 没有 ;,因此您可以看到 fminsearch 的输出。

    【讨论】:

      【解决方案2】:

      试试函数out = f2(x(1),x(2))

      【讨论】:

        【解决方案3】:

        请注意,matlab 匿名函数是使用 @ 运算符调用的,因此您的问题有点令人困惑,因为您的代码尝试使用它。

        function out = f2([x(1) x(2)])

        此行不正确,您应该使用变量作为函数参数x

        如果您不想使用匿名函数,您应该在工作目录或 matlab 路径中有一个 f2.m 文件,正如另一个答案所说。

        function out = f2(x)
        out = x(1)^2 - 2*x(1)*x(2) + 6*x(1) + x(2)^2 - 6*x(2);
        

        然后你用字符串引用函数:

        function minFun()
        res = fminsearch('f2', [0,0]);
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-27
          • 2011-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-27
          相关资源
          最近更新 更多