Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何从MATLAB中输入的字符串创建函数指针?

如果我在MATLAB中使用inline函数,则可以创建一个函数名称,该名称可能会根据之前的选择而有所不同:

if (someCondition) p = inline('a - b','a','b'); else p = inline('a + b','a','b'); end c = p(1,2); d = p(3,4); 但是我正在创建的内联函数变得非常具有史诗性,因此我想将它们更改为其他类型的函数(即m文件,子函数或嵌套函数)。

假设我有m文件,例如Mercator.m , KavrayskiyVII.m等(都带有phi和lambda的值),并且我KavrayskiyVII.m一样将所选函数分配给p我可以多次调用它(使用可变大小的矩阵,并且使用eval可能会导致完全混乱或混乱)。

我有一个变量type ,它将是所需功能的名称之一(例如'Mercator' , 'KavrayskiyVII'等)。我想我需要使p成为指向type变量内部命名函数的指针。有什么想法可以做到吗?


回答:
选项1:

使用str2func函数(假定type的字符串与该函数的名称相同):

p = str2func(type); % Create function handle using function name c = p(phi, lambda); % Invoke function handle 注意:文档中提到了这些限制:
使用str2func创建的函数句柄无权访问其本地工作空间之外的变量或嵌套函数。如果函数句柄包含这些变量或函数,则调用该句柄时MATLAB®会引发错误。

选项2:

使用SWITCH语句和函数句柄

switch type case 'Mercator' p = @Mercator; case 'KavrayskiyVII' p = @KavrayskiyVII; ... % Add other cases as needed end c = p(phi, lambda); % Invoke function handle 选项3:

使用EVAL函数句柄 (由Andrew Janke建议):

p = eval(['@' type]); % Concatenate string name with '@' and evaluate c = p(phi, lambda); % Invoke function handle 正如安德鲁指出的那样,这避免了str2func的限制以及与switch语句相关的额外维护。



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 01:10


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.