当前位置: 首页 > news >正文

最小二乘法的直线拟合

由于网上没有找到直接的代码,就来写一下。
原理部分可以回去看高数,核心就是以直线的斜率和截距为变量,让误差最小化。以下是代码部分

import numpy as np
import matplotlib.pyplot as pltdef linear_least_squares(q_list, n_list):"""最小二乘法直线拟合参数:q_list: x坐标数据列表n_list: y坐标数据列表返回:slope: 直线斜率intercept: 直线截距fig: 图像对象"""# 将列表转换为numpy数组x = np.array(q_list)y = np.array(n_list)# 计算必要的数据和n = len(x)sum_x = np.sum(x)sum_y = np.sum(y)sum_xy = np.sum(x * y)sum_x2 = np.sum(x ** 2)# 计算斜率和截距slope = (n * sum_xy - sum_x * sum_y) / (n * sum_x2 - sum_x ** 2)intercept = (sum_y - slope * sum_x) / n# 计算拟合的y值y_fit = slope * x + intercept# 计算相关系数R²y_mean = np.mean(y)ss_tot = np.sum((y - y_mean) ** 2)ss_res = np.sum((y - y_fit) ** 2)r_squared = 1 - (ss_res / ss_tot)# 创建图像fig, ax = plt.subplots(figsize=(10, 6))# 绘制原始数据点ax.scatter(x, y, color='blue', label='original data', s=50, alpha=0.7)# 绘制拟合直线ax.plot(x, y_fit, color='red', linewidth=2, label=f'Fitted Line: y = {slope:.4f}x + {intercept:.4f}')# 设置图表属性ax.set_xlabel('q', fontsize=12)ax.set_ylabel('n', fontsize=12)ax.set_title('Least Squares Linear Fit', fontsize=14)ax.legend(fontsize=10)ax.grid(True, alpha=0.3)# 在图上显示参数textstr = f'Slope: {slope:.4f}\nIntercept: {intercept:.4f}\nR²: {r_squared:.4f}'ax.text(0.05, 0.95, textstr, transform=ax.transAxes, fontsize=10,verticalalignment='top', bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))plt.tight_layout()return slope, intercept, fig# 实例 
q_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
n_list = [2.1, 4.2, 5.8, 8.1, 9.9, 12.1, 13.8, 16.2, 17.9, 20.1]# 调用拟合函数
slope, intercept, fig = linear_least_squares(q_list, n_list)# 打印结果
print(f"直线方程: y = {slope:.4f}x + {intercept:.4f}")
print(f"斜率: {slope:.4f}")
print(f"截距: {intercept:.4f}")# 显示图像
plt.show()

运行结果:
直线方程: y = 1.9952x + 0.0467
斜率: 1.9952
截距: 0.0467
image

http://www.rkmt.cn/news/18657.html

相关文章:

  • 2025 年加工中心厂商最新推荐排行榜权威发布,涵盖立式 / 卧式 / 龙门 / 四轴 / 五轴等机型,助力采购方精准筛选实力厂商
  • 基于MATLAB的粒子群算法(PSO)优化libsvm参数完整实现
  • python实现提取iso中的文件(支持多平台)
  • 2025 电缆绝缘材料生产厂家最新推荐榜单:品牌技术实力解析,爱普等企业领跑行业
  • SAP BP主数据维护BAPI CVI_EI_INBOUND_MAIN(转)
  • 运放速度揭秘:带宽与压摆率的关键对决
  • 2025 年消防设施检测 / 电气防火检测 / 防雷装置检测 / 消防维保 / 环境检测服务公司推荐:北京市通雷防雷装置安全检测有限公司提供专业技术支持
  • 直播app开发,如何快速获取系统时间? - 云豹科技
  • 2025 年泡棉厂家最新推荐榜:全方位解析 EPE 泡棉 / EVA 泡棉 / 珍珠棉泡棉 / 泡棉内衬优质企业,助采购商精准选对品牌
  • Outlook邮箱大附件邮件是什么?
  • VonaJS AOP编程:全局中间件全攻略
  • Python3 math 模块
  • 小波神经网络(WNN)预测代码
  • 优秀的研发经理,如何布局一周的工作?
  • Numerical Heat Transfer and Fluid Flow(《传热与流体流动的数值计算》)
  • 2025风机盘管厂家实力推荐:技术领先与品质保障的行业标杆
  • 2025蒸发式冷气机厂家TOP5推荐:节能降温与耐用品质深度
  • 基于Java+Springboot+Vue开发的体育场馆预约管理系统源码+运行步骤
  • 2025 酒店家具厂家最新推荐榜:北木斋领衔五大实力品牌,品质与创新双驱动选购指南智能酒店家具厂家推荐
  • CRM选型指南 | CRM软件成本拆解:本地部署、云租赁
  • 宜倍鲜携手纷享销客CRM开启数字化转型(附四大核心场景)
  • IDEA创建maven项目的不同模板的含义
  • 示波器BLDC需要知道的知识
  • CISA与USCG在关键基础设施威胁狩猎中发现网络安全改进领域
  • 2025年智慧物联与电子信息工程国际学术会议(IoTEIE 2025)
  • 笔记本使用摄像头显示“你的相机报告设备上的开关或按钮已阻止或关闭它”(特别是联想笔记本)
  • 牛客刷题-Day11
  • MySQL - ERROR 2002 (HY000): Cant connect to local MySQL Server through socket /tmp/mysql.sock
  • 直播平台开发,如何实现CPU内存使用情况的检测? - 云豹科技
  • 第十二届行为与社会计算国际会议(BESC)暨2025年机器学习与社会计算国际研讨会(MLSC 2025)