[Gambas-user] Improve a Fast routine
martin p cristia
tercoide at ...67...
Fri Nov 28 01:02:57 CET 2014
Hi, is there any way to speed up this routine?
Thanks
Fast Public Function solucionarXgauss(x As Float[], ti As Float[],
iOrden As Integer) As Integer
' OK GAMBAS
Dim c1 As Float
Dim i As Integer, j As Integer, a As Integer, b As Integer, ok As
Integer
Dim l As Integer, h As Integer, i1 As Integer, j1 As Integer
Dim p1 As Float, iTest As Integer, nTest As Integer
contador = 0
If iOrden = 0 Then Return 0
ok = True
'usa el metodo de Gauss
'debe ser cuadrada la matriz
' triangulacion
itest = iorden / 100
For i = 0 To iOrden - 1
'This is to show the progress in the GUI
FMain.debugInfo("Resolviendo el sistema ", True, Format$(100 *
i / iorden, "0.00") & "%")
If debanda(i, i) <> 0 Then
For j = i + 1 To iOrden - 1
If debanda(j, i) <> 0 Then
c1 = - debanda(j, i) / debanda(i, i)
For h = i To iOrden - 1
addbanda(j, h, c1 * debanda(i, h))
Next
ti[j] = ti[j] + c1 * ti[i]
End If
Next
Else
Return
l = i
If i = iOrden - 1 Or l > iOrden - 1 Then Return 0 ' el
sistema es incompatible
Do
If debanda(l, i) <> 0 Then
For h = 0 To iOrden - 1
addbanda(i, h, debanda(l, h))
Next
ti[i] = ti[i] + ti[l]
Exit
Else
l = l + 1
If i = iOrden - 1 Or l > iOrden - 1 Then Return 0 '
el sistema es incompatible
End If
Loop
End If
Next
' sustitucion atrás
x[iOrden - 1] = ti[iOrden - 1] / debanda(iOrden - 1, iOrden - 1)
For i = iOrden - 2 To 0 Step -1
p1 = 0
For j = i + 1 To iOrden - 1
p1 = p1 - x[j] * debanda(i, j)
Next
p1 = ti[i] + p1
x[i] = p1 / debanda(i, i)
Next
Return ok
End Function
Fast Public Sub ABanda(ib As Integer, jb As Integer, valor As Float)
modCalculus.MatRigEst[ib * modEstru.ordmatrig + jb] = valor
Return
End Sub
DeBanda() and AddBanda() are similar
More information about the User
mailing list