【レポート課題(7)解答例】

 

1

<プログラム>

A=[0 1; -1 -1];

B=[0; 1];

x0=[1; 0];

u=0;

dt1=0.1;

dt2=0.01;

tf=20;

i=0;

x=x0;

xx1=[];

for t=0:dt1:tf

    i=i+1;

    xx1(:,i)=x;

    dx=(A*x+B*u)*dt1;

    x=x+dx;

end

i=0;

x=x0;

xx2=[];

for t=0:dt2:tf

    i=i+1;

    xx2(:,i)=x;

    dx=(A*x+B*u)*dt2;

    x=x+dx;

end

t1=0:dt1:tf;

t2=0:dt2:tf;

plot(t1,xx1,t2,xx2)

grid('on')

legend('x,dt=0.1','dot(x),dt=0.1','x,dt=0.01','dot(x),dt=0.01','location','northeast')

legend('boxon')

 

<実行結果>

 

2

<プログラム>

f.m

function xdot=f(x)

% xdot = f(x)

global A B u

xdot=A*x+B*u;

ex7_2.m

global A B u

A=[0 1; -1 -1];

B=[0; 1];

x0=[1; 0];

u=0;

dt1=0.1;

dt2=0.01;

tf=20;

i=0;

x=x0;

xx1=[ ];

for t=0:dt1:tf

    i=i+1;

    xx1(:,i)=x;

    x=runge('f',x,dt1);

end

i=0;

x=x0;

xx2=[ ];

for t=0:dt2:tf

    i=i+1;

    xx2(:,i)=x;

    x=runge('f',x,dt2);

end

t1=0:dt1:tf;

t2=0:dt2:tf;

plot(t1,xx1,t2,xx2)

grid('on')

legend('x,dt=0.1','dot(x),dt=0.1','x,dt=0.01','dot(x),dt=0.01','location','northeast')

legend('boxon')

 

<実行結果>

 

<考察>

オイラー法では,時間刻みにより結果が異なっているが,ルンゲクッタ法では,時間刻みによる差異はほとんどない.したがって,同程度の精度で結果を得る場合,ルンゲクッタ法の方は大きな時間刻みで良く,実行時間を短くすることができる.