python数学建模--数据拟合

本文介绍了Python中numpy的polyfit()和scipy.optimize的curve_fit()函数用于多项式和非线性拟合的方法。通过示例展示了如何对数据进行二次多项式拟合,并使用这两个函数预测特定点的y值。此外,还应用curve_fit()解决了一个涉及指数和平方项的非线性方程的参数估计问题。
摘要由CSDN通过智能技术生成

Python的多个模块中,很多函数或方法可以拟合未知参数,比如

numpy.ployfit()

问题1:对下面数据进行二次多项式拟合,预测 x = 0.25 , 0.35 时 y 的数值 x=0.25,0.35时y的数值 x=0.25,0.35y的数值

x00.10.20.30.40.50.60.70.80.91.0
y-0.4471.9783.286.167.087.347.669.569.489.3011.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的值

特征12345678
x62674259
y49538582
z52197433

程序设计

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夺笋123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值