MATLAB experiment<6>

1,解非刚性微分方程

[t,y] = ode45(odefun,tspan,y0)(其中 tspan = [t0 tf])求微分方程组 y′=f(t,y) 从 t0 到 tf 的积分,初始条件为 y0。解数组 y 中的每一行都与列向量 t 中返回的值相对应。

1. 解下列微分方程。

 

%Excercise 1(1)

fun=inline('x+y','x','y');

[t,y]=ode45(fun,[0 1 2 3],1) %注意由于初值为y(0)=1, [0 1 2 3]中0不可缺



%Excercise 1(2)

fun=inline('[-2*y(1)-3*y(2);2*y(1)+y(2)]','t','y');%原题有错,应改为-x'=2x+3y

[t,y]=ode45(fun,[0 10],[-2.7;2.8])

plot(y(:,1),y(:,2))



%Excercise 1(3)

%高阶导数y''化为一阶(y')',多变量(y,y')化为单变量x.

%令x(1)=y,x(2)=y',化为方程组

%x(1)'=x(2),x(2)'=0.01*x(2)^2-2*x(1)+sin(t)

%初始值x(1)=0,x(2)=1.

%运行下列指令

clear;close;

fun=@(t,x)[x(2);0.01*x(2)^2-2*x(1)+sin(t)];%fun表示两个方程的右端,注意第一个x(2)表示x(1)的导函数。

[t,x]=ode45(fun,[0 5],[0;1]);x(end,1)

plot(t,x(:,1)) 



3. 求解刚性方程组

 

dfun=inline('[-1000.25*y(1)+999.75*y(2)+0.5;999.75*y(1)-1000.25*y(2)+0.5]','x','y');

[x,y]=ode45(dfun,[0,50],[1;-1]);length(x)   

%发现所用节点很多

[x,y]=ode15s(dfun,[0,50],[1;-1]);length(x)

%发现所用节点很少

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值