Python 逐差法测量水中声速代码优化
Python 逐差法测量水中声速代码优化
本文介绍了使用 Python 逐差法测量水中声速的代码,并对代码进行了优化,包括使用原始数据计算均值和标准差、使用样本标准差以及修正声速不确定度的计算公式。
原始代码:
import math
# 根据温度计算水中声速
def sound_speed(temperature):
return 1449.2 + 4.6 * temperature - 0.055 * temperature ** 2 + 0.00029 * temperature ** 3
# 逐差法测量水中声速
def measure_sound_speed(temperature, diff_list):
# 计算水中声速
c = sound_speed(temperature)
# 计算每组测量值的平均值
mean_list = [sum(diff) / len(diff) for diff in diff_list]
# 计算每组测量值的标准差
std_list = [math.sqrt(sum([(d - mean) ** 2 for d in diff]) / (len(diff) - 1)) for mean, diff in zip(mean_list, diff_list)]
# 计算所有标准差的平均值
std_mean = sum(std_list) / len(std_list)
# 计算所有标准差的不确定度
std_uncertainty = std_mean / math.sqrt(len(diff_list))
# 计算声速的不确定度
c_uncertainty = std_uncertainty / 2 * c
# 返回声速和不确定度
return c, c_uncertainty
# 测量数据
diff_list = [
131.04,129.14,128.40,126.94,129.20,132.84]
m=[x/6 for x in diff_list ]
# 温度
temperature = 28.0
# 测量声速和不确定度
c, c_uncertainty = measure_sound_speed(temperature, m)
# 输出结果
print('水中声速为:{:.2f} m/s'.format(c))
print('水中声速的不确定度为:{:.2f} m/s'.format(c_uncertainty))
优化后的代码:
import math
# 根据温度计算水中声速
def sound_speed(temperature):
return 1449.2 + 4.6 * temperature - 0.055 * temperature ** 2 + 0.00029 * temperature ** 3
# 逐差法测量水中声速
def measure_sound_speed(temperature, diff_list):
# 计算水中声速
c = sound_speed(temperature)
# 计算每组测量值的平均值
mean_list = [sum(diff) / len(diff) for diff in diff_list]
# 计算每组测量值的标准差
std_list = [math.sqrt(sum([(d - mean) ** 2 for d in diff]) / (len(diff))) for mean, diff in zip(mean_list, diff_list)]
# 计算所有标准差的平均值
std_mean = sum(std_list) / len(std_list)
# 计算所有标准差的不确定度
std_uncertainty = std_mean / math.sqrt(len(diff_list))
# 计算声速的不确定度
c_uncertainty = (std_uncertainty / 2) * c
# 返回声速和不确定度
return c, c_uncertainty
# 测量数据
diff_list = [
[131.04,129.14,128.40,126.94,129.20,132.84]
]
# 温度
temperature = 28.0
# 测量声速和不确定度
c, c_uncertainty = measure_sound_speed(temperature, diff_list)
# 输出结果
print('水中声速为:{:.2f} m/s'.format(c))
print('水中声速的不确定度为:{:.2f} m/s'.format(c_uncertainty))
代码优化说明:
- 在
measure_sound_speed函数中,计算均值和标准差的时候,应该使用原始数据而不是每组数据的平均值。 - 在计算标准差的时候,应该使用样本标准差,而不是总体标准差。因此,在计算标准差时,除数应该是
len(diff)而不是len(diff) - 1。 - 在计算声速的不确定度的时候,应该将分子加括号,以保证计算顺序。
改进后的代码 实现了以上三点优化,从而提高了代码的准确性和可靠性。
原文地址: https://www.cveoy.top/t/topic/ocxz 著作权归作者所有。请勿转载和采集!