以下是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
电话......
请你帮我处理这个整合绘图问题吗?!...
最佳
答案 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)
希望这会有所帮助,直到有人能给你更详细的答案。