2016-01-17 40 views
0
for i=1:1:4 
    T=[(cos(x(i)))^2 (sin(x(i)))^2 2*(cos(x(i)))*(sin(x(i)));(sin(x(i)))^2 (cos(x(i)))^2 -2*(cos(x(i)))*(sin(x(i))) ;-(cos(x(i)))*(sin(x(i))) (cos(x(i)))*(sin(x(i))) (cos(x(i)))^2-(sin(x(i)))^2 ;]; 
    XXXXX=inv(T)*Qq*R*T*inv(R); 
end 

我想根據i的名稱XXXXX;我的意思是,當i=1正在運行時,XXXXX將變量爲Q1,並且i=2將爲Q2,等等。命名可根據循環索引

+1

我想你會的hve使用'的eval()'這樣的事情。 – AnonSubmitter85

+1

你有一個具體的理由來做這個插入一個數組'Q {i}'嗎? –

+1

你不需要這些名字。這被稱爲使用「動態變量命名」,並被認爲[非常糟糕的做法](http://stackoverflow.com/questions/32467029/how-to-put-these-images-together/32467170#32467170)。查看鏈接的帖子以獲取更多關於原因的信息,並參閱Daniel的關於存儲變量的正確方法的答案。 – Adriaan

回答

2

它是possible but not recommended使用變量名Q1 Q2 Q3。鏈接既解釋了爲什麼不推薦以及如何實施它。

相反,使用cell array來存儲您的結果:

n=4; % or probably better n=numel(x) 
Q=cell(n,1); 
for i=1:1:4; 
    T=[(cos(x(i)))^2 (sin(x(i)))^2 2*(cos(x(i)))*(sin(x(i)));(sin(x(i)))^2 (cos(x(i)))^2 -2*(cos(x(i)))*(sin(x(i))) ;-(cos(x(i)))*(sin(x(i))) (cos(x(i)))*(sin(x(i))) (cos(x(i)))^2-(sin(x(i)))^2 ;]; 
    Q{i}=inv(T)*Qq*R*T*inv(R); 
end 
+1

我打算這樣做,但它給了我一個錯誤,Vector不能是Matrix 3X3。相反,我創建了一個3d矩陣 –

+0

如果一個3d矩陣是可能的,它是更好的,因爲更快的選擇。我不確定每次迭代的結果是否是相同大小的矩陣,因此提出了一種更通用的解決方案,無論如何都適用。 – Daniel