Python scipy.fsolve范围定义

2024-09-30 00:39:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用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()

Tags: fromimportnppltk1scipysqrtbeta

热门问题