[Gambas-user] Improve a Fast routine
Jussi Lahtinen
jussi.lahtinen at ...626...
Fri Nov 28 01:47:29 CET 2014
What are you trying to do exactly? Have you looked up ready well known
algorithm for it?
By quick look that seems to be O(n^3), which makes me think it can done
faster.
Jussi
On Fri, Nov 28, 2014 at 2:02 AM, martin p cristia <tercoide at ...67...>
wrote:
> 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
>
>
> ------------------------------------------------------------------------------
> Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
> from Actuate! Instantly Supercharge Your Business Reports and Dashboards
> with Interactivity, Sharing, Native Excel Exports, App Integration & more
> Get technology previously reserved for billion-dollar corporations, FREE
>
> http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk
> _______________________________________________
> Gambas-user mailing list
> Gambas-user at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user
>
More information about the User
mailing list