我正在尝试用Python中的纸张(黑方方程式)实现方程 -
到目前为止,我有一个简化的模型,但我无法生成预期的输出(图片下方);我怀疑问题出在np.exp()虽然我不确定 - 有关如何做到这一点的任何建议吗?
import numpy as np
import math
import matplotlib.pyplot as plt
f = 1e6
T = 1/f
Omega = 2*np.pi*f
i = np.arange(0,50e-6,100e-9)
y = np.sin(Omega*i) * (i**2) * np.exp(-i)
plt.figure(1)
plt.plot(i,y,'b-')
plt.grid()
plt.show()
答案 0 :(得分:2)
我建议使用与论文中完全相同的变量名称,这样可以使事情变得更加清晰。对于时间,请始终使用t
或time
,没有任何借口。变量i
通常用于索引或复数。您还缺少变量m
(您硬编码为2),v_0
和h
。我想你需要将h
设置为正确的值才能解决问题。在这类问题中,h
通常是衰减时间,通过在公式中将其遗忘,您隐式地将其视为1秒。鉴于您的问题频率很高,这应该更短。查看示例图,您应该将其设置为T
几次。
答案 1 :(得分:2)
为了说明雅各布的评论,这是你可以通过调整常数得到的:
代码:
import numpy as np
import matplotlib.pyplot as plt
f = 5
Omega = 2*np.pi*f
i = np.arange(0, 10, 0.001)
y = np.sin(Omega*i) * (i**2) * np.exp(-i)
plt.figure(1)
plt.plot(i,y,'b-')
plt.grid()
plt.show()
或者,你可以保持时间尺度并引入约5e-6的 h ,正如Bas Swinckels在他的回答中建议的那样:
f = 1e6
Omega = 2*np.pi*f
i = np.arange(0,50e-6,100e-9)
y = np.sin(Omega*i) * (i**2) * np.exp(-i/5e-6)
这会产生非常相似的输出。
答案 2 :(得分:0)
另外,我认为你犯的一个主要错误就是你正在y
对i
进行策划 - 恕我直言应该是y
vs。 1/i
图。
这一点,结合@BasSwinckels的评论,当你开始摆弄参数时,你应该更接近目标情节。
干杯!一切顺利!