当前位置:文档之家› 计算方法大作业(第三次)

计算方法大作业(第三次)

计算方法大作业(第三次)
计算方法大作业(第三次)

大作业3 对于常微方程数值解问题 检查各种数值算法的长期行为 观察步长对于收敛效果的影响

给定方程组

()()()()

(0)0(0)x t ay t y t bx t x y b

'=??'

=-??

=??=? 1.证明方程组的解是xOy 平面上的一个椭圆;

2.利用①改进的欧拉折线法,②4阶标准龙格-库塔法,选几个不同的步长h ,计算上述方程组的轨道,看看哪种方法和步长能够保持椭圆轨道不变。(计算的时间步要足够多――至少10000步) 1. 证明:

因为'()(),x t ay t ='()(),y t bx t =- 所以''()'()(),x t ay t abx t ==- 所给方程的特征方程为2,r ab =-

所以12,,r r ==是一对共轭复根,

所以所求通解为12())),x t C t C t =+ 因为(0)0,x =

所以2()),x t C t =

同理可得:4()))y t b t C t =+ 因为'()(),x t ay t =

即24'()))),x t C t ab t aC t ==+

所以240C C ==,

所以()),x t t =

()) y t b t

=

所以

22

2

1 x y

ab b

+=

方程组的解是xOy平面上的一个椭圆。

2.设a=4,b=1;

(1)用改进的欧拉折线法计算,程序及结果如下:

>>a=4;b=1;n=10000;

>> H=6*pi;

>> [x,y]=eulermend(a,b,H,n);

>>plot(x,y)

图1 h=6*pi/10000时的椭圆轨道图像

>> H=7*pi;

>> [x,y]=eulermend(a,b,H,n);

>> plot(x,y,'g--')

图2 h=7*pi/10000时的椭圆轨道图像

>> H=10*pi;

>> [x,y]=eulermend(a,b,H,n);

>> plot(x,y,'r--')

图3 h=10*pi/10000时的椭圆轨道图像

>> H=20*pi;

>> [x,y]=eulermend(a,b,H,n);

>> plot(x,y)

图4 h=20*pi/10000时的椭圆轨道图像>> H=30*pi;

>> [x,y]=eulermend(a,b,H,n);

>> figure(2),plot(x,y,'r-')

图5 h=30*pi/10000时的椭圆轨道图像

从上述结果可知,改进的欧拉折线法对于不同步长能够保持椭圆轨道不变。以下是欧拉改进方法函数eulermend.m

function [x,y]=eulermend(a,b,H,n)

h=H/n;

x(1)=0;

y(1)=b;

for i=1:n

x1=x(i)+h*a*y(i);

y1=y(i)+h*(-b)*x(i);

x2=x(i)+h*a*y1;

y2=y(i)+h*(-b)*x1;

x(i+1)=(x1+x2)/2;

y(i+1)=(y1+y2)/2;

end

(2)用4阶标准龙格-库塔法计算,程序及结果如下:

>> a=4;b=1;

>> n=10000;

>> H=pi;

>> [x,y]=ronger4(a,b,H,n);

>> plot(x,y)

图6 h=1*pi/10000时的椭圆轨道图像>> H=2*pi;

>> [x,y]=ronger4(a,b,H,n);

>> plot(x,y,'r-')

图7 h=2*pi/10000时的椭圆轨道图像

>> H=6*pi;

>> [x,y]=ronger4(a,b,H,n);

>> plot(x,y)

图8 h=6*pi/10000时的椭圆轨道图像>> H=7*pi;

>> [x,y]=ronger4(a,b,H,n);

>> plot(x,y,'g--')

图9 h=7*pi/10000时的椭圆轨道图像

>> H=10*pi;

>> [x,y]=ronger4(a,b,H,n);

>> plot(x,y,’r-‘)

图10 h=10*pi/10000时的椭圆轨道图像

从以上结果可知,随着步长越来越大,用4阶标准龙格-库塔法计算的椭圆轨道变化也越来越大,只有当步长比较小时,如图7,图8所示中步长取得相对较小,椭圆轨道才保持不变。以下是4阶标准龙格-库塔法程序ronger4.m:

function [x,y]=ronger4(a,b,H,n)

h=H/n;

x(1)=0;

y(1)=b;

for i=1:n

K1=a*y(i);

K2=a*(y(i)+0.5*h*K1);

K3=a*(y(i)+0.5*h*K2);

K4=a*(y(i)+h*K3);

x(i+1)=x(i)+h/6*(K1+2*K2+2*K3+K4);

R1=-b*x(i);

R2=-b*(x(i)+0.5*h*R1);

R3=-b*(x(i)+0.5*h*R2);

R4=-b*(x(i)+h*R3);

y(i+1)=y(i)+h/6*(R1+2*R2+2*R3+R4); end

相关主题
文本预览
相关文档 最新文档