[問題] 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