2013-10-12 165 views
2

在下面的代碼中,我使用了一個使用MATLAB的符號函數爲變量x創建方波脈衝序列的階躍函數。如何通過for循環來實現這一點,使事情更加整潔?如何從這個MATLAB表達式實現for循環?

del_t=.005 
t=-10:del_t:10;   % Time span 
L=length(t); 
x=stp_fn(t)-stp_fn(t-1)+stp_fn(t-2)-stp_fn(t-3)...  %input x(t) using step function 
+stp_fn(t-4)-stp_fn(t-5)+stp_fn(t-6)-stp_fn(t-7)... % 
+stp_fn(t-8)-stp_fn(t-9)+stp_fn(t-10);     %   

%step function 
function u =stp_fn(t) 
u=0.5*(sign(t+eps)+1); 

回答

2

看起來有點不尋常,但嘿...

x = 0;  
for i = 0 : 10 
    x = x + (-1)^i*stp_fn(t-i); % ^i for alternating signs... 
end 
+2

你寧願做'2 * MOD(1,2) - 1',而不是'(-1) ^我'。提高功率比乘法和減法更昂貴。 –

+0

感謝您的提示!我檢查了時間,事實上電源似乎比mod小(我小於30),並且mod似乎在i> 50時獲勝。 – lhcgeneva

1
x = stp_fn(t); 
for i = 1 : 10 
    if mod(i, 2) 
     x = x - stp_fn(t - i); 
    else 
     x = x + stp_fn(t - i); 
    end 
end