目录

《物理化学实验》-化学与材料科学学院

misaraty 更新 | 2024-03-15
前言
  • 此课程由化学与材料科学学院负责,面向化学专业本科生。

  • 教学地点:D5-330实验室

  • 教学内容:“实验7 磺基水杨酸铁配合物稳定常数的测定”与“实验14 环己烷-水-乙醇三组分等温相图的绘制”是一组;“实验17 氨基甲酸铵分解平衡常数的测定”和“实验36 溶液吸附法测定硅胶比表面”是另一组。

  • 主要教材:《基础化学实验4——物性参数与测定》 马志广、庞秀言主编 化学工业出版社 2016年

  • 百度网盘下载Github下载,包含教案、学生实验报告示例等。

实验7 磺基水杨酸铁配合物稳定常数的测定

实验知识点

  • 本实验是测定pH = 2~3 时形成的紫红色磺基水杨酸铁配离子的组成及其稳定常数。实验中通过加入一定量的HClO4溶液来控制溶液的pH值。

  • 分光光度法有两种:一是摩尔比法;二是等物质的量连续变化法。本实验采用后者

  • 磺基水杨酸铁配离子能一定程度吸收波长为500 nm的单色光。

  • 当液层厚度一定时,溶液的光密度只与溶液的浓度正比

  • 式(1)、式(3)、式(4)。

思考
经验平衡常数与标准平衡常数的区别。

分光光度计的使用

  1. 开机仪器自检,当显示“546 nm 100.0”方可开始测试;

  2. <MODE>键选择吸光度(A);

  3. 上下箭头键设置分析波长为500 nm

思考
为什么分析波长选择500 nm?
  1. 参比样品(蒸馏水)放在第一个槽位中,按[0ABS | 100%T],显示BLA--,直到显示100.00.000为止;
思考
为什么选择蒸馏水作为参比样品?
  1. 将待测样品放入槽位,可得吸光度值。

数据处理

  • Python代码:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env python
# -*-coding:utf-8 -*-

import os
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
from scipy.interpolate import make_interp_spline
os.chdir(os.path.split(os.path.realpath(__file__))[0])

# Data points
x_R = np.array([0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0])
A = np.array([0, 0.102, 0.185, 0.267, 0.342, 0.398, 0.338, 0.256, 0.183, 0.109, 0])

# Smooth curve
x_R_smooth = np.linspace(x_R.min(), x_R.max(), 300)
spl = make_interp_spline(x_R, A, k=3)  # B-spline of order 3
A_smooth = spl(x_R_smooth)

# Identifying the peak and its coordinates from the smooth curve
peak_idx = np.argmax(A_smooth)
peak_x, peak_y = x_R_smooth[peak_idx], A_smooth[peak_idx]

# Linear regression on both sides of the peak - using original data points for regression
# Identifying nearest original data points around the peak for linear fitting
left_side_x = x_R[x_R < peak_x]
left_side_y = A[x_R < peak_x]

right_side_x = x_R[x_R > peak_x]
right_side_y = A[x_R > peak_x]

# Linear regression on both sides
slope_left, intercept_left, _, _, _ = stats.linregress(left_side_x, left_side_y)
slope_right, intercept_right, _, _, _ = stats.linregress(right_side_x, right_side_y)

# Calculating the intersection point using the left extension
A_1 = slope_left * peak_x + intercept_left

# Plotting the results
plt.figure()
plt.plot(x_R_smooth, A_smooth, '-', label='Smooth Data', color='tab:blue')
plt.plot(x_R, slope_left * x_R + intercept_left, '--', label='Left extension', color='tab:red')
plt.plot(x_R, slope_right * x_R + intercept_right, '--', label='Right extension', color='tab:green')
plt.plot(peak_x, peak_y, 'o', label='$b$', color='tab:purple')
plt.plot(peak_x, A_1, 'o', label='$a$', color='tab:orange')

# Adding labels, legend, and grid
plt.xlabel('$x_R$', fontname='Microsoft YaHei', fontsize=14)
plt.ylabel('$A$', fontname='Microsoft YaHei', fontsize=14, style='normal')
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.legend(fontsize=12)
plt.grid(True)

