簡體   English   中英

Python scipy.fsolve范圍定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM