数学实验第二次作业——常微分方程数值求解 联系客服

发布时间 : 星期四 文章数学实验第二次作业——常微分方程数值求解更新完毕开始阅读

建立数学模型:

在任意时刻t,小船位于(x,y),此时速度为v,根据物理中路程与速度的关系,知路程的微分为速度v,由此中,小船在x,y方向上的速度分别为: X:dt=v1-v2*dy

ydx

x√x2+y^2

Y:dt=-v2*dxdtdydt

√x2+y^2 初始条件为 (t0)=v1 *(1) (t0)=v2 *(2)

dxv1?√x2+y^2x

?v2y

现求其解析解,利用微积分知识 *(1)÷*(2)得dy=

dxv1?√(x/y)2+1xdy

+y;*(3) 将*(3)右端带根号部分分子分母均÷y得 =

?v2

+y; 令x/y=p,得到dx/dy=dp/dy*y+p; dx/dy=p; 分离变量有

y^(-k)=c(√1+p2+p); 代入初值可确定

当t=0时,y=-d,x=0,p=x/y=0,

C=(-d)^(-k)

y^(-k)/d^(-k)=√1+y^2 +x/y; 根据隐函数与显函数的关系可得到

x2

解析解:x=-2[(?d)^(-k)-(d)^(1+k)]

已知d=100m,v1=1m/s,v2=2m/s;

先利用龙格库塔方法求解渡河时间,及任意时刻小船的位置(x,y),及航行曲线,与解析解比较

此时,k=0.5,d=100

用MATLB编写源程序如下:

function dx = boat(t,x) %建立名为boat的函数 d=-100;v1=1;v2=2; %给定常数值 s=(x(1).^2+x(2).^2).^0.5;

dx=[v1-v2.*x(1)./s;-v2.*x(2)./s]; %用向量形式建立方程 ts=0:70; %大致估算,确定终点值,给定步长为”1” x0=[0,-100]; %给出x初始值 [t,x]=ode23s(@boat,ts,x0); %调用ode23s计算 [t,x];

plot(t,x),grid, %绘出x(t),y(t)的函数曲线(图21) gtext('x(t)');gtext('y(t)'); pause;

plot(t,x(:,1)), %绘出x随时间变化的曲线(图22) grid;

xlabel('t/s'); ylabel('x/m'); pause;

plot(t,x(:,2)),grid, %绘出y随时间变化的曲线(图23) title('y-t');

xlabel('t/s'),ylabel('y/m'); 图21

dyy

图22

图23

得到数据如下

01234567800.9900371.9597412.9088283.8368224.7429025.6273376.4893587.327888-100-98-96.0002-94.0008-92.002-90.0042-88.0073-86.0119-84.0184

606162636465666768696.5375025.5960414.6374223.6645442.6803231.6878170.690109########2.15E-081.63E-08-1.74536-1.26513-0.86066-0.53305-0.28315-0.11154-0.0185000