[英]Python scipy.fsolve range definition
我想用 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()
不使用 fsolve。 對於單變量求根,請使用brentq
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.