bestplayer
Profilo di
Nome | bestplayer |
---|---|
Indirizzo email | n/a |
Messaggi | 2 |
-
- 2017-01-09 15:42:59
- Re: Problema fit non lineare
- Forum >> Programmazione Python >> Calcolo scientifico
- Ho già provato queste soluzioni ma non sono servite nel mio caso (vuoi perchè il problema è diverso o perchè ho sbagliato qualcosa io), per questo ho aperto una nuova discussione.
-
- 2017-01-09 15:04:35
- Problema fit non lineare
- Forum >> Programmazione Python >> Calcolo scientifico
- Ciao a tutti, stavo provando a effettuare un fit non lineare del tipo:
Y=a * e**(b*X)**c
e la mia idea era questa (mutuata dal codice che ho scritto per affrontare un altro problema con fit lineare):
#!/usr/bin/env python3
import math
import numpy as np
import matplotlib.pyplot as plt
import scipy
from scipy.optimize import curve_fit
minutes = [0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25.]
temperature = [70.9, 70.8, 70.4, 70.1, 69.7, 69.6, 68.5, 68.0, 64.6, 64.0, 62.7, 58.3, 56.5, 50.5, 48.8, 42.1, 35.5, 30.9, 29.7, 22.8, 16.0, 11.0, 9.11, 8.47, 6.27, 3.76]
minutes_np = np.array(minutes)
temperature_np = np.array(temperature)
def exponential(x, a, b, c):
return (a * math.e ** (b*x) ** c)
popt, pcov = curve_fit(exponential, minutes_np, temperature_np)
print (popt)
popt_np = np.array(popt)
pcov_np = np.array(pcov)
matrix = np.corrcoef(minutes_np, temperature_np)
rho = (matrix01) / (math.sqrt(matrix11*matrix00))
plt.scatter(minutes_np, temperature_np, zorder=1, c='k')
x = np.arange(0, 30)
plt.plot(x, (popt_np0 * math.e ** (popt_np1*x)**popt_np2), zorder=2, color='g')
plt.show()
Il problema è che ho un Warning al momento della definizione del modello:
RuntimeWarning: invalid value encountered in power
e il risultato del fit non è compatibile con quanto dovrei ottenere.
Purtroppo sono neofita e non ho affatto chiara la natura del warning e se sia proprio questo a darmi problemi col risultato finale.
Grazie in anticipo a chiunque possa darmi un suggerimento.