2012-04-24 63 views
0

我想動態設置數組的大小並存儲一些值,但它會導致錯誤。在循環中更改數組大小導致matlab中的錯誤

這裏是代碼,

syms k 
x=[1 0 0 1]; 
y=[]; 
for b=1:4 
    step1= x(b)*exp(-2*pi*1i*k*((b-1)/length(x))); 
    y(b)=step1 
end 

什麼,我試圖做的是存儲陣列中的「Y」第一步的每個值。

,這裏是錯誤,

The following error occurred converting from sym to double: 
Error using mupadmex 
Error in MuPAD command: DOUBLE cannot convert the input expression into a double 
array. 
If the input expression contains a symbolic variable, use the VPA function instead. 
Error in Untitled3 (line 6) 
    y(K)=1/exp((pi*k*3*1i)/2) 

回答

1

取決於你想要做什麼,Matlab的鬥爭從double到象徵性的去了,所以你應該清楚,從一開始就認爲y是含有象徵性元素:

syms k y 
x=[1 0 0 1]; 
for K=1:4 
    step1= x(K)*exp(-2*pi*1i*k*((K-1)/length(x))); 
    y(K)=step1 
end 
+0

爲什麼我需要去象徵性的?是否因爲術語中有符號'k'? – 2012-04-24 18:55:01

+1

確切地說,當你把k放在y中時,它變成符號(syms) – Rasman 2012-04-24 18:57:35

+0

,雖然它可以工作,但它不是一個好方法,程序運行正常,但錯誤仍然在代碼中, 預分配的方式是什麼具有sym變量和預定義數組大小的內存? – 2012-04-25 17:57:38

0

是否有一個原因,您使用的是象徵性的變量k和循環計數器K?看起來你很困惑這兩者。我覺得這是你想什麼來實現:

x=[1 0 0 1]; 
y=[]; 

for k=1:4 
    y(k)= x(k)*exp(-2i*pi*k*((k-1)/length(x)));  
end 

注:當使用大循環的工作,它是非常快的MATLAB預分配的數組,而不是動態調整它。例如通過改變y=[];y=zeros(1,4);

+0

已經做到了預分配內存的東西,它沒有工作 BTW K和K是兩個不同的變量,現在我已經取代小「K」的「b」,以避免混亂 – 2012-04-24 18:49:04