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

使用Python实现线性拟合

如下 Python 代码主要用于处理和分析数据,并使用 Matplotlib 库绘制出数据的拟合曲线。它的主要步骤包括数据预处理、进行线性回归分析,并根据结果绘图展示。下面是对代码及其所引用库的详细解释:

引用的库

  1. numpy (np):

    • 用于进行数值计算。这里主要用于处理数组数据,如进行数学运算和变换。
  2. scipy.stats:

    • 提供统计工具,这里使用了 linregress 函数来进行线性回归分析,从而找出数据间的数学关系。
  3. matplotlib.pyplot (plt):

    • 用于绘制图形,这里用来展示原始数据点和拟合的曲线。
  4. matplotlib:

    • 用来配置绘图样式,这里特别设置了字体以支持中文显示,并调整了其他样式如字体大小和正确显示负号。
  5. math:

    • 提供基本的数学运算函数,这里用来计算对数和指数运算。

代码功能

  1. 配置 Matplotlib 支持中文显示:

    • 设置字体为微软雅黑,确保图表中的中文可以正确显示。
  2. 数据定义:

    • 定义了两个数组,x_valuesPdbm_values,分别存储 ADC 值和对应的功率值(dBm)。
  3. 数据转换:

    • 将 ADC 值转换为对数尺度(left_side),这对应物理测量中常见的对数响应。
    • 将 dBm 值转换为适合进行线性回归的形式(right_side),方法是将 dBm 值除以 10。
  4. 线性回归分析:

    • 使用 linregress 函数对转换后的数据进行线性回归,计算数据的斜率和截距,以及回归的统计参数如决定系数 (R²)。
  5. 拟合值计算:

    • 根据回归结果和计算出的 R 值估计 (Re)。
  6. 绘制结果:

    • 使用 Matplotlib 绘制原始数据点和拟合曲线。
    • 添加图例、标题、坐标轴标签和文本框显示计算出的 (Re) 值和 R²。
  7. 显示图形:

    • 最后通过 plt.show() 显示图形界面。
import numpy as np
from scipy.stats import linregress
import matplotlib.pyplot as plt
import matplotlib
import math# 设置 Matplotlib 支持中文
matplotlib.rcParams['font.family'] = 'Microsoft YaHei'  # 设置字体为微软雅黑
matplotlib.rcParams['font.size'] = 16  # 设置字体大小
matplotlib.rcParams['axes.unicode_minus'] = False  # 正确显示负号TitleStr='PD3拟合曲线'R_Values = 8.2  # 根据之前的设置,这里使用了0.249的系数# 新的给定数据
x_values = np.array([3118, 2963, 2447, 2097, 1861, 1448, 1143, 856, 612, 508, 399, 338, 266, 201, 175, 130, 118, 98, 87, 85, 80, 70, 55])
Pdbm_values = np.array([-3.7, -4.01, -4.85, -5.52, -6.04, -7.13, -8.16, -9.42, -10.87, -11.69, -12.73, -13.46, -14.52, -15.73, -16.35, -17.64, -18.07, -18.9, -19.41, -19.52, -19.88, -20.43, -21.51])# 计算转换后的 x 值的对数
left_side =np.log10(x_values * 5.0 / (4096))
# 转换 Pdbm 值为线性回归可用的线性尺度
right_side = Pdbm_values / (10)# 进行线性回归得到斜率和截距
slope, intercept, r_value, p_value, std_err = linregress(left_side, right_side)# 根据截距计算估计的 Re
estimated_log_Re = -intercept
estimated_Re = math.pow(10,estimated_log_Re)/R_Values# 生成拟合线的点
x_fit = np.linspace(min(x_values), max(x_values), 100)
y_fit = 10 * np.log10(  ((x_fit * 5.0) / 4096 ) /(estimated_Re*R_Values)  )# 绘制结果
plt.figure(figsize=(10, 6))
plt.scatter(x_values, Pdbm_values, color='blue', label='实际数据')  # 实际数据
plt.plot(x_fit, y_fit, 'r-', label='拟合曲线')
plt.xlabel('ADC 值 (x)')
plt.ylabel('光功率 (dBm)')
plt.title(TitleStr)# # Display Re and R^2 values
plt.text(min(x_values), min(Pdbm_values), f'    拟合 Re: {estimated_Re:.5f} \n'f'    决定系数 (R^2): {r_value**2:.5f}', fontsize=12, color='red')plt.legend()
plt.grid(True)
plt.show()# 输出结果
print(f'Estimated Re: {estimated_Re:.5f}')
print(f'Coefficient of determination (R^2): {r_value**2:.5f}')
http://www.lryc.cn/news/396094.html

相关文章:

  • 如何在浏览器控制台Console中引入外部 JS
  • 后端——全局异常处理
  • 软件开发面试题(C#语言,.NET框架)
  • Spring学习04-[Spring容器核心技术AOP学习]
  • 第5章-组合序列类型
  • 大话光学原理:2.最短时间原理、“魔法石”与彩虹
  • spring tx @Transactional 详解 `Advisor`、`Target`、`ProxyFactory
  • `CyclicBarrier` 是 Java 中的一个同步辅助工具类,它允许一组线程相互等待,直到所有线程都达到了某个公共屏障点(barrier point)
  • 华为机试HJ108求最小公倍数
  • Debezium报错处理系列之第114篇:No TableMapEventData has been found for table id:256.
  • 开发者必看:MySQL主从复制与Laravel读写分离的完美搭配
  • 二战架构师,拿下
  • 泛微开发修炼之旅--35关于基于页面扩展和自定义按钮实现与后端交互调用的方法
  • 原创作品—数据可视化大屏
  • AdaBoost集成学习算法理论解读以及公式为什么这么设计?
  • uniapp内置组件uni.navigateTo跳转后页面空白问题解决
  • 使用树莓派进行python开发,控制电机的参考资料
  • protobuf的使用
  • 笔记15:while语句编程练习
  • 打开excel时弹出stdole32.tlb
  • 349. 两个数组的交集
  • 重庆交通大学数学与统计学院携手泰迪智能科技共建的“智能工作室”
  • Pandas在生物信息学中的应用详解
  • ByteMD富文本编辑器的vue3配置
  • 基于antdesign封装一个react的上传组件
  • ARM裸机:一步步点亮LED(汇编)
  • 【单链表】05 有一个带头结点的单链表L,设计一个算法使其元素递增有序。
  • C语言入门基础题:奇偶 ASCII 值判断(C语言版)和ASCII码表,什么是ASCII码,它的特点和应用?
  • Numpy的广播机制(用于自动处理不同形状的数组)
  • 计算机图形学入门24:材质与外观