Gaussian elimination: Difference between revisions

Content added Content deleted
(Realize in F#)
Line 3,907: Line 3,907:
</pre>
</pre>


=={{header|VBA}}==
{{trans|Phix}}<lang vb>'Option Base 1
Private Function gauss_eliminate(a As Variant, b As Variant) As Variant
Dim n As Integer: n = UBound(b)
Dim tmp As Variant, m As Integer, mx As Variant
For col = 1 To n
m = col
mx = a(m, m)
For i = col + 1 To n
tmp = Abs(a(i, col))
If tmp > mx Then
m = i
mx = tmp
End If
Next i
If col <> m Then
For j = 1 To UBound(a, 2)
tmp = a(col, j)
a(col, j) = a(m, j)
a(m, j) = tmp
Next j
tmp = b(col)
b(col) = b(m)
b(m) = tmp
End If
For i = col + 1 To n
tmp = a(i, col) / a(col, col)
For j = col + 1 To n
a(i, j) = a(i, j) - tmp * a(col, j)
Next j
a(i, col) = 0
b(i) = b(i) - tmp * b(col)
Next i
Next col
Dim x() As Variant
ReDim x(n)
For col = n To 1 Step -1
tmp = b(col)
For j = n To col + 1 Step -1
tmp = tmp - x(j) * a(col, j)
Next j
x(col) = tmp / a(col, col)
Next col
gauss_eliminate = x
End Function
Public Sub main()
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}]
Dim s() As String, x() As Variant
ReDim s(UBound(b)), x(UBound(b))
Debug.Print "(";
x = gauss_eliminate(a, b)
For i = 1 To UBound(x)
s(i) = CStr(x(i))
Next i
t = Join(s, ", ")
Debug.Print t; ")"
End Sub</lang>{{out}}
<pre>(-0.01, 1.60279039450209, -1.61320305990548, 1.24549412137136, -0.490989719584628, 0.065760696175228)</pre>
=={{header|zkl}}==
=={{header|zkl}}==
Using the GNU Scientific Library:
Using the GNU Scientific Library: