eqn =
Trying to determine roots of this polynomial (Det)
Show older comments
k = [1750 -750 0; -750 1250 -500; 0 -500 500];
m = [75 0 0; 0 75 0; 0 0 50];
D=inv(m)*k;
syms x
I = [x,0,0;0,x,0;0,0,x];
Lambda = D-I;
DET = det(Lambda);
eqn = DET==0;
sol = root(eqn,3)
Answers (3)
John D'Errico
on 16 Apr 2024
Edited: John D'Errico
on 16 Apr 2024
k = [1750 -750 0; -750 1250 -500; 0 -500 500];
m = [75 0 0; 0 75 0; 0 0 50];
D=inv(m)*k;
syms x
I = [x,0,0;0,x,0;0,0,x];
Lambda = D-I;
DET = det(Lambda);
eqn = DET==0
At this point, you have generated a cubic polynomial. It is a symbolic polynomial in x. That would be a good start. You needed to make only one more step.
But, what do you think root does? (Nothing. There is no function named root.) You can use solve.
xsol = solve(eqn,'maxdegree',3)
And that looks pretty messy, but the fact is, the roots of a cubic polynomial are a bit messy for a completely general polynomial.
vpa(xsol)
So there are three real roots. They look like they are complex roots, because they have an imaginary part, but it is an infinitessimal one. Just discard that part.
real(vpa(xsol))
Those are the three roots. Are they correct?
eig(D)
Indeed, what you did was valid. At least until that very last line.
1 Comment
Joseph Slattery
on 16 Apr 2024
k = [1750 -750 0; -750 1250 -500; 0 -500 500];
m = [75 0 0; 0 75 0; 0 0 50];
eig(k,m)
1 Comment
Joseph Slattery
on 16 Apr 2024
k = [1750 -750 0; -750 1250 -500; 0 -500 500];
m = [75 0 0; 0 75 0; 0 0 50];
D = inv(m)*k;
syms x
I = [x,0,0;0,x,0;0,0,x];
Lambda = D - I;
DET = det(Lambda);
eqn = DET==0;
If you would like to use 'eqn' as the input argument for the 'roots()' command to find the roots of the polynomial, you can consider using this syntax:
sol = roots(fliplr(coeffs(lhs(eqn))))
Essentially, it is equivalent to executing these four lines of code:
lhsEqn = lhs(eqn) % get the left side of the symbolic equation
C = coeffs(lhsEqn) % get the coefficients of the polynomial expression
P = fliplr(C) % flip the row vector C with the order of its elements reversed
sol = roots(P) % find the roots based on the coefficients in lhsEqn
Categories
Find more on Polynomials in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






