Schönen Guten Tag!
Ich habe eine Iterationsaufgabe zur Berechnung des Reibungsverluset in einem Rohr , in dem Luft strömt, zu lösen.
Die Formel lautet: 2,51/(Re √λ)=-2 log (2,51/(Re √λ)+k/3,71 d))
Lambda muss iteriert werden.
In Excel hat das mit der Schleife
For n = 0.00000008 To 0.4 Step 0.00001 'Step 0.00001
Range("l5") = n + 0.0000001 'Lambda
If Range("i5") <= Range("J5") Then Exit For
Next n
funktioniert. Hier wird beim Term 2,51/(Re √λ) = ca. 6,5 abgebrochen.
Dann habe ich die Schleife in VS 2013 übertragen und die Iteration endet später an einem anderen Punkt (8,6) obwohl die Nebenrechnungen in beiden Methoden zu identischen Ergebnissen führen.
Ich nehme an, es liegt wohl an meiner Schleifenprogrammierung.
Nun habe ich mit verschiedenen Schleifenarten herumgebastelt weil ich dachte, VS 2013 rechnet vielleicht anders als Excel und bin jetzt bei dem Ergebnis gelandet:
Sub Iteration()
IterationLambda = 0.000000000001 ' Hier beginne ich mit der Iteration , Dim Iteration Lambda as Double
Do
IterationLambda = IterationLambda + 0.000001
Nebenrechnungen() ' Ein Unterprogramm für Zwischenergebnisse der Gleichung
WurzelTerm = 1 / Math.Sqrt(IterationLambda) ' Die Gliederung der Gleichung in 2 Terme
rechterTerm = -2 * Math.Log10((2.51 / (Re * Math.Sqrt(IterationLambda)) + (k / (3.71 * Nennweite))))
If WurzelTerm <= rechterTerm Then Exit Do ' Abbruchbedingung d.h. wohl wenn WurzelTerm <= rechterTerm dann abbrechen sonst Sprung zu Do?
Loop
End Sub
Trotzdem bricht die Iteration bei 8,6 ab.
Mich macht das natürlich wuschig, wenn ich mit 2 eigentlich korrekten Methoden zu unterschiedlichen Ergebnissen komme.
Erkennt jemand meinen Fehler?
Abschließende Frage: Wie macht man es, dass die Iteration von Lambda in einem Label verfolgt werden kann?
Mit besten Grüßen
Ich habe eine Iterationsaufgabe zur Berechnung des Reibungsverluset in einem Rohr , in dem Luft strömt, zu lösen.
Die Formel lautet: 2,51/(Re √λ)=-2 log (2,51/(Re √λ)+k/3,71 d))
Lambda muss iteriert werden.
In Excel hat das mit der Schleife
For n = 0.00000008 To 0.4 Step 0.00001 'Step 0.00001
Range("l5") = n + 0.0000001 'Lambda
If Range("i5") <= Range("J5") Then Exit For
Next n
funktioniert. Hier wird beim Term 2,51/(Re √λ) = ca. 6,5 abgebrochen.
Dann habe ich die Schleife in VS 2013 übertragen und die Iteration endet später an einem anderen Punkt (8,6) obwohl die Nebenrechnungen in beiden Methoden zu identischen Ergebnissen führen.
Ich nehme an, es liegt wohl an meiner Schleifenprogrammierung.
Nun habe ich mit verschiedenen Schleifenarten herumgebastelt weil ich dachte, VS 2013 rechnet vielleicht anders als Excel und bin jetzt bei dem Ergebnis gelandet:
Sub Iteration()
IterationLambda = 0.000000000001 ' Hier beginne ich mit der Iteration , Dim Iteration Lambda as Double
Do
IterationLambda = IterationLambda + 0.000001
Nebenrechnungen() ' Ein Unterprogramm für Zwischenergebnisse der Gleichung
WurzelTerm = 1 / Math.Sqrt(IterationLambda) ' Die Gliederung der Gleichung in 2 Terme
rechterTerm = -2 * Math.Log10((2.51 / (Re * Math.Sqrt(IterationLambda)) + (k / (3.71 * Nennweite))))
If WurzelTerm <= rechterTerm Then Exit Do ' Abbruchbedingung d.h. wohl wenn WurzelTerm <= rechterTerm dann abbrechen sonst Sprung zu Do?
Loop
End Sub
Trotzdem bricht die Iteration bei 8,6 ab.
Mich macht das natürlich wuschig, wenn ich mit 2 eigentlich korrekten Methoden zu unterschiedlichen Ergebnissen komme.
Erkennt jemand meinen Fehler?
Abschließende Frage: Wie macht man es, dass die Iteration von Lambda in einem Label verfolgt werden kann?
Mit besten Grüßen