Determinant

Moderators: dirkwb, Xilvo

Reageer
Gebruikersavatar
Berichten: 6.905

Determinant

Mijn algoritme om een determinant te berekenen:

Code: Selecteer alles

	 Function det(ByVal matrix(,) As Integer) As Double

 Dim n As Integer

 n = UBound(matrix, 1)

 Dim c As Integer = 1 'correctie voor rij x getal

 Dim i, j, e As Integer

 Dim a, b As Integer

 Dim d As Integer = 1

 For i = 0 To n - 1

 For j = i + 1 To n

 'rij j reduceren via rij i

 a = matrix(i, i)

 b = matrix(j, i)

 c *= a

 

 If matrix(i, j) <> 0 Then

 For e = i To n

 matrix(j, e) = matrix(j, e) * a - matrix(i, e) * b

 Next

 End If

 Next

 Next

 For i = 0 To n

 d *= matrix(i, i)

 Next

 Return d / c

 End Function
(maakt onder de hoofddiagonaal allemaal nullen, om dan keer op keer naar de 1e kolom te ontwikkelen)

nu duikt hetvolgende probleem op bij orde > 4: OverFlow error bij de variable c

hoe kan ik dit vermijden?
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Gebruikersavatar
Berichten: 6.905

Re: Determinant

int64 verhelpt het probleem ook niet helaas

(getal c is blijkbaar groter dan 18446744073709551615)
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Berichten: 20

Re: Determinant

Ik heb ook regelmatig het probleem in vb dat een getal te groot word (vooral bij het oplossen van problemen op projecteuler.net) en ben daarom ook opzoek naar een (makkelijke) manier om toch grote getallen te gebruiken in vb. Tot nu toe heb ik de programma's die niet in vb lukte, omdat de getallen te groot werden, geprobeerd in ruby te maken (ruby kan namelijk met veel grotere getallen omgaan). Mischien dat ruby ook voor jou een oplossing is? Mocht je een manier vinden om in vb toch makkelijk met dit soort getallen om te gaan dan hoor ik het graag. :D

Gebruikersavatar
Berichten: 6.905

Re: Determinant

leuk te horen dat hier nog iemand op projecteuler.net zit.

Ik gebruik meestal Python, maar voor mijn vak informatica moet ik helaas vb kunnen (gaat wel vanzelf hoor)

Voor de determinant had ik gedacht om al delen afzonderlijk weg te delen bij dit, maar ik kom er niet uit.

Wat VB en grote getallen betreft: mss moet er wel iets te vinden zijn op 't net daarvoor
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Reageer