Python基于scipy模块实现二元二次函数拟合示例

云舒
云舒
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍利用Python的scipy模块中的leastsq函数进行二元二次函数拟合的方法。通过定义目标函数与残差,结合numpy生成含噪数据,演示如何从噪声中还原真实参数。示例包含完整代码及结果对比,适用于科学计算与数据建模场景。

本文分享一个使用Python实现二元二次函数拟合的具体实例,供读者参考学习。

背景说明:

主要利用scipy库中的优化模块来拟合一元二次函数模型。

参考资料来源:

HYRY Studio编写的《用Python做科学计算》一书。

具体实现代码如下:

# -*- coding:utf-8 -*-
#! python3
import numpy as np
from scipy.optimize import leastsq
import pylab as pl
def func(x,p):
  """
  数组拟合函数
  """
  A,k,theta = p
  return A*(x-k)**2+theta
def residuals(p,y,x):
  """
  残差
  """
  return y-func(x,p)
x = np.linspace(0,2,100)
A,k,theta = 10.,1,2. #真实数据参数
y0 = func(x,[A,k,theta]) #真实数据
y1 = y0 + 2 * np.random.randn(len(x)) #加入噪声序列
p0 = [7.,0.2,1.]
plsq = leastsq(residuals,p0,args = (y1,x))
print("真实参数:",[A,k,theta])
print("拟合参数:",plsq[0]) #试验数据拟合后的参数
pl.plot(x,y0,label = "real")
pl.plot(x,y1,label = "real+noise")
pl.plot(x,func(x,plsq[0]),label = "fitting")
pl.legend()
pl.show()

运行结果如下:

观察发现,该求解过程似乎采用了随机性较强的智能算法,导致每次运行的结果存在细微差异。具体算法细节尚未查证,后续若有精力将进一步补充相关资料。

真实参数: [10.0, 1, 2.0] 拟合参数: [ 10.83391995 0.98950039 1.63356065]

此外,推荐两款类似的在线工具供参考:

在线多项式曲线及曲线函数拟合工具: http://tools.jb51.net/jisuanqi/create_fun

在线绘制多项式/函数曲线图形工具: http://tools.jb51.net/jisuanqi/fun_draw

对Python其他技巧感兴趣的读者,可进一步查阅本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》。

希望本文提供的代码与解析能对大家的Python编程实践有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表