【问题标题】:for loops and matrices in matlabmatlab中的循环和矩阵
【发布时间】:2015-08-22 14:44:36
【问题描述】:

我试图链接两个方程,其中我使用 for 循环从频率范围(例如 1-5 Hz)计算 k 的值,然后使用每个 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]

【问题讨论】:

  • 能否重新表述您的问题?你是什​​么意思,你替换K的值?你改变K的值?以及如何从 K 值创建一个 6x6 矩阵?随机?通过特定模式?您需要什么帮助?
  • 我想我需要使用'for循环'来为f的每个值找到k,然后将k值代入矩阵D例如:当f = 1:5时,为每个计算k f 的值给出: f=1, k=0.0012 f=2, k = 0.0025 f=3, k=0.0037 f=4, k=0.0049 f=5, k= 0.0062 将 k 和 L1,L2,L3 代入D 矩阵则最终结果是 5 个矩阵

标签: matlab for-loop matrix


【解决方案1】:

(根据评论修改答案)

您可以尝试将输出数组 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

希望这会有所帮助。

【讨论】:

  • 谢谢,但如果您将 第二个方程 复制并粘贴到 matlab 中并给 k 一个值,例如。 k=0.0012,它创建一个 6x6 矩阵。我刚刚注册,无法发布图片。
  • 我不明白你的问题;根据您的评论,我修改了答案。希望,现在,我已经理解了这个问题。
【解决方案2】:

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

首先,您不需要初始 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.

【讨论】:

  • 谢谢,这正是我试图实现的格式。哈哈欢呼,但这不是练习
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多