首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从f(x)和g(x)求f(g)

从f(x)和g(x)求f(g)
EN

Stack Overflow用户
提问于 2021-09-15 12:47:57
回答 1查看 31关注 0票数 0

我正在研究一篇文章,其中有两个函数:

$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库,但它不够准确。

EN

回答 1

Stack Overflow用户

发布于 2021-09-16 15:22:54

我用下面的代码解决了我的问题(它使用了对分根查找):

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69193451

复制
相关文章

相似问题

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