我制作了一个程序,它从一系列矩阵中计算 R(反射率)的值......但我知道 n 个值(n3 是反射指数)中的一个只是被猜到了。现在我想使用定义的函数来遍历不同的 n3 值以找到最适合我的数据的 R(l)(它们存储在单独的文件中)。我尝试使用 optimization.curve_fit 但老实说我不知道在这种情况下如何正确使用它,因为对应于“y”的 R 是由 2 个循环生成的,而不是真正的函数......
from scipy import*
from scipy import linalg
import math
import cmath
from numpy import linalg
import numpy
import matplotlib.pyplot as plt
import scipy.optimize as optimization
infile=open('C:\Users\...\Data.txt', 'r')
n0=1.
n1=2.31
n2=2.
n3=1.8
d1=20*10**(-9)
d2=20*10**(-9)
lmin=700*10**(-9)
lmax=2200*10**(-9)
dl=1*10**(-9)
l=lmin
Theta=0
D0=matrix([[math.cos(math.radians(Theta)), math.cos(math.radians(Theta))],[n0, -n0]], dtype=complex)
D1=matrix([[math.cos(math.radians(Theta)), math.cos(math.radians(Theta))],[n1, -n1]], dtype=complex)
D2=matrix([[math.cos(math.radians(Theta)), math.cos(math.radians(Theta))],[n2, -n2]], dtype=complex)
Fi1= 0+0j
Fi2= 0+0j
P1=matrix([[1, 0], [0, 1]], dtype=complex)
P2=matrix([[1, 0], [0, 1]], dtype=complex)
M=matrix([[1,0],[0,1]], dtype=complex)
R=0+0j
r=0+0j
#File reading
x,y = numpy.loadtxt('C:\Users\...\Data.txt',dtype=float).transpose()
DL = []
Res = []
#Funcion
def R(l):
l=lmin
D3=matrix([[math.cos(math.radians(Theta)), math.cos(math.radians(Theta))],[n3, -n3]], dtype=complex)
while l<lmax:
Fi1= 2.* pi * n1 *d1 * math.cos(math.radians(Theta))/l
Fi2= 2.* pi * n2 *d2 * math.cos(math.radians(Theta))/l
f1 = math.e**(1j*Fi1)
f2 = math.e**(1j*Fi2)
P1 = matrix([[1/f1, 0], [0, f1]])
P2 = matrix([[1/f2, 0], [0, f2]])
T=matrix([[1,0],[0,1]], dtype=complex)
for i in range(0,9):
T=D1*P1*(D1)**(-1)*D2*P2*(D2)**(-1)*T
M=D0**(-1)*T*D3
r=M[1,0]/M[0,0]
R=abs(M[1,0]/M[0,0])**2
Res.append(R)
DL.append(l)
l=l+dl
return R
#print optimization.curve_fit(R(l), x, y)
R(l)
plt.plot(x,y)
plt.plot(DL,Res)
plt.show()