首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python scipy.fsolve范围定义

Python scipy.fsolve范围定义
EN

Stack Overflow用户
提问于 2020-06-29 19:43:41
回答 1查看 118关注 0票数 0

我想用scipy fsolve数值求解一个方程。只有当变量bsk在某个范围内(在n1和n2之间)时,才会定义方程,我想限制nsk的范围,以便正确地解决它。有可能吗?

这是我的代码,用于计算纳米纤维的HE11模式。

代码语言:javascript
复制
#!/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()
EN

回答 1

Stack Overflow用户

发布于 2020-06-30 12:52:39

不是用fsolve。对于单变量根查找,请使用brentq

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62637363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档