python数学建模--数据拟合
numpy、scipy线性拟合函数使用小例,常用于数学建模
Python的多个模块中,很多函数或方法可以拟合未知参数,比如
numpy.ployfit()
问题1:对下面数据进行二次多项式拟合,预测 x = 0.25 , 0.35 时 y 的数值 x=0.25,0.35时y的数值 x=0.25,0.35时y的数值
x | 0 | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 | 1.0 |
y | -0.447 | 1.978 | 3.28 | 6.16 | 7.08 | 7.34 | 7.66 | 9.56 | 9.48 | 9.30 | 11.2 |
from numpy import polyfit, polyval
import numpy as np
x0 = np.arange(0, 1.1, 0.1)
y0 = np.array([-0.447, 1.978, 3.28, 6.16, 7.08, 7.34, 7.66, 9.56, 9.48, 9.30, 11.2])
p = polyfit(x0, y0, 2)
y_pred = polyval(p, [0.25, 0.35])
y_pred
>>> [4.38747465 5.81175367]
可视化
import matplotlib.pyplot as plt
plt.rc('font', size=16)
plt.plot(x0, y0, '*')
plt.plot(x0,polyval(p, x0), '-')
plt.show()
运行结果
scipy.optimize.curve_fit()
接问题1,下面我们使用curve_fit()函数实现
程序设计
import numpy as np
from scipy.optimize import curve_fit
x0=np.arange(0,1.1,0.1)
y0=np.array([-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2])
def fun(x,a,b,c):
return a*x**2+b*x+c
a,b=curve_fit(fun,x0,y0)
fun(np.array([0.25,0.35]),*a)
>>> [4.38747471 5.81175366]#从结果上来看,似乎与ployfit()函数的预测结果相同
问题2:现在有三个未知数 x , y , z x,y,z x,y,z,已知三者的关系为 z = a e b x + c y 2 z=ae^{bx}+cy^2 z=aebx+cy2,求参数 a , b , c a,b,c a,b,c的值
特征 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
x | 6 | 2 | 6 | 7 | 4 | 2 | 5 | 9 |
y | 4 | 9 | 5 | 3 | 8 | 5 | 8 | 2 |
z | 5 | 2 | 1 | 9 | 7 | 4 | 3 | 3 |
程序设计
import numpy as np
from scipy.optimize import curve_fit
x0=np.array([6,2,6,7,4,2,5,9])
y0=np.array([4,9,5,3,8,5,8,2])
z0=np.array([5,2,1,9,7,4,3,3])
xy0=np.vstack((x0,y0))
def fun(t,a,b,c):
return a*np.exp(b*t[0])+c*t[1]**2
a,b=curve_fit(fun,xy0,z0)
a
>>> array([ 5.08907305e+00, -2.58248004e-03, -2.14509683e-02])# 5.089 -0.0026 -0.0215
更多推荐
所有评论(0)