实验4常微分方程数值解.docx

上传人:b****2 文档编号:3104590 上传时间:2023-05-05 格式:DOCX 页数:20 大小:285KB
下载 相关 举报
实验4常微分方程数值解.docx_第1页
第1页 / 共20页
实验4常微分方程数值解.docx_第2页
第2页 / 共20页
实验4常微分方程数值解.docx_第3页
第3页 / 共20页
实验4常微分方程数值解.docx_第4页
第4页 / 共20页
实验4常微分方程数值解.docx_第5页
第5页 / 共20页
实验4常微分方程数值解.docx_第6页
第6页 / 共20页
实验4常微分方程数值解.docx_第7页
第7页 / 共20页
实验4常微分方程数值解.docx_第8页
第8页 / 共20页
实验4常微分方程数值解.docx_第9页
第9页 / 共20页
实验4常微分方程数值解.docx_第10页
第10页 / 共20页
实验4常微分方程数值解.docx_第11页
第11页 / 共20页
实验4常微分方程数值解.docx_第12页
第12页 / 共20页
实验4常微分方程数值解.docx_第13页
第13页 / 共20页
实验4常微分方程数值解.docx_第14页
第14页 / 共20页
实验4常微分方程数值解.docx_第15页
第15页 / 共20页
实验4常微分方程数值解.docx_第16页
第16页 / 共20页
实验4常微分方程数值解.docx_第17页
第17页 / 共20页
实验4常微分方程数值解.docx_第18页
第18页 / 共20页
实验4常微分方程数值解.docx_第19页
第19页 / 共20页
实验4常微分方程数值解.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验4常微分方程数值解.docx

《实验4常微分方程数值解.docx》由会员分享,可在线阅读,更多相关《实验4常微分方程数值解.docx(20页珍藏版)》请在冰点文库上搜索。

实验4常微分方程数值解.docx

实验4常微分方程数值解

实验4常微分方程数值解

化学工程系化32

坂井优(日本留学生)2013080091

【实验目的】

1.掌握用MATLAB软件求微分方程初值问题数值解的方法;

2.通过实例学习用微分方程模型解决简化的实际问题;

3.了解欧拉方法和龙格-库塔方法的基本思想和计算公式,稳定性等概念。

【实验内容】

1.题目5:

(题目略)

模型及其求解:

设圆桶的质量为m,圆桶受到的重力为G,在海水中受到的浮力为F1,受到的阻力为F2,圆桶下沉的速度为v,加速度为a,距海面的距离为s,设重力加速度为g。

因为圆桶所受海水阻力与下沉速度成正比,设比例系数为k.

dv/dt=(1-m1/m-kv/m)g

ds/dt=v

将圆桶与海底接触时的速度求解出来,与极限速度进行比较,若大于极限速度,则圆桶与海底碰撞后会破裂;若小于极限速度,则圆桶与海底碰撞后不会破裂。

源程序如下:

functiondv=Cylinder(t,v)

m1=213.3403;m=239.245;k=0.1191;g=9.80;

p=1-m1/m-k*v/m;

dv=p*g;

end

clc;clearall;

ts=0:

0.1:

1200;

n=length(ts);

v0=0;

opt=odeset('RelTol',1e-6,'AbsTol',1e-9);

[t,v]=ode45(@Cylinder,ts,v0,opt);

[t,v];

plot(t,v,'r-','LineWidth',2),grid;

xlabel('t','FontSize',16);ylabel('v(t)','FontSize',16);

title('速度随时间变化的关系','FontSize',16);

gtext('v(t)','FontSize',16);pause;

s=cumtrapz(t,v);

plot(t,s,'LineWidth',2),grid;

xlabel('t','FontSize',16);ylabel('s(t)','FontSize',16);

title('距离随时间变化的关系','FontSize',16)

gtext('s(t)','FontSize',16);

pause

H=91.44;v0=12.192;

