如何使用 python 求解现实生活中的差分方程
How to solve real life difference equations using python
我想用 python 求解差分方程。
y = x(n - 1) - (0.5(x(n-2) + x(n))
x
这是一长串值。我想使用 Plotly 相对于另一个时间序列数组 t
绘制 y
。我可以用 t
绘制 x
,但我无法生成过滤后的信号 y
。我试过下面的代码,但似乎遗漏了一些东西。我没有得到想要的输出。
from scipy import signal
from plotly.offline import plot, iplot
x = array(...)
t = array(...) # x and t are big arrays
b = [-0.5, 1, -0.5]
a = 0
y = signal.lfilter(b, a, x, axis=-1, zi=None)
iplot([{"x": t, "y": y}])
然而,输出是这样的。
>>>y
>>> array([-inf, ..., nan])
因此,我得到一个空白图表。
更新 x 和 t 的示例(每个 9 个值):
x = [3.1137561664814495,
-1.4589810840917137,
-0.12631870857936914,
-1.2695030212226599,
2.7600637824592158,
-1.7810937909691049,
0.050527483431747656,
0.27158522344564368,
0.48001109260160274]
t = [0.0035589523041146265,
0.011991765409288035,
0.020505576424579175,
0.028935389041247817,
0.037447199517441021,
0.045880011487565042,
0.054462819797731044,
0.062835632533346342,
0.071347441874490158]
看来您的问题是定义 a = 0
。当 运行 您的示例时,您会从 SciPy
收到以下警告:
/usr/local/lib/python2.7/site-packages/scipy/signal/signaltools.py:1353: RuntimeWarning:
divide by zero encountered in true_divide
[-inf inf nan nan nan inf -inf nan nan]
此除以零由值 a
定义。如果您查看 scipy.signal.lfilter
的文档,它会指出以下内容:
a : array_like
The denominator coefficient vector in a 1-D sequence. If a[0] is not 1, then both a and b are normalized by a[0].
如果将 a = 0
更改为 a = 1
,您应该会得到想要的输出,尽管考虑到您可能希望通过不同的因素应用数据规范化。
我想用 python 求解差分方程。
y = x(n - 1) - (0.5(x(n-2) + x(n))
x
这是一长串值。我想使用 Plotly 相对于另一个时间序列数组 t
绘制 y
。我可以用 t
绘制 x
,但我无法生成过滤后的信号 y
。我试过下面的代码,但似乎遗漏了一些东西。我没有得到想要的输出。
from scipy import signal
from plotly.offline import plot, iplot
x = array(...)
t = array(...) # x and t are big arrays
b = [-0.5, 1, -0.5]
a = 0
y = signal.lfilter(b, a, x, axis=-1, zi=None)
iplot([{"x": t, "y": y}])
然而,输出是这样的。
>>>y
>>> array([-inf, ..., nan])
因此,我得到一个空白图表。
更新 x 和 t 的示例(每个 9 个值):
x = [3.1137561664814495,
-1.4589810840917137,
-0.12631870857936914,
-1.2695030212226599,
2.7600637824592158,
-1.7810937909691049,
0.050527483431747656,
0.27158522344564368,
0.48001109260160274]
t = [0.0035589523041146265,
0.011991765409288035,
0.020505576424579175,
0.028935389041247817,
0.037447199517441021,
0.045880011487565042,
0.054462819797731044,
0.062835632533346342,
0.071347441874490158]
看来您的问题是定义 a = 0
。当 运行 您的示例时,您会从 SciPy
收到以下警告:
/usr/local/lib/python2.7/site-packages/scipy/signal/signaltools.py:1353: RuntimeWarning:
divide by zero encountered in true_divide
[-inf inf nan nan nan inf -inf nan nan]
此除以零由值 a
定义。如果您查看 scipy.signal.lfilter
的文档,它会指出以下内容:
a : array_like The denominator coefficient vector in a 1-D sequence. If a[0] is not 1, then both a and b are normalized by a[0].
如果将 a = 0
更改为 a = 1
,您应该会得到想要的输出,尽管考虑到您可能希望通过不同的因素应用数据规范化。