# Adding vertical and horizontal lines for points a and b with annotations
plt.axvline(x=peak_x, color='tab:purple', linestyle='--')
plt.axhline(y=peak_y, color='tab:purple', linestyle='--')
plt.axvline(x=peak_x, color='tab:orange', linestyle='--')
plt.axhline(y=A_1, color='tab:orange', linestyle='--')

# Annotations for x and y values at points a and b
plt.text(peak_x, -0.05, f'{peak_x:.2f}', ha='center', color='tab:purple')
plt.text(1.05, peak_y, f'A2={peak_y:.2f}', va='center', color='tab:purple')
plt.text(peak_x, -0.1, f'{peak_x:.2f}', ha='center', color='tab:orange')
plt.text(1.05, A_1, f'A1={A_1:.2f}', va='center', color='tab:orange')

# Equation display
eq_left = f'y = {slope_left:.2f}x + {intercept_left:.2f}'
eq_right = f'y = {slope_right:.2f}x + {intercept_right:.2f}'
plt.text(0.5, 0.45, eq_left, ha='center', color='tab:red')
plt.text(0.5, 0.40, eq_right, ha='center', color='tab:green')

# Final touches and save figure
plt.tight_layout()
plt.savefig("result.jpg", dpi=300)
plt.show()
  • 图:

./实验7.jpg

实验14 环己烷-水-乙醇三组分等温相图的绘制

实验知识点

  • 三组分系统的相律为f = C + 2 - P = 5 - P。若温度和压力均恒定,f* = 3 - P,最大自由度为2。

  • 环己烷和水完全不互溶,而乙醇和环己烷及乙醇和水完全互溶。

  • 当系统总组成点在溶解度曲线内与外时,相数有什么变化?(曲线内相数为2,曲线外相数为1。)

  • 思考题3

数据处理

  • Python代码:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env python
# -*-coding:utf-8 -*-

import os
import numpy as np
import matplotlib.pyplot as plt
import mpltern
os.chdir(os.path.split(os.path.realpath(__file__))[0])
plt.rcParams['font.sans-serif'] = ['Microsoft Yahei']

# Data points for the ternary plot
data_points = np.array([
    [0.4028, 0.0259, 0.5714],
    [0.3181, 0.0695, 0.6124],
    [0.2557, 0.0887, 0.6556],
    [0.2169, 0.1170, 0.6660],
    [0.1666, 0.1541, 0.6794],
    [0.1386, 0.1906, 0.6708],
    [0.1053, 0.2461, 0.6486],
    [0.0770, 0.3117, 0.6112],
    [0.0531, 0.3684, 0.5785],
    [0.0385, 0.3966, 0.5649]
])

# Creating subplot with ternary projection
ax = plt.subplot(projection="ternary")
# Plotting the data points and the fitted curve
ax.scatter(data_points[:, 2], data_points[:, 0], data_points[:, 1], color='tab:blue', label='Data Points')
data_points_2 = np.vstack(([1, 0, 0], data_points, [0, 1, 0]))
ax.plot(data_points_2[:, 2], data_points_2[:, 0], data_points_2[:, 1], color='tab:orange', label='Parabola-like Curve')

# Total composition point O and E normalized to fraction
O = np.array([0.3033, 0.3895, 0.3072])
E = np.array([50.12, 49.88, 0]) / (50.12 + 49.88)
# Plotting points O and E
ax.scatter(*O, color='tab:green', label='O (Total composition)')
ax.scatter(*E, color='tab:purple', label='E')
# Annotating points E and O with their labels and coordinates
ax.text(O[2], O[0]+0.05, f'O {O}', horizontalalignment='left', verticalalignment='center', transform=ax.transAxes, color='tab:green')
ax.text(E[2]+0.45, E[0]+0.05, f'E {E}', horizontalalignment='right', verticalalignment='center', transform=ax.transAxes, color='tab:purple')
# ax.set_title('请同学们自行画出HG连接线!',color='tab:red')

