matlab中eval的用法问题

2024-12-14 21:44:30
推荐回答(2个)
回答1:

这个我也郁闷过。
eval给MATLAB提供宏的能力。其中,该函数提供了将用户创建的函数名传给其它函数能力,以便求值。它的应用例子:
» a=eval(' sqrt(2) ')
a = 1.4142
» eval(' a=sqrt(2) ')
a = 1.4142
上面的例子演示了函数evalevalevaleval。显然,它们不是计算2的平方根的最简单方法。当被求值的字符串是由子字符串连接而成,或将字符串传给一个函数以求值时,eval非常有用。
如下程序
ct=strcat('t=0:0.01:2*pi;','y=sin(t);','plot(t,y)');
eval(ct);

楼主还不明白话,看下面,matlab群还是有很多高手的,当年我也是看的这个
eval 高级语法使用,详细讲解
详细讲解 eval用法
字符串构造
以及 帮助的翻译
\\\\\\\\\\\\\\\\\\\\\\\\\\
eval
执行字符串表达式
两步
1 构造字符串
2 执行字符串
\\\\\\\\\\\\\\\\\\\\
构造字符串技巧
num2str
可以变数字为字符串
\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\
常见的应用
1 自动保存文件
2 自动生成变量
3 内容不定问题
\\\\\\\\\\\\\\\\
细节的问题
1) 必须是字符串
2) 单引号 是 '''' 单引号字符串
3) 特殊的 不妨用 char
4) [] 就可以连接字符串
\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\字符串连接
str0= [ str1,str2]
以下的例子 并不能运行,因为是摘录代码,仅供参考,
也未删节,但加注释
\\\\\\\\\\\\\\\\
四个例子
\\\\\\\\\\\\\
ex1
n1 = 10;
% [yy,zz,xx] = meshgrid( 0:(l2-0)/(n1-1):l2 , 0:(l3-0)/(n1-1):l3,l1 / 2 );
xx = [ .2 .3 .25 .25 .2 .4 .25 .2 .2 .3];
yy = [ .2 .2 .2 .2 .1 .2 .2 .1 .3 .2];
zz = [ .15 .15 .2 .1 .2 .15 .15 .15 .15 .2];
%%
% a test
% i1 = 3
% i2 =3
% pos = [xx(i1,i2),yy(i1,i2),zz(i1,i2)]
for i1 = 1:n1
pos = [xx(i1),yy(i1),zz(i1)];
ff1 = 0:1:630;
pxw = zeros(size(ff1));
for i =1:length(ff1)
pxw(i)= cal_pxw(ff1(i),pos,model);
end
l_pxw = 20*log10(abs(pxw)/(2e-5))-30;
save_str_mat = ['save',' ','.\orgindata\p_',num2str(i1),'_spl',' ','l_pxw'];
% 构造字符串save 路径 文件名(加了数字,自动把循环代码加进去了)
% 原始字符串 save 空格 .\origindata\p_数字_spl 空格 l_pxw
eval(save_str_mat);
% 执行字符串
end
很明显看出用了eval可以少用循环语句,十分方便。
剩余请看
http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=65491

回答2:

这个原因很简单啊。就是因为有时候需要根据前边的结果进行操作,尤其是涉及到变量名的时候。

给你出个题,你就明白了:
请产生f1,f2,f3,f4……f100,其中f1中随机放1个元素,f2中随机放2个元素,f3中随机放三个元素……

这时候使用eval就很简单了
for index=1:100
eval(['f' num2str(index) '=rand(1,' num2str(index) ');']);
end

你想想用什么命令可以直接得到这个结果呢?