【发布时间】:2019-07-25 21:21:23
【问题描述】:
我有一个函数y(x,z) 有两个变量x、z 和6 个系数a、b、c、d、e、f。我有 x ,z 的数据,让我们说用于测试目的的系数数据。使用这些数据,我计算出我的y。
然后我想用x,z和计算出的y的数据来拟合函数,得到系数并与测试目的一比较。
import numpy as np
from scipy.optimize import minimize
x = np.array([0,0.25,0.5,0.75,1]) # data of variable x
z = np.array([0,0.25,0.5,0.75,1]) # data of variable z
def func(pars,x,z): #my function
a,b,c,d,e,f = pars
return a*x**2+b*x+c+d*z+e*z*x+f*z*x**2
a = np.array([1,1,1,1,1]) #define coefficients to get the y data and compare them later with fit
b = np.array([0.5,0.5,0.5,0.5,0.5])
c = np.array([0.25,0.25,0.25,0.25,0.25])
d = np.array([1,1,1,1,1])
e = np.array([0.5,0.5,0.5,0.5,0.5])
f = np.array([0.25,0.25,0.25,0.25,0.25])
y = []
y.append(func((a,b,c,d,e,f),x,z)) #calculate the y data
print(y)
def resid(pars,x,z,y): #residual function
return ((func(pars,x,z) - y) ** 2).sum()
pars0 = np.array([0,0,0,0,0,0])
res = minimize(resid, pars0,args=(x,z,y), method='cobyla',options={'maxiter': 5000000})
print("a = %f , b = %f, c = %f, d = %f, e = %f, f = %f" % (res.x[0], res.x[1], res.x[2], res.x[3], res.x[4], res.x[5]))
我从拟合中得到以下系数:
a = 1.181149 , b = 1.228558, c = 0.253053, d = 0.219143, e = 0.444941, f = 0.172369
与我计算y 数据的系数相比,拟合并不是我所说的足够。谁能解释一下为什么我的身材这么差?
P.S.:如果有人想知道,我使用cobyla,因为我稍后必须定义一些约束。这只是一个测试代码,用于找出我的问题所在(希望如此)。
【问题讨论】:
标签: python scipy curve-fitting minimize