社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何在Python中绘制这个边界无穷的积分函数?

Majid • 4 年前 • 918 次点击  

我在画Marcum函数,它是高斯函数在边界上的积分。

这是函数:

<a href="https://www.codecogs.com/eqnedit.php?latex=Q(y)=\int_{y}^{\infty}\frac{1}{2\pi}\exp(-\frac{x^2}{2})~dx" target="_blank"><img src="https://latex.codecogs.com/gif.latex?Q(y)=\int_{y}^{\infty}\frac{1}{2\pi}\exp(-\frac{x^2}{2})~dx" title="Q(y)=\int_{y}^{\infty}\frac{1}{2\pi}\exp(-\frac{x^2}{2})~dx" /></a>

y是用户必须输入的浮点值。我编写了代码来计算这个函数的期望值。不过,我要画的是这样的:

! https://ibb.co/SRMsfY3

下面是计算Q(y)值的代码:

from scipy.integrate import quad
import scipy, numpy, math
from scipy import integrate


def integrand(x):
   Q_y = (1/(math.sqrt(2*math.pi)))*math.exp((-x**2)/2)
   return Q_y


y = input('y=')
ans, err = quad(integrand, float(y), math.inf)
print(ans)

我试着用下面的代码绘制它:

x_data=np.arange(-20,20,0.1)    
z_data=np.arange(float(y),1000,1)

    ans, err = quad(integrand, float(y), math.inf)
    print(ans)

    for item in x_data:
        z_data[i]=integrand(x_data[i])[0]
        i+=1

    fig = plt.figure(1, figsize=(4,4))
    plt.plot(x_data,z_data,color= 'blue',linestyle='--', label=label1)

返回以下错误:

 File "C:/Users/m.rafiee/.spyder-py3/temp.py", line 59, in <module>
    z_data[i]=integrand(x_data[i])[0]

IndexError: index 400 is out of bounds for axis 0 with size 400

我也不知道如何在绘图中添加如图所示的注释和散列区域。

我非常感谢你事先的帮助。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50934
 
918 次点击  
文章 [ 1 ]  |  最新文章 4 年前
PythonNoob
Reply   •   1 楼
PythonNoob    4 年前

将函数和绘图矢量化:

from scipy.integrate import quad
import scipy as sc, numpy as np, math
from scipy import integrate
import matplotlib.pyplot as plt

def integrand(x):
   Q_y = (1/(math.sqrt(2*math.pi)))*math.exp((-x**2)/2)
   return Q_y

func = np.vectorize(integrand)

x = np.arange(-3, 3, 0.1)

fig = plt.figure()
ax = plt.gca()

y = input('y=')

y = float(y)

result = integrand(y)

x_user = np.arange(y, 3, 0.1)

ax.axvline(y, color='green', lw=2, alpha=0.5)

ax.fill_between(x_user, func(x_user), facecolor="none", hatch="/", edgecolor="red")

ax.annotate('Q({0})={1}'.format(y, round(result, 2)), xy=(0, result), xytext=(0, result))

ax.plot(x, func(x))

enter image description here