# Label settings
ax.set_tlabel("C(乙醇)")
ax.set_llabel("A(环己烷)")
ax.set_rlabel("B(水)")
ax.grid(True)

# Finalizing and saving the figure
plt.tight_layout()
# plt.legend()
plt.savefig("result.jpg", dpi=300)
plt.show()
  • 图:

./实验14.jpg

实验17 氨基甲酸铵分解平衡常数的测定

实验知识点

  • 式(1)氨基甲酸铵分解方程式、式(2)、式(3)。
注意
Kp标准需要分压除以标准压(100 kPa)。
  • 本实验用静态法测定氨基甲酸铵的分解压力。

  • 画出样品管示意图(图1,a球标出氨基甲酸铵固体粉末,样品管b和c标出液体石蜡);简述实验步骤。

数据处理

  • Python代码:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env python
# -*-coding:utf-8 -*-

import os
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import linregress
os.chdir(os.path.split(os.path.realpath(__file__))[0])

# Temperature data (T/K)
T = np.array([293.53, 299.04, 303.98, 308.75, 313.47, 318.77])
# Y-axis data
y = np.array([-5.07, -4.93, -4.75, -4.52, -4.23, -4.05])

# Converting T to 1/T
inv_T = 1 / T

# Performing linear regression
slope, intercept, r_value, p_value, std_err = linregress(inv_T, y)

# Generating points for the regression line
inv_T_line = np.linspace(np.min(inv_T), np.max(inv_T), 500)
y_line = slope * inv_T_line + intercept

# Plotting the data and the linear fit
plt.figure(figsize=(8, 6))
plt.scatter(inv_T, y, color='tab:blue', label='Data points')
plt.plot(inv_T_line, y_line, color='tab:orange', label=f'Fit: y = {slope:.2f}x + {intercept:.2f}')

# Setting plot labels and title
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.xlabel('1/T (1/K)', fontsize=14)
plt.ylabel(r'${lnK^{\ominus}}$', fontsize=14)
plt.legend(fontsize=12)
plt.grid(True)
plt.tight_layout()
plt.savefig("result.jpg", dpi=300)
plt.show()
  • 图:

./实验17.jpg

实验36 溶液吸附法测定硅胶比表面

实验知识点

  • 比表面是1 g固体物质所具有的总表面积,是粉末多孔性物质的一个重要特征参数。

  • 本实验是利用亚甲基蓝染料水溶液吸附法测定微球硅胶比表面。

  • 亚甲基蓝在染料中的吸附为单分子层吸附,即符合朗格缪尔吸附等温式

  • 式(1)、式(2)。

  • 本实验测定方法在测定比表面较大的试样所得的结果较为满意。

  • 亚甲基蓝染料在可见光区有两个吸收峰:445 nm665 nm

  • 思考题2。

  • Python代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env python
# -*-coding:utf-8 -*-

import os
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import linregress
os.chdir(os.path.split(os.path.realpath(__file__))[0])

# Concentration data c (mg·L^-1)
c = np.array([5, 10, 15, 20, 25, 30])
# Absorbance data A
A = np.array([0.021, 0.034, 0.042, 0.054, 0.067, 0.086])

# Performing linear regression
slope, intercept, r_value, p_value, std_err = linregress(c, A)

# Generating points for the regression line
inv_T_line = np.linspace(np.min(c), np.max(c), 500)
y_line = slope * inv_T_line + intercept

# Plotting the data and the linear fit
plt.figure(figsize=(8, 6))
plt.scatter(c, A, color='tab:blue', label='Data points')
plt.plot(inv_T_line, y_line, color='tab:orange', label=f'Fit: y = {slope:.6f}x + {intercept:.6f}')

# Setting plot labels and title
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.xlabel('c(mg·L$^{-1}$)', fontsize=14)
plt.ylabel('A', fontsize=14)
plt.legend(fontsize=12)
plt.grid(True)
plt.tight_layout()
plt.savefig("result.jpg", dpi=300)
plt.show()
  • 图:

./实验36.jpg