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

2 visualizaciones (últimos 30 días)
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?

Respuesta aceptada

Andrew Newell
Andrew Newell el 25 de Abr. de 2014
Editada: Andrew Newell el 25 de Abr. de 2014
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.

Más respuestas (0)

Categorías

Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by