Hallo Leute!
Ich muss mit Excel den Druckverlust in Rohrleitungen ausrechnen. Jetzt ist eine der dafür benötigten Formeln nur über Iteration zu lösen.
--> 1/sqrt(lambda)=-2*log(Rauhigkeit/Innendurchmesser/3.71+2.51/(Reynoldszahl*sqrt(lambda)))
Ich habe mir da selber weitergeholfen mit ´nem relativ einfachem Code, da ich Anfänger bin und denke, dass das Newton Verfahren sowieso an dieser Stelle nicht wirklich weiterhilft. Mein Problem ist jetzt, dass, wenn ich die Berechnung durchführe, das ganze für fünf Zeilen Berechnung ca. eine halbe Minute braucht. Manchmal mehr, manchmal weniger...
So weit so gut, mein bisheriger Code sieht ersteinmal so aus:
Funktionieren tut er soweit. Ich hoffe nur, dass irgendwer irgendeine Idee hat, das ganze Procedere zu beschleunigen! Dafür schonmal vielen Dank im Voraus.
Gruß, rudi
Ich muss mit Excel den Druckverlust in Rohrleitungen ausrechnen. Jetzt ist eine der dafür benötigten Formeln nur über Iteration zu lösen.
--> 1/sqrt(lambda)=-2*log(Rauhigkeit/Innendurchmesser/3.71+2.51/(Reynoldszahl*sqrt(lambda)))
Ich habe mir da selber weitergeholfen mit ´nem relativ einfachem Code, da ich Anfänger bin und denke, dass das Newton Verfahren sowieso an dieser Stelle nicht wirklich weiterhilft. Mein Problem ist jetzt, dass, wenn ich die Berechnung durchführe, das ganze für fünf Zeilen Berechnung ca. eine halbe Minute braucht. Manchmal mehr, manchmal weniger...
So weit so gut, mein bisheriger Code sieht ersteinmal so aus:
Visual Basic-Quellcode
- Public Function Druckverlust(Rauhigkeit, R_i, Reynoldszahl)
- Dim y, x, a, z, i, c, j As Double
- z = 0.0001
- If Rauhigkeit = 0 Then
- a = 100000
- c = a
- For i = 1 To 500000
- x = Round(1 / Sqr(z), 6)
- y = Round(2 * Log(Reynoldszahl * Sqr(z) / 2.51) / Log(10), 6)
- If x <> y Then
- If x < y Then
- z = z - 0.0000001
- ElseIf x > y Then
- z = z + 0.0000001
- Else
- i = 500000
- End If
- End If
- Next i
- Else
- a = 100000
- c = a
- For i = 1 To 500000
- x = Round(1 / Sqr(z), 6)
- y = Round(-2 * Log((Rauhigkeit / R_i) / 3.71 + 2.51 / (Reynoldszahl * Sqr(z))) / Log(10), 6)
- If x < y Then
- z = z - 0.0000001
- ElseIf x > y Then
- z = z + 0.0000001
- Else
- i = 500000
- End If
- Next i
- End If
- Druckverlust = z
- End Function
Funktionieren tut er soweit. Ich hoffe nur, dass irgendwer irgendeine Idee hat, das ganze Procedere zu beschleunigen! Dafür schonmal vielen Dank im Voraus.
Gruß, rudi