首页 > 编程知识 正文

Python 非线性拟合

时间:2023-11-19 08:59:27 阅读:289681 作者:RSPH

本文将为您介绍Python中非线性拟合的方法,包括多项式拟合和函数拟合。Python中有一些强大的数学库可供我们使用,如Numpy和Scipy。通过应用这些库中的功能,可以使用最小二乘法计算非线性回归拟合模型,并绘制相应的拟合曲线图形。

一、多项式拟合

多项式拟合是一种线性拟合,可以处理多维数据。多项式拟合是将数据拟合的一种方法,它基于最小二乘法,通过将样本数据图形化来构建线性方程组。多项式拟合中,我们使用多项式函数逼近原始数据,从而得到一个近似函数。

<!-- 将代码放在代码块中 -->
# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt

# 定义生成数据的函数,在此使用二次函数进行拟合
def f(x):
    y = 3 * x ** 2 - 2 * x + 1
    return y

# 生成带有随机噪声的样本数据
np.random.seed(0)
x = np.linspace(-1, 1, 101)
y = f(x) + 0.4 * np.random.randn(len(x))

# 用二次函数进行拟合
z = np.polyfit(x, y, 2)
p = np.poly1d(z)

# 绘制原始数据和拟合曲线
plt.scatter(x, y)
plt.plot(x, p(x), c = 'r')
plt.show()

运行上述代码,我们将得到一个绘制有原始数据和拟合曲线的图形。如图所示,红色曲线为拟合的曲线。

二、函数拟合

在Python中,函数拟合是一种用于寻找函数参数的方法。函数拟合通常使用非线性最小二乘法,通过拟合样本数据来寻找最优参数。在这种拟合中,我们使用自定义函数来逼近原始数据,从而得到一个近似函数。

<!-- 将代码放在代码块中 -->
# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# 定义拟合函数
def func(x, a, b, c):
    return a * np.exp(-b * x) + c

# 生成样本数据
np.random.seed(0)
x = np.linspace(0, 4, 50)
y = func(x, 2.5, 1.3, 0.5) + 0.2 * np.random.normal(size=len(x))

# 将自定义函数作为参数传递给curve_fit函数进行拟合
popt, pcov = curve_fit(func, x, y)

# 绘制原始数据和拟合曲线
plt.plot(x, y, 'bo', label='Original Data')
plt.plot(x, func(x, *popt), 'r-', label='Fitted Curve')
plt.legend()
plt.show()

运行上述代码,我们将得到一个绘制有原始数据和拟合曲线的图形。如图所示,红色曲线为拟合的曲线。

结语

通过本文的介绍,我们可以了解到用Python进行非线性拟合的方法,包括多项式拟合和函数拟合。通过使用相关的数学库,结合最小二乘法,可以快速实现拟合功能,并绘制出拟合曲线图形。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。