【发布时间】:2021-09-07 22:11:33
【问题描述】:
在 MATLAB R2020b 中,我有以下代码:
f=@(x) x.^2;
y=2;
g=@(x) f(x).*y
输出是
g = function_handle with value: @(x)f(x).*y
但是y = 2,所以我希望输出是@(x)f.*2。这是它应该如何工作还是一个错误?我可以将其显示为f.*2 而不是f.*y?
【问题讨论】:
-
我会说它应该是这样工作的,但只有 MathWorks 自己才能告诉你原因。至于更改显示:您需要重载函数句柄类的默认
disp()方法,即您需要直接修改此类的 MATLAB 源代码。这可能是不可能的,例如如果代码是预编译和/或混淆的,即使可能,我建议不要修改 MATLAB 源文件。您也许可以编写一个包装函数,而不是在disp()调用函数句柄时调用。 -
只是为了验证
y发生了什么:如果您执行y = 3;h=@(x) f.*y然后将输出与g的输出进行比较会发生什么?当然:g(2)和h(2)会发生什么?输出是否相同,即y在g中的值是否发生了变化,还是不同? -
实际上我的意思是输入 g(x)=@(x)f(x).*y,就像编辑过的那样。然后
g(2)给我 8,h(2)给我 12。所以当我输入参数时它就起作用了。但我需要创建一个勒让德多项式数组(通过递归)P_=cell(1,N+1); P_{1}=@(u_) 1; P_{2}=@(u_) u_; for n=1:N, P_{n+2}=@(u_)((n+1)*@(u_)P_{n+1}(u_)-n*@(u_)P_{n}(u_))/(2*n+1); end,它永远不会进展,因为每个单元格在循环中都有 n 但没有它的值。对此有何想法? -
“它永远不会前进,因为每个单元格在循环中都有 n 但没有它的值”——我认为这确实有效,只是你无法从显示的函数中看到它。评估它们以进行验证。但无论如何,使用具有常数因子的向量来表示多项式要容易得多,请参阅here。
-
是的,效率更高。与调用一个调用两个匿名函数的匿名函数相比,评估该多项式表示只是一个点积,后者又调用了四个匿名函数......