Reduced row echelon form: Difference between revisions

Content deleted Content added
No edit summary
Line 207:
 
=={{header|Aime}}==
<lang aime></lang>void
rref(list l, integer rows, integer columns)
{
integer e, i, j, lead, r;
list u, v;
 
lead = 0;
r = 0;
while (r < rows) {
if (columns <= lead) {
break;
}
 
i = r;
while (!l_q_integer(l_q_list(l, i), lead)) {
i += 1;
if (i == rows) {
i = r;
lead += 1;
if (lead == columns) {
break;
}
}
}
if (lead == columns) {
break;
}
 
u = l_q_list(l, i);
 
l_spin(l, i, r);
e = l_q_integer(u, lead);
if (e) {
j = 0;
while (j < columns) {
l_r_integer(u, j, l_q_integer(u, j) / e);
j += 1;
}
}
 
i = 0;
while (i < rows) {
if (i != r) {
v = l_q_list(l, i);
e = l_q_integer(v, lead);
j = 0;
while (j < columns) {
l_r_integer
(v, j, l_q_integer(v, j) - l_q_integer(u, j) * e);
j += 1;
}
}
i += 1;
}
 
lead += 1;
 
r += 1;
}
}
 
void
display_2(list l, integer rows, integer columns)
{
integer i, j;
list u;
 
i = 0;
while (i < rows) {
u = l_q_list(l, i);
j = 0;
while (j < columns) {
o_winteger(4, l_q_integer(u, j));
j += 1;
}
i += 1;
o_byte('\n');
}
}
 
list
new_list(...)
{
integer i;
list l;
 
i = -count();
while (i) {
l_append(l, $i);
i += 1;
}
 
return l;
}
 
integer
main(void)
{
list l;
 
l = new_list(new_list(1, 2, -1, -4),
new_list(2, 3, -1, -11),
new_list(-2, 0, -3, 22));
rref(l, 3, 4);
display_2(l, 3, 4);
 
return 0;
}</lang>
 
=={{header|ALGOL 68}}==