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()
算法:多项式曲线拟合是是最小二乘法的一个最为典型应用。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有