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

如何对NiO反射/吸收光谱应用Kramers-Kronig变换及提取折射率?

从NiO的TEY吸收光谱与反射光谱提取折射率实部和虚部的方法咨询

我有Ni元素M边的总电子产额(TEY)模式下的NiO实验吸收光谱,同时还有NiO反射光谱,目标是提取随能量变化的折射率实部与虚部。

已尝试的Python方法

我尝试通过以下步骤推导拟合函数来匹配反射/吸收光谱的峰:

  • 用Lorentz振子函数建模介电函数的实部与虚部
  • 利用介电函数的实部和虚部推导折射率的实部与虚部函数
  • 利用折射率的虚部推导吸收系数形式
  • 采用多振子叠加形式并引入不同缩放因子来拟合吸收光谱的峰,拟合参数为缩放因子和洛伦兹模型参数

实现代码

import numpy as np

energy_scale = np.arange(0, 100, 0.001)

def real_comp2(w, w_p, w_0, nu):
    vp = 8.854187817e-12
    return vp + (vp * w_p**2 * (-w**2 + w_0**2)) / ((w**2 - w_0**2)**2 + w**2 * nu**2)

def imag_comp2(w, w_p, w_0, nu):
    vp = 8.854187817e-12
    return -(vp * w_p**2 * w * nu / ((w**2 - w_0**2)**2 + w**2 * nu**2))

def real_refr(w, w_p, w_0, nu):
    return 0.707 * np.sqrt(real_comp2(w, w_p, w_0, nu) + np.sqrt((real_comp2(w, w_p, w_0, nu))**2 + (imag_comp2(w, w_p, w_0, nu))**2))

def imag_refr(w, w_p, w_0, nu):
    return 0.707 * np.sqrt(-real_comp2(w, w_p, w_0, nu) + np.sqrt((real_comp2(w, w_p, w_0, nu))**2 + (imag_comp2(w, w_p, w_0, nu))**2))

def reflectivity2(w, w_p, w_0, nu):
    return ((real_refr(w, w_p, w_0, nu)-1)**2 + imag_refr(w, w_p, w_0, nu)**2) / ((real_refr(w, w_p, w_0, nu)+1)**2 + imag_refr(w, w_p, w_0, nu)**2)

def reflectivity2_norm(w, w_p, w_0, nu, A, c):
    return c + -A*(reflectivity2(w, w_p, w_0, nu) - reflectivity2(w, w_p, w_0, nu).min())/(reflectivity2(w, w_p, w_0, nu).max() - reflectivity2(w, w_p, w_0, nu).min())

def absorption_coeff(w, w_p, w_0, nu):
    return 4 * np.pi * 0.08 * 1e7 * w_0 * imag_refr(w, w_p, w_0, nu)

def absorption_coeff_norm(w, w_p, w_0, nu, A):
    return A*(absorption_coeff(w, w_p, w_0, nu) - absorption_coeff(w, w_p, w_0, nu).min())/(absorption_coeff(w, w_p, w_0, nu).max() - absorption_coeff(w, w_p, w_0, nu).min())

def abs_superposition(w, w_p1, w_01, nu1, A1, w_p2, w_02, nu2, A2, w_p3, w_03, nu3, A3, c):
    return c + absorption_coeff_norm(w, w_p1, w_01, nu1, A1) + absorption_coeff_norm(w, w_p2, w_02, nu2, A2) + absorption_coeff_norm(w, w_p3, w_03, nu3, A3)

def reflectivity_superposition(w, w_p1, w_01, nu1,  w_p2, w_02, nu2,  w_p3, w_03, nu3):
    return reflectivity2(w, w_p1, w_01, nu1) + reflectivity2(w, w_p2, w_02, nu2) + reflectivity2(w, w_p3, w_03, nu3)

存在的问题

尽管代码存在维度问题,但核心逻辑有明显缺陷:无法仅凭经验选择拟合峰的数量与位置并随意叠加模型函数,还需要考虑背景扣除和掠入射实验几何条件的影响。

请求帮助

请问有没有更合理的方法?有没有考虑上述所有因素的源码或程序?我已经下载了Larch,但不知道如何用它完成这项操作,恳请提供帮助,如需补充更多信息请告知。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:05:28