如何在Matlab中创建一个数组但同时运行一个函数?

时间:2012-10-08 13:29:39

标签: arrays matlab for-loop

我正在尝试使用我正在运行的函数的值填充数组。在此函数中,我将变量z20.01为增量从0更改为0.99。同时我想用这些值填充数组。我尝试过while循环和for循环。如何只用for循环写这个?

我的代码:

Ys = y(2000);
Mp = ((max(y)-Ys)/Ys)*100;
[max, i] = max(y);
tp = t(i);
z = sqrt(((log(Mp))^2)/((pi*pi)+(log(Mp))^2));


%Given Equations
wd = pi/tp;
wn = wd/(sqrt(1-(z*z)));
ts = 4.6/(z*wn);
tr = 1.8/wn;

%for loop for z from 0 to 0.99
for i = 1:100;
   for z2 = 0:0.01:0.99
      %tr*wn = Fa
      Fa(i) = 2.917*z2^2 - 0.4167*z2 + 1;
      i = i + 1;
      if i >= 100;
          break;
      end
    end
end

find_zeta = interp1(Fa, 1.8);

disp(Fa);
disp(find_zeta);

错误我遇到的问题:我的数组中只有1个。

2 个答案:

答案 0 :(得分:4)

你可以在没有循环的情况下,在矢量化' matlab声明

z2 = 0:0.01:0.99;
Fa = 2.917*z2.^2 - 0.4167.*z2 + 1;

首先,计算您需要的z2值。接下来,按元素(注意 .^语法)对矢量元素进行操作计算Fa。 ^.^运算符之间存在根本区别,您真的想知道它们之间的区别。通常,您可以向运算符添加.,这意味着它将对数组的各个标量元素起作用。 Read about matrix and array operators here。例如:

A = rand(10);
B = rand(10);
% matrix multiplication
C=A*B; 
% element by element multiplication
C=A.*B

你得到的抱怨只意味着你做的事情效率低下。由于matlab事先并不知道Fa的大小,因此每次附加时都需要重新分配数组。你仍然可以使用它,效率很低。

答案 1 :(得分:1)

matlab中的索引从1开始,而不是从0开始,就像在其他编程语言中一样

您获得的错误是关于预分配数组。将Fa = zeros(1,100);添加到脚本的开头,它就会消失。

Fa = zeros(1,100);
i = 1;
for z2 = 0:0.01:0.99
   Fa(i) = 2.917*z2^2 - 0.4167*z2 + 1;
   i = i +1;
end

在另一个答案中建议使用'矢量化'是更多的方法。