感谢 最小二乘法曲线拟合以及Matlab实现

作者 乐乐lelele

建议先看一下该作者的讲解,比较详细

最小二乘法拟合最终通过求解N次方程的系数来实现的   Y=X*A   A=INV(X)*Y

#coding=utf-8#独立测试脚本#最小二乘法曲线拟合 测试脚本
#作者:Kare
#参考资料:https://blog.csdn.net/StupidAutofan/article/details/78924601import numpy as np
from matplotlib import pyplot as plt
from KCurveFit import KCurveFit#rank = 6
rank = 6#初始化值
# x=[2,4,5,6,6.8,7.5,9,12,13.3,15]
# y=[-10,-6.9,-4.2,-2,0,2.1,3,5.2,6.4,4.5]
x = np.arange(-1,1,0.02)
y = ((x*x-1)**3+1)*(np.cos(x*2)+0.6*np.sin(x*1.3))len_x = len(x)
X0 = np.zeros((rank + 1, len_x)) #构造X0
for i in np.arange(rank + 1):for j in np.arange(len_x):X0[i, j] = np.power(x[j], rank - i)#需要用到的函数
# np.transpose()
# np.linalg.inv
# np.dot()#求系数
coefficient = np.zeros(len_x)
X = np.transpose(X0) #X0本身已经是转置,参见公式类型
XT = np.transpose(X) #求转置
XTX = np.dot(XT, X)
rx = np.linalg.matrix_rank(XTX)
XInv = np.linalg.inv(XTX) #求逆矩阵 先构造方阵
#系数A = INV((XT*X0)) * XT * Y
Y = np.transpose(y)
v1 = XInv
v2 = np.dot(v1, XT)
v3 = np.dot(v2, Y)
A = v3
print('系数矩阵\n', A)
# x0 = np.linspace(0,20,100)
x0 = np.arange(-1,1,0.002)
y0 = np.zeros(np.shape(x0))for i in np.arange(len(x0)):for j in np.arange(rank + 1):y0[i] = y0[i] +  A[j] *  x0[i]**(rank-j)plt.figure(1)
plt.grid(True)
plt.plot(x,y,'r.')
plt.hold
plt.plot(x0,y0,'b-')
plt.show()
#coding=utf-8#最小二乘法曲线拟合
#函数
#作者:Kare
#参考资料:https://blog.csdn.net/StupidAutofan/article/details/78924601import numpy as np
from matplotlib import pyplot as pltdef KCurveFit(x, y, rank=6, isPlot = True):''':param x: x数据:param y: y数据:param rank: 曲线阶数:param isPlot: 是否进行画图:return: 计算正常则返回数组形式的系数,错误则返回0'''len_x = len(x)X0 = np.zeros((rank + 1, len_x))  # 构造X0,X0是N次方程组的矩阵表示for i in np.arange(rank + 1):for j in np.arange(len_x):X0[i, j] = x[j] ** (rank-i)# 需要用到的函数# np.transpose() 求转置# np.linalg.inv 求逆矩阵# np.dot() 矩阵乘积# np.linalg.matrix_rank 求矩阵的秩# 求系数 其实就是一个N次方程组求解的过程X = np.transpose(X0)  # X0本身已经是转置,参见公式类型XT = np.transpose(X)  # 求转置XTX = np.dot(XT, X)XInv = np.linalg.inv(XTX)  # 求逆矩阵 先构造方阵# 系数A = INV((XT*X)) * XT * YY = np.transpose(y)A = XInv.dot(XT).dot(Y) #得到系数#验证参数是否正确if isPlot:# x0 = np.linspace(0,20,100)minx = np.min(x)maxx = np.max(x)x0 = np.arange(minx, maxx, 0.001)y0 = np.zeros(np.shape(x0))for i in np.arange(len(x0)):for j in np.arange(rank + 1):y0[i] = y0[i] + A[j] * x0[i] ** (rank - j)plt.figure(1)plt.grid(True)plt.plot(x, y, 'r.')plt.holdplt.plot(x0, y0, 'b-')plt.show()return A
#coding=utf-8
#调用函数脚本
#最小二乘法曲线拟合 测试脚本
#作者:Kare
#参考资料:https://blog.csdn.net/StupidAutofan/article/details/78924601import numpy as np
# from matplotlib import pyplot as plt
from KCurveFit import KCurveFit#rank = 6
rank = 6#初始化值
# x=[2,4,5,6,6.8,7.5,9,12,13.3,15]
# y=[-10,-6.9,-4.2,-2,0,2.1,3,5.2,6.4,4.5]
x = np.arange(-1,1,0.02)
y = ((x*x-1)**3+1)*(np.cos(x*2)+0.6*np.sin(x*1.3))A = KCurveFit(x, y, rank)
print('计算结果,系数 \n', A)

