Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用sellmeier方程计算蓝宝石的折射率_Python_Numpy - Fatal编程技术网

Python 用sellmeier方程计算蓝宝石的折射率

Python 用sellmeier方程计算蓝宝石的折射率,python,numpy,Python,Numpy,我试图用塞尔迈耶方程计算蓝宝石的折射率。我定义了这个方程,但现在我不知道如何输入波长,以纳米为单位。请参阅下面的代码 import numpy as np import matplotlib.pyplot as plt def nsell( lam ): B1=1.023798 B2=1.058264 B3=5.280792 C1=0.0614482 C2=0.110700 C3=17.92656 lam=lam*10**-9 nsq = 1 + [B1] * lam**2 / (l

我试图用塞尔迈耶方程计算蓝宝石的折射率。我定义了这个方程,但现在我不知道如何输入波长,以纳米为单位。请参阅下面的代码

import numpy as np
import matplotlib.pyplot as plt

def nsell( lam ):

B1=1.023798
B2=1.058264
B3=5.280792
C1=0.0614482
C2=0.110700
C3=17.92656

lam=lam*10**-9

nsq = 1   + [B1] * lam**2 / (lam **2 - [C1])
nsq = nsq + [B2] * lam**2 / (lam **2 - [C2])
nsq = nsq + [B3] * lam**2 / (lam **2 - [C3])

return nsq**0.5


Lab=np.linspace(300,400,20)
test=nsell(Lab)
print(test)
我得到了奇怪的结果,或者我只是不明白

runfile('C:/Users/Kevin/Documents/Python Scripts/ligei.py', wdir='C:/Users/Kevin/Documents/Python Scripts')
[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.
  1.  1.]

您使用的系数似乎是基于微米的,因此您也必须使用微米来表示lambda。只用

Lab=np.linspace(0.3,0.4,20)
因为看起来你想要300纳米到400纳米,也就是0.3微米到0.4微米

或者,可以将系数转换为要使用的单位


此外,系数周围的方括号是不必要的。

可见光的波长通常以nm为单位,我从您对
Lab
的定义中了解到,您坚持这一约定(尽管它几乎不在可见范围内)。从未听说过这个Sellmeier方程,但给出了波长的系数,单位为µm。您应该将
lam/=1000
的波长转换为µm。我会先用BK7值进行计算,然后将计算结果与维基百科图表中的结果进行比较。@Piinthesky感谢您的评论。我按照你的建议计算了600-2000纳米的BK7值,结果成功了。我想我的单位超过了我的头。如果你建议这样做,那么你也必须调整步长。
np.linspace
使用步长,而不是步长(不像
np.arange
)。