Polynom berechnen und zeichnen

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von FredM.

    Hallo,

    ich hab dein Code jetzt mal so umgewandelt:


    VB.NET-Quellcode

    1. Public Function NewtonPoly(ByVal WerteX() As Double, ByVal WerteY() As Double, ByVal Grad As Integer) As String
    2. Dim n, nmax, j, i As Double
    3. Dim r_var As Integer = 4
    4. nmax = 10
    5. Dim a(nmax) As Double
    6. Dim s(nmax) As Double
    7. Dim ergebniss As Double
    8. n = Grad
    9. If n > nmax Then
    10. n = nmax
    11. Grad = n
    12. End If
    13. For z = WerteX(0) To WerteX(n)
    14. For i = 0 To n
    15. s(i) = WerteY(i)
    16. Next
    17. For i = 1 To n
    18. For j = n To i Step -1
    19. s(j) = (s(j) - s(j - 1)) / (WerteX(j) - WerteX(j - i))
    20. Next
    21. Next
    22. For i = 0 To n
    23. a(i) = s(i)
    24. Next
    25. For i = 0 To n - 1
    26. For j = n - 1 To i Step -1
    27. a(j) = a(j) - WerteX(j - i) * a(j + 1)
    28. Next
    29. Next
    30. ergebniss = Math.Round(a(0), r_var)
    31. For i = 1 To n
    32. If a(i) >= 0 Then
    33. ergebniss = ergebniss
    34. End If
    35. 'ergebniss = ergebniss & CStr(Math.Round(a(i), r_var) & "x^" & CStr(Math.Round(i, r_var)))
    36. ergebniss = ergebniss + (Math.Round(a(i), r_var) * z ^ (Math.Round(i, r_var)))
    37. Next
    38. ListBox1.Items.Add(Math.Round(ergebniss, r_var))
    39. ListBox2.Items.Add(z)
    40. Chart1.Series(0).Points.AddXY(z, Math.Round(ergebniss, r_var))
    41. Next
    42. Return ergebniss
    43. End Function
    44. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    45. Dim x(4), y(4) As Double
    46. x(0) = 0
    47. x(1) = 2
    48. x(2) = 9
    49. x(3) = 15
    50. x(4) = 17
    51. y(0) = 2
    52. y(1) = 2
    53. y(2) = 19
    54. y(3) = 5
    55. y(4) = 10
    56. NewtonPoly(x, y, 3)
    57. 'Poly(x, y, 4)
    58. End Sub



    Damit kann ich die Kurve zeichnen, bzw wenn es Strings sind wirft er mir das gleiche Ergebnis aus wie Excel. ABER! Nur wenn der Grad n = Anzahl Werte - 1 ist!
    Reduziere ich den Grad bei gleichbleibender Anzahl von Werte unterscheidet sich das Ergebnis von dem von Excel. Ich weiß auch warum, weil die Funktion sich auf den Grad n bezieht und die zusätlichen Werte garnicht beachtet. Excel tut dies allerding schon. Also muss ich irgendwie sagen das er alle Werte durchlaufen soll aber trotzdem nur ein Polynom 2 oder dritten Grades erstellen soll. Weil wenn man 20 Werte hat kann man ja nicht ein Polynom 20-igsten Grades aufstellen oder? Ich hab das mal ausprobiert da kam nur murks raus, die Y Werte sind irgendwann explodiert.


    Wie erstellt Excel ein Polynom 3-Grades bei zb. 10 Werten, bildet es dann 4. Mittelwerte? Oder geht der Algorithmus wirklich alle 10 werte durch?
    Bilder
    • Excel1PNG.PNG

      19,06 kB, 750×326, 152 mal angesehen
    • Form.PNG

      43,73 kB, 911×538, 162 mal angesehen
    • Excel2PNG.PNG

      18,65 kB, 747×328, 148 mal angesehen
    • Form2.PNG

      42,8 kB, 911×538, 155 mal angesehen
    "Es ist absolut möglich, dass jenseits der Wahrnehmung unserer Sinne ungeahnte Welten verborgen sind." — Albert Einstein
    "Wenn die Macht der Liebe die Liebe zur Macht übersteigt, erst dann wird die Welt endlich wissen, was Frieden heißt." — Jimi Hendrix

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FredM“ ()