数値計算プログラム

2013年04月30日

連立1次方程式 ガウス・ジョルダン法(枢軸選択法)

input n;
dim a(n,n),x(n),b(n);
input e;

for i:=1 to n;
for j:=1 to n;
input a(i,j);
next j;
next i;

for i:=1 to n;
input b(i);
x(i):=i;
next i;

for k:=1 to n;
if k<>n then l1;
if abs(a(k,k) goto l3;

label l1;
i1:=k;
a1:=abs(a(k,k));
k1:=k+1;
for i:=k1 to n:
a2:=abs(a(i,k));
if a2<=a1 then l4;
i1:=i;
a1:=a2;
label l4;
next i;
i2:=k;
a3:=abs(a(k,k));
for i:=k1 to n;
a2:=abs(a(k,i));
if a2<=a3 then l5;
i2:=i;
a3:=a2;
label l5;
next i;

if a1<=e and a3<=e then l2;
if i1:=k and i2=k then l3;
if a1

for j:=k to n;
w:=a(i1,j);
a(i1,j)=a(k,j);
a(k,j):=w;
next j;
w:=b(i1);
b(i1):=b(k);
b(k):=w;
goto l3;

label l6;
w:=a(k,k);
for j:=k to n;
a(k,j):=a(k,j)/w;
next j;
b(k):=b(k)/w;
for i:=1 to n;
if i=k then l7;
w:=a(i,k);
for j:=k to n;
a(i,j):=a(i,j)-w*a(k,j);
next j;
b(i):=b(i)-w*b(k);
label l7;
next i;
next k;

for i:=1 to n-1;
if x(i)=i then l8;
for j:=i+1 to n;
if x(j)<>i then l9;
w:=x(i);
x(i):=x(j);
x(j):=w;
w:=b(i);
b(i):=b(j);
b(j):=w;
j:=n;
label l9;
next j;
label l8;
next i;

for i:=1 to n;
print b(i);
next i;
end;

label l2;
print "error";
end;

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