大学化学实验
资源¶
- 教材 -
大学化学实验
-李泽全
-科学出版社
- 实验报告参考
- 学堂在线网课
- 《大学化学实验》 -
2024春
- 《大学化学实验》 -
- 代码参考
-
样例
化学反应焓变的测定
import matplotlib.pyplot as plt import numpy as np import splines def main(dataList: list, reactionBeginIndex: int, dotsPerSecond: int = 300): """ Args: dataList (list): 数据点 y 坐标 reactionBeginIndex (int): 反应起始时刻 dotsPerSecond (int, optional): 拟合曲线差值点个数. Defaults to 300. """ dataListLenth = len(dataList) dataX = np.array(range(1, dataListLenth + 1)) dataY = np.array(list(map(lambda x: x + 298.15, dataList))) points1 = np.array([[dataX[i], dataY[i]] for i in range(dataListLenth)]) ax = plt.gca() spline = splines.CatmullRom(points1, alpha=0.5) total_duration = spline.grid[-1] - spline.grid[0] dots = int(total_duration * dotsPerSecond) + 1 times = spline.grid[0] + np.arange(dots) / dotsPerSecond intersectionY = 3 / (reactionBeginIndex + 3 - dataListLenth) * ( dataY[-1] - dataY[reactionBeginIndex + 2]) + dataY[reactionBeginIndex + 2] ax.plot(*spline.evaluate(times).T, marker='.', linestyle='', color="gray") # 拟合曲线 ax.plot(*np.asarray(spline.evaluate(spline.grid)).T, color='black', linestyle='', marker='x', markersize=10) # 数据点 plt.xticks(range(1, dataListLenth)) # x 坐标轴 plt.axline((reactionBeginIndex, dataY.min()), (reactionBeginIndex, dataY.max()), linestyle="--", color="black") # 竖直虚线 plt.axline((dataListLenth, dataY[-1]), (reactionBeginIndex + 3, dataY[reactionBeginIndex + 2]), linestyle="--", color="black") # 斜虚线 plt.xlim([0, dataListLenth + 1]) # x 范围 plt.ylim([dataY.min() - 1, dataY.max() + 1]) # y 范围 plt.scatter(reactionBeginIndex, intersectionY, marker="o", color="black") # 虚线交点 plt.xlabel("$\mathrm{t/30s}$") # x 名称 plt.ylabel("$\mathrm{T/K}$") # y 名称 plt.annotate("", xy=(reactionBeginIndex - 0.4, dataY[reactionBeginIndex - 1] - 0.1), xytext=(reactionBeginIndex - 0.4, intersectionY + 0.1), arrowprops=dict(arrowstyle="<->", )) # Delta T 箭头 plt.text(reactionBeginIndex - 1.5, (intersectionY + dataY[reactionBeginIndex - 1]) / 2, " $\\Delta T$\n${}K$".format( round(intersectionY - dataY[reactionBeginIndex - 1], 1)), bbox={ 'facecolor': 'white', 'edgecolor': 'white', 'alpha': 1, 'pad': 1 }) # Delta T 文字 plt.show() if __name__ == "__main__": data = [ 18.1, 18.2, 18.2, 18.3, 18.2, 18.2, 27.8, 28.7, 28.8, 28.7, 28.7, 28.6, 28.5, 28.5, 28.4 ] # 在这里修改实验数据 reactionBeginIndex = 6 # 反应起始时刻 main(data, reactionBeginIndex)
-