2012-07-19 30 views
0

看代碼片段在這裏The MathWorks公司的文檔中,如何使用循環在matlab中實現類似的語句?

Digital Servo Control of a Hard-Disk Drive

Gf1 = tf(w1*[a1 b1*w1],[1 2*z1*w1 w1^2]); % first resonance 
Gf2 = tf(w2*[a2 b2*w2],[1 2*z2*w2 w2^2]); % second resonance 
Gf3 = tf(w3*[a3 b3*w3],[1 2*z3*w3 w3^2]); % third resonance 
Gf4 = tf(w4*[a4 b4*w4],[1 2*z4*w4 w4^2]); % fourth resonance 

我的問題是,我怎麼能實現像一個循環內的上述聲明,

% pseudo code 

for i = 1:4 

Gf%d = tf(w%d*[a%d b%d*w%d],[1 2*z%d*w%d w%d^2]); i 

,然後在matlab中執行結果?

回答

0

最好的方法是使用數組。

for i = 1:n 
    trans(i) = % your stuff here % 
end 

然後,用正確的數組索引替換不同的變量。

+0

MATLAB使用括號'()'沒有括號'[]'索引到陣列/矩陣 – Amro 2012-07-20 13:42:43

+0

啊,在我的所有不同的編碼糊塗了你的答案 – hwrdprkns 2012-07-23 22:41:06

0

您既可以使用eval

for i = 1:4 
    eval(sprintf('Gf%d = tf(w%d*[a%d b%d*w%d],[1 2*z%d*w%d w%d^2]);', i)); 
end 

或者你可以把你的參數爲數組。如果您可以控制數據格式的設置,陣列會更有效率。

+0

感謝,能你給我更多關於使用數組的細節? – 2012-07-20 00:08:52

+0

請參閱@ tmpearce的答案:這就是我使用數組的含義。 – Isaac 2012-07-20 00:11:50

1

這裏有一個選項:

w = [w1 w2 w3 w4]; 
%# same thing for a, b, d... 

for i=1:4 
    Gf(i) = tf(w(i)*[a(i) b(i)*w(i)],[1 2*z(i)*w(i) w(i)^2]); % ith resonance 
end