У меня есть наборы данных, которые я хотел бы, чтобы соответствовать двум уравнениям:Как оптимизировать и найти коэффициенты для двух уравнений одновременно в Python 2.7?
y1 = a1 + a2 * T/2 + a3 * T^2/3 + a4 * T^3/4 + a5 * T^4/5 + а6/Т
у2 = а1 * ЛСТ + а2 * Т + а3 * T^2/2 + а4 * Т^3/3 + а5 * Т^4/4 + а7
Два полиномы имеют некоторые параметры (от a1 до a5), поэтому я хотел бы подобрать эти два уравнения одновременно.
Я пытался сделать это с scipy.optimize.curve_fit:
import numpy as np
from scipy.optimize import curve_fit
def func(T, a1, a2, a3, a4, a5, a6, a7):
y1 = a1 + a2 * T/2 + a3 * T**2/3 + a4 * T**3/4 + a5 * T**4/5 + a6/T
y2 = a1*np.log(T) + a2*T + a3 * T**2/2 + a4 * T**3/4 + a5 * T**4/4 + a7
return np.stack((y1, y2), axis = 1)
T = np.linspace(300, 1000, 20)
ydata_1 = np.array([
0.02139265, 0.40022353, 0.70653103, 0.95896469, 1.17025634,
1.34944655, 1.50316659, 1.63641239, 1.75303086, 1.85603601,
1.94782051, 2.03030092, 2.10501971, 2.17321829, 2.23589026,
2.29382086, 2.34761661, 2.39772787, 2.44446625, 2.48801814])
ydata_2 = np.array([
15.73868267, 16.14232408, 16.50633034, 16.83724622,
17.14016153, 17.41914701, 17.67752993, 17.91807535,
18.14310926, 18.35460465, 18.55424316, 18.74346017,
18.92347836, 19.09533317, 19.25989235, 19.41787118,
19.56984452, 19.71625632, 19.85742738, 19.99356154])
ydata = np.stack((ydata_1, ydata_2), axis = 1)
popt, pconv = curve_fit(f = func, xdata = T, ydata = ydata)
Однако я получаю ошибку:
minpack.error: Result from function call is not a proper array of floats.
Я даже не уверен, что это правильный подход к решению проблема.
Я вижу. Спасибо! Я хочу, чтобы я мог использовать другую модель, но я использую другую программу, которая требует этого формата. –