0

我是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)]). 我应该如何解决这个问题?

4

3 回答 3

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.

于 2013-09-29T04:49:09.967 回答
0

试用功能out = f2(x(1),x(2))

于 2013-09-29T04:19:57.493 回答
0

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

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

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

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

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
于 2015-09-10T18:46:00.773 回答