Estoy usando la función scipy's optimize.fsolve por primera vez para encontrar las raíces de una ecuación. El problema es que sea cual sea el número que uso como el valor de adivinar/estimar es lo que obtengo como respuesta (dentro de aproximadamente 8 decimales). Cuando uso full_output = True, obtengo que exitflag sea '1', lo que se supone significa que 'La solución convergió', lo que a mi entender debería significar que la salida es de hecho una raíz de la ecuación.fsolve siempre devolviendo la conjetura/estimación
Sé que hay un número finito de raíces distintas (que están espaciadas), ya que cuando grafico la ecuación puedo verlas. Además, fsolve falla (da error exitflags) cuando ingreso el punto de inicio para estar en un rango que debe devolver valores indefinidos (dividir por cero, raíz cuadrada de un valor negativo). Pero además de eso, siempre devuelve el punto de partida como raíz.
Probé fsolve con una ecuación muy simple y funcionó bien, así que sé que estoy importando todo lo que necesito y debería estar usando fsolve correctamente. También intenté meterme con algunos de los argumentos de entrada, pero no los entiendo muy bien y nada pareció cambiar).
A continuación se muestra el código correspondiente (E es la única variable, todo lo demás tiene un valor distinto de cero):
def func(E):
s = sqrt(c_sqr * (1 - E/V_0))
f = s/tan(s) + sqrt(c_sqr - s**2)
return f
guess = 3
fsolve(func, guess)
que acaba da salida a '3' y dice que, a pesar de que 'La solución convergente. las soluciones más cercanas deberían estar en alrededor de 2.8 y 4.7.
¿Alguien tiene alguna idea de cómo solucionar esto y obtener una respuesta correcta (usando fsolve)?
Quizás solo sea un buen adivino. –
¿Cuál es el valor de 'V_0'? –
¿Puede proporcionar los valores para 'V_0' y' c_sqr'?Intenté poner 'c_sqr = 100' y' V_0 = 10', y converge correctamente a la raíz 2.90496355. –