Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在Matlab中创建一个数组,但同时运行一个函数?_Arrays_Matlab_For Loop - Fatal编程技术网

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

Arrays 如何在Matlab中创建一个数组,但同时运行一个函数?,arrays,matlab,for-loop,Arrays,Matlab,For Loop,我试图用我正在运行的函数中的值填充数组。在这个函数中,我正在以0.01的增量将变量z2从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 =

我试图用我正在运行的函数中的值填充数组。在这个函数中,我正在以
0.01
的增量将变量
z2
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
s。

您可以在“矢量化”matlab语句中不使用循环来完成它

z2 = 0:0.01:0.99;
Fa = 2.917*z2.^2 - 0.4167.*z2 + 1;
首先,计算所需的
z2
值。接下来,逐元素操作向量元素(注意
^
语法)计算Fa。
^
运算符和
^
运算符之间有一个根本的区别,您确实想知道这一区别。通常,您可以向运算符添加
,这意味着它将处理数组中的单个标量元素。例如:

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

你的抱怨只意味着你的工作效率低下。由于matlab事先不知道
Fa
的大小,因此每次追加数组时,它都需要重新分配数组。您仍然可以使用它,它只是效率低下。

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

您遇到的错误是关于预分配阵列的。添加
Fa=0(1100)到脚本的开头,它将消失

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
另一个答案中提到的“矢量化”更适合使用