如何用matlab解差分方程?差分方程是指未知函数差分的方程,其一般形式为
F(t,yt,Δyt,Δy^2t,······,Δy^nt)=0
差分方程的通解是指含有相互独立的任意常数,且任意常数的个数等于方程的价数的解;
差分方程的特解是指不含有任意常数的解;
为了说明如何用matlab解差分方程问题,特举例:
例1:试用matlab求解差分方程,y(t+2)-5y(t+1)+6y(t)=0,其中y(0)=1,y(1)=0的解析解。
求解代码:
syms z n
u=(1/5)^n%设置u为输入信号
U=ztrans(u)%z变换
y=diff_eq([1 -5 6],[0],[1 0],U) %解析解。
y=simplify(y)
其运行结果,y(n)=3*2^n - 2*3^n
例2:试用matlab求解差分方程,y(t+2)+y(t+1)-6y(t)=5*2^t,y(0)=1,其中y(0)=1,y(1)=0的解析值。
求解代码:
syms z n t
u=5*2^n
U=ztrans(u)
y=diff_eq([1 1 -6],[1],[1 0],U)
y=simplify(y)
怎么用matlab求解这道差分方程?根据我的理解其基本思路是:1、根据差分方程式,写出迭代式,利用for循环语句和if判断语句来书写。即
for i=3:n
if (k(i)-1)<0
uk1=0
else
uk1=k(i)-1
end
if (k(i)-2)<0
uk2=0
else
uk2=k(i)-2
end
y(i)=2*uk1-2*uk2+3*y(i-1)-2*y(i-2)%迭代求解 y(i+1)=(1-2*h*x)*y(i)+h*x*exp(-x.^2)
end
2、确定x的变化范围,在本例中,假设k=-5:0.1:5
3、根据初始条件,写出y(1), y(2),y(3)的具体数值。由于题主没有给出,在本例中,假设y(1)=-0.5y(2)=-0.1y(3)=0.3
4、最后按上述思路编程,利用plot函数得到k与y(k)的关系图。
调用filter函数解差分方程。1)yn=filter(B,A,xn)是计算输入向量xn的零状态响应输出信号yn,yn与xn长度相等,
其中B=[b0,b1,……bn], A=[a0,a1,……an]。其中a0=1。
2)yn=filter(B,A,xn,xi)是计算全响应的函数。xi是等效初始条件的输入序列,xi能由初始条件确定。此时需要调用filtic函数。xi=filtic(B,A,ys,xs)。其中ys,xs是初始条件向量。
其中ys=[y(-1),y(-2)……y(-N)],xs=[x(-1),x(-2),……x(-M)]
另外若xn为因果序列xs=0可缺省。
举个例子若y(n)-0.8y(n-1)=x(n),初始条件y(-1)=1。
a=0.8,ys=1
xn=[1,zeros(1,30)]
B=1, A=[1,-a]
xi=filtic(B,A,ys)
yn=filter(B,A,xn,xi)
%以下是解出来的yn图像
n=0:length(yn)-1
stem(n,yn,'.')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)