首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中使用fsolve

在Python中使用fsolve
EN

Stack Overflow用户
提问于 2019-11-01 17:07:42
回答 1查看 412关注 0票数 0

我想使用fsolve找出函数z(q)的两个值,其中我知道q (q_1000)的值。

我的代码:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fsolve

k_b   = 1.38064852e-23 
n_0   = 2e+25          
m     = 4.8e-26        
g     = 9.81           
T     = 300            
I_inf = 400            
sigma = 4e-22          
kappa = 0.2            

H     = (k_b*T)/(m*g) 

val   = 100
z_min = 1e+5
z_max = 4e+5
z     = np.linspace(z_min, z_max, val)

# ______________________________ Functions ___________________________________________

n = lambda z : n_0*np.exp(-z/H)                
I = lambda z : I_inf*(np.exp(-(sigma*n(z)*H))) 
q = lambda z : kappa*sigma*n(z)*I(z)           

q_max   = q(z).argmax()    # q_max
q_1000  = q(z)[q_max]/1000 # q_max / 1000
result1 = fsolve(q,q_1000) # start at z = q_1000

plt.xscale('log')
plt.yscale('log')
plt.title('z(q)')
plt.axis([1e-11, 1e-1, 1e+5, 4e+5])
plt.plot(q(z)[q_max], z[q_max],'x', label="z*=q_max", color="red")
plt.plot (q(z),z,'k-')
plt.plot(result1,q_1000,'ro')
plt.legend()
plt.xlabel('q')
plt.ylabel('z')
plt.show()

print(q(z)[q_max])
print(q_1000)
print(result1)

这就是我的结果

这就是我想要的,有两个点(假设是Z1和Z2)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-01 09:15:47

fsolve的第一个参数应该是为其寻找根q(z) = 0的函数。因此,应该将q(z) = q_1000编写为q(z) - q_1000fsolve的第二个参数是所需根的近似值。我不确定如何获得一个好的初始值,但在这种情况下,曲线图建议1.5e5和2.5-e5。

在代码中,包括绘图:

代码语言:javascript
复制
z1 = fsolve(lambda z: q(z) - q_1000,1.5e5)[0]
z2 = fsolve(lambda z: q(z) - q_1000,2.5e5)[0]

plt.plot((q_1000, q_1000), (z1, z2), linestyle='dashed', color='dodgerblue', label='z*=q_1000')
plt.plot(q_1000, z1,'ro')
plt.plot(q_1000, z2,'ro')

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

https://stackoverflow.com/questions/58656612

复制
相关文章

相似问题

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