【问题标题】:How to integrate using scipy with an array as part of the function如何将 scipy 与数组集成为函数的一部分
【发布时间】:2020-05-18 16:33:57
【问题描述】:

我想在 scipy 中使用积分命令,并有一个函数可以乘以数组中的每个元素一次。

import math 
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate
from scipy.integrate import quad, romberg
import scipy.special as special
from numpy import sqrt

yes = np.array([0,1])

def integrate(x,yes):
    return x+yes

result = quad(integrate,0,1,args=(yes))

print(result)

当我这样做时,我得到了错误 只有 size-1 的数组可以转换为 Python 标量

但如果我这样做

import math 
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate
from scipy.integrate import quad, romberg
import scipy.special as special
from numpy import sqrt

yes = np.array([0])

def integrate(x,yes):
    return x+yes

result = quad(integrate,0,1,args=(yes))

print(result)

它给了我这个 (0.5, 5.551115123125783e-15) 这正是我想要的,但我想要数组中的每个元素。

有没有办法写一个 for 循环? 我也听说过 scipy.integrate.quad_vec,但那不起作用。提前谢谢你

【问题讨论】:

  • args 应该得到一个元组。 (yes) 不是元组,它只是 yesargs=(yes,) 是将变量 yes 传递给您的函数的正确方法。也就是说,quad 只能整合一个值;你的函数需要返回一个标量。
  • 我如何让我的函数返回一个标量?

标签: python arrays numpy scipy numerical-integration


【解决方案1】:

您可以使用quadpy,它是完全矢量化的。只要确保你的函数f,如果给定一个特定长度/形状的输入x,返回一个形状为range_shape + x.shape的对象。结果将是 range_shape 的形状。

import numpy as np
from quadpy import quad


def f(x):
    return np.add.outer(np.array([0, 1]), x)


val, err = quad(f, 0, 1)
print(val)
[0.5 1.5]

【讨论】:

    猜你喜欢
    • 2014-07-20
    • 2015-07-02
    • 2020-03-01
    • 1970-01-01
    • 2012-08-11
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多