Please Help - How do I solve this for M
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
I am a bit new to Matlab, I have to solve the following equation for M, 
A/B=(1/M)*((2/(G+1)*(1+((G-1)/2)*M^2)))^((G+1)/(2*(G-1)))
Here all the other variables than M (i.e. A, B and G) are known. I need to find the value of M.  I tried out with the below code, but it did not work. 
eqn=A/B-(1/M)*((2/(G+1)*(1+((G-1)/2)*M^2)))^((G+1)/(2*(G-1)))==0;
solx=solve(eqn,M)
The output came as:
solx =
 root(z^6 + 15*z^4 + 75*z^2 - 432*z + 125, z, 1)
 root(z^6 + 15*z^4 + 75*z^2 - 432*z + 125, z, 2)
 root(z^6 + 15*z^4 + 75*z^2 - 432*z + 125, z, 3)
 root(z^6 + 15*z^4 + 75*z^2 - 432*z + 125, z, 4)
 root(z^6 + 15*z^4 + 75*z^2 - 432*z + 125, z, 5)
 root(z^6 + 15*z^4 + 75*z^2 - 432*z + 125, z, 6)
The correct output should be a number. Can anyone please help me in this.
Thanks in advance!        
0 comentarios
Respuestas (1)
  John D'Errico
      
      
 el 21 de Mzo. de 2021
        You need to understand that solve is a solver that will produce an analytical solution if possible. And this apparently reduces to something equivalent to a 6th degree polynomial, so there are 6 roots described. The problem is you cannot solve for a general 6th degree polynomial with the roots in an algebraic form.
What you can do is use vpa to tell MATLAB to reduce the problem to a numerical one. Try
vpa(solx)
2 comentarios
  Saumya Nagar 17BME0447
 el 21 de Mzo. de 2021
				
      Editada: Saumya Nagar 17BME0447
 el 21 de Mzo. de 2021
  
			
		
  John D'Errico
      
      
 el 21 de Mzo. de 2021
				
      Editada: John D'Errico
      
      
 el 21 de Mzo. de 2021
  
			Thats funny. Did I essentially tell you to write this:
solx=vpa(solx,M)
Or, this?
solx=vpa(solx)
I could swear it was the latter. In fact, when I look at my answer, that is clearly what I said. But I could be wrong.
Note that in your code, you did not even use solve. This solves for nothing:
solx=Exit_Area/Throat_Area-(1/M)*((2/(G+1)*(1+((G-1)/2)*M^2)))^((G+1)/(2*(G-1)))==0;
vpa is not  solver. It merely reduces the result to a numerical form. solve and vpasolve are solvers. So you MIGHT do:
solx = solve(eqn,M);
solx = vpa(solx);
OR you might do this:
solx = vpa(solve(eqn,M));
OR you might do this:
solx = vpasolve(eqn,M);
The latter works because vpasolve is a numerical solver, so you need not apply vpa to the result.
Go slowly. Look at what you type. It will even help if you read the help for what you use. The odds will now become stronger that you get valid results.
Ver también
Categorías
				Más información sobre Assumptions 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!

