ln (1 + x) in eigenen Code ohne Math.Log(1 + x)

  • VB.NET

Es gibt 44 Antworten in diesem Thema. Der letzte Beitrag () ist von Facebamm.

    ln (1 + x) in eigenen Code ohne Math.Log(1 + x)

    Hi, ich wollte mal fragen wie es funktioniert die ln funktion selber nachzuschreiben mit ln(1+x)

    Das habe ich bis jetzt

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Label4_Click(sender As Object, e As EventArgs) Handles Label4.Click
    3. End Sub
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim x As Double = 0
    6. Dim ergebnis As Double = 1
    7. Dim nachfolger As Double
    8. Dim vorgaenger As Double = x
    9. Dim abstand As Double
    10. Dim k As Double
    11. Dim n As Double
    12. Dim i As Double = 1
    13. x = TextBox1.Text
    14. k = TextBox2.Text
    15. For i = 1 And abstand = k And i = +1
    16. abstand = vorgaenger - nachfolger
    17. If (abstand < 0) Then
    18. abstand = -abstand
    19. vorgaenger = nachfolger
    20. k = (-k) * x
    21. nachfolger = k / i
    22. ergebnis += nachfolger
    23. End If
    24. Next
    25. n = Math.Log(1 + x)
    26. TextBox3.Text &= "" & ergebnis
    27. TextBox4.Text &= "" & n
    28. End Sub
    29. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    30. AcceptButton = Button1
    31. End Sub
    32. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    33. TextBox3.Clear()
    34. TextBox4.Clear()
    35. End Sub
    36. End Class

    VB.NET-Quellcode

    1. Dim x As Double = 0
    2. '[...]
    3. x = TextBox1.Text

    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden. String zu Zahl geht ja mal gar nicht. Am Ende steht in der TextBox noch "VaporiZed". Und ich will nicht Teil Deiner Berechnung werden 8|

    For i = 1 And abstand = k And i = +1 Was willst Du damit sagen?
    TextBox3.Text &= "" & ergebnis :?: TextBox3.Text &= ergebnis :!:
    Oder vielleicht doch eher TextBox3.Text = ergebnis :?:
    Was steht denn da so alles in TextBox3 drin? Und was passiert, wenn man die Sub mehrfach ausführt? Stehen dann mehrere Ergebnisse hintereinander, sodass aus "5" und "6" plötzlich "56" wird?

    Und btw: Warum das ganze Unterfangen an sich?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Dies funktioniert leider auch mit Strict On.

    VB.NET-Quellcode

    1. TextBox4.Text &= "" & n
    @dekon12 Formatiere Deine Ausgabe so:

    VB.NET-Quellcode

    1. TextBox4.Text = n.ToString()
    Wo ist das Problem?
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Was Du machen willst (um mal das deutlich zu sagen, was Dein Antwortpost leider nicht sagt), ist der Vergleich zwischen dem Ergebnis einer Frameworkberechnung und dem Ergebnis Deiner eigenen Berechnung.
    Das ist mir klar. Das macht aber Dein Code nicht, da er neuen Text an bestehenden Text anhängt. Schiebe Deine TextBoxX.Clear-Befehle an den Anfang der Button1_Click-Sub (obwohl in Button1_Click das alles eigentlich gar nicht hingehört, aber wurscht) und Du wirst Deinen Button2 schon mal los. Oder verwende gleich wie geschrieben TextBox3.Text = ergebnis und Du brauchst gar kein .Clear().
    Aber!
    Eigentlich ist das eine ziemlich falsche Herangehensweise. Für solch ein Prüfszenario, wie das hier, was Du erschaffen hast, wurden automatisierte UnitTests entwickelt. Das Funktionieren einer Sache, in dem Fall einer Berechnung, sollte immer automatisiert werden.
    Aber nocheinmal: Wozu das alles? Fingerübung?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hey Freunde des VB,

    ich habe mir mal bisschen den Kopf gemacht und es mehr oder weniger hinbekommen. Ein kleiner Fehler ist mir aber in der Berechnung unterlaufen!

    Habt ihr vielleicht eine Idee?

    VB.NET-Quellcode

    1. ​Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim k As Double
    3. Dim n As Double
    4. Dim ergebnis As Double
    5. Dim x As Double = TextBox1.Text
    6. Dim i As Double = TextBox2.Text
    7. Do
    8. k += 1
    9. n = x ^ k / k
    10. If k Mod 2 = 0 Then
    11. n = -n
    12. Else
    13. n = n
    14. End If
    15. Loop Until k = i = +1
    16. ergebnis = x - n
    17. x = Math.Log(1 + x)
    18. TextBox3.Text &= "" & ergebnis
    19. TextBox4.Text &= "" & x



    @VaporiZed: Unteranderem mache ich es mir schwer um die Schleifen und sonstige Algos besser verstehen und anwenden zu können. Ob es die richtige Lernmethode ist, ergibt sich dann


    Mfg

    P.S. : Danke für die Tipps, echt ein super Forum

    dekon12 schrieb:

    Ein kleiner Fehler ist mir aber in der Berechnung unterlaufen!
    Wie äußert der sich?

    RodFromGermany schrieb:

    @dekon12 Formatiere Deine Ausgabe so:

    VB.NET-Quellcode

    1. TextBox4.Text = n.ToString()
    Beratungsresistenz?
    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    dekon12 schrieb:

    halten wir mal den Ball flach
    und fangen an mit Option Strict On.
    Visual Studio - Empfohlene Einstellungen
    weil Dein Code bei mir nicht compiliert.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Fangen wir danach damit an:
    Loop Until k = i = +1
    Was glaubst Du, dass in dieser Zeile geschieht?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    dekon12 schrieb:

    Ich würde sagen
    Du hast offensichtlich keine Ahnung, was Dein Code machen soll. Wie sollen wir Dir denn da helfen?
    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    dekon12 schrieb:

    Ich würde sagen, dass das Programm k bis zur eingabe i mit einem Wert mehr hochzählt
    Ich versteh gerade nicht, was das bedeutet, aber was immer es auch ist: Nein.
    Es bedeutet, dass zuerst geschaut wird, ob i = 1 ist. Denn i = +1 ist etwas anderes als i += 1.
    Also wird zuerst geschaut, ob i also 1 ist, der Vergleich also True ergibt. Und dann wird geschaut, ob k den gleichen Wert hat, also auch True ist. Und dieser Vergleich, also zwischen k und i = 1 wird für die Schleife hergenommen. Also wird die Schleife wiederholt, bis k als Boolean das gleiche ergibt wie i = 1.
    Dass das jetzt nicht zum Ergebnis führt, ist irrelevant. Relevant ist nur, dass Du noch nicht detailliert weißt, was Dein Code genau macht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Relevant ist nur, dass Du noch nicht detailliert weißt, was Dein Code genau macht.
    @dekon12 insbesondere, weil Du Option Strict Off hast und Du deshalb Deinen Fehler nicht findest.
    Bei mir wird diese Zeile angemeckert und er compiliert nicht.
    Da Du bereits in Post #2 darauf hingewiesen wurdest und nichts unternommen hast, komme ich zur Schlussfolgerung: Beratungsresistent.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    ln (1 + x) in eigenen Code ohne Math.Log(1 + x)

    Hi ich habe schonmal gefragt wo mein Fehler ist, nun frage ich mich wie ich das anstelle, dass mein Ergebnis sich aus der Hochzahlrechnungen in ein Ergebnis bildet!!

    VB.NET-Quellcode

    1. ​Public Class Form1
    2. Private Sub Label4_Click(sender As Object, e As EventArgs) Handles Label4.Click
    3. End Sub
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim i As Double
    6. Dim j As Double
    7. Dim x As Double = TextBox1.Text
    8. Dim n As Double = TextBox2.Text
    9. For k As Integer = 0 To 5 Step 1
    10. i = x ^ k / k
    11. Next k
    12. x = Math.Log(1 + x)
    13. TextBox3.Text &= "" & i
    14. TextBox4.Text &= "" & x
    15. End Sub
    Da Du jetzt schon zweifellos auf Option Strict On umgestellt und alle Folgefehler beseitigt hast, fangen wir nochmal ganz woanders an. Woher hast Du denn den Code? Bitte verlinken. Es scheint mir zwar die Potenzreihe zu sein, die bei Wikipedia hinterlegt ist, aber die gilt ja nur für 0 <= x <= 1. Was steht außerdem in der TextBox für X als mögliche Werte?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @dekon12 Wenn das Dein aktueller Code ist, fällt mir bezugnehmend auf frühere Posts nur ein:
    Beratungsresistenz.
    Offenbar willst Du nicht, dass Dir geholfen wird.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!