作业帮 > 综合 > 作业

关于MATLAB匿名函数,变量格式转换.

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/07/12 03:21:54
关于MATLAB匿名函数,变量格式转换.
比如输入一个匿名函数句柄:
f = @(x1,x2,...,x15) x1 .* x2 .* ....* x15
f共15个自变量
如何把它自动转化成下面的形式:
f = @(x) x(1,:) .* x(2,:) .* ....*x(15,:)
我曾试过比如把所有的 x1 换成 x(1,:),但是这样也会把x15之类的变成 x(1,:)5
关于MATLAB匿名函数,变量格式转换.
f = @(x1,x2,x3) x1+x2+x3;
cf = func2str(f);
for k = 1:3
s = ['x' num2str(k)];
ss = ['x(' num2str(k) ',:)'];
cf = strrep(cf,s,ss);
end
ff = str2func(cf)
再问: ������Ľ���� cf = @(x(1,:),x(2,:),x(3,:))x(1,:)+x(2,:)+x(3,:) �����@����ı��x������cf = @(x)x(1,:)+x(2,:)+x(3,:)
再答: >> f = @(x1,x2,x3) x1+x2+x3; cf = func2str(f); % 将函数句柄转换为字符串 id = find(cf==' '); % 寻找空格位置 cf = cf(id+1:end); % 取出函数后部函数体 id = find(cf=='+'); % 寻找加号个数 n = length(id)+1; % 得到变量个数 for k = 1:n s = ['x' num2str(k)]; ss = ['x(' num2str(k) ',:)']; cf = strrep(cf,s,ss); end cf = ['@(x) ' cf]; cf = str2func(cf) cf = @(x) x(1,:)+x(2,:)+x(3,:)
再问: 呵呵,谢谢,但你这种做法太特殊了,多个空格少个空格就不行了,而且只能是处理全是加号的函数,太局限了。我想可能很难做出通用的格式化程序吧。
再答: % 只是提供一种思路,解决问题还要靠你自己哦!