【问题标题】:Anonymus functions in matlabmatlab中的匿名函数
【发布时间】:2016-05-08 07:18:31
【问题描述】:

我想用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 行)

输入参数不足。

我不明白,我的代码有什么问题。这类似于 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])

这正是我对函数 fun 所做的,但它不起作用。为什么?

【问题讨论】:

  • 这不是你所做的,MathWorks 使用@(x),而你在fminsearch 中使用@(x,y)

标签: matlab optimization anonymous-function


【解决方案1】:

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

你必须像这样调用你的函数

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

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

fminsearch 和相关函数的实现是这样的:它们查看起始参数 ([2,2]),并根据该变量的维度得出参数的数量。因此,相同大小的数组总是作为单个输入变量提供给您的匿名函数。

【讨论】:

  • 提及我的奖励积分,虽然我对功能一无所知:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
相关资源
最近更新 更多