【问题标题】:How to implement similar statements in matlab using a loop?如何使用循环在matlab中实现类似的语句?
【发布时间】:2012-07-19 23:45:54
【问题描述】:

查看mathworks文档中的代码sn-p,

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中执行结果?

【问题讨论】:

    标签: matlab variables loops eval


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      你可以使用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
      

      或者您可以将参数转换为数组。如果您可以控制数据格式,数组会更有效。

      【讨论】:

      • 感谢您的回答,能否提供更多有关使用数组的详细信息?
      • 查看@tmpearce 的回答:这就是我使用数组的意思。
      【解决方案3】:

      最好的方法是使用数组。

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

      然后用正确的数组索引替换不同的变量。

      【讨论】:

      • MATLAB 使用括号 () 而不是括号 [] 来索引数组/矩阵
      • 啊,对我所有不同的编码感到困惑
      猜你喜欢
      • 1970-01-01
      • 2019-05-09
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 2018-07-04
      • 2014-09-16
      • 1970-01-01
      相关资源
      最近更新 更多