2017-12-17 3 views
1

私はSellmeier方程式でサファイアの屈折率を計算しようとしています。私は方程式を定義しましたが、今はナノメートル単位で波長を入力する方法を理解できません。下記のコードを参照してください...sellmeier方程式でサファイアの屈折率を計算する

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.] 
+0

可視光線の波長は通常nmで与えられますが、私はあなたがこの条約に固執していることをあなたの定義から理解しています(可視範囲にほとんどありませんが)。このSellmeier方程式は決して聞こえませんでしたが、[Wikipediaは](https://en.wikipedia.org/wiki/Sellmeier_equation)係数がμm単位の波長に対して与えられると述べています。 'lam/= 1000 'の波長をμmに変換する必要があります。最初にBK7値で計算し、結果をWikipediaの図と比較します。 – MrT

+0

@Piintheskyご意見ありがとうございます。私はあなたが600-2000 nmのBK7値を計算するように示唆したように、それは働いた。私はユニットが私の頭を越えて行ったと思う。 – kevin

答えて

1

使用している係数はマイクロメートルに基づいているように見えるため、ラムダにもマイクロメートルを使用する必要があります。ちょうど

Lab=np.linspace(0.3,0.4,20) 

あなたが300umから400nm、つまり0.3um〜0.4umのように見えるので、これを使用します。

また、係数を使用する単位に変換することもできます。

また、係数の角括弧は不要です。

+0

これを提案するならば、ステップサイズも調整する必要があります。 – MrT

+0

'np.linspace'はステップサイズではなく、ステップ数を使います(' np.arange'と違って)。 –

+0

@ Ben Schmidtご返信ありがとうございます。出来た – kevin

関連する問題