差分方程的解法分析及MATLAB实现(程序)

差分方程的解法分析及MATLAB 实现(程序)

摘自:张登奇, 彭仕玉. 差分方程的解法分析及其MATLAB 实现[J]. 湖南理工学院学报.2014(03) 引言

线性常系数差分方程是描述线性时不变离散时间系统的数学模型, 求解差分方程是分析离散时间系统的重要内容. 在《信号与系统》课程中介绍的求解方法主要有迭代法、时域经典法、双零法和变换域

[1]法.

1 迭代法

y (n -1) +y (n -2) =x (n ) +x (n -1) , 激励信号为例1 已知离散系统的差分方程为y (n ) -x (n ) =() n u (n ) , 初始状态为y (-1) =4,y (-2) =12. 求系统响应. , y (1) =. 根据激励信号和初始状态, 手工依次迭代可算出y (0) =利用MATLAB 中的filter 函数实现迭代过程的m 程序如下:

clc;clear;format compact;

a=[1,-3/4,1/8],b=[1,1/3,0], %输入差分方程系数向量, 不足补0对齐

n=0:10;xn=(3/4).^n, %输入激励信号

zx=[0,0],zy=[4,12], %输入初始状态

zi=filtic(b,a,zy,zx),%计算等效初始条件

[yn,zf]=filter(b,a,xn,zi),%迭代计算输出和后段等效初始条件

2 时域经典法

用时域经典法求解差分方程:先求齐次解;再将激励信号代入方程右端化简得自由项, 根据自由项形

[3]式求特解;然后根据边界条件求完全解. 用时域经典法求解例1的基本步骤如下.

2α+=0, 可算出α1=, α2=. 高阶特征根可用MATLAB 的roots (1)求齐次解. 特征方程为α-) n +C 2() n , n ≥0 . 函数计算. 齐次解为y h (n ) =C 1() n u (n ) 代入差分方程右端得自由项为 (2)求方程的特解. 将x (n ) =( n =0⎧⎪1, n n -1() u (n ) +⋅() u (n -1) =⎨n ⋅() , n ≥1⎪⎩3n 当n ≥1时, 特解可设为y p (n ) =D () , 代入差分方程求得D =. 4

(3)利用边界条件求完全解. 当n =0时迭代求出y (0) =, 当n ≥1时, 完全解的形式为y (n ) =C 1() n +C 2() n +⋅() n , 选择求完全解系数的边界条件可参考文[4]选y (0), y (-1) . 根据边界δ(n ) 及其延, C =条件求得C 1=-2. 注意完全解的表达式只适于特解成立的n 取值范围, 其他点要用

迟表示, 如果其值符合表达式则可合并处理. 差分方程的完全解为

y (n ) =δ(n ) +[-⋅() n +⋅() n +⋅() n ]u (n -1) =[-⋅() n +⋅() n +⋅() n ]u (n ) MATLAB 没有专用的差分方程求解函数, 但可调用maple 符号运算工具箱中的rsolve 函数实现[5], 格式为y=maple('rsolve({equs, inis},y(n))'),其中:equs为差分方程表达式, inis为边界条件,y(n)为差分方程中的输出函数式.rsolve 的其他格式可通过mhelp rsolve命令了解. 在MATLAB 中用时域经典法求解例1中的全响应和单位样值响应的程序如下.

clc;clear;format compact;

yn=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=(3/4)^n+1/3*(3/4)^(n-1),y(0)=5/2,y(-1)=4},y(n))'),

hn=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=0,y(0)=1,y(1)=13/12},y(n))'),

3 双零法

根据双零响应的定义, 按时域经典法的求解步骤可分别求出零输入响应和零状态响应. 理解了双零法的求解原理和步骤, 实际计算可调用rsolve 函数实现.

yzi=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=0,y(-1)=4, y(-2)=12},y(n))'),

yzs=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=(3/4)^n+1/3*(3/4)^(n-1),y(0)=1,

y(-1)=0},y(n))'),

4 变换域法

设差分方程的一般形式为∑a k y (n -k ) =∑b r x (n -r ) .

k =0r =0N M

对差分方程两边取单边z 变换, 并利用z 变换的位移公式得

∑k =0N a k z [Y (z ) +∑y (l ) z ]=∑b r z [X (z ) +-k -l -r l =-k r =0-1M m =-r ∑-1x (m ) z -m ]

整理成A (z ) Y (z ) +Y 0(z ) =B (z ) X (z ) +X 0(z ) 形式有

A (z ) =a 0+a 1z -1+ +a N z -N , B (z ) =b 0+b 1z -1+ +b M z -M .

