Ich habe eine Funktion von zwei Variablen k und T. Wenn der Wert der Funktion für eine Anzahl von (k, T) koppeln. Allerdings habe ich nicht die gleiche Menge für jeden. Zum Beispiel weiß, dass ich die Werte f der Funktion bei 2 T und 3 k:Nichtlineare Least Square Minimierung von 2 Variablen (unterschiedliche Dimension) in Python
F(k1,T1) = f1
F(k1,T2) = f2
F(k2,T1) = f3
F(k2,T2) = f4
F(k3,T1) = f5
F(k3,T2) = f6
Ich weiß, auch die Form der Funktion F:
def func(X, a, b, c, omega):
T,k = X # The two variables
n = 1.0/(np.exp(omega/T) - 1.0)
return a * k * n + b * k**2 * (n + 1.0)
Ich mag den Wert von a finden , b, c und omega, die den Fehler minimieren. Ich habe versucht, mit curve_fit:
k = [k1,k2,k3]
T = [T1,T2]
F[k1,T1] = f1
F[k1,T2] = f2
F[k2,T1] = f3
F[k2,T2] = f4
F[k3,T1] = f5
F[k3,T2] = f6
popt, pcov = curve_fit(func, (T,k), F)
Jedoch habe ich die folgende Fehlermeldung (in meinem praktischen Fall ich habe 19 k-Werte und 4 T-Werte):
return a * k * n + b * k**2 * (n + 1.0)
ValueError: operands could not be broadcast together with shapes (19,) (4,)
Wenn ich nun eine Reihe von höheren erstellen Dimension:
X = np.zeros((4,19,2))
for ii in np.arange(19):
X[0,ii,:] = np.array([T[0],k[ii]])
X[1,ii,:] = np.array([T[1],k[ii]])
X[2,ii,:] = np.array([T[2],k[ii]])
X[3,ii,:] = np.array([T[3],k[ii]])
und passieren, dass:
def func(X, a, b, c, omega):
T = X[:,:,0]
k = X[:,:,1]
n = 1.0/(np.exp(omega/T) - 1.0)
return a * k * n + b * k**2 * (n + 1.0)
popt, pcov = curve_fit(func, X, F)
dann bekomme ich folgende Ausgabe:
minpack.error: Result from function call is not a proper array of floats.
Vielen Dank im Voraus.