Sto utilizzando la funzione optimize.fsolve di scipy per la prima volta per trovare le radici in un'equazione. Il problema è che qualsiasi numero che uso come valore di stima/stima è quello che ottengo come risposta (entro circa 8 posizioni decimali). Quando si utilizza full_output = True, ottengo che exitflag sia '1', che dovrebbe significare che 'La soluzione convergente', che per quanto mi risulta dovrebbe significare che l'output è davvero una radice dell'equazione.sempre restituendo la stima/stima
So che ci sono un numero finito di radici distinte (che sono distanziate), come quando grafico l'equazione posso vederle. Inoltre, falloff fallisce (dà errore exitflags) quando inserisco il punto di partenza in un intervallo che dovrebbe restituire valori non definiti (dividere per zero, radice quadrata di un valore negativo). Ma oltre a ciò restituisce sempre il punto di partenza come radice.
Ho testato fsolve con un'equazione molto semplice e ha funzionato correttamente, quindi so che sto importando tutto ciò di cui ho bisogno e dovrei utilizzare correttamente fsolve. Ho anche provato a scherzare con alcuni degli argomenti di input, ma non li capisco molto bene e nulla sembrava cambiare).
seguito è riportato il relativo codice (E è l'unica variabile, tutto il resto ha un valore diverso da zero):
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)
che ha appena uscite '3' e dice, anche se 'La soluzione convergente.' le soluzioni più vicine dovrebbero essere a circa 2,8 e 4,7.
Qualcuno ha qualche idea su come risolvere questo problema e ottenere una risposta corretta (usando fsolve)?
Forse sei solo un bravo indovino. –
Qual è il valore di 'V_0'? –
Potete fornire i valori per 'V_0' e' c_sqr'?Ho provato a mettere 'c_sqr = 100' e' V_0 = 10', e converge correttamente alla radice 2.90496355. –