首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用python求解含积分方程

用python求解含积分方程
EN

Stack Overflow用户
提问于 2021-12-15 17:45:53
回答 1查看 81关注 0票数 0

我目前正试图解x的下列方程:

3.17e-2 -从x到215的(10.^(8.64/x) / (480.1 - 10.^(4.32/x))^2)dx =0。

(很抱歉用这么粗糙的方式写了这个方程式,我不知道怎么在这里插入胶乳)

到目前为止,我已经想出了这个:

代码语言:javascript
运行
复制
import scipy as s
from scipy.integrate import odeint,quad
import numpy as np

def f(x):
    fpe = 40
    k = 1.26e4*fpe**2/4.2e4
    return 10.**(8.64/x) / (k - 10.**(4.32/x))**2

def intf(x):
    for i in x:
        if 3.17e-2 - quad(lambda i:f(i),i,215) == 0.:
            print(i)



xi = np.linspace(0.01, 5, 1000)
intf(xi)

但是,我仍然得到以下错误: OverflowError:(34,“结果太大”)

正如你所想象的,这不是我所期望的结果。您认为这仅仅是因为结果太大,还是代码有问题?

EN

回答 1

Stack Overflow用户

发布于 2021-12-20 09:28:24

您必须更改的一件事是,quad返回一个元组(y, abserr),积分的结果是quad(...)[0]

另外,如果您比较f(x) == 0,您将只检测到确切的解,这对于这个函数在浮点计算中是不可能的。您可以使用abs(f(x)) < ytol,也可以简单地使用零查找方法。我建议你使用fsolve

另一件事是,你有这个函数的导数,所以你也可以把它传递给这个函数,把你所有的函数组合在一起。

代码语言:javascript
运行
复制
import numpy as np
from scipy.integrate import quad
from scipy.optimize import fsolve
def fprime(x):
    fpe = 40
    k = 1.26e4*fpe**2/4.2e4
    return 10.**(8.64/x) / (k - 10.**(4.32/x))**2
def f(x):
    try:
        return np.array([f(i) for i in x])
    except TypeError:
        return 3.17e-2 - quad(lambda i:fprime(i),x,215)[0]

from scipy.optimize import fsolve
x0 = fsolve(f, 1, fprime=fprime)

这给出了x0=2.03740802f(x0) = 2.35922393e-16

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

https://stackoverflow.com/questions/70368130

复制
相关文章

相似问题

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