当前位置: 首页 > 程序语言 >scipy.integrate.quad 积分错误原因?

scipy.integrate.quad 积分错误原因?

作者 swuli
来源: 小木虫 200 4 举报帖子
+关注

有以下积分,n2和n3的值非常接近,但积分结果却大相径庭。
n2=22144  积分结果=0.4256854383924181
n3=22145 积分结果=11774635265351.027

用matlab算,后面是准确的。是什么原因导致n2所出现的错误?


from math import sqrt, log, exp
import numpy as np
from scipy.integrate import quad

def integrand(x, r1, r2):
    a = r1 + r2
    b = r1 * r2
    R = a * x / 2
    R1 = R ** 2 - a ** 2
    R2 = R ** 2 - (r1 - r2) ** 2
    vdw = -7e-21 * (2 * b / R1 + 2 * b / R2 + log(R1 / R2))
    edl = 7.8e-12 * b / a * log(1 + exp(-328774227 * (R - a)))
    force = vdw + edl
    return exp(force / 4.11447e-21) / x ** 2

n1 = 5010
n2 = 22144
n3 = 22145
radius1 = 1.05 * 10 ** -8 * n1 ** (1 / 1.8)
radius2 = 1.05 * 10 ** -8 * n2 ** (1 / 1.8)
radius3 = 1.05 * 10 ** -8 * n3 ** (1 / 1.8)
w2 = quad(integrand, 2, np.inf, args=(radius1, radius2))
w3 = quad(integrand, 2, np.inf, args=(radius1, radius3))
print('w2=', w2[0])
print('w3=', w3[0]) 返回小木虫查看更多

今日热帖
  • 精华评论
  • bcsnow

    没有错误啊:w2= 11772040939067.406  w3= 11774635265351.027

  • swuli

    引用回帖:
    3楼: Originally posted by bcsnow at 2021-05-22 10:36:12
    没有错误啊:w2= 11772040939067.406  w3= 11774635265351.027

    我这里得到的结果却是w2= 0.4256854383924181;w3= 11774635265351.027。奇怪了。
    和版本有关吗?我的python 3.6.6 scipy 1.6.0。您有没有做什么别的处理呢?

  • bcsnow

    引用回帖:
    4楼: Originally posted by swuli at 2021-05-23 08:48:12
    我这里得到的结果却是w2= 0.4256854383924181;w3= 11774635265351.027。奇怪了。
    和版本有关吗?我的python 3.6.6 scipy 1.6.0。您有没有做什么别的处理呢?...

    没有处理,直接拷贝运行的,我的是3.7.7和1.5.2,按说版本间不应该有这么严重错误。你把n2 n3的值调换一下,看看结果如何

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