首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >多项式曲线拟合

多项式曲线拟合

作者头像
裴来凡
发布2022-05-29 10:13:10
发布2022-05-29 10:13:10
9190
举报
代码语言:javascript
复制
import numpy as np   #主要用于处理矩阵相关运算
import random   #主要用于随机数处理
import matplotlib.pyplot as plt #数据可视化模块
#多项式的次数
m=10#生成样本数据点
x=np.arange(-1,1,0.02)
y=[((a*a-1.55)**3+(a-0.3)**7+4*np.sin(5*a)) for a in x]
#可视化真实曲线
plt.plot(x,y,color='g',linestyle='--',marker='',label='Real Curve')
x_a=[b1*(random.randint(30,120))/100 for b1 in x]
y_a=[b2*(random.randint(30,120))/100 for b2 in y]
#可视化样本数据点
plt.plot(x_a,y_a,color='r',linestyle='',marker='.',label='Data Points')
'''
求解最小二乘法解析解
'''
#初始化二维数组
array_x =[[0 for i in range(m+1)] for i in range(len(x_a))]
#对数组进行赋值
for i in range(0,m+1):
    for j in range(0,len(x_a)):
        array_x[j][i]=x_a[j]**i
#将赋值后的二维数组转化为矩阵
matx=np.matrix(array_x)
matrix_A=matx.T*matx
yy=np.matrix(np.array(y_a))
matrix_B=matx.T*yy.T
#调用solve函数求解线性方程组
matAA=np.linalg.solve(matrix_A,matrix_B).tolist()
#计算拟合曲线
xxa=np.arange(-1,1.06,0.01)
yya=[]
#生成拟合曲线数据点
for i in range(0,len(xxa)):
    yyy=0.0
    for j in range(0,m+1):
        dy = 1.0
        for k in range(0,j):
            dy*=xxa[i]
        dy*=matAA[j][0]
        yyy+=dy
    yya.append(yyy)
#可视化拟合曲线
plt.plot(xxa,yya,color='b',linestyle='-',marker='',label='Fitted Curve')
plt.legend()
plt.show()

算法:多项式曲线拟合是是最小二乘法的一个最为典型应用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档