【问题标题】:Plotting 2D integral function in python在python中绘制二维积分函数
【发布时间】:2015-08-02 05:53:54
【问题描述】:

这是我进入NumPy 世界的第一步。 事实上,目标是在 2-D 函数下方绘制为 3-D 网格:

N = \frac{n}{2\sigma\sqrt{\pi}}\exp^{-\frac{n^{2}x^{2}}{4\sigma^{2}}}

这可以在Matlab 中作为小菜一碟完成,下面是sn-p:

[x,n] = meshgrid(0:0.1:20, 1:1:100);

mu = 0;
sigma = sqrt(2)./n;

f = normcdf(x,mu,sigma);
mesh(x,n,f);

但血腥的结果太丑陋了,足以驱使我尝试Python 功能来生成科学图。

我搜索了一些东西,发现在Pyhton中达到上述标记的主要步骤可能是通过下面的sn-p获得的:

from matplotlib.patches import Polygon
import numpy as np
from scipy.integrate import quad
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

sigma = 1

def integrand(x,n):
    return (n/(2*sigma*np.sqrt(np.pi)))*np.exp(-(n**2*x**2)/(4*sigma**2))

t = np.linespace(0, 20, 0.01)
n = np.linespace(1, 100, 1)

lower_bound = -100000000000000000000 #-inf
upper_bound = t

tt, nn = np.meshgrid(t,n)

real_integral = quad(integrand(tt,nn), lower_bound, upper_bound)

Axes3D.plot_trisurf(real_integral, tt,nn)

编辑:由于对 Greg 建议的更多调查给予了应有的关注,以上代码是最新的 sn-p。

这是生成的异常:

RuntimeError: infinity comparisons don't work for you

这似乎是指quad 调用...

你能帮我解决这个积分绘图问题吗?!...

最好的

【问题讨论】:

  • 有一个 matplotlib 绘图包,它有点等同于 matplot。它有关于如何绘制数据的简单示例。谷歌搜索并绘制自己。如果您尝试使用任何其他软件包进行绘图,也可以发布。
  • @Versatile:谢谢你提到这一点,但正如我所说,我已经检查了样本,但大多数都是简单的案例,而不是二维积分函数......

标签: python numpy matplotlib plot


【解决方案1】:

只需几个提示即可让您找到正确的方向。 numpy.meshgrid 可以做与 MatLABs 函数相同的事情: http://docs.scipy.org/doc/numpy/reference/generated/numpy.meshgrid.html

当你有 x 和 n 时,你可以像在 matlab 中一样做数学:

sigma = numpy.sqrt(2)/n

(在 python 中,乘法/除法是默认索引 - 不需要点)

scipy 有很多更高级的功能,例如How to calculate cumulative normal distribution in Python 的一维案例。

对于绘图,您可以使用 matplotlibs pcolormesh:

import matplotlib.pyplot as plt
plt.pcolormesh(x,n,real_integral)

希望这会有所帮助,直到有人可以为您提供更详细的答案。

【讨论】:

  • 不客气 - 我只是添加了更多信息来帮助您进行绘图。
  • 使用pcolormesh的好建议...但实际上当前的问题就在绘图之前,即在积分计算中,正如我在问题中所说明的...
  • 一个完全不同的方向,但如果你试图绘制累积正态分布,使用误差函数 scipy.special.erf 不是更容易吗?或者,如果您想使用数值积分,numpy.cumsum 可能与您相关。
猜你喜欢
  • 2021-02-11
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
相关资源
最近更新 更多