Formelberechnung - Genauigkeit - Abweichungen

  • VB.NET
  • .NET 4.5

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Don_Puno.

    Formelberechnung - Genauigkeit - Abweichungen

    Hallo zusammen,

    Es ist zum Haareraufen und ich bin so langsam ratlos was ich noch machen soll.

    Worum gehts?
    Ich möchte gerne für die angehängte Formel alle Werte für i Iterationen berechnen.
    Dies erfolgte in einer for-Schleife.


    Randbedinung:

    d0 = 10
    alpha0 = 45° (Grad)
    i = Iteration

    Im Excel konnte ich die Formel bereits passend eingeben, daher kenne ich die richtigen Ergebnisse für 0 <=i <=10. Diese Werte dienen als Referenz.

    i
    di
    0
    10
    1
    7,0711
    2
    6,5328
    3
    6,4073
    4
    6,3764
    5
    6,3688
    6
    6,3668
    7
    6,3664
    8
    6,3662
    9
    6,3662
    10
    6,3662





    Im folgenden die Formel im VB:

    VB.NET-Quellcode

    1. 'Variable Iterationen_n wird über das Formular ausgelesen und kann durch den User festgelegt werden.
    2. For i = 0 To Iterationen_n
    3. di = (d0 * Math.Tan(alpha0 * Math.PI / 180) / (Math.Pow(2, i + 1) * Math.Sin(((alpha0 * (Math.PI / 180)) / Math.Pow(2, i)) * Math.Sin((Math.PI / 180) * 90 - (Math.PI / 180) * (alpha0 / Math.Pow(2, i))))))
    4. Next


    Diese führt folgenen Ergebnissenn vgl. unten....
    Hierbei fällt auf, dass es anfangs große Abweichungen vom Ergebnis gibt, diese aber in Richtung Asymptote sich nach und nach ausbalancieren.
    Riecht förmlich nach Genauigkeitsabweichungen. Was könnt ihr mir hier empfehlen? Am Ende der Reise möchte ich gerne die gleichen Ergebnisse wie in der Referenztabell oben erzielen. Genauso wie in Excel.
    1. 9,48317561046438
    2. 7,04424631713176
    3. 6,53121333284478
    4. 6,40718967263216
    5. 6,37642960702858
    6. 6,36875469210015
    7. 6,36683690319434
    8. 6,36635751464471
    9. 6,36623767117363
    10. 6,36620771053499

    Vielen Dank euch im Voraus...

    Schönen Grüß
    Euer Don_Puno
    Bilder
    • Formel.png

      22,79 kB, 3.780×399, 31 mal angesehen
    @Don_Puno Willkommen im Forum. :thumbup:
    Schreibe niemals solche Ausdrücke, die Du nicht debuggen kannst.
    Fasse einzelne Terme zusammen und schon redet die Nachbarin mit Dir:

    VB.NET-Quellcode

    1. ListBox1.Items.Clear()
    2. Dim d0 As Double = 10
    3. Dim alpha0 As Double = 45 '° (Grad)
    4. alpha0 *= Math.PI / 180
    5. For i = 0 To 10
    6. Dim alpha2 As Double = alpha0 / Math.Pow(2, i)
    7. Dim zähler As Double = d0 * Math.Tan(alpha0)
    8. Dim nenner1 As Double = Math.Pow(2, i + 1)
    9. Dim nenner2 As Double = Math.Sin(alpha2)
    10. Dim nenner3 As Double = Math.Sin(Math.PI / 2 - alpha2)
    11. 'Dim di = (d0 * Math.Tan(alpha0) / (Math.Pow(2, i + 1) * Math.Sin(alpha0 / Math.Pow(2, i)) * Math.Sin((Math.PI / 180) * 90 - (Math.PI / 180) * (alpha0 / Math.Pow(2, i)))))
    12. Dim di = zähler / nenner1 / nenner2 / nenner3
    13. ListBox1.Items.Add(di)
    14. Next
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Sie hat mit mir gesprochen und das im Klartext!
    Tausend Dank mein Lieber @RodFromGermany, jetzt läuft alles wie geplant!

    Der Interesse halber, warum dieser Fehler ursprünglich auftrat. Hast du dazu ein Stichwort parat, nachdem ich Suchen kann, damit mir solche Genauigkeitsabweichungen zukünftig nicht mehr in die Quere kommen? Ich bin immer ein Freund davon, die Ursachen zu verstehen, damit ich zukünftig die Symptome sofort erkennen und heilen kann.

    Schönen Gruß
    Don_Puno

    Don_Puno schrieb:

    warum dieser Fehler ursprünglich auftrat
    Ich nehme an, dass Du Klammern falsch gesetzt hast, verifiziert habe ich das nicht.
    Um Fehler zu finden musst Du Debuggen klernen, gugst Du: Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!