我想用scipy fsolve数值求解一个方程。只有当变量bsk
在某个范围内(介于n1和n2之间)时,才定义该方程,我想限制nsk
的范围以正确求解它。
可能吗
这是我的代码,用于计算纳米纤维的HE11模式
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from scipy.special import jv,kn,jvp,kvp,j0,j1,k0,k1;
from scipy.optimize import fsolve
import numpy as np
from numpy.lib import scimath as SM
import matplotlib.pyplot as plt
knp=kvp;
kv=kn
def getBeta(a=125,n1=1.4,n2=1,lamb_nm=500,bskg=1.2):
lamb_m=float(lamb_nm*1);
k=2*np.pi/lamb_m
def func2(bsk):
nu=1
k0=k
X=a*np.sqrt(k**2*(n1**2-bsk**2))
Y=a*np.sqrt((bsk**2-n2**2)*k**2)
V=np.sqrt(X**2+Y**2)
result= (
-(n1**2+n2**2)/(2*n1**2) *kvp(1,Y)/(Y*k1(Y))
+1/X**2
-np.sqrt( ((n1**2-n2**2)/(2*n1**2) *kvp(1,Y)/(Y*k1(Y)))**2
+bsk**2/n1**2*(1/X**2 + 1/Y**2)*2
)
-j0(X)/(X*j1(X))
)
return result
beta=fsolve(func2,bskg)
return beta
plt.figure()
plt.title("beta")
x=np.arange(100,1000);
bskg=1.000;
y=np.array([],dtype=float)
for i in x:
beta=getBeta(lamb_nm=500,a=i,bskg=bskg)
radius=1
y=np.append(y,beta)
bskg=beta
plt.plot(x,y)
plt.show()
不是和弗索尔夫。 对于单变量根查找,使用
brentq
相关问题 更多 >
编程相关推荐