【问题标题】:Dirac Delta function with Python使用 Python 的狄拉克 Delta 函数
【发布时间】:2021-08-12 02:18:22
【问题描述】:

我试图在 Python 2.7 代码中绘制狄拉克三角函数,这样:

enter image description here

from __future__ import division

import numpy as np
import matplotlib.pyplot as plt

def ddf(x,sig):
    if -(1/(2*sig))<=x and x<=(1/(2*sig)):
        val=sig
    else:
        val=0
    return val

X=np.linspace(-5,5,1000)

for sig in np.arange(1,5,0.1):
    plt.cla()
    plt.grid()
    plt.title('Dirac Delta function',size=20)
    plt.xlabel('X values',size=10)
    plt.ylabel("Dirac Delta functions' values",size=10)
    plt.ylim(0,1)
    plt.plot(X,ddf(X,sig),color='black')
    plt.pause(0.5)

plt.show()

但是当我运行代码时,它给出了错误:

Traceback (most recent call last):
  File "c:/Users/Shubhadeep/Desktop/dff.py", line 22, in <module>
    plt.plot(X,ddf(X,sig),color='black')
  File "c:/Users/Shubhadeep/Desktop/dff.py", line 7, in ddf
    if -(1/(2*sig))<=x and x<=(1/(2*sig)):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

谁能解决这个问题?

【问题讨论】:

  • @khelwood 你能解决这个问题吗?
  • 您是否阅读了错误信息并尝试了它的建议?
  • 把两个条件(大于一个值和小于一个值)当作0和1,然后使用乘法来利用元素乘法:return (-(1/(2*sig))&lt;=x) * (x&lt;=(1/(2*sig))) * sig

标签: python python-2.7 numpy


【解决方案1】:

问题出在函数中,您将列表x 与浮点数sig 进行比较。一种解决方案是稍微修改函数,使其逐一计算 x 中的值,然后将计算结果附加到函数返回的新列表中:

def ddf(x,sig):

   val = []  
   for i in x:
       if -(1/(2*sig))<=i and i<=(1/(2*sig)):
           val.append(sig)
       else:
           val.append(0)
   return val

【讨论】:

    【解决方案2】:

    由于错误状态,您不能将单个数字与数组进行比较。这是一个解决方案:

    def ddf(x,sig):
        val = np.zeros_like(x)
        val[(-(1/(2*sig))<=x) & (x<=(1/(2*sig)))] = 1
        return val
    

    输出样本:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多