Matlab 我可以在匿名函数中重用表达式的结果吗?
我有一个匿名函数,比如Matlab 我可以在匿名函数中重用表达式的结果吗?,matlab,anonymous-function,Matlab,Anonymous Function,我有一个匿名函数,比如@(x)sqrt(x)+1./sqrt(x)-3,我想传递给另一个函数,例如 fsolve(@(x) sqrt(x) + 1./sqrt(x) - 3, 3) 想象一下,sqrt的参数有点复杂,因此sqrt(…)调用的计算量很大-是否可以创建一个匿名函数来计算(在这个简单的示例中)sqrt(x)首先,然后使用结果res计算res+1/res-3 或者这只能用普通函数编程吗?如果你对嵌套匿名函数的想法倾向于“没有中间步骤的单个匿名函数中的所有内容”(即中间匿名函数),我想不
@(x)sqrt(x)+1./sqrt(x)-3
,我想传递给另一个函数,例如
fsolve(@(x) sqrt(x) + 1./sqrt(x) - 3, 3)
想象一下,sqrt
的参数有点复杂,因此sqrt(…)
调用的计算量很大-是否可以创建一个匿名函数来计算(在这个简单的示例中)sqrt(x)
首先,然后使用结果res
计算res+1/res-3
或者这只能用普通函数编程吗?如果你对嵌套匿名函数的想法倾向于“没有中间步骤的单个匿名函数中的所有内容”(即中间匿名函数),我想不出解决方案,因为你必须以某种方式“存储”防止其重新计算的值。因此,我的想法如下:
%原始函数
原点=@(x)sqrt(x)+1./sqrt(x)-3;
%复杂的内部函数
内部=@(x)sqrt(x);
%实际功能
func=@(y)y+1./y-3;
%函数包装器
包装器=@(z)func(内部(z));
%一些小测试
X=1:10;
原点(X)
包装器(X)
ans=
-1.000000 -0.878680 -0.690599 -0.500000 -0.316718 -0.142262 0.023716 0.181981 0.333333 0.478505
ans=
-1.000000 -0.878680 -0.690599 -0.500000 -0.316718 -0.142262 0.023716 0.181981 0.333333 0.478505
复杂的内部函数只需要计算一次——至少在我看来是这样。是的,你可以这样做(尽管可能会引起争论)
本质上,您需要定义一个内部匿名函数,然后使用一些昂贵的函数调用的结果立即对其求值
MATLAB处理在匿名函数定义中定义匿名函数的过程,与语法允许的方式完全相同。“立即评估”位可以使用feval
:
@(x) feval(@(res) res + 1./res - 3, sqrt(x))
一句话:我想把它也用于代码生成(嵌入式编码器),所以我必须看看嵌入式编码器支持哪些解决方案。你知道
fsolve
需要一个函数句柄,但它不需要是匿名函数。您可以编写一个实际的函数,将其粘贴在使用它的M文件的末尾,并向其传递句柄。