gpt4 book ai didi

python - Python 中是否有多个积分器提供可变积分限制(如 scipy)和高精度(如 mpmath)?

转载 作者:行者123 更新时间:2023-12-04 09:06:04 24 4
gpt4 key购买 nike

我可以使用 scipy quad 和 nquad 进行涉及可变积分限制的四重积分。问题是当无法达到要求的容差时,使用的默认精度会引发错误。使用 mpmath 积分器,我可以通过设置 mp.dps = 任意来定义任意精度,但是我看不到限制是否以及如何像 nquad 一样变得可变。 Mpmath 还在 quadgl 中使用 Gauss-Legendre 方法提供了非常快速的执行,这是非常可取的,因为我的函数是平滑的,但是使用 scipy 完成四个积分需要大量时间。请帮忙。
下面只是一个没有达到我的目标的简单函数:

from datetime import datetime
import scipy
from scipy.special import jn, jn_zeros
import numpy as np
import matplotlib.pyplot as plt
from mpmath import *
from mpmath import mp
from numpy import *
from scipy.optimize import *

# Set the precision
mp.dps = 15#; mp.pretty = True

# Setup shortcuts, so we can just write exp() instead of mp.exp(), etc.
F = mp.mpf
exp = mp.exp
sin = mp.sin
cos = mp.cos
asin = mp.asin
acos = mp.acos
sqrt = mp.sqrt
pi = mp.pi
tan = mp.tan

start = datetime.now()
print(start)

#optionsy={'limit':100, 'epsabs':1.49e-1, 'epsrel':1.49e-01}
#optionsx={'limit':100, 'epsabs':1.49e-1, 'epsrel':1.49e-01}

def f(x,y,z):
return 2*sqrt(1-x**2) + y**2.0 + z

def rangex(y,z):
return [-1,1]

def rangey(z):
return [1,2]

def rangez():
return [2,3]


def result():
return quadgl(f, rangex, rangey, rangez)

"""
#The below works:

def result():
return quadgl(f, [-1,1], [1,2], [2,3])
"""

print(result())

end = datetime.now()
print(end-start)

最佳答案

好的,让我回答一些问题,很难在评论中添加代码
MP 数学的简单优化是遵循简单的规则:

  • y2.0 非常昂贵(log、exp、...),替换为 y*y
  • y2 仍然很贵,替换为 y*y
  • 乘法比求和要贵很多,用 (x+y)*y
  • 替换 x*y + y**2.0
  • 除法比乘法更昂贵,用 0.25*y 替换 y/4

  • 代码,Win 10 x64,Python 3.8
    def f3():
    def f2(x):
    def f1(x,y):
    def f(x,y,z):
    return 1.0 + (x+y)*y + 3.0*z
    return mpmath.quadgl(f, [-1.0, 1], [1.2*x, 1.0], [0.25*y, x*x])
    return mpmath.quadgl(f1, [-1, 1.0], [1.2*x, 1.0])
    return mpmath.quadgl(f2, [-1.0, 1.0])
    在我的电脑上从 12.9 秒变为 10.6 秒,大约 20% 的折扣

    关于python - Python 中是否有多个积分器提供可变积分限制(如 scipy)和高精度(如 mpmath)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63443828/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com