我正在研究一篇文章,其中有两个函数:
$e(x) = (e_0/8)\cdot(2x^3 + x)\sqrt{(1 + x^2)}−\sinh^{−1}(x)$
$p(x) = (e_0/24)\cdot(2x^3 - 3x)\sqrt{(1 + x^2)} + 3\sinh^{−1}(x)$
本文要求我从这两个表达式开始,以数值形式查找$e(p)$。这篇文章建议我使用“根查找例程”,但我不知道如何实现代码。有人能帮帮我吗?我可能需要一种更通用的数值算法。(我正在用Python编写)。我尝试使用pynverse库,但它不够准确。
发布于 2021-09-16 15:22:54
我用下面的代码解决了我的问题(它使用了对分根查找):
import numpy as np
def bisection(func,a,b,N):
if func(a)*func(b) >= 0:
# No solutions.
return None
a_n = a
b_n = b
for n in range(1,N+1):
m_n = (a_n + b_n)/2
f_m_n = func(m_n)
if func(a_n)*f_m_n < 0:
a_n = a_n
b_n = m_n
elif func(b_n)*f_m_n < 0:
a_n = m_n
b_n = b_n
elif f_m_n == 0:
# Found exact solution.
return m_n
else:
print("No solutions with bisection. Return 'None'.")
return None
return (a_n + b_n)/2
def eden (pressure):
e = lambda x : (1/8)*((2*x**3 + x)*(1 + x**2)**(1/2) - np.arcsinh(x))
p = lambda x : (2/24)*((2*x**3 - 3*x)*(1 + x**2)**(1/2) + 3*np.arcsinh(x)) - pressure
x_p = bisection(p, -1e3, 1e3, 1000)
return e(x_p)https://stackoverflow.com/questions/69193451
复制相似问题