数値計算プログラム

2012年12月30日

連立常微分方程式・Euler-Romberg法

2元

-----
k:=0:
j:=0;
input f$,g$;
input h,e;
input n;
input l;
dim x(n+1),y(n+1),z(n+1),u(l+1),v(l+1),s(l+1),t(l+1);
input x(1),y(1),z(1);

for i:=1 to n;
x:=x(i);
y:=y(i);
z:=z(i);
t(1):=y+h*val(f$);
v(1):=z+h*val(g$);
a:=2;
for j:=1 to l;
a1:=a;
x:=x(i);
y:=y(i);
z:=z(i);
for k:=1 to a;
f:=val(f$);
g:=val(g$);
x:=x+h/a1;
y:=y+h/a1*f;
z:=z+h/a1*g;
next k;
s(1):=y;
u(1):=z;
f1:=1;
for k:=1 to j;
f1:=f1*2;
s(k+1):=s(k)+(s(k)-t(k))/(f1-1);
u(k+1):=u(k)+(u(k)-v(k))/(f1-1);
if abs(s(k+1)-s(k)<=s(k)*e and abs(u(k+1)-u(k)<=u(k)*e then l1;
next k;
j1:=j+1;
for k:=1 to j1;
t(k):=s(k);
v(k):=u(k);
next k;
a:=a*2;
next j;
go l2;

label l1;
x(i+1):=x(i)+h;
y(i+1):=s(k+1);
z(i+1):=u(k+1);
next i;

label l2;
input h1,h2;
if h2=0 then l3;
for i:=1 to n step h1/h;
print x(i),y(i);
next i;
end;

label l3;
for i:=1 to n step h1/h;
print x(i_),tab(3),y(i),z(i);
next i;
end;

当サイトでは、第三者配信事業者によるサービスを使用して広告を表示しています。 これらの第三者配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示する目的で、 当サイトや他のサイトへのアクセスに関する情報を使用することがあります (氏名、住所、メール アドレス、電話番号は含まれません)。 このプロセスの詳細や、第三者配信事業者にこれらの情報が使用されないようにする方法については、 ここをクリックしてください。