
Question for using root function.
Show older comments
% Using the MATLAB function “roots” for find non-zero natural frequencies
% define symbolic variable w
syms w;
% Given parameters
m1 = 1.8; m2 = 6.3; m3 = 5.4; m4 = 22.5; m5 = 54;
c2 = 10; c3 = 0.5; c4 = 1.50; c5 = 1.1;
k2 = 100000; k3 = 50; k4 = 75; k5 = 10;
% Set up system matrices
% mass matrix
M = diag([m1, m2, m3, m4, m5]);
% damping matrix
C = [c2 -c2 0 0 0;
-c2 c2+c3 -c3 0 0;
0 -c3 c3+c4 -c4 0;
0 0 -c4 c4+c5 -c5;
0 0 0 -c5 c5];
% stiffness matrix
K = [k2 -k2 0 0 0;
-k2 k2+k3 -k3 0 0;
0 -k3 k3+k4 -k4 0;
0 0 -k4 k4+k5 -k5;
0 0 0 -k5 k5];
% Calculate frequency equation
Zw = w^2*M + 1i*w*C + K; % impedance matrix
freqEq = det(Zw); % take determinant to get frequency equation
pretty(simplify(freqEq)); % display simplified frequency equation
% Display the non-zero natural frequencies
disp('Non-zero natural frequencies (Hz):');
disp(root(freqEq))
11 Comments
John D'Errico
on 18 May 2024
Edited: John D'Errico
on 18 May 2024
Please stop posting the same question multiple times. If you want to expand on a question, then do so by editing the question, or by adding a comment. I closed the last question as a duplicate. In fact, since this is now at least the third time you asked this question...
Trong Nhan Tran
on 18 May 2024
Torsten
on 18 May 2024
disp(vpa(root(freqEq)))
instead of
disp(root(freqEq))
Trong Nhan Tran
on 19 May 2024
If you use the code from above, you won't get this error (at least if you work with MATLAB R2024a).
syms w
% Given parameters
m1 = 1.8; m2 = 6.3; m3 = 5.4; m4 = 22.5; m5 = 54;
c2 = 10; c3 = 0.5; c4 = 1.50; c5 = 1.1;
k2 = 100000; k3 = 50; k4 = 75; k5 = 10;
% Set up system matrices
% mass matrix
M = diag([m1, m2, m3, m4, m5]);
% damping matrix
C = [c2 -c2 0 0 0;
-c2 c2+c3 -c3 0 0;
0 -c3 c3+c4 -c4 0;
0 0 -c4 c4+c5 -c5;
0 0 0 -c5 c5];
% stiffness matrix
K = [k2 -k2 0 0 0;
-k2 k2+k3 -k3 0 0;
0 -k3 k3+k4 -k4 0;
0 0 -k4 k4+k5 -k5;
0 0 0 -k5 k5];
% Calculate frequency equation
Zw = w^2*M + 1i*w*C + K; % impedance matrix
freqEq = det(Zw); % take determinant to get frequency equation
pretty(simplify(freqEq)); % display simplified frequency equation
% Display the non-zero natural frequencies
disp('Non-zero natural frequencies (Hz):');
%disp(root(freqEq))
disp(vpa(root(freqEq)))
Trong Nhan Tran
on 19 May 2024
Edited: Trong Nhan Tran
on 20 May 2024
I don't have experience with the physical background of your equations.
Just solving your system for omega gives a similar result as yours - only the 1i's are missing.
syms w
% Given parameters
m1 = 1.8; m2 = 6.3; m3 = 5.4; m4 = 22.5; m5 = 54;
c2 = 10; c3 = 0.5; c4 = 1.50; c5 = 1.1;
k2 = 100000; k3 = 50; k4 = 75; k5 = 10;
M1 = [-k2, k2, 0, 0, 0;k2, -k3-c3-k2, k3+c3, 0, 0;0, k3, -k4-c4-k3, k4+c4, 0;0, 0, k4, -k5-c5-k4, k5+c5;0, 0, 0, k5, -k5];
M2 = [-c2, c2, 0, 0, 0;c2, -c2, 0, 0, 0;0, c3, -c3, 0, 0;0, 0, c4, -c4, 0;0, 0, 0, c5, -c5];
M3 = diag([m1,m2,m3,m4,m5]);
M = M1+w*M2+w^2*M3;
vpa(root(det(M)==0))
Trong Nhan Tran
on 19 May 2024
Torsten
on 19 May 2024
I just wrote your system of equations in matrix form
M(w)*[X1;X2;X3;X4;X5] = 0
and determined the values of w for which the equation has a nontrivial solution.
Trong Nhan Tran
on 19 May 2024
Write your equations (1)-(5) as
M1*[X1;X2;X3;X4;X5] + w*M2*[X1;X2;X3;X4;X5] + w^2*M3*[X1;X2;X3;X4;X5] = 0
and you will see that my M1, M2 and M3 matrices are correct to reproduce your system.
But as I said: I don't know if this is how "natural frequencies" are defined.
Answers (0)
Categories
Find more on Linear Algebra in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!