Gaussian elimination: Difference between revisions
Content added Content deleted
Line 2,423: | Line 2,423: | ||
-200915766608/409205648497 |
-200915766608/409205648497 |
||
26909648324/409205648497 |
26909648324/409205648497 |
||
</pre> |
|||
=={{header|Phix}}== |
|||
{{trans|PHP}} |
|||
<lang Phix>function gauss_eliminate(sequence a, b) |
|||
integer n = length(b) |
|||
atom tmp |
|||
for col=1 to n do |
|||
integer m = col |
|||
atom mx = a[m][m] |
|||
for i=col+1 to n do |
|||
tmp = abs(a[i][col]) |
|||
if tmp>mx then |
|||
{m,mx} = {i,tmp} |
|||
end if |
|||
end for |
|||
if col!=m then |
|||
{a[col],a[m]} = {a[m],a[col]} |
|||
{b[col],b[m]} = {b[m],b[col]} |
|||
end if |
|||
for i=col+1 to n do |
|||
tmp = a[i][col]/a[col][col] |
|||
for j=col+1 to n do |
|||
a[i][j] -= tmp*a[col][j] |
|||
end for |
|||
a[i][col] = 0 |
|||
b[i] -= tmp*b[col] |
|||
end for |
|||
end for |
|||
sequence x = repeat(0,n) |
|||
for col=n to 1 by -1 do |
|||
tmp = b[col] |
|||
for j=n to col+1 by -1 do |
|||
tmp -= x[j]*a[col][j] |
|||
end for |
|||
x[col] = tmp/a[col][col] |
|||
end for |
|||
return x |
|||
end function |
|||
constant a = {{1.00, 0.00, 0.00, 0.00, 0.00, 0.00}, |
|||
{1.00, 0.63, 0.39, 0.25, 0.16, 0.10}, |
|||
{1.00, 1.26, 1.58, 1.98, 2.49, 3.13}, |
|||
{1.00, 1.88, 3.55, 6.70, 12.62, 23.80}, |
|||
{1.00, 2.51, 6.32, 15.88, 39.90, 100.28}, |
|||
{1.00, 3.14, 9.87, 31.01, 97.41, 306.02}}, |
|||
b = {-0.01, 0.61, 0.91, 0.99, 0.60, 0.02} |
|||
pp(gauss_eliminate(a, b))</lang> |
|||
{{out}} |
|||
<pre> |
|||
{-0.01,1.602790395,-1.61320306,1.245494121,-0.4909897196,0.06576069618} |
|||
</pre> |
</pre> |
||