📜  在 MATLAB 中求解二阶齐次差分方程(1)

📅  最后修改于: 2023-12-03 15:37:24.436000             🧑  作者: Mango

在 MATLAB 中求解二阶齐次差分方程

介绍

齐次差分方程是指形如 $y_{n + 2} + a_1 y_{n + 1} + a_0 y_n = 0$ 的差分方程,其中 $a_0, a_1$ 是常数,$y_n, y_{n + 1}, y_{n + 2}$ 为未知函数在 $n, n +1, n + 2$ 时刻的取值。求解齐次差分方程的意义在于,存在一些特殊的解,使得凡是是它们的线性组合都是这个差分方程的解。这个在微积分中也是非常类似的一个结论。

在 MATLAB 中,我们可以通过一些内置函数来求解齐次差分方程,并且可以进行图像分析。这篇文章将会介绍 MATLAB 中求解二阶齐次差分方程的方法,包括使用 diff 函数计算差分,使用 poly 函数计算特征方程,以及使用 dsolve 函数求解齐次差分方程的通解。另外,文章还会对如何绘制图像进行简要介绍。

计算差分

首先,我们需要计算差分,用 diff 函数即可。

y = [1 3 -1 2 0 1];
dy = diff(y);

这样我们就得到了向量 $\left[ 2, -4, 3, -2, 1 \right]$,这个向量中的每一项都是 $y_n - y_{n - 1}$。这是因为 diff 函数默认求解的是一阶差分,所以需要将方程变形为 $y_{n + 1} - y_n = -a_1 y_n - a_0 y_{n - 1}$。

计算特征方程

接下来,我们需要计算这个差分方程的特征方程。根据差分方程的定义,我们将 $y_n, y_{n + 1}, y_{n + 2}$ 用 $u^{n}, u^{n+1}, u^{n+2}$ 来表示,$y_n$ 和 $y_{n+1}$ 可以表示为 $u^n$ 和 $u^{n+1}$ 的线性组合。因此,我们可以将 $u^{n+2} + a_1 u^{n+1} + a_0 u^n = 0$ 表示为 $u^2 + a_1 u + a_0 = 0$,这个方程就是特征方程。我们使用 poly 函数来计算特征方程:

a0 = 1;
a1 = -2;
poly([1, a1, a0])

这里,我们假设差分方程的形式是 $y_{n + 2} - 2 y_{n+1} + y_n = 0$。

结果是 1 -2 1,这个向量中的每一项表示特征方程的系数,依次是 $1, -2, 1$。

求解齐次差分方程

最后,我们可以使用 dsolve 函数求解齐次差分方程的通解,这样我们就可以得到所有可能的解了。具体的,我们将二阶差分表示为一阶方程组,然后使用 dsolve 函数解得通解。这个通解是含有两个常数的式子,因为 $y_n$ 和 $y_{n+1}$ 可以是任意常数的线性组合。

syms y(n)
a0 = 1;
a1 = -2;
eqn = y(n+2) + a1*y(n+1) + a0*y(n) == 0;
ySol(n) = dsolve(eqn);
ySol

ySol 将会得到形如 $C_1 2^{n/2} + C_2 (-1)^n$ 的通解。这个通解有两个常数,$C_1$ 和 $C_2$,可以通过求解初始值来解出。

图像分析

最后,我们可以通过绘制 $y_n$ 的图像来分析它的行为。可以使用以下代码绘制出图像:

n = 0:10;
plot(n, ySol(n), 'o-');

这里,我们假设 $C_1 = 0$,$C_2 = 1$。这样,我们就可以得到一个递减的指数函数的图像。

# 代码片段

计算差分

```matlab
y = [1 3 -1 2 0 1];
dy = diff(y);

计算特征方程

a0 = 1;
a1 = -2;
poly([1, a1, a0])

求解齐次差分方程

syms y(n)
a0 = 1;
a1 = -2;
eqn = y(n+2) + a1*y(n+1) + a0*y(n) == 0;
ySol(n) = dsolve(eqn);
ySol

绘制图像

n = 0:10;
plot(n, ySol(n), 'o-');