MATLAB中如何自动替换匿名函数的输入变量名?
替换MATLAB匿名函数的输入变量(无需手动修改)
当然有办法,核心思路是提取匿名函数的定义字符串,替换输入变量名后重新生成函数句柄,具体步骤如下:
- 用
functions()函数获取匿名函数的元信息,其中lambda字段保存了完整的函数定义字符串 - 通过字符串替换(推荐用正则表达式保证精确性)替换目标输入变量名
- 用
str2func()将修改后的字符串转换为新的匿名函数
单输入变量示例
% 原匿名函数 f = @(s) exp(2-s); % 获取函数定义字符串 func_info = functions(f); func_def = func_info.lambda; % 把输入参数s替换为t(正则确保只替换输入列表里的变量) new_func_def = regexprep(func_def, '@\((\w+)\)', '@(t)'); % 生成新的匿名函数 new_f = str2func(new_func_def); % 验证结果 disp(new_f(3)); % 输出 exp(-1),和f(3)结果一致
多输入变量替换特定参数
如果是多输入的匿名函数,比如f = @(s,x) exp(2-s+x),要仅替换s为t,可以用更精准的正则匹配:
f = @(s,x) exp(2-s+x); func_info = functions(f); func_def = func_info.lambda; % 只替换输入列表中的s为t,不影响函数体内的字符 new_func_def = regexprep(func_def, 's(?=[,\)])', 't'); new_f = str2func(new_func_def); % 验证 disp(new_f(1,2)); % 输出 exp(2-1+2)=exp(3),和f(1,2)结果一致
注意事项
functions()属于MATLAB的调试类函数,官方文档说明不推荐用于正式生产代码,但日常使用完全可靠- 如果函数体中存在和输入变量同名的字符,务必用正则精准匹配输入参数部分,避免误替换
内容的提问来源于stack exchange,提问作者Amitai
相关产品推荐
相关产品推荐

