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

基于各运动态声子数确定的曲线拟合Python开发需求

多占据概率参数曲线拟合与热布居分析实现方案

任务目标

  1. 基于指定的余弦衰减拟合模型,对至少20个不同的占据概率参数完成曲线拟合
  2. 利用拟合得到的Pₙ热布居分布,计算平均声子数或振动量子数

单参数拟合参考代码(以P₀为例)

import numpy as np
import pandas as pd
from lmfit import Minimizer, Parameters, report_fit

# 读取对应数据集
df = pd.read_csv('Fock0_1st BSB.csv')

# 数据预处理:提取x轴与观测数据并转换格式
x = np.asarray([i[0] for i in df["Untitled"].to_numpy()])
data = np.asarray([i[0] for i in df["Untitled 1"].to_numpy()])

# 单位转换与数据归一化
x = x / 1000
data = abs(data - 100) / 100

n = 0  # 对应基态测量的量子数n=0

def fit_function(params, x, data):
    v = params.valuesdict()
    # 拟合模型:余弦衰减叠加线性衰减项
    model = 0.5 * (1 + v['P0'] * np.cos(np.sqrt(n+1)*v['omega0']*v['eta']*x + v['phase']) 
                   * np.exp(-v['gamma'] * ((n+1)**0.7) * x)) - v['decay'] * x
    return model - data

# 初始化拟合参数,设置初始值、范围与是否可变
params = Parameters()
params.add('P0', value=0.97, min=0.01, max=0.999)
params.add('omega0', value=0.1967, min=0.156, max=0.23, vary=True)
params.add('eta', value=0.0629, min=0.01, max=0.11, vary=True)
params.add('gamma', value=5.6E-4)
params.add('phase', value=0.143)
params.add('decay', value=0.1E-6)

# 执行最小化拟合
minner = Minimizer(fit_function, params, fcn_args=(x, data))
result = minner.minimize()

# 获取拟合后的数据
final_data = data + result.residual

# 输出拟合结果报告
report_fit(result)

# 绘制拟合曲线与原始数据(可选)
try:
    import matplotlib.pyplot as plt
    plt.plot(x, data, '+', label='原始数据')
    plt.plot(x, final_data, label='拟合曲线')
    plt.legend()
    plt.show()
except ImportError:
    pass

扩展到多参数拟合的建议

  • 批量处理逻辑:将上述单参数拟合代码封装为可复用函数,传入量子数n对应的数据文件名(如Fock{n}_1st BSB.csv),遍历n从0到19(共20个参数)完成批量拟合
  • 参数共享策略:对于omega0、eta、gamma等全局参数,可设置为跨数据集共享的固定值或微调值,提升拟合一致性
  • 结果存储:将每个n对应的Pₙ拟合值存储到字典或DataFrame中,便于后续热布居分析

热布居分布计算平均声子数

拟合得到所有Pₙ后,基于热布居分布公式:
[ P_n = \frac{e^{-(n+\frac{1}{2})\beta\hbar\omega}}{Z} ]
其中( Z = \sum_{n=0}^{\infty} e^{-(n+\frac{1}{2})\beta\hbar\omega} = \frac{1}{2\sinh(\frac{\beta\hbar\omega}{2})} )为配分函数,( \beta = 1/(k_B T) )

通过最小二乘法拟合Pₙ与n的关系,求解得到( \beta\hbar\omega ),进而计算平均声子数:
[ \bar{n} = \frac{1}{e^{\beta\hbar\omega} - 1} ]

内容的提问来源于stack exchange,提问作者Kratveer Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:55:16