繁体   English   中英

如何在python中制作衰减振荡函数?

[英]How do I make a decaying oscilating function in python?

我在python中有一个代码来表示阻尼振荡器的能量衰减,它的内容如下:

def E(wt, Q):
    return (np.e**(-x/Q))*(1-(1/2*Q)*np.sin(2*x))
x = np.linspace(0,20,1000)
y0 = E(x,2)
y1 = E(x,4)
y2 = E(x,8)
y3 = E(x,16)
plt.plot(x, y0, 'p', label=r'$Q=2$')
plt.plot(x, y1, 'r', label=r'$Q=4$')
plt.plot(x, y2, 'g', label=r'$Q=8$')
plt.plot(x, y3, 'b', label=r'$Q=16$')
plt.xlabel(r'$wt$')
plt.ylabel(r'$E$')
plt.title (r"$E(t)  -vs.- wt$")
plt.show()

但它看起来应该像这样: https : //www.dropbox.com/s/o2mmmi8v6kdnn2v/good_graph.png ?dl=0我在做什么错? 我有正确的功能

固定式

def E(wt, Q):
    return np.exp(-x/float(Q)) * ( 1. - (1./2./float(Q))*np.sin(2.* x) )

你原来的方程式

def E(wt, Q):
    return (np.e**(-x/Q))*(1-(1/2*Q)*np.sin(2*x))

失误

  1. 未使用的变量您永远不会使用wt
  2. BODMAS您没有正确设置衰减参数,因此它会振荡得太多。 (1/2*Q)当你的意思是(1/2/Q)
  3. 整数除法 (仅适用于Python <3)。您可以将整数除以整数。 您需要将整数值转换为浮点数,例如(1/2./float(Q))
  4. 颜色参数您想通过在plt.plot(x, y0, 'p', label=r'$Q=2$')传递pplt.plot(x, y0, 'p', label=r'$Q=2$')一条紫色线,但是p创建了奇怪的点图行为。 要在颜色名称中明确解决此问题,例如plt.plot(x, y0, color='purple', label=r'$Q=2$')

编辑版式-参见下文

无关

为了使标题更好:

from matplotlib import rc
rc('font', **{'family': 'serif', 'serif': ['Computer Modern']})
rc('text', usetex=True)
plt.title (r"$E(t)$ vs. $w_t$")
plt.xlabel(r'$w_t$')
plt.ylabel(r'$E(t)$')

完整代码

from matplotlib import rc
import bumpy as np
import matplotlib.pyplot as plot

# set up fonts
rc('font', **{'family': 'serif', 'serif': ['Computer Modern']})
rc('text', usetex=True)

# set up labels
plt.title (r"$E(t)$ vs. $w_t$")
plt.xlabel(r'$w_t$')
plt.ylabel(r'$E(t)$')

# plot and store plots in yList, zip color labels into loop
yList = []
for i,color in zip(xrange(1,5),['purple', 'r', 'g', 'b']):
    y = E(x, 2**i)
    yList.append(y)
    plt.plot(x, y, color = color, label= r'$Q=%s$' % i)
pt.show()

该功能似乎不太正确。 我怀疑原始公式是正确的,但是您没有在Python中正确编码它。

import numpy as np
import pylab as plt
def E(x, Q):
    return np.exp(-x/Q) * (1-(1.0/2.0/Q) * np.sin(2*x))
def main():
    x = np.linspace(0,20,1000)
    y0 = E(x,2)
    y1 = E(x,4)
    y2 = E(x,8)
    y3 = E(x,16)
    plt.plot(x, y0, 'p', label=r'$Q=2$')
    plt.plot(x, y1, 'r', label=r'$Q=4$')
    plt.plot(x, y2, 'g', label=r'$Q=8$')
    plt.plot(x, y3, 'b', label=r'$Q=16$')
    plt.xlabel(r'$wt$')
    plt.ylabel(r'$E$')
    plt.title (r"$E(t)  -vs.- wt$")
    plt.show()    
    return 0
if __name__ == '__main__':
    main()*

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM