差分方程matlab解法

差分方程matlab解法,第1张

如何用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,用有限差分求解偏微分方程?

求解思路:把偏微分方程离散化,采用合适的差分方法,将复杂的方程简化成简单的线性方程组,最后求解线性方程组,得到其数值解。

现以一维扩散方程为例,说明其计算过程。

第一步,根据条件,建立边界条件和初始条件,即

g0=@(t)zeros(size(t))

g1=g0%边界条件

eta=@(x)sin(pi*x)%初始条件

第二步,设置网格数,即

n=101%网格数

m=101%网格数

第三步,设置步长,即

h=0.01%步长

k=0.01%步长

第四步,设置t和x的初始值,即

t0=0%t的初始值

x0=0%x的初始值

第五步,确定扩散系数,即

K=1/pi^2

第六步,自定义Crank-Nicolson差分格式解函数

[t,x,U]=diffusion_sol1(h,k,t0,x0,n,m,eta,g0,g1,K)

第七步,绘制偏微分方程解的曲面,即

surf(t,x,U)

最后,运行程序得到一维扩散方程数值解的曲面图

怎么用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)的关系图。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8135373.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存