iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用Python怎么实现一个曲线拟合的最小二乘法
  • 516
分享到

使用Python怎么实现一个曲线拟合的最小二乘法

2023-06-06 10:06:52 516人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

今天就跟大家聊聊有关使用python怎么实现一个曲线拟合的最小二乘法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。模块导入import numpy as 

今天就跟大家聊聊有关使用python怎么实现一个曲线拟合的最小二乘法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

模块导入

import numpy as npimport gaosi as gs

代码

"""本函数通过创建增广矩阵,并调用高斯列主元消去法模块进行求解。"""import numpy as npimport gaosi as gsshape = int(input('请输入拟合函数的次数:'))x = np.array([0.6,1.3,1.64,1.8,2.1,2.3,2.44])y = np.array([7.05,12.2,14.4,15.2,17.4,19.6,20.2])data = []for i in range(shape*2+1): if i != 0: data.append(np.sum(x**i)) else: data.append(len(x))b = []for i in range(shape+1): if i != 0: b.append(np.sum(y*x**i)) else: b.append(np.sum(y))b = np.array(b).reshape(shape+1,1)n = np.zeros([shape+1,shape+1])for i in range(shape+1): for j in range(shape+1): n[i][j] = data[i+j]result = gs.Handle(n,b)if not result: print('增广矩阵求解失败!') exit()fun='f(x) = 'for i in range(len(result)): if type(result[i]) == type(''): print('存在自由变量!') fun = fun + str(result[i]) elif i == 0: fun = fun + '{:.3f}'.fORMat(result[i]) else: fun = fun + '+{0:.3f}*x^{1}'.format(result[i],i)print('求得{0}次拟合函数为:'.format(shape))print(fun)

高斯模块

# 导入 numpy 模块import numpy as np# 行交换def swap_row(matrix, i, j): m, n = matrix.shape if i >= m or j >= m: print('错误! : 行交换超出范围 ...') else: matrix[i],matrix[j] = matrix[j].copy(),matrix[i].copy() return matrix# 变成阶梯矩阵def matrix_change(matrix): m, n = matrix.shape main_factor = [] main_col = main_row = 0 while main_row < m and main_col < n: # 选择进行下一次主元查找的列 main_row = len(main_factor) # 寻找列中非零的元素 not_zeros = np.where(abs(matrix[main_row:,main_col]) > 0)[0] # 如果该列向下全部数据为零,则直接跳过列 if len(not_zeros) == 0: main_col += 1 continue else: # 将主元列号保存在列表中 main_factor.append(main_col) # 将第一个非零行交换至最前 if not_zeros[0] != [0]: matrix = swap_row(matrix,main_row,main_row+not_zeros[0]) # 将该列主元下方所有元素变为零 if main_row < m-1: for k in range(main_row+1,m): a = float(matrix[k, main_col] / matrix[main_row, main_col]) matrix[k] = matrix[k] - matrix[main_row] * matrix[k, main_col] / matrix[main_row, main_col] main_col += 1 return matrix,main_factor# 回代求解def back_solve(matrix, main_factor): # 判断是否有解 if len(main_factor) == 0: print('主元错误,无主元! ...') return None m, n = matrix.shape if main_factor[-1] == n - 1: print('无解! ...') return None # 把所有的主元元素上方的元素变成0 for i in range(len(main_factor) - 1, -1, -1): factor = matrix[i, main_factor[i]] matrix[i] = matrix[i] / float(factor) for j in range(i): times = matrix[j, main_factor[i]] matrix[j] = matrix[j] - float(times) * matrix[i] # 先看看结果对不对 return matrix# 结果打印def print_result(matrix, main_factor): if matrix is None: print('阶梯矩阵为空! ...') return None m, n = matrix.shape result = [''] * (n - 1) main_factor = list(main_factor) for i in range(n - 1): # 如果不是主元列,则为自由变量 if i not in main_factor: result[i] = '(free var)' # 否则是主元变量,从对应的行,将主元变量表示成非主元变量的线性组合 else: # row_of_main表示该主元所在的行 row_of_main = main_factor.index(i) result[i] = matrix[row_of_main, -1] return result# 得到简化的阶梯矩阵和主元列def Handle(matrix_a, matrix_b): # 拼接成增广矩阵 matrix_01 = np.hstack([matrix_a, matrix_b]) matrix_01, main_factor = matrix_change(matrix_01) matrix_01 = back_solve(matrix_01, main_factor) result = print_result(matrix_01, main_factor) return resultif __name__ == '__main__': a = np.array([[2, 1, 1], [3, 1, 2], [1, 2, 2]],dtype=float) b = np.array([[4],[6],[5]],dtype=float) a = Handle(a, b)

看完上述内容,你们对使用Python怎么实现一个曲线拟合的最小二乘法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网Python频道,感谢大家的支持。

--结束END--

本文标题: 使用Python怎么实现一个曲线拟合的最小二乘法

