首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在自定义函数MATLAB中调用匿名函数

在自定义函数MATLAB中调用匿名函数
EN

Stack Overflow用户
提问于 2019-08-26 11:00:48
回答 1查看 220关注 0票数 0

我想在一个自定义MATLAB函数中调用一个匿名函数。从调用自定义函数的脚本中,我希望最小化定制的MATLAB函数。我有一个问题,匿名函数没有被正确地传递给函数。

作为一个MWE,我有一个脚本,在其中我定义了一个匿名函数afunction

代码语言:javascript
复制
% directory for minimization algorithm
addpath '/somedirectory/FMINSEARCHBND'

% anonymous function
afunction = @(x) x.^2 + 2.*x - 71;

% 1D minimization guesses
xguess = 20;
xmin = -1000;
xmax = 1000;

% 1D minimization call
minx = fminsearchbnd(@(x) MWEtestfuntominimize(x), xguess, xmin, xmax);

然后我在另一个文件MWEtestfuntominimize中编写了一个自定义函数,

代码语言:javascript
复制
function g = MWEtestfuntominimize(x)
    g = abs(afunction(x));
end

我希望我的主脚本能够最小化MWEtestfuntominimize,但似乎MWEtestfuntominimize不能调用afunction。错误信息是

代码语言:javascript
复制
Undefined function or variable 'afunction'

我尝试将afunction作为一个论点传递给MWEtestfuntominimize,但没有成功。这是通过在最小化调用中修改minx来实现的

代码语言:javascript
复制
minx = fminsearchbnd(@(afunction,x) MWEtestfuntominimize(afunction,x), xguess, xmin, xmax);

并将自定义函数修改为

代码语言:javascript
复制
function g = MWEtestfuntominimize(afunction,x)
    g = abs(afunction(x));
end

由此产生的错误是

代码语言:javascript
复制
"afunction" was previously used as a variable, conflicting with its use here as the name of a function or command.

我知道一个解决方案是在MWEtestfuntominimize本身中定义匿名函数,但是对于我正在编写的特定程序,我不想这样做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-26 11:06:05

你说通过afunction“不成功”,但没有说明为什么.我就是这样解决这个问题的

代码语言:javascript
复制
% anonymous function
afunction = @(x) x.^2 + 2.*x - 71;
% 1D minimization call
minx = fminsearchbnd(@(x) MWEtestfuntominimize(x, afunction), xguess, xmin, xmax);

然后在你的最小化函数中..。

代码语言:javascript
复制
function g = MWEtestfuntominimize(x, fcn)
    g = abs( fcn(x) );
end

为了进一步了解这种方法的工作原理,fminsearchbnd需要一个只有一个输入的函数。这是一个只有一个输入的函数(x)

代码语言:javascript
复制
@(x) MWEtestfuntominimize( x, afunction )

函数句柄(或其他变量) afunction存储在匿名函数中,此时工作区中的值相同。注意,如果afunction随后发生变化,它将在您的匿名函数中更改而不是

一个简单的例子是

代码语言:javascript
复制
a = 2;
f = @(x) x + a;

f(5); % = 7

a = 4; % change 'a' after the definition of 'f'
f(5); % = 7, does not change as f = @(x) x + 2 still
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57656617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档