#作者:王日睿
#中国科学技术大学生命科学学院
#2021.11.20
#物理化学实验:实验04 液体饱和蒸气压的测定
# Jupyter lab
import numpy as np
import matplotlib.pyplot as plt
import math
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 线性拟合函数
from scipy import optimize
def linear_fit(x, y):
def func(x, k, b):
return k * x + b
k, b = optimize.curve_fit(func, x, y)[0]
return k, b
#求R^2函数
def get_R_square(x, y):
y_mean = np.mean(y)
k, b = linear_fit(x, y)
y_predict = [k * e + b for e in x]
TSS = [(x-y_mean)**2 for x in y]
RSS = [(y_predict[i] - y[i])**2 for i in range(len(y))]
return 1 - sum(RSS) / sum(TSS)
# 原始数据:
# 工作曲线:
U_left = [-173.0, -151.0, -137.6, -119.0, -97.0, -78.3, -58.5, -39.7, -19.8, -0.6]
U_right = [181.0, 163.0, 143.5, 125.0, 102.2, 82.9, 62.2, 42.8, 22.6, 1.2]
U_value = []
for i in range(len(U_left)):
U_value.append((U_left[i] - U_right[i]))
#print(U_value)
#[-354.0, -314.0, -281.1, -244.0, -199.2, -161.2, -120.7, -82.5, -42.4, -1.8]
Digit_value = [-350.5, -316.6, -278.7, -242.0, -197.0, -159.5, -119.6, -82.0, -41.5, 0]
work_k, work_b = linear_fit(Digit_value, U_value)
#print("工作曲线为y=%4.3fx+(%4.3f)"%(work_k, work_b))
#工作曲线为y=1.000x+(-1.268)
work_R_square = get_R_square(Digit_value, U_val