【发布时间】:2014-10-04 21:02:31
【问题描述】:
所以我有这两个组成的 .m 文件。这是我遇到的问题的一个例子,数学是伪数学
矩形.m:
function [vol, surfArea] = rectangle(side1, side2, side3)
vol = ...;
surfArea = ...;
end
ratio.m:
function r = ratio(f,constant)
% r should return a scaled value of the volume to surface area ratio
% based on the constant provided.
% This line doesn't work but shows what I'm intending to do.
[vol,surfArea] = f
r = constant*vol*surfArea;
end
我不确定如何将矩形函数作为 f 传递,然后从 ratio 函数中访问 vol 和 surfArea。我已经阅读了关于函数句柄和函数函数的 Mathworks 页面,并且在弄清楚如何做到这一点时空手而归。我是 MATLAB 新手,所以这也无济于事。
如果您需要更多信息,请告诉我。
谢谢!
【问题讨论】:
-
您可以将函数作为参数传递,例如在
cellfun中,但在此示例中,如果函数没有得到任何参数,您如何期望它给出结果? -
所以我正在(错误地)设想像这样传递的参数。
ratio(rectangle(1,2,3),2)。但是,我认为这更接近正确答案。ratio(@rectangle,2)或这个ratio(@(x)ratio(1,2,3),2)。在最后两种情况下,我不明白如何访问矩形函数的输出。 -
你真的需要创建某种功能闭包吗?如示例所示,根本不需要函数句柄 - 只需让调用者首先调用它想要的任何
f,然后将生成的vol和surfArea作为额外参数传递给ratio(即您的@987654331 @想法) -
您调用它的第一种方式只会返回
rectangle函数的第一个输出。同样,匿名函数只能返回一个输出。如果你真的需要传递函数(无论是通过它们的句柄还是在其他函数的参数中)并且你需要多个值,你必须将它们分组到一个结构中。
标签: matlab function argument-passing