matlab中的for循环和矩阵

时间:2015-08-22 14:44:37

标签: matlab for-loop matrix

我试图链接两个方程式,其中我使用for循环计算频率范围内的k值(例如1-5 Hz)然后使用每个k值并将k的值替换为a 6x6矩阵。任何人都可以帮我告诉我如何在Matlab中为每个k值创建一个矩阵?

第一个等式

for f = 1:5; % Range of Frequencies (Hz)

f;
w = 2.*pi.*f; % Angular Frequency (Hz)

p = 8050;% Density of Mild Steel(kg/m^3)

v = 0.30; % Poissons Ratio of Mild Steel

R = 0.02; % Radius of Pipe (m)

E = 210*10^9; % Youngs Modulus of Mild Steel (pa)

a = (w.^2).*p;

b = (p.*(1-(v.^2)).*(R.^2).*(w.^2)-E);

c = (p.*(R.^2).*(w.^2)-E).*E;

**k(f) = sqrt((a.*b)/c); % k = Wave Number**

end

第二个等式(6x6矩阵)

k = 

L1=0.1;
L2=0.6;
L3=0.6;



 D= [0,0,exp(-k*L1),exp(-k*L2),0,0; exp(-k*L1),1,exp(-k*L1),exp(-k*L2),0,0; -k*exp(-k*L1),k,k*exp(-k*L1),-k*exp(-k*L2),0,0;0,0,exp(-k*(L1+L2)),k,-exp(-k*(L1+L2)),-exp(-k*L3);0,0,-k*exp(-k*(L1+L2)),1,k*exp(-k*(L1+L2)),k*exp(-k*L3);0,0,exp(-k*(L1+L2)),1,0,0]

2 个答案:

答案 0 :(得分:0)

(评论后修改的答案)

您可以尝试将输出数组D定义为3维数组。

D=NaN(6,6,length(k))
for i=1:length(k)
   D(:,:,i)= [0,0,exp(-k(i)*L1),exp(-k(i)*L2),0,0; exp(-k(i)*L1),1,exp(-k(i)*L1),exp(-k(i)*L2),0,0; -k(i)*exp(-k(i)*L1),k(i),k(i)*exp(-k(i)*L1),-k(i)*exp(-k(i)*L2),0,0;0,0,exp(-k(i)*(L1+L2)),k(i),-exp(-k(i)*(L1+L2)),-exp(-k(i)*L3);0,0,-k(i)*exp(-k(i)*(L1+L2)),1,k(i)*exp(-k(i)*(L1+L2)),k(i)*exp(-k(i)*L3);0,0,exp(-k(i)*(L1+L2)),1,0,0]
end

D数组将是:

D(:,:,1) =

         0         0    0.9999    0.9993         0         0
    0.9999    1.0000    0.9999    0.9993         0         0
   -0.0012    0.0012    0.0012   -0.0012         0         0
         0         0    0.9991    0.0012   -0.9991   -0.9993
         0         0   -0.0012    1.0000    0.0012    0.0012
         0         0    0.9991    1.0000         0         0


D(:,:,2) =

         0         0    0.9998    0.9985         0         0
    0.9998    1.0000    0.9998    0.9985         0         0
   -0.0025    0.0025    0.0025   -0.0025         0         0
         0         0    0.9983    0.0025   -0.9983   -0.9985
         0         0   -0.0025    1.0000    0.0025    0.0025
         0         0    0.9983    1.0000         0         0


D(:,:,3) =

         0         0    0.9996    0.9978         0         0
    0.9996    1.0000    0.9996    0.9978         0         0
   -0.0037    0.0037    0.0037   -0.0037         0         0
         0         0    0.9974    0.0037   -0.9974   -0.9978
         0         0   -0.0037    1.0000    0.0037    0.0037
         0         0    0.9974    1.0000         0         0


D(:,:,4) =

         0         0    0.9995    0.9971         0         0
    0.9995    1.0000    0.9995    0.9971         0         0
   -0.0049    0.0049    0.0049   -0.0049         0         0
         0         0    0.9966    0.0049   -0.9966   -0.9971
         0         0   -0.0049    1.0000    0.0049    0.0049
         0         0    0.9966    1.0000         0         0


D(:,:,5) =

         0         0    0.9994    0.9963         0         0
    0.9994    1.0000    0.9994    0.9963         0         0
   -0.0061    0.0062    0.0061   -0.0061         0         0
         0         0    0.9957    0.0062   -0.9957   -0.9963
         0         0   -0.0061    1.0000    0.0061    0.0061
         0         0    0.9957    1.0000         0         0

希望这有帮助。

答案 1 :(得分:0)

我会尽力回答你的问题......

首先,您需要初始for循环。您可以在没有循环的情况下计算所有波长值。

f = 1:5; % Range of Frequencies (Hz)
w = 2.*pi.*f; % Angular Frequency (Hz)
p = 8050;% Density of Mild Steel(kg/m^3)
v = 0.30; % Poissons Ratio of Mild Steel
R = 0.02; % Radius of Pipe (m)
E = 210*10^9; % Youngs Modulus of Mild Steel (pa)
a = (w.^2).*p;
b = (p.*(1-(v.^2)).*(R.^2).*(w.^2)-E);
c = (p.*(R.^2).*(w.^2)-E).*E;
k = sqrt((a.*b)./c); % k = Wave Number
L1=0.1;
L2=0.6;
L3=0.6;

然后你可以使用for循环来计算D矩阵和一个用于存储结果的单元格数组:

results = cell(1, length(k));
for i = 1:length(k)
    results{i} = [
                      0,0,exp(-k(i)*L1),exp(-k(i)*L2),0,0;...
                      exp(-k(i)*L1),1,exp(-k(i)*L1),exp(-k(i)*L2),0,0;...
                      -k(i)*exp(-k(i)*L1),k(i),k(i)*exp(-k(i)*L1),-k(i)*exp(-k(i)*L2),0,0;...
                      0,0,exp(-k(i)*(L1+L2)),k(i),-exp(-k(i)*(L1+L2)),-exp(-k(i)*L3);...
                      0,0,-k(i)*exp(-k(i)*(L1+L2)),1,k(i)*exp(-k(i)*(L1+L2)),k(i)*exp(-k(i)*L3);...
                      0,0,exp(-k(i)*(L1+L2)),1,0,0
                     ]
end

P.S。在没有试图接近你的情况下,我认为你想要的就是有人为你解决一个练习。如果不是这样,请忽略我的p.s.