[问题] eval 语法问题

楼主: HOF (Hall of Fame)   2015-12-16 00:12:02
(1)
for i=1:50
eval(['x' num2str(i) '=b(i,:);'])
end
(2)
for i=1:50
I0=(sum(eval(['x' num2str(i)])).^2)/3
end
请问
我把(1)式中从b的行向量命名为X1,X2,,,X50
代入(2)做运算
并欲把I0改显示成I1,I2,,,I50,方便日后使用
于是我用下列语法合并来显示I1~I50.但一直显示错误.请问是错在哪里?
烦请指正.谢谢
for i=1:50
eval(['I' num2str(i) '= (sum(eval(['x' num2str(i)])).^2)/3;'])
end
作者: celestialgod (天)   2015-12-16 00:15:00
字串里面不用eval 不然会变成eval(x1)...最好的使用方式还是少用eval,速度慢很多很多
楼主: HOF (Hall of Fame)   2015-12-16 00:22:00
请问是指右边sum之后不要用eval吗?如果是这样.那X1,X2,,X50这些已命名的.要如何带入这循环运算?
作者: celestialgod (天)   2015-12-16 00:26:00
你知道eval('x1')跟eval(x1)的差异吗你右边eval不加才会是eval('sum(x1.^2/3)')不然会变成sum(eval(x1).^2)/3自己想想差异吧
作者: sunev (Veritas)   2015-12-16 01:16:00
唉......
作者: celestialgod (天)   2015-12-16 02:16:00
不要,寄站内信给我,有问题版上处理,你如果连eval怎么用都搞不清楚,我奉劝你少用这种evil的东西,matlab meta-programming都没那么复杂,而且前一篇我也看到一堆乡民问你为啥不用X(i,:),这个用X处理是完全不用循环的....
楼主: HOF (Hall of Fame)   2015-12-16 02:17:00
eval(['I'num2str(i)=sum(eval(['x'num2str(i)]).^2)/3])已修改.但显示The expression to the left of the equals sign is not a valid target.
作者: celestialgod (天)   2015-12-16 02:19:00
上一个用eval写matlab的人,最后,论文程式太复杂,最后花一堆时间改成还是用cell跟matrix,因为eval到最后会很乱我已经看不懂你的语法了...你确定你第一个eval里面还是字串吗?我不建议你用,也不会直接给你正确写法,你自己在明白你自己错误前,希望你可以得到一点教训,以上
楼主: HOF (Hall of Fame)   2015-12-16 02:38:00
之前没用X(i,:)是因为想让行向量有各自的名称.比较直觉
作者: s4300026 (s4300026)   2015-12-16 07:56:00
加注解怎么样?
作者: profyang (prof)   2015-12-16 08:15:00
eval真的尽量不要用...过一年你回来看大概就看不懂了
作者: s4300026 (s4300026)   2015-12-16 08:16:00
不然好像有 table 可以用
作者: celestialgod (天)   2015-12-16 10:18:00
写程式不是靠直觉... 程式逻辑熟了...X(i, :)怎么看都比较直觉
作者: jatj   2015-12-16 11:47:00
很奇怪 eval明明慢很多为何一堆人爱用?谁告诉我好处在哪
作者: sunev (Veritas)   2015-12-17 07:47:00
eval用两层真是世界奇观
作者: jatj   2015-12-17 10:13:00
"eval" (['I'num2str(i)=sum( "eval" .... 神用法啊

Links booklink

Contact Us: admin [ a t ] ucptt.com