Y 0(s ) =∑∑a k y (l ) z

k =1l =-k N -1-k -l M -1 , X 0(s ) =∑∑b r x (m ) z -r -m . r =1m =-r

可以看出, 由差分方程可直接写出A (z ) 和B (z ) , 系统函数H (z ) =B (z ) /A (z ) , 将系统函数进行逆z 变换可得单位样值响应. 由差分方程的初始状态可算出Y 0(z ) , 由激励信号的初始状态可算出X 0(z ) , 将激励信号进行z 变换可得X (z ) , 求解z 域代数方程可得输出信号的象函数 B (z ) X (z ) +X 0(z ) -Y 0(z ) Y (z ) =, A (z )

对输出象函数进行逆z 变换可得输出信号的原函数y (n ) . 利用z 变换求解差分方程各响应的步骤可归纳如下:

(1)根据差分方程直接写出A (z ) 、B (z ) 和H (z ) , H (z ) 的逆变换即为单位样值响应;

(2)根据激励信号算出X (z ) , 如激励不是因果序列则还要算出前M 个初始状态值;

(3)根据差分方程的初始状态y (-1), y (-2), ⋅⋅⋅, y (-N ) 和激励信号的初始状态x (-1), x (-2), ⋅⋅⋅, x (-M ) 算出Y 0(z ) 和X 0(z ) ;

(4)在z 域求解代数方程A (z ) Y (z ) +Y 0(z ) =B (z ) X (z ) +X 0(z ) 得输出象函数Y (z ) , Y (z ) 的逆变换即为全响应;

(5)分析响应象函数的极点来源及在z 平面中的位置, 确定自由响应与强迫响应, 或瞬态响应与稳态

响应;

(6)根据零输入响应和零状态响应的定义, 在z 域求解双零响应的象函数, 对双零响应的象函数进行逆z 变换, 得零输入响应和零状态响应.