plot(v,s,'LineWidth',2);axis([020,0150]);

line([0,20],[H,H],'Color','y','LineStyle','--');

line([v0,v0],[0,200],'Color','g','LineStyle','--');

xlabel('v','FontSize',16);ylabel('s','FontSize',16);

title('距离与速度的关系','FontSize',16)

gtext('s~v','FontSize',16);

图:

 

计算结果:

由图像可知,圆桶在下沉到海底时速度已经超过圆桶破裂时的极限速度,故其与海底碰撞后会发生破裂。

即这场官司的赢家是工程师。

2.题目6:

一只小船度过宽为d的河流,目标是起点A正对着的B点,已知河水流速v1与船在静

止的水中的速度v2之比为k。

(1)建立描述小船航线的微分方程模型,求其解析解;

(2)设d=100m,v1=1m/s,v2=2m/s,用数值方法求渡河所需时间、任意时刻小船位

置及航行曲线,作图,并与解析解比较;

(3)若流速v1=0,0.5,1.5,2(m/s),结果将如何。

模型及其求解:

假设驾驶船者并不知道水流速度,如果他知道,则只要有v1

故船头的方向始终对着目标B点,如书上图。

以B点为原点可得速度v的x,y方向的分量的如下关系式:

由此建立一个常微分方程组,初始条件为。

(x,y)=(d,0)。

(1)-求其解析解:

由本题的微分方程表达式,1、2两式相除得:

=p,从而dx=pdy+ydp,于是上式变为

=

于是ln(

)=kln(cy)

解得:

故由

=p,x=

又初始值为A点的坐标:

(d,0); 

即:

x=

这就是小船航线的解析解表达式。

(2)代入d=100m,v1=1m/s,v2=2m/s,

用matlab进行求解,源程序如下:

建立boat.m

functiondx=boat(t,x)

m=sqrt(x

(1)^2+x

(2)^2)

a=1;b=2

dx=[a-b*x

(1)./m;-b*x

(2)./m];

end

ts=0:

80;

x0=[0;-100];

[t,x]=ode23s(@boat,ts,x0);

[t,x]

plot(x(:

1),x(:

2));

grid;

title('y-x曲线');

xlabel('x/m');ylabel('y/m');

plot(t,x(:

1));

title('x-t曲线');xlabel('t/s');ylabel('x/m');

grid;

plot(t,x(:

2));

title('y-t曲线');xlabel('t/s');ylabel('y/m');

grid,;

t

x

y

0

0

-100

1

0.990036802

-98.00000216

2

1.959741409

-96.00021829

3

2.908828047

-94.00077163

4

3.836821656

-92.00197073

5

4.742902446

-90.00418957

64

2.680322705

-0.283146382

65

1.687817487

-0.111541602

66

0.690109125

-0.018499931

67

-2.28E-08

0

68

2.15E-08

0

69

-6.19E-10

0

计算结果

部分表格如下:

图:

作其解析解:

x=

图像k=0.5,d=100;

源程序如下:

在MATLAB中编写如下M文件,命名为guohe.m:

fuctionx=guohe(y)

x=-0.5.*(-100).^0.5*y.^0.5+0.5.*(-100).^(-0.5).*y.^1.5

编写如下程序作图:

y=[0:

-0.1:

-100];%以-0.01为步长

x=guohe(y);%算出每个节点上相应的x的值

plot(x,y),grid,%作y-x的图形

gtext('x');

gtext('y');

计算结果:

y-x的解析解曲线

(3)v1=0时

将原程序中v1=1改为v1=0即可

源程序如下:

建立boat.m

functiondx=boat(t,x)

m=sqrt(x

(1)^2+x

(2)^2)

a=0;b=2

dx=[a-b*x

(1)./m;-b*x

(2)./m];

end

ts=0:

50;

x0=[0;-100];

[t,x]=ode23s(@boat,ts,x0);

[t,x]

plot(x(:

1),x(:

2));

grid;

