I want to create a 12x6 Matrix from six 12x1 eigenvectors; what's wrong with this code?

3 ビュー (過去 30 日間)
When I execute this code, instead of an intended 12x6 matrix "u" made from u(1), u(2), u(3), etc., I end up with a single 12x1 vector "u", as u gets overwritten each pass.
for i = 1:12;
o = omega(i);
M = [(-o^2*m(1)+k(1)+k(2)), -k(2), 0, 0, 0, 0; -k(2), (-o^2*m(2)+k(2)+k(3)), -k(3), 0, 0, 0; 0, -k(3), (-o^2*m(3)+k(3)+k(4)), -k(4), 0, 0; 0, 0, -k(4), (-o^2*m(4)+k(4)+k(5)), -k(5), 0;0, 0, 0, -k(5), (-o^2*m(5)+k(5)+k(6)), -k(6); 0, 0, 0, 0, -k(6), (-o^2*m(6)+k(6)+k(7))];
u(i)= eig(M);
end
where omega is a 12x1 vector.
What's wrong with the code?

採用された回答

Andrew Newell
Andrew Newell 2014 年 4 月 25 日
編集済み: Andrew Newell 2014 年 4 月 25 日
I'm not sure how you avoided getting a dimension mismatch error there. The thing you're missing is a colon:
u = zeros(length(m),length(omega));
for i = 1:length(omega);
o = omega(i);
M = [(-o^2*m(1)+k(1)+k(2)), -k(2), 0, 0, 0, 0; ...
-k(2), (-o^2*m(2)+k(2)+k(3)), -k(3), 0, 0, 0; ...
0, -k(3), (-o^2*m(3)+k(3)+k(4)), -k(4), 0, 0; ...
0, 0, -k(4), (-o^2*m(4)+k(4)+k(5)), -k(5), 0; ...
0, 0, 0, -k(5), (-o^2*m(5)+k(5)+k(6)), -k(6); ...
0, 0, 0, 0, -k(6), (-o^2*m(6)+k(6)+k(7))];
u(:,i)= eig(M);
end
Note that I have included a few good programming practices: initializing omega, using length(omega) and length(m) in place of the meaningless numbers 12 and 6, and formatting the code so it is easy to understand.

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeOperating on Diagonal Matrices についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by