用变换域法求解例1的基本过程如下. z -1+z -2, B (z ) =1+z -1. 系统函数的极点为, . 根据差分方程直接写出A (z ) =1-) 对激励信号进行z 变换得X (z ) =z /(z -. 激励象函数的极点为3/4. +z -1. 根据激励信号的初始状态算出X 0(z ) =0 . 根据差分方程的初始状态算出Y 0(z ) =-z 3-z 2+z ) /(z 3-z 2+z -) . 对z 域代数方程求解, 得全响应的象函数Y (z ) =(⋅() n +⋅() n +⋅() n ]u (n ) 进行逆z 变换得全响应为y (n ) =[-其中, 与系统函数的极点对应的是自由响应; 与激励象函数的极点对应的是强迫响应. Y (z ) 的极点都在z 平面的单位圆内故都是瞬态响应. 零输入响应和零状态响应可按定义参照求解.

上述求解过程可借助MATLAB 的符号运算编程实现. 实现变换域法求解差分方程的m 程序如下: clc;clear;format compact;

syms z n %定义符号对象

% 输入差分方程、初始状态和激励信号%

a=[1,-3/4,1/8],b=[1,1/3], %输入差分方程系数向量

y0=[4,12],x0=[0], %输入初始状态, 长度分别比a 、b 短1, 长度为0时用[]

xn=(3/4)^n, %输入激励信号, 自动单边处理,u(n)可用1^n表示

% 下面是变换域法求解差分方程的通用程序,极点为有理数时有解析式输出 %

N=length(a)-1;M=length(b)-1;%计算长度

Az=poly2sym(a,'z')/z^N;Bz=poly2sym(b,'z')/z^M;%计算A(z)和B(z)

Hz=Bz/Az;disp('系统函数H(z):'),sys=filt(b,a),%计算并显示系统函数

hn=iztrans(Hz);disp('单位样值响应h(n)='),pretty(hn),%计算并显示单位样值响应

Hzp=roots(a);disp('系统极点:');Hzp,%计算并显示系统极点

Xz=ztrans(xn);disp('激励象函数X(z)='),pretty(Xz),%激励信号的单边z 变换

Y0z=0;%初始化Y0(z),求Y0(z)注意系数标号与变量下标的关系

for k=1:N;

for l=-k:-1;Y0z = Y0z+a(k+1)*y0(-l)*z^(-k-l);end

end

disp('初始Y0(z)'),Y0z,%系统初始状态的z 变换

X0z=0;%初始化X0(z),求X0(z)注意系数标号与变量下标的关系

for r=1:M;

for m=-r:-1;X0z = X0z+b(r+1)*x0(-m)*z^(-r-m);end

end

disp('初始X0(z)'),X0z,%激励信号起始状态的z 变换

Yz=(Bz*Xz+X0z-Y0z)/Az;disp('全响应的z 变换Y(z)'),pretty(simple(Yz)),

yn=iztrans(Yz);disp('全响应y(n)='),pretty(yn),% 计算并显示全响应

Yziz=-Y0z/Az;disp('零输入象函数Yzi(z)='),pretty(Yziz),%零激励响应的z 变换

yzin=iztrans(Yziz);disp('零输入响应yzi(n)='),pretty(yzin),% 计算并显示零输入响应 Yzsz=(Bz*Xz+X0z)/Az;disp('零状态象函数Yzs(z)='),pretty(Yzsz),%零状态响应的z 变换

yzsn=iztrans(Yzsz);disp('零状态响应yzs(n)='),pretty(yzsn),% 计算并显示零状态响应 该程序的运行过程与手算过程对应, 显示在命令窗的运行结果与手算结果相同.

差分方程的解法分析及MATLAB 实现(程序)

摘自:张登奇, 彭仕玉. 差分方程的解法分析及其MATLAB 实现[J]. 湖南理工学院学报.2014(03) 引言

线性常系数差分方程是描述线性时不变离散时间系统的数学模型, 求解差分方程是分析离散时间系统的重要内容. 在《信号与系统》课程中介绍的求解方法主要有迭代法、时域经典法、双零法和变换域

[1]法.

1 迭代法

y (n -1) +y (n -2) =x (n ) +x (n -1) , 激励信号为例1 已知离散系统的差分方程为y (n ) -x (n ) =() n u (n ) , 初始状态为y (-1) =4,y (-2) =12. 求系统响应. , y (1) =. 根据激励信号和初始状态, 手工依次迭代可算出y (0) =利用MATLAB 中的filter 函数实现迭代过程的m 程序如下:

clc;clear;format compact;

a=[1,-3/4,1/8],b=[1,1/3,0], %输入差分方程系数向量, 不足补0对齐

n=0:10;xn=(3/4).^n, %输入激励信号

zx=[0,0],zy=[4,12], %输入初始状态

zi=filtic(b,a,zy,zx),%计算等效初始条件

[yn,zf]=filter(b,a,xn,zi),%迭代计算输出和后段等效初始条件

2 时域经典法

用时域经典法求解差分方程:先求齐次解;再将激励信号代入方程右端化简得自由项, 根据自由项形

[3]式求特解;然后根据边界条件求完全解. 用时域经典法求解例1的基本步骤如下.

2α+=0, 可算出α1=, α2=. 高阶特征根可用MATLAB 的roots (1)求齐次解. 特征方程为α-) n +C 2() n , n ≥0 . 函数计算. 齐次解为y h (n ) =C 1() n u (n ) 代入差分方程右端得自由项为 (2)求方程的特解. 将x (n ) =( n =0⎧⎪1, n n -1() u (n ) +⋅() u (n -1) =⎨n ⋅() , n ≥1⎪⎩3n 当n ≥1时, 特解可设为y p (n ) =D () , 代入差分方程求得D =. 4

(3)利用边界条件求完全解. 当n =0时迭代求出y (0) =, 当n ≥1时, 完全解的形式为y (n ) =C 1() n +C 2() n +⋅() n , 选择求完全解系数的边界条件可参考文[4]选y (0), y (-1) . 根据边界δ(n ) 及其延, C =条件求得C 1=-2. 注意完全解的表达式只适于特解成立的n 取值范围, 其他点要用

迟表示, 如果其值符合表达式则可合并处理. 差分方程的完全解为

y (n ) =δ(n ) +[-⋅() n +⋅() n +⋅() n ]u (n -1) =[-⋅() n +⋅() n +⋅() n ]u (n ) MATLAB 没有专用的差分方程求解函数, 但可调用maple 符号运算工具箱中的rsolve 函数实现[5], 格式为y=maple('rsolve({equs, inis},y(n))'),其中:equs为差分方程表达式, inis为边界条件,y(n)为差分方程中的输出函数式.rsolve 的其他格式可通过mhelp rsolve命令了解. 在MATLAB 中用时域经典法求解例1中的全响应和单位样值响应的程序如下.

clc;clear;format compact;

yn=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=(3/4)^n+1/3*(3/4)^(n-1),y(0)=5/2,y(-1)=4},y(n))'),

hn=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=0,y(0)=1,y(1)=13/12},y(n))'),

3 双零法

根据双零响应的定义, 按时域经典法的求解步骤可分别求出零输入响应和零状态响应. 理解了双零法的求解原理和步骤, 实际计算可调用rsolve 函数实现.

yzi=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=0,y(-1)=4, y(-2)=12},y(n))'),

