aimeeli的个人博客分享 http://blog.sciencenet.cn/u/aimeeli

博文

python解决求积分问题代码

已有 326 次阅读 2024-11-26 08:26 |个人分类:自学魅力|系统分类:科研笔记

在发光中,通过测试得到的发光材料的发射光谱,如何求发光强度对波长的积分?

一般情况下,大家可以得到如下的数据,数据的格式可能是文本格式(以.txt结尾)。大家使用以下的python代码计算积分之前,需要将自己的文本文件转化成excel文件。附件是我测试某种发光材料收集的发射光谱数据,原始的数据是文本格式,我已经把原始数据转变成了excel格式。大家可以直接使用附件中的500-700nm-to_new_file_Pr_emision.xlsx文件来运行以下的代码,而不用更改任何格式。

WavelengthIntensity
500681787.5
501489939.219
502298090.938
503223851.313
504149611.688
505119742.6839
50689873.6797
50786606.6836
50883339.6875
50979970.09375

 figure 1. excel文件中数据保存的格式

      以下是通过代码实现Intenstiy对Wavelength的积分的方法。

解决这个问题的步骤非常简单,即通过python代码读取Excel文件、绘制图形、计算积分并将图形保存到指定的文件中。(在使用代码时,直接将蓝色的代码复制到Jupyter Notebook 中,修改红色代码部分。红色代码需要根据自己的实际情况来更改。比如”文件路径“需要改成自己文件的实际路径,而且该文件的格式为 以 .xlsx命名的文件, "Wavelength"代表测试的光谱数据中第一列的第一行的文字,代表的是波长,如果不是Wavelength可以将第一列第一行改成Wavelength,”Intensity“代表的是发光强度,是excel文件中第二列第一行的说明文字。如果你直接使用我给的附件中的文件来练习代码的使用,可以不更改Wavelength和Intensity, 只需要更改500-700nm-to_new_file_Pr_emision.xlsx的路径和你想把光谱图保存的文件路径) 

  具体的代码如下:

import pandas as pd  # 导入pandas库用于处理数据

import matplotlib.pyplot as plt  # 导入matplotlib库用于绘图

from scipy.integrate import trapezoid  # 导入scipy库中的trapezoid函数用于数值积分

import numpy as np  # 导入numpy库用于数值计算

# 读取Excel文件

file_path = r'文件路径.xlsx'  # 设置Excel文件的路径

df = pd.read_excel(file_path, sheet_name='Sheet1')  # 读取Excel文件中的指定工作表,例如'Sheet1'

# 提取数据

wavelength = df['Wavelength'].values  # 提取'Wavelength'列的数据并转换为NumPy数组

intensity = df['Intensity'].values  # 提取'Intensity'列的数据并转换为NumPy数组

# 绘制图形

plt.figure(figsize=(10, 6))  # 创建一个新的图形,设置图形的大小为10x6英寸

plt.plot(wavelength, intensity, label='Intensity', color='blue')  # 绘制波长与强度的关系图,颜色设为蓝色

plt.xlabel('Wavelength (nm)')  # 设置x轴标签为'Wavelength (nm)'

plt.ylabel('Intensity')  # 设置y轴标签为'Intensity'

plt.title('Spectral Distribution ')  # 设置图形标题

plt.legend()  # 显示图例

plt.grid(True)  # 显示网格线

# 保存图形到文件

output_format = 'png'  # 可以更改为其他格式,如 'pdf', 'svg', 'jpg' 等

output_file = fr'文件路径.{output_format}'

plt.savefig(output_file, dpi=300, bbox_inches='tight')  # 保存图像,dpi设置分辨率,bbox_inches='tight'确保标签不被裁剪

# 显示图形

plt.show()  # 显示图形

# 计算积分

integral = trapezoid(intensity, wavelength)  # 使用梯形法则计算强度对波长的积分

# 打印积分结果

print(f'The integral of the intensity over the wavelength range is: {integral:.4f}')

# 如果需要计算特定波长范围内的积分

start_wavelength = 500  # 设置起始波长

end_wavelength = 700    # 设置结束波长

mask = (wavelength >= start_wavelength) & (wavelength <= end_wavelength)  # 创建一个布尔掩码,选择特定波长范围内的数据

integral_range = trapezoid(intensity[mask], wavelength[mask])  # 使用梯形法则计算特定波长范围内的积分

# 打印特定波长范围内的积分结果

print(f'The integral of the intensity from {start_wavelength} nm to {end_wavelength} nm is: {integral_range:.4f}')

运行正常的情况下有以下的结果(同时图形也保存在你自己设定的文件中)

The integral of the intensity over the wavelength range is: 134799362.4349The integral of the intensity from 500 nm to 700 nm is: 122340467.5416

如果大家在运行代码的过程中有任何问题可以咨询我:E-mail:liling402431@hotmail.com

或者加我的微信,交流



https://blog.sciencenet.cn/blog-3383449-1461690.html

上一篇:<熔炼未来-稀土元素如何塑造高温耐火材料的新时代》中文版已经不销售了,英文版正式出版
下一篇:python自动作图代码-比origin作图快十倍
收藏 IP: 58.48.30.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-22 00:09

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部