首页 文章

Anonymus在matlab中起作用

提问于
浏览
0

我想在matlab中使用参数优化函数 . 当我想只优化一个参数时,我就用这个函数来做这个:

fminsearch(@(x) fun(x, 3, 1, 2, 3),2);

它工作正常 . 但是,当我想优化我的函数的两个参数时:

fminsearch(@(x, y) fun(x, y, 1, 2, 3),[2,2]);

我收到以下错误:

使用测试时出错> @(x,y)fun(x,y,1,2,3)(第7行)没有足够的输入参数 .

我的代码没有错误_2446722错误 . 它类似于Mathworks为我的问题所建议的内容:http://www.mathworks.com/help/matlab/ref/fminsearch.html

以下是该网站的示例:

function f = myfun(x,a)
f = x(1)^2 + a*x(2)^2;
x = fminsearch(@(x) myfun(x,a),[0,1])

这正是我对我的功能乐趣所做的事情,然而,它不起作用 . 为什么?

1 回答

  • 3

    fminsearch 总是假设一个单输入函数,你的是双输入,如@Adriaan noted . 如果您有多个参数,请使用 fminsearch 的数组值输入,但只能使用一个 . 这正是示例所做的:传递带有参数 a@(x) myfun(x,a)fminsearch 看不到)和数组 x .

    你必须把你的功能称为

    fminsearch(@(x) fun(x(1), x(2), 1, 2, 3),[2,2]);
    

    为了遵守 fminsearch 所期望的语法 .

    fminsearch 和相关函数的实现使得它们查看起始参数( [2,2] ),并且它们从该变量的维度中得出参数的数量 . 因此,相同大小的数组始终作为其单个输入变量提供给您的匿名函数 .

相关问题