是否可以在MATLAB中具有可选参数的功能处理

30次观看(过去30天)
穆罕默德·亚军
穆罕默德·亚军 于2021年8月12日在1:54
评论: 沃尔特罗伯森 于2021年8月12日在3:55
我有大约25-50个Matlab函数手柄保存在单元格数组中,因此我可以使用for循环评估它们中的每一个。这些功能句柄从符号表达式转换。
但是,一些函数句柄需要4个参数,其他需要2个参数,很少有不需要任何参数(它们是常量)。例如,一些它们需要(x1,x2,y1,y2)作为参数,某种需要(x1,x2),有些需要(y1,y2),很少需要什么。
我的问题:是否有可能在Matlab中具有可选参数的函数处理?这意味着我可以给所有功能句柄提供4个参数,并让他们决定是否需要所有或不需要。如果他们不需要其中一些,他们只能忽略它们。
谢谢你。

接受答案

沃尔特罗伯森
沃尔特罗伯森 大约11小时前

是的,匿名功能可以使用varargin。

请注意,MATLABFUNCT不会生成varargin。但是,它确实支持在表达式中不发生的“万博1manbetxvars”中指定变量名称。说这是绝对没事的

matlabfunction(y ^ 2,'vars',[x,y])在这种情况下,第一个输入将被忽略
2评论
沃尔特罗伯森
沃尔特罗伯森 于2021年8月12日在3:55
Syms.x1 x2 y1 y2
matlabfunction(y1 ^ 2 - x2 ^ 2,'vars',[x1,x2,y1,y2])
ans =.function_handle具有值:
@(x1,x2,y1,y2)-x2。^ 2 + y1。^ 2
你仍然需要通过 某物 在这些职位,但无论你通过什么都会被忽略。

登录评论。

更多答案(2)

图像分析师
图像分析师 大约12小时前
编辑:图像分析师 大约11小时前
它肯定是可能的 常规的 功能。有关帮助,请参阅Varargin和Nargin。你可以使用常规功能吗?您仍然可以像匿名功能一样地掌握常规功能。
匿名的 功能,我不知道。我不认为这是可能的。如果您想为常规,正常功能进行这样做,请告诉我。
1条评论
穆罕默德·亚军
穆罕默德·亚军 大约12小时前
是的,我知道用常规功能来处理这个问题。我可以用常规功能做到这一点,但这会令人疑惑,因为我手头有很多功能(可以超过25个功能)。还是要谢谢你。

登录评论。


Chunru.
Chunru. 大约12小时前
通过匿名函数,您可以参加工作空间中的参数而不是函数参数。
a = 1;B = 2;c = 1;
f = @(x)a * x。^ 2 + b * x + c;
Y = F(2)%一个函数参数;a b c在工作区中
Y = 9.
1条评论
图像分析师
图像分析师 大约11小时前
我认为他对可选论点的想法是为了让您不通过它们或指定它们,以及那些变量承担函数作者提前决定的默认值。
a = 1;B = 2;
f = @(x,c)a * x。^ 2 + b * x + c;
%呼叫而不指定C,并使用它使用一些默认值。
%案例1:Arcuments A&B处于工作区中。使用(例如)9而不是1。
Y = F(2)%不会工作 - C未指定
但就像你指出的那样,这样做的方式就是要提前指定你想要的价值:
%案例2:Arguments A,B,&C处于Workspace中。使用1,因为这是我们指定的。
c = 1;
y = f(2,c)%有效,因为“默认”参数A,B和C位于Workspace中。
%甚至没有C()根本没有c(),也不会传递任何东西。
f = @(x)a * x。^ 2 + b * x + c;%使用工作空间的C值。
Y = F(2)
或者当然你可以使用正常函数而不是匿名函数(这是我所做的)。

登录评论。

标签

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!