Python实现最小二乘法曲线拟合相关推荐

  1. 多项式最小二乘法曲线拟合Python程序

    #多项式最小二乘法曲线拟合 from numpy import * from numpy.linalg import * X = [1, 3, 4, 5, 6, 7, 8, 9, 10] Y = [2 ...

  2. python实现最小二乘法

    python实现最小二乘法 最小二乘法的思路 code 最小二乘法可以用于实现直线拟合和平面几何:我们这里使用最小二乘法实现一个平面几何 最小二乘法的思路 也可以将矩阵拆开来看 code import ...

  3. matlab polyfit c语言,算法——纯C语言最小二乘法曲线拟合

    算法--纯C语言最小二乘法曲线拟合 [复制链接] 写完,还没来得及写注释,已通过Matlab的polyfit验证(阶数高或者数据量太大会有double数据溢出的危险,低阶的都吻合),时间有点紧,程序注 ...

  4. c语言平曲线,算法——纯C语言最小二乘法曲线拟合

    算法--纯C语言最小二乘法曲线拟合 写完,还没来得及写注释,已通过Matlab的polyfit验证(阶数高或者数据量太大会有double数据溢出的危险,低阶的都吻合),时间有点紧,程序注释,数学推导等 ...

  5. python最小二乘法_用python实现最小二乘法

    用python实现最小二乘法 在上计量经济学的时候老师布置作业,要用Eviews这个软件实现最小二乘法,但是这个软件突然失灵了,在excel中的数据无法粘贴,这就非常难堪.于是我转向python语言寻 ...

  6. 最小二乘法曲线拟合 java_最小二乘法拟合java实现源程序(转)

    因为我所在的项目要用到最小二乘法拟合,所有我抽时间将C++实现的程序改为JAVA实现,现在贴出来,供大家参考使用. /** * 函数功能:最小二乘法曲线拟合 * @param x 实型一维数组,长度为 ...

  7. python散点图拟合曲线-Python解决最小二乘法拟合并绘制散点图

    问题背景 最近物理老师让用Excel弄一个最小二乘法拟合然后弄出方程来求玻尔兹曼常数.无奈发现Linux上的WPS没有绘图功能无语啊O__O"-,据说绘图功能是用delphi写的,不好做跨平 ...

  8. python实现最小二乘法(转)

    概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] ...

  9. python多条曲线拟合成一条

    目录 问题描述 最小二乘法 案例2 其它拟合方法 参考链接 问题描述 按照我的理解,大概意思是一个 x 对应多个 y 的那种情况,如上图所示,由多条灰线,拟合成一条红线. 举例理解如下,假设用一个温度 ...

  10. python实现最小二乘法的线性回归_Python中的线性回归与闭式普通最小二乘法

    我正在尝试使用python对一个包含大约50个特性的9个样本的数据集应用线性回归方法.我尝试过不同的线性回归方法,即闭式OLS(普通最小二乘法).LR(线性回归).HR(Huber回归).NNLS(非 ...

最新文章

  1. Android onPause()和onStop()区别
  2. ES6箭头函数中的this指向
  3. curl-loader介绍
  4. linux usb学习笔记
  5. java npm install_npm install不构建供应商可执行文件
  6. 如何在软件发布计划中自动化语义化版本与变更日志
  7. C语言各种排序算法(冒泡排序、快速排序、插入排序、希尔排序、快速排序、 归并排序)
  8. mysql8.0.12怎么用_Mysql8.0.12安装教程方法 Mysql8.0.12安装教程
  9. 30+简约和平铺的WordPress复古主题
  10. html 跑马灯效果 源代码,跑马灯效果.html
  11. MTK camera tuning学习中遇到的一些问题(调试前)
  12. 硬件工程师有没有35岁危机?
  13. 数独问题的c++解决
  14. “ 愿我如星君如月,夜夜流光相皎洁 ...”
  15. 苹果呼叫转移设置不了_怎么设置别人电话打不进来
  16. YUV420视频上面添加字幕
  17. 2022危险化学品生产单位主要负责人考试题库及模拟考试
  18. 一种下载Nvidia旧版本显卡驱动的方法(在知道版本号的前提下)
  19. DOL魔盘存储网络管理系统试用心得(转)
  20. IDE新建gradle liferay workspace项目没有项目目录问题解决方案

热门文章

  1. 动态添加的文本框验证_看腻了普通的PPT封面?手把手教你制作“动态”封面,震惊全场!...
  2. 怎么设计一种雷达成像系统代码_光纤阵列成像激光雷达系统的设计
  3. TR069协议与商业应用6——TR069动态库开发
  4. QT 使用QAxWidget和QAxObject操作DOCX和EXECL文件,包括修改数据、插入图片、修改表格、打印文档、复制SHEET、修改页码数等
  5. 【信道编码/Channel Coding】纠错编码与差错控制
  6. 监控网页内容,发现需要的内容后弹框和声音提醒
  7. 对数幅度谱图像matlab,幅度谱 fft2绘制图像的对数幅度谱,比较图像旋转、平移和缩放后的频谱...
  8. 中兴捧月比赛DIJKSTRA派算法说明
  9. ubuntu给手机刷机安卓8.0 ROOT+Xposed+JustTrustMe+Kali NetHunter
  10. FileUriExposedException异常:file://与content://