yzs=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=(3/4)^n+1/3*(3/4)^(n-1),y(0)=1,

y(-1)=0},y(n))'),

4 变换域法

设差分方程的一般形式为∑a k y (n -k ) =∑b r x (n -r ) .

k =0r =0N M

对差分方程两边取单边z 变换, 并利用z 变换的位移公式得

∑k =0N a k z [Y (z ) +∑y (l ) z ]=∑b r z [X (z ) +-k -l -r l =-k r =0-1M m =-r ∑-1x (m ) z -m ]

整理成A (z ) Y (z ) +Y 0(z ) =B (z ) X (z ) +X 0(z ) 形式有

A (z ) =a 0+a 1z -1+ +a N z -N , B (z ) =b 0+b 1z -1+ +b M z -M .

Y 0(s ) =∑∑a k y (l ) z

k =1l =-k N -1-k -l M -1 , X 0(s ) =∑∑b r x (m ) z -r -m . r =1m =-r

可以看出, 由差分方程可直接写出A (z ) 和B (z ) , 系统函数H (z ) =B (z ) /A (z ) , 将系统函数进行逆z 变换可得单位样值响应. 由差分方程的初始状态可算出Y 0(z ) , 由激励信号的初始状态可算出X 0(z ) , 将激励信号进行z 变换可得X (z ) , 求解z 域代数方程可得输出信号的象函数 B (z ) X (z ) +X 0(z ) -Y 0(z ) Y (z ) =, A (z )

对输出象函数进行逆z 变换可得输出信号的原函数y (n ) . 利用z 变换求解差分方程各响应的步骤可归纳如下:

(1)根据差分方程直接写出A (z ) 、B (z ) 和H (z ) , H (z ) 的逆变换即为单位样值响应;

(2)根据激励信号算出X (z ) , 如激励不是因果序列则还要算出前M 个初始状态值;

(3)根据差分方程的初始状态y (-1), y (-2), ⋅⋅⋅, y (-N ) 和激励信号的初始状态x (-1), x (-2), ⋅⋅⋅, x (-M ) 算出Y 0(z ) 和X 0(z ) ;

(4)在z 域求解代数方程A (z ) Y (z ) +Y 0(z ) =B (z ) X (z ) +X 0(z ) 得输出象函数Y (z ) , Y (z ) 的逆变换即为全响应;

(5)分析响应象函数的极点来源及在z 平面中的位置, 确定自由响应与强迫响应, 或瞬态响应与稳态

响应;

(6)根据零输入响应和零状态响应的定义, 在z 域求解双零响应的象函数, 对双零响应的象函数进行逆z 变换, 得零输入响应和零状态响应.

