why I get imaginary part using solve function

2 Ansichten (letzte 30 Tage)
Sarah Alhabbas
Sarah Alhabbas am 14 Jun. 2022
Kommentiert: Walter Roberson am 14 Jun. 2022
I am trying to use the solve function but somehow I keep getting more than one answer with imaginary parts and negative numbers
the correct answer should be the second answer = 0.85
  1 Kommentar
Torsten
Torsten am 14 Jun. 2022
Bearbeitet: Torsten am 14 Jun. 2022
If you multiply eq4 by (1+y*m4^2)^2, you get a polynomial equation of degree 4 in m4. This equation has 4 zeros (which are listed in the output of vpasolve). Two of them are purely imaginary, two of them are real. One of the solution is the one you want (the second one).

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 14 Jun. 2022
You have an expression of the form f(x^4)/g(x^2) + b = 0
Multiply through by g(x^2) (assuming nonzero) to get
f(x^4) + b*g(x^2) = 0
collect x terms to get a polynomial in x^4.
Solve the degree 4 polynomial, getting four solutions.
Therefore "the answer" is all four solutions, not just a single solution.
If you have constraints on the outputs, such as being real valued, then filter the results.
  3 Kommentare
Torsten
Torsten am 14 Jun. 2022
y = 1.4;
to3 = 300;
t_star = 400;
syms m4
eq4 = (((2*(y+1)*m4^2*(1+(y-1)/2)*m4^2))/(1+y*m4^2)^2) - to3/t_star;
m4 = vpasolve(eq4,m4);
m4 = m4(abs(imag(m4)) < eps & real(m4) > 0)
m4 = 
0.85395841885781973634525216634996
Walter Roberson
Walter Roberson am 14 Jun. 2022
y = 1.4;
to3 = 300;
t_star = 400;
syms m4 positive
eq4 = (((2*(y+1)*m4^2*(1+(y-1)/2)*m4^2))/(1+y*m4^2)^2) - to3/t_star;
m4 = solve(eq4,m4);
m4
m4 = 
vpa(m4)
ans = 
0.85395841885781973634525216634996

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

David Hill
David Hill am 14 Jun. 2022
y=1.4;
to3=300;
t_star=400;
eq4=@(m4)(((2*(y+1)*m4^2*(1+(y-1)/2)*m4^2))/(1+y*m4^2)^2)-to3/t_star;
m_4=fzero(eq4,.8)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by