在python中绘制2D积分函数

时间:2015-05-20 19:37:57

标签: python numpy matplotlib plot

以下是NumPy世界中的第一步。 事实上,目标是将2-D函数绘制为3-D网格:

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

这可以作为Matlab中的一块蛋糕在下面的片段中完成:

[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中点击上面标记的主要步骤可能会被以下代码段获取:

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的建议进行适当关注的同时,上面的代码是最新的代码段。

以下是生成的异常:

RuntimeError: infinity comparisons don't work for you

它似乎是指quad电话......

请你帮我处理这个整合绘图问题吗?!...

最佳

1 个答案:

答案 0 :(得分:0)

只需几个提示即可让您朝着正确的方向前进。 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以获取1D案例。

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

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

希望这会有所帮助,直到有人能给你更详细的答案。