用变换域法求解例1的基本过程如下. z -1+z -2, B (z ) =1+z -1. 系统函数的极点为, . 根据差分方程直接写出A (z ) =1-) 对激励信号进行z 变换得X (z ) =z /(z -. 激励象函数的极点为3/4. +z -1. 根据激励信号的初始状态算出X 0(z ) =0 . 根据差分方程的初始状态算出Y 0(z ) =-z 3-z 2+z ) /(z 3-z 2+z -) . 对z 域代数方程求解, 得全响应的象函数Y (z ) =(⋅() n +⋅() n +⋅() n ]u (n ) 进行逆z 变换得全响应为y (n ) =[-其中, 与系统函数的极点对应的是自由响应; 与激励象函数的极点对应的是强迫响应. Y (z ) 的极点都在z 平面的单位圆内故都是瞬态响应. 零输入响应和零状态响应可按定义参照求解.

上述求解过程可借助MATLAB 的符号运算编程实现. 实现变换域法求解差分方程的m 程序如下: clc;clear;format compact;

syms z n %定义符号对象

% 输入差分方程、初始状态和激励信号%

a=[1,-3/4,1/8],b=[1,1/3], %输入差分方程系数向量

y0=[4,12],x0=[0], %输入初始状态, 长度分别比a 、b 短1, 长度为0时用[]

xn=(3/4)^n, %输入激励信号, 自动单边处理,u(n)可用1^n表示

% 下面是变换域法求解差分方程的通用程序,极点为有理数时有解析式输出 %

N=length(a)-1;M=length(b)-1;%计算长度

Az=poly2sym(a,'z')/z^N;Bz=poly2sym(b,'z')/z^M;%计算A(z)和B(z)

Hz=Bz/Az;disp('系统函数H(z):'),sys=filt(b,a),%计算并显示系统函数

hn=iztrans(Hz);disp('单位样值响应h(n)='),pretty(hn),%计算并显示单位样值响应

Hzp=roots(a);disp('系统极点:');Hzp,%计算并显示系统极点

Xz=ztrans(xn);disp('激励象函数X(z)='),pretty(Xz),%激励信号的单边z 变换

Y0z=0;%初始化Y0(z),求Y0(z)注意系数标号与变量下标的关系

for k=1:N;

for l=-k:-1;Y0z = Y0z+a(k+1)*y0(-l)*z^(-k-l);end

end

disp('初始Y0(z)'),Y0z,%系统初始状态的z 变换

X0z=0;%初始化X0(z),求X0(z)注意系数标号与变量下标的关系

for r=1:M;

for m=-r:-1;X0z = X0z+b(r+1)*x0(-m)*z^(-r-m);end

end

disp('初始X0(z)'),X0z,%激励信号起始状态的z 变换

Yz=(Bz*Xz+X0z-Y0z)/Az;disp('全响应的z 变换Y(z)'),pretty(simple(Yz)),

yn=iztrans(Yz);disp('全响应y(n)='),pretty(yn),% 计算并显示全响应

Yziz=-Y0z/Az;disp('零输入象函数Yzi(z)='),pretty(Yziz),%零激励响应的z 变换

yzin=iztrans(Yziz);disp('零输入响应yzi(n)='),pretty(yzin),% 计算并显示零输入响应 Yzsz=(Bz*Xz+X0z)/Az;disp('零状态象函数Yzs(z)='),pretty(Yzsz),%零状态响应的z 变换

yzsn=iztrans(Yzsz);disp('零状态响应yzs(n)='),pretty(yzsn),% 计算并显示零状态响应 该程序的运行过程与手算过程对应, 显示在命令窗的运行结果与手算结果相同.


相关内容

  • MATLAB在有限差分法中的应用
  • 第!"卷第!期 !(("年)月 桂林工学院学报 *+,-'./+01,2/2'2'3424,45+04567'+/+18#$%&!"'$&!.9:&!((" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ...

  • 常微分方程的差分方法-欧拉法
  • 常微分方程的差分方法-欧拉法 一.摘要:人类社会已迈进电子计算机时代.在今天,熟练地运用计算机进行科学计算,已成为广大科技工作者和学者的一项基本技能,数值分析的基本内容是数值算法的设计与分析,科学技术当中常常需要求解常微分方程的定解问题,本文中主要以解决此问题最简单形式(一阶方程的初值问题)来求解微 ...

  • 热传导方程的求解
  • 应用物理软件训练 前 言 MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分. MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathem ...

  • 常微分方程MATLAB解法
  • 实验四 求微分方程的解 一.问题背景与实验目的 实际应用问题通过数学建模所归纳而得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法,既要研究微分方程(组)的解析解法(精 ...

  • 离散时间系统的时域分析--一阶和二阶差分方程求解
  • 课程设计任务书 目 录 1 引言 ............................................... 1 2 Matlab7.0入门 ...................................... 1 3 利用Matlab 7.0实现一阶和二阶差分方程求解的 ...

  • 谱方法解偏微分方程
  • 谱方法解偏微分方程 学生:石幸媛,数学与计算机科学学院 指导老师:陈慧琴 ,江汉大学数学与计算机科学学院 学号:[1**********]5 摘要 本论文分析的是偏微分方程的谱方法解.在此,我借用向新民编的<谱方法的数值分析>中第67页例2.1方程进行计算.根据例2.1的谱方法计算方式, ...

  • 单位样值响应
  • ※※※※※※※※※ ※2008级信号与系统 ※ ※ ※※ ※※课程设计 ※※※※※ ※※※※※ ※ ※※ ※※ 信号与系统课程设计报告书 课题名称 单位样值响应 姓 名 学 号 院.系.部 专 业 指导教师 电气系 电子信息工程 孙秀婷 康朝红 2011年 1 月12日 目 录 1.设计题目---- ...

  • 数学专业本科毕业论文开题报告
  • 题目名称:MATLAB 中PDE 工具箱的介绍与应用 一. 选题的目的和意义: 随着计算机技术的飞速发展,编制高效的程序求解各种偏微分方程问题已经成为可能,偏微分方程数值解法也成为科学和工程计算中的重要分支.然而,对于广大应用工作者来说,从偏微分方程模型出发,使用有限元法或有限差分法求解都要经过诸多 ...

  • 激光深熔焊接下临界功率密度的确定
  • 华南理工大学学报(自然科学版) 第37卷第8期2009年8月 JournalofSouthChinaUniversityofTechnology (NaturalScienceEdition) V01.37August No.82009 文章编号:1000-565X(2009)08-0071.05 ...