You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制交叉拟合线以确定超导体的临界温度Tc

超导样品临界温度Tc的交叉拟合线绘制方案

我正在测定超导样品的临界温度,现有电阻率随温度变化的测量数据,需要绘制两条交叉拟合线来确定Tc:

  • 一条拟合Tc上方的正常态电阻率段(电阻率随温度呈稳定变化的区域)
  • 另一条拟合电阻率降至零的转变温度区间
    两条线的交叉点即为临界温度Tc,参考示例为:两条直线分别贴合正常态高阻区与转变区数据,交叉点对应Tc值。

现有代码

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 读取数据,跳过前31行
file = pd.read_excel('s400.xlsx', skiprows=31)
# 提取温度(x轴)和电阻率(y轴)数据
x = np.array(file['Temperature (K)'])
y = np.array(file['Bridge 3 Resistivity (Ohm-m)'])

# 绘制原始散点图
plt.figure(figsize=(20,10))
plt.scatter(x, y, marker=".")
plt.title("Resistivity vs Temperature")

# 需要添加两条交叉拟合线以确定Tc

plt.show()

实现步骤与完整代码

1. 筛选拟合数据段

根据电阻率曲线特征,手动选择两个拟合区间:

  • 正常态区间:选择温度较高、电阻率无明显下降的稳定段(示例中假设温度大于80K)
  • 转变区间:选择电阻率开始快速下降到接近零的区间(示例中假设温度在50-70K之间)

2. 线性拟合与交点计算

使用numpy.polyfit进行一阶线性拟合,联立两个拟合方程求解交叉点Tc:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 读取数据
file = pd.read_excel('s400.xlsx', skiprows=31)
x = np.array(file['Temperature (K)'])
y = np.array(file['Bridge 3 Resistivity (Ohm-m)'])

# --------------------------
# 1. 筛选拟合区间(根据你的数据调整阈值)
# --------------------------
# 正常态拟合区间:温度>80K(示例值,需根据实际曲线调整)
mask_normal = x > 80
x_normal = x[mask_normal]
y_normal = y[mask_normal]

# 转变区拟合区间:温度在50-70K之间(示例值,需根据实际曲线调整)
mask_transition = (x > 50) & (x < 70)
x_trans = x[mask_transition]
y_trans = y[mask_transition]

# --------------------------
# 2. 线性拟合
# --------------------------
# 正常态拟合线:y = a1*x + b1
a1, b1 = np.polyfit(x_normal, y_normal, 1)
# 生成拟合线的x/y数据(扩展范围以确保交叉点可见)
x_fit_normal = np.linspace(min(x), max(x), 100)
y_fit_normal = a1 * x_fit_normal + b1

# 转变区拟合线:y = a2*x + b2
a2, b2 = np.polyfit(x_trans, y_trans, 1)
x_fit_trans = np.linspace(min(x), max(x), 100)
y_fit_trans = a2 * x_fit_trans + b2

# --------------------------
# 3. 计算交叉点Tc
# --------------------------
# 联立方程:a1*Tc + b1 = a2*Tc + b2 → Tc = (b2 - b1)/(a1 - a2)
Tc = (b2 - b1)/(a1 - a2)
# 交叉点的y值
Tc_y = a1 * Tc + b1

# --------------------------
# 4. 绘图
# --------------------------
plt.figure(figsize=(20,10))
plt.scatter(x, y, marker=".", label="Raw Data")
# 绘制两条拟合线
plt.plot(x_fit_normal, y_fit_normal, 'r--', label=f'Normal State Fit: y={a1:.4f}x+{b1:.4f}')
plt.plot(x_fit_trans, y_fit_trans, 'g--', label=f'Transition Fit: y={a2:.4f}x+{b2:.4f}')
# 标记交叉点Tc
plt.scatter(Tc, Tc_y, s=200, c='blue', marker='*', label=f'Critical Temperature Tc = {Tc:.2f} K')

plt.title("Resistivity vs Temperature with Tc Fit")
plt.xlabel("Temperature (K)")
plt.ylabel("Resistivity (Ohm-m)")
plt.legend()
plt.grid(True)
plt.show()

注意事项

  • 需根据实际电阻率曲线调整mask_normal和mask_transition中的温度阈值,确保拟合区间符合正常态和转变区的特征
  • 如果转变区不是线性的,可尝试用更高阶多项式拟合,但超导临界温度通常采用线性交叉法定义

内容的提问来源于stack exchange,提问作者Benjamin Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:02:09