65 lines
2.0 KiB
Plaintext
65 lines
2.0 KiB
Plaintext
/******************************************************/
|
||
/* This program is the main module in a program that */
|
||
/* performs matrix inversion. It calls the entry */
|
||
/* constant INVERT which does the actual inversion. */
|
||
/******************************************************/
|
||
maininvt:
|
||
procedure options(main);
|
||
%replace
|
||
true by '1'b,
|
||
false by '0'b;
|
||
%include 'matsize.lib';
|
||
|
||
declare
|
||
mat(maxrow,maxcol) float binary(24),
|
||
(i,j,n,m) fixed(6),
|
||
var character (26) static initial
|
||
('abcdefghijklmnopqrstuvwxyz'),
|
||
invert entry
|
||
((maxrow,maxcol) float(24), fixed(6), fixed(6));
|
||
|
||
put list('Solution of Simultaneous Equations');
|
||
do while(true);
|
||
put skip(2) list('Type rows, columns: ');
|
||
get list(n);
|
||
if n = 0 then
|
||
stop;
|
||
|
||
get list(m);
|
||
if n > maxrow ! m > maxcol then
|
||
put skip list('Matrix is Too Large');
|
||
else
|
||
do;
|
||
put skip list('Type Matrix of Coefficients');
|
||
put skip;
|
||
do i = 1 to n;
|
||
put list('Row',i,':');
|
||
get list((mat(i,j) do j = 1 to n));
|
||
end;
|
||
|
||
put skip list('Type Solution Vectors');
|
||
put skip;
|
||
do j = n + 1 to m;
|
||
put list('Variable',substr(var,j-n,1),':');
|
||
get list((mat(i,j) do i = 1 to n));
|
||
end;
|
||
|
||
call invert(mat,n,m);
|
||
put skip(2) list('Solutions:');
|
||
do i = 1 to n;
|
||
put skip list(substr(var,i,1),'=');
|
||
put edit((mat(i,j) do j = 1 to m-n))
|
||
(f(8,2));
|
||
end;
|
||
|
||
put skip(2) list('Inverse Matrix is');
|
||
do i = 1 to n;
|
||
put skip edit((mat(i,j) do j = m-n+1 to m))
|
||
(x(3),6f(8,2),skip);
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
end maininvt;
|
||
|
||
|