仅仅是在课后为了完成物理实验的数据处理而写下的一段代码,供大家参考!
以下是实验过程及实验数据处理要求 :
在最开始我们引入了这段代码所必须使用到的库:
import numpy as np
import matplotlib.pyplot as plt
然后由于此次实验的数据是以表格形式创建的,所以我们要先构建一个函数,用于获取用户根据实验获得的实验表格
def get_user_input_table():
n = int(input("请输入表格的行数: "))
m = int(input("请输入表格的列数: "))
# 初始化一个空的二维列表(表格)
table = [[0 for _ in range(m)] for _ in range(n)]
# 循环读取每一行和每一列的数据
for i in range(n):
print(f"请输入第{i + 1}行的{m}个元素(用空格分隔): ")
# 读取一行数据,并用空格分割成列表
row_data = input().split()
# 确保用户输入了正确数量的元素
if len(row_data) != m:
print("错误:输入的元素数量与列数不匹配,请重新输入。")
# 如果输入错误,重新读取当前行
i -= 1
continue
# 将读取的数据转换为适当的类型(这里假设为整数或浮点数)并存储
try:
table[i] = [float(value) for value in row_data]
except ValueError:
print("错误:输入的不是有效的数字,请重新输入。")
# 如果转换失败,重新读取当前行
i -= 1
continue
return table
通过这个函数就可以获取数据!
接下来就是获取实验数据并进行简单数据处理的代码:
#输入初始数据
temperature = int(input("请输入当前的实验温度(整数):"))
frequency_0 = int(input("请输入仪器上显示的频率(整数):"))
# 调用函数获取用户输入的表格数据
user_table = get_user_input_table()
# 打印用户输入的表格数据
for row in user_table:
print(row)
velocity = np.array(user_table[0])
frequency = np.array(user_table[1])
#使用线性回归模拟器拟合
#输出计算值
slope, intercept = np.polyfit(velocity, frequency, 1.0) # 1表示线性回归
velocity_measurements = frequency_0/ slope
velocity_theoretical_values = 331 * (1 + temperature/273)**0.5
error = (velocity_measurements - velocity_theoretical_values)/velocity_theoretical_values
print(f"计算得到的直线斜率为: {slope:.4f}")
print(f"计算得到的声速测量值为:{velocity_measurements:.4f}")
print(f"计算得到的声速实际值为:{velocity_theoretical_values:.4f}")
print(f"计算得到的误差为:{error:.4f}")
#计算各类平均值
velocity_average = sum(velocity)/len(velocity)
velocity_square_average = sum(velocity**2)/len(velocity)
frequency_average = sum(frequency)/len(frequency)
velocity_average_square = velocity_average ** 2
velocity_frequency_average = np.dot(velocity, frequency)/5
print(f"计算得到的速度平均值为: {velocity_average:.4f}")
print(f"计算得到的速度平方的平均值为: {velocity_square_average:.4f}")
print(f"计算得到的频率的平均值为: {frequency_average:.4f}")
print(f"计算得到的速度平均值的平方为: {velocity_average_square:.4f}")
print(f"计算得到的速度频率矩阵相乘的平均值为: {velocity_frequency_average:.4f}")
初次尝试发帖,如有纰漏,敬请指正!