本文链接: https://www.lsjlt.com/news/246450.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Python怎么实现一个曲线拟合的最小二乘法
    今天就跟大家聊聊有关使用Python怎么实现一个曲线拟合的最小二乘法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。模块导入import numpy as ...
    99+
    2023-06-06
  • 怎么使用C#最小二乘法拟合曲线成直线
    这篇文章主要介绍了怎么使用C#最小二乘法拟合曲线成直线的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用C#最小二乘法拟合曲线成直线文章都会有所收获,下面我们一起来看看吧。最小二乘法拟合曲线成直线效果拟合前...
    99+
    2023-07-05
  • C#最小二乘法拟合曲线成直线的实例
    目录最小二乘法拟合曲线成直线效果总结最小二乘法拟合曲线成直线 效果 拟合前 拟合后 传入X轴和Y轴的数据,得到新的Y轴数据。 将X值数据和拟合后的Y轴数据绑带即可。 /// ...
    99+
    2023-02-26
    C#最小二乘法 C#拟合曲线 C#直线
  • Python怎么调用实现最小二乘法
    所谓线性最小二乘法,可以理解为是解方程的延续,区别在于,当未知量远小于方程数的时候,将得到一个无解的问题。最小二乘法的实质,是保证误差最小的情况下对未知数进行赋值。最小二乘法是非常经典的算法,而且这个名字我们在高中的时候就已经接触了,属于极...
    99+
    2023-05-19
    Python
  • Python数据拟合实现最小二乘法示例解析
    目录线性拟合高阶多项式多自变量指数函数所谓最小二乘法,即通过对数据进行拟合,使得拟合值与样本值的方差最小。 线性拟合 这个表达式还是非常简单的。 对于有些情况,我们往往选取自然序...
    99+
    2024-04-02
  • 如何在python项目中实现一个最小二乘法
    这篇文章给大家介绍如何在python项目中实现一个最小二乘法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、最小二乘法是什么最小二乘法Least Square Method,做为分类回归算法的基础,有着悠久的历史(由...
    99+
    2023-06-06
  • Python调用实现最小二乘法的方法详解
    目录numpy实现scipy封装速度对比补充所谓线性最小二乘法,可以理解为是解方程的延续,区别在于,当未知量远小于方程数的时候,将得到一个无解的问题。最小二乘法的实质,是保证误差最小...
    99+
    2023-05-17
    Python调用最小二乘法 Python实现最小二乘法 Python最小二乘法
  • Python使用scipy进行曲线拟合的方法实例
    目录导读曲线拟合总结导读 曲线拟合的应用在生活中随处可见,不知道大家是否还记得物理实验中的自由落体运动中下降高度与时间关系之间的探究,在初速度为0的情况下,我们想要探究下降高度与时间...
    99+
    2024-04-02
  • Python实现两种稀疏矩阵的最小二乘法
    目录最小二乘法返回值测试最小二乘法 scipy.sparse.linalg实现了两种稀疏矩阵最小二乘法lsqr和lsmr,前者是经典算法,后者来自斯坦福优化实验室,据称可以比lsqr...
    99+
    2023-02-26
    Python稀疏矩阵最小二乘法 Python稀疏矩阵 Python 最小二乘法
  • Python如何实现两种稀疏矩阵的最小二乘法
    今天小编给大家分享一下Python如何实现两种稀疏矩阵的最小二乘法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。最小二乘法s...
    99+
    2023-07-05
  • 使用python怎么绘制一个高斯曲线
    这篇文章将为大家详细讲解有关使用python怎么绘制一个高斯曲线,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。源码:import numpy as npimpo...
    99+
    2023-06-06
  • 怎么在Android应用中实现一个贝塞尔曲线
    这篇文章给大家介绍怎么在Android应用中实现一个贝塞尔曲线,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。贝塞尔曲线有一阶、二阶、三阶、N阶 一阶就是一条直线,有起点终点,没有控制点,对应方法就是canvas.dra...
    99+
    2023-05-31
    android 贝塞尔曲线 roi
  • 怎么利用java实现一个二分法算法
    这篇文章给大家介绍怎么利用java实现一个二分法算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java 二分法算法1、前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序2、原理:将数组分为...
    99+
    2023-05-31
    java 二分法算法 ava
  • 使用python怎么实现一个洗牌算法
    使用python怎么实现一个洗牌算法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬...
    99+
    2023-06-14
  • 使用Swift怎么实现一个最小化语音通话功能
    本篇文章为大家展示了使用Swift怎么实现一个最小化语音通话功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SuspendToolimport Foundationimport ...
    99+
    2023-06-06
  • 利用java 如何实现求出一个二维数组中的最小值
    利用java 如何实现求出一个二维数组中的最小值?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java 求解二维数组列最小值比较二维数组列最小值,组成一个新数组返回。实现核...
    99+
    2023-05-31
    java 二维数组 ava
  • 如何在Python中使用RNN实现一个二进制加法
    本篇文章给大家分享的是有关如何在Python中使用RNN实现一个二进制加法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python是什么意思Python是一种跨平台的、具有解...
    99+
    2023-06-07
  • 使用JavaScript怎么实现一个二叉搜索树
    今天就跟大家聊聊有关使用JavaScript怎么实现一个二叉搜索树,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点...
    99+
    2023-06-07
  • 使用python怎么实现一个黄金分割法
    本篇文章为大家展示了使用python怎么实现一个黄金分割法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不...
    99+
    2023-06-14
  • 使用css3怎么实现一个宠物小鸡
    今天就跟大家聊聊有关使用css3怎么实现一个宠物小鸡,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。<body>    <di...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作