solve function give a wrong solution
    16 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Adriano
      
 el 23 de Jul. de 2020
  
    
    
    
    
    Respondida: John D'Errico
      
      
 el 23 de Jul. de 2020
            Hi all,
I'm trying to solve a simple equation in Matlab using solve function. The code is:
syms x
solv = solve( (1+x/12)^12 == 1.02)
The solution is 0.0204 however Matalb give me this solution:
solv =
                        - (6*50^(11/12)*51^(1/12))/25 - 12
                          (6*50^(11/12)*51^(1/12))/25 - 12
                       - (50^(11/12)*51^(1/12)*6i)/25 - 12
                         (50^(11/12)*51^(1/12)*6i)/25 - 12
     - (6*50^(11/12)*51^(1/12)*(3^(1/2)/2 - 1i/2))/25 - 12
       (6*50^(11/12)*51^(1/12)*(3^(1/2)/2 - 1i/2))/25 - 12
     - (6*50^(11/12)*51^(1/12)*(3^(1/2)/2 + 1i/2))/25 - 12
       (6*50^(11/12)*51^(1/12)*(3^(1/2)/2 + 1i/2))/25 - 12
 - (6*50^(11/12)*51^(1/12)*((3^(1/2)*1i)/2 - 1/2))/25 - 12
   (6*50^(11/12)*51^(1/12)*((3^(1/2)*1i)/2 - 1/2))/25 - 12
 - (6*50^(11/12)*51^(1/12)*((3^(1/2)*1i)/2 + 1/2))/25 - 12
   (6*50^(11/12)*51^(1/12)*((3^(1/2)*1i)/2 + 1/2))/25 - 12
>> round(solv)
ans =
        -24
          0
 - 12 - 12i
 - 12 + 12i
  - 22 + 6i
   - 2 - 6i
  - 22 - 6i
   - 2 + 6i
  - 6 - 10i
 - 18 + 10i
 - 18 - 10i
  - 6 + 10i
Why it happen? Someone can help me? Thanks!
Respuesta aceptada
  Vladimir Sovkov
      
 el 23 de Jul. de 2020
        
      Editada: Vladimir Sovkov
      
 el 23 de Jul. de 2020
  
      syms x
solv = double(solve( (1+x/12)^12 == 1.02))
There are many solutions. The one you are interested in is rather 0.0198189756230421 but not 0.0204.
Más respuestas (1)
  John D'Errico
      
      
 el 23 de Jul. de 2020
        Just an addendum, though the answer by @Vladimir Sovkov is correct.
Using round to convert those results is wrong. Instead use either double or vpa to do so, depending on whether you want a symbolic or double precision answer. Thus we see:
digits 20
>> vpa(solv)
ans =
                           -24.019818975623042098
                          0.019818975623042097611
                  - 12.0 - 12.019818975623042098i
                  - 12.0 + 12.019818975623042098i
  - 22.40946858177980274 + 6.0099094878115210488i
 - 1.5905314182201972597 - 6.0099094878115210488i
  - 22.40946858177980274 - 6.0099094878115210488i
 - 1.5905314182201972597 + 6.0099094878115210488i
  - 5.9900905121884789512 - 10.40946858177980274i
  - 18.009909487811521049 + 10.40946858177980274i
  - 18.009909487811521049 - 10.40946858177980274i
  - 5.9900905121884789512 + 10.40946858177980274i
The second solution is apparently the one you wanted, as has already been shown.
0 comentarios
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!



