Python - 使用 scipy.integrate.quad 绘制等高线图时出错

Python - error in drawing contour plot using scipy.integrate.quad

我正在尝试在 Python 中绘制等高线图,使用的代码比下面的稍微复杂一些。但是,同样的问题出现在以下简单示例中:

import numpy as np
from scipy import integrate
import matplotlib.pyplot as plt

def A(x):
    return integrate.quad(lambda i: x-i, 0, x)

n = 100
x = np.linspace(0, 10, n)
y = np.linspace(0, 10, n)

X, Y = np.meshgrid(x, y)
M = A(X) + Y  # THE ERROR ARISES HERE

plt.contour(X, Y, M)
plt.show()

以下错误消息显示在上面指示的行中:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我想使用 integrate.quad().

谁能帮帮我? 提前致谢。

正如@WarrenWeckesser 在评论中正确指出的那样,这两个问题是

  • quad returns 一个元组,你只需要这里的第一个成员。
  • 您要计算的积分是标量,因此您不能将二维数组传递给它。

解决办法:

  • 索引quad的return:quad( ..., )[0]只取出第一项
  • vectorizeA 的调用,这样它就会与数组 X 的所有标量一起被一一调用。请注意,这不是很有效,但对于此处显示的 100x100 元素数组应该没问题。

一个完整的解决方案看起来像

import numpy as np
from scipy import integrate
import matplotlib.pyplot as plt

def A(x):
    return integrate.quad(lambda i: x-i, 0, x)[0]

n = 100
x = np.linspace(0, 10, n)
y = np.linspace(0, 10, n)

X, Y = np.meshgrid(x, y)
M = np.vectorize(A)(X) + Y

plt.contour(X, Y, M)
plt.show()