title('y-x曲线');

xlabel('x/m');ylabel('y/m');

plot(t,x(:

1));

title('x-t曲线');xlabel('t/s');ylabel('x/m');

grid;

plot(t,x(:

2));

title('y-t曲线');xlabel('t/s');ylabel('y/m');

grid;

计算结果

从图中可以看出,船是沿直线匀速从A驶向B的,这是水速为0的必然结果,从而也证明了模型本身的正确性。

v1=0.5时

将原程序中v1=1改为v1=0.5即可,由于ode23计算相对太慢,因此采用ode15计算。

源程序如下:

建立boat.m

functiondx=boat(t,x)

m=sqrt(x

(1)^2+x

(2)^2)

a=0.5;b=2

dx=[a-b*x

(1)./m;-b*x

(2)./m];

end

ts=0:

70;

x0=[0;-100];

[t,x]=ode15s(@boat,ts,x0);

[t,x]

plot(x(:

1),x(:

2));

grid;

title('y-x曲线');

xlabel('x/m');ylabel('y/m');

plot(t,x(:

1));

title('x-t曲线');xlabel('t/s');ylabel('x/m');

grid;

plot(t,x(:

2));

title('y-t曲线');xlabel('t/s');ylabel('y/m');

grid;

计算结果:

与v1=1m/s时相比,小船在x方向上行使的最大值减小了近一半。

这是因为河水流速减小后,船在x方向上的分速度减小的缘故。

与v1=0时比较,小船过河花的时间并没有增加很多,但路程长了很多,这说明小船的平均实际速度大于静水船速v2。

这是因为实际速度为河水与船静水速度的矢量叠加造成的。

v1=1.5时

将原程序中v1=1改为v1=1.5即可,由于ode23计算相对太慢,因此采用ode15计算。

源程序如下:

建立boat.m

functiondx=boat(t,x)

m=sqrt(x

(1)^2+x

(2)^2)

a=1.5;b=2

dx=[a-b*x

(1)./m;-b*x

(2)./m];

end

ts=0:

120;

x0=[0;-100];

[t,x]=ode15s(@boat,ts,x0);

plot(x(:

1),x(:

2));

grid;

title('y-x曲线');

xlabel('x/m');ylabel('y/m');

plot(t,x(:

1));

title('x-t曲线');xlabel('t/s');ylabel('x/m');

grid;

plot(t,x(:

2));

title('y-t曲线');xlabel('t/s');ylabel('y/m');...

grid;

计算结果:

与v1=0.5,1m/s时比较,从图中可以看出,小船几乎都是在[30s,35s]时间范围内到达x方向的最大值,然后逆流驶向B点。

所以v1越小,小船在逆水回到B的时间就越短。

v1=1.5时

将原程序中v1=1改为v1=2即可,由于ode23计算相对太慢,因此采用ode15计算。

源程序如下:

建立boat.m

functiondx=boat(t,x)

m=sqrt(x

(1)^2+x

(2)^2)

a=1.5;b=2

dx=[a-b*x

(1)./m;-b*x

(2)./m];

end

ts=0:

200;

x0=[0;-100];

[t,x]=ode15s(@boat,ts,x0);

plot(x(:

1),x(:

2));

grid;

title('y-x曲线');

xlabel('x/m');ylabel('y/m');

plot(t,x(:

1));

title('x-t曲线');xlabel('t/s');ylabel('x/m');

grid;

plot(t,x(:

2));

title('y-t曲线');xlabel('t/s');ylabel('y/m');

grid;

计算结果:

发现曲线的变化趋势明显不同于前几个,且最终小船无法到达B点,而到达了距离B点50米的位置。

分析:

原因在于v1=v2,则k=1,代入原式,有

,这是一个抛物线,将d=100,y=0代入解得x=50,与实验结果相符。

当到达(0,50)点后,速度矢量合成的结果便是和速度为0。

所以船会在该点处停止。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2