Algebra equation with symbolic

1 visualizzazione (ultimi 30 giorni)
HYEOKJUNE LEE
HYEOKJUNE LEE il 3 Mag 2018
Risposto: Walter Roberson il 3 Mag 2018
Hello,
I try to solve the 4th order equation with symbolic, but the answer is not numerical numbers, see below:
My code is
m1 = 100; %kg
m2 = 10; %kg
c1 = 1;
c2 = 1;
c3 = 1;
k1 = 100;
k2 = 100;
k3 = 100;
%
M(1,1) = m1;
M(2,2) = m2
%
C(1,1) = (c1+c2);
C(1,2) = -c2;
C(2,1) = -c2;
C(2,2) = (c2+c3)
%
K(1,1) = (k1+k2);
K(1,2) = -k2;
K(2,1) = -k2;
K(2,2) = (k2+k3)
%
a0 = M(1,1)*M(2,2)
a1 = M(1,1)*C(2,2) + M(2,2)*C(1,1)
a2 = M(1,1)*K(2,2) + C(1,1)*C(2,2) + M(2,2)*K(1,1) - C(1,2)*C(2,1)
a3 = C(1,1)*K(2,2) + K(1,1)*C(2,2) - C(1,2)*K(2,1) - C(2,1)*K(1,2)
a4 = K(1,1)*K(2,2) - K(1,2)*K(2,1)
%
syms w
%
func = a0*w^4 + a1*w^3 + a2*w^2 + a3*w^1 + a4
%
wsol = solve(func,w)
then, the matlab give me a solution which format is root(σ1, z, 1). The sigma is the above function.
How can I get the solution?
Thank you.

Risposta accettata

John D'Errico
John D'Errico il 3 Mag 2018
Modificato: John D'Errico il 3 Mag 2018
4 roots, all of which are complex.
vpa(wsol)
ans =
- 0.10269696007084728245763107930116 - 4.53087688516932263934459193381i
- 0.10269696007084728245763107930116 + 4.53087688516932263934459193381i
- 0.0073030399291527175423689206988387 + 1.208534091963622145606298796162i
- 0.0073030399291527175423689206988387 - 1.208534091963622145606298796162i
If you plot func, you will see that it never crosses zero.

Più risposte (1)

Walter Roberson
Walter Roberson il 3 Mag 2018
wsol = simplify(solve(func, w, 'MaxDegree', 4));
This will give you the numeric solutions, such as
((-1)^(1/4)*10^(1/4)*230339930457^(3/4)*(13099491187973 + 159912003^(1/2)*1638000000i)^(1/4)*(- 159912003^(1/2)*1638000000i - 13099491187973)^(1/6)*(2*33315^(1/2)*(- 5456997*30^(1/2)*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(1/2) - 4218680045*10^(1/2)*(8437360090 + 10*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(2/3) - 439697*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(1/3))^(1/2) - 439697*10^(1/2)*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(1/3)*(8437360090 + 10*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(2/3) - 439697*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(1/3))^(1/2) - 5*10^(1/2)*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(2/3)*(8437360090 + 10*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(2/3) - 439697*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(1/3))^(1/2))^(1/2) + 10^(3/4)*2221^(1/2)*(33*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(1/6)*(8437360090 + 10*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(2/3) - 439697*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(1/3))^(1/4) + 3^(1/2)*(8437360090 + 10*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(2/3) - 439697*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(1/3))^(3/4)))*(159912003^(1/2)*8793940000000i + 10*(293032087997 + 159912003^(1/2)*20000000i)*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(1/3) + 133040111*(- 13099491187973 + 159912003^(1/2)*1638000000i)^(2/3) + 16594597703959910)^(1/4)*1i)/7769568131425052256545514000
You should consider whether you actually want the numeric solutions, or if you want approximate results instead, such as the ones John showed.
If what you want is the approximate results then:
wsol_approx = vpasolve(func);

Categorie

Scopri di più su Symbolic Math Toolbox in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by