首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用python计算定积分并得到一个数值?

如何用python计算定积分并得到一个数值?
EN

Stack Overflow用户
提问于 2020-06-04 14:17:23
回答 2查看 751关注 0票数 1

我用python做了一个有点复杂的积分,我需要得到一个数值,例如2003708.58843。现在,我的python程序给出了一些非常奇怪的结果,其中包含了一些“超级”函数等等。如果有人能在这方面帮助我,我将非常感激。

目前的方案如下:

代码语言:javascript
复制
import sympy as sp

x = sp.symbols('x') 
f1 = 5000 + ((-(-7000+x)*(-3000+x))**(1/2))
f2 = 5000 - ((-(-7000+x)*(-3000+x))**(1/2))
minimum1 = 3000
maximum1 = (500/3)*(35-2*((61)**(1/2)))
int1 = sp.integrate(f1, (x,minimum1,maximum1))
int2 = sp.integrate(f2, (x,minimum1,maximum1))
minimum2 = (500/3)*(35-2*((61)**(1/2)))
maximum2 = 4500
f3 = 5000 + (1/2)*((-(-4500+x)*(-500+x))**(1/2))
f4 = 5000 - (1/2)*((-(-4500+x)*(-500+x))**(1/2))
int3 = sp.integrate(f3, (x,minimum2,maximum2))
int4 = sp.integrate(f4, (x,minimum2,maximum2))
I1 = int1-int2
I2 = int3-int4
total = I1 + I2
print(total)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-04 14:19:36

试试这个:

代码语言:javascript
复制
from scipy.integrate import quad

def integrand(x):
    return x**2

ans, err = quad(integrand, 0, 1)
print ans

只需将integrand函数更改为任何您想要的,并将1, 0更改到您所希望的集成的极限。

这里获取的代码。

票数 1
EN

Stack Overflow用户

发布于 2020-06-04 15:09:34

当使用交感时,您应该小心使用浮点数,例如1/2,而使用精确的理性主义,例如Rational(1, 2)。改变我得到的:

代码语言:javascript
复制
In [2]: import sympy as sp

In [3]: x = sp.symbols('x')
   ...: f1 = 5000 + ((-(-7000+x)*(-3000+x))**(Rational(1, 2))) 
   ...: f2 = 5000 - ((-(-7000+x)*(-3000+x))**(Rational(1, 2))) 
   ...: minimum1 = 3000 
   ...: maximum1 = (Rational(500, 3))*(35-2*((61)**(Rational(1, 2)))) 
   ...: int1 = sp.integrate(f1, (x,minimum1,maximum1))

In [4]: int1
Out[4]: 
                            _________________                      5/2                          3/2               ⎛        _________________⎞           
                           ╱ 8500   1000⋅√61      ⎛8500   1000⋅√61⎞            ⎛8500   1000⋅√61⎞                  ⎜       ╱ 8500   1000⋅√61 ⎟           
                4000000⋅  ╱  ──── - ────────      ⎜──── - ────────⎟       3000⋅⎜──── - ────────⎟                  ⎜√10⋅  ╱  ──── - ──────── ⎟           
  5000000⋅√61           ╲╱    3        3          ⎝ 3        3    ⎠            ⎝ 3        3    ⎠                  ⎜    ╲╱    3        3     ⎟   42500000
- ─────────── - ───────────────────────────── - ─────────────────────── + ───────────────────────── + 4000000⋅asin⎜─────────────────────────⎟ + ────────
       3                _________________             _________________         _________________                 ⎝           200           ⎠      3    
                       ╱ 3500   1000⋅√61             ╱ 3500   1000⋅√61         ╱ 3500   1000⋅√61                                                        
                      ╱  ──── + ────────        2⋅  ╱  ──── + ────────        ╱  ──── + ────────                                                        
                    ╲╱    3        3              ╲╱    3        3          ╲╱    3        3                                                            

如果要计算浮点到15位小数位的结果,则可以:

代码语言:javascript
复制
In [5]: int1.evalf()
Out[5]: 1294014.90427420

要使用数值求积直接计算近似数值结果(类似于抓取鱿鱼的答案),您可以这样做。

代码语言:javascript
复制
In [6]: sp.Integral(f1, (x, minimum1, maximum1)).evalf()
Out[6]: 1294014.90427420
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62196928

复制
相关文章

相似问题

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