Hallo
ich habe ein Problem mit einer Aufgabe bei der ich nicht weiß wie ich bei Visual basic vorgehen soll. Kann mir jemand helfen? Die Aufgabe lautet:
Modifizieren Sie das Programm gauss.xlsm für die Berechnung eines Interpolationspolynoms 5. Grades zu den Punkten (,0 ;1) (0,5 ; 3) (1 ; 2) (1,5 ; 4) (1,8 ; 2) und (2 ; 3,5). Setzen Sie die Punkte in ein Polynom 5. Grades ein und bestimmen Sie so 6 lineare Gleichungen mit 6 Unbekannten (Koeff.), erstellen Sie daraus die Matrix A und die rechte Seite b für das zu lösende Gleichungssystem! Geben Sie als Lösung das Interpolationspolynom an.
Folgende Programmierung habe ich bisher dazu:
Option Explicit
Sub gauss_sp() 'Gaussalgorithmus mit Spaltenpivotsuche
Dim max As Double 'maximalwert der spaltenpivotsuche
Dim s As Double 'Hilfsvariable
Dim b(1 To 14) As Double 'rechte Seite
Dim x(1 To 14) As Double 'Lösungsvektor
Dim a(1 To 14, 1 To 14) As Double ' Matrix
Dim n As Integer 'dimension
Dim i As Integer 'schleifenparameter
Dim j As Integer 'schleifenparameter
Dim k As Integer 'schleifenparameter
'Einlesen/Eingabe der Startwerte
n = InputBox("maximal 14", " Dimension")
If n > 14 Then
MsgBox ("n darf nicht größer als 14 sein")
n = InputBox("maximal 14", " Dimension")
End If
If n > 14 Then Exit Sub
With Tabelle1
For i = 1 To n
b(i) = .Cells(i, n + 2)
For j = 1 To n
a(i, j) = .Cells(i, j)
Next
Next
For i = 1 To n
'Spaltenpivotsuche
max = Abs(a(i, i))
k = i
For j = i + 1 To n
If Abs(a(j, i)) > max Then
max = Abs(a(j, i))
k = j
End If
Next
If k <> i Then
s = b(i)
b(i) = b(k)
b(k) = s
For j = i To n
s = a(i, j)
a(i, j) = a(k, j)
a(k, j) = s
Next
End If
If a(i, i) = 0 Then
MsgBox ("Matrix singulär")
Exit Sub
End If
'Dreieckszerlegung
For j = i + 1 To n
If a(j, i) <> 0 Then
s = a(j, i) / a(i, i)
a(j, i) = 0
b(j) = b(j) - b(i) * s
For k = i + 1 To n
a(j, k) = a(j, k) - a(i, k) * s
Next
End If
Next
Next
'Kontrollausgabe
'For i = 1 To n
' For j = 1 To n
' .Cells(i + n + 2, j) = a(i, j)
' Next
'Next
x(n) = b(n) / a(n, n)
.Cells(n, n + 4) = x(n)
For j = n - 1 To 1 Step -1
s = 0
For k = j + 1 To n
s = s + a(j, k) * x(k)
Next
x(j) = (b(j) - s) / a(j, j)
.Cells(j, n + 4) = x(j)
Next
End With
End Sub
Danke schon mal im Voraus
ich habe ein Problem mit einer Aufgabe bei der ich nicht weiß wie ich bei Visual basic vorgehen soll. Kann mir jemand helfen? Die Aufgabe lautet:
Modifizieren Sie das Programm gauss.xlsm für die Berechnung eines Interpolationspolynoms 5. Grades zu den Punkten (,0 ;1) (0,5 ; 3) (1 ; 2) (1,5 ; 4) (1,8 ; 2) und (2 ; 3,5). Setzen Sie die Punkte in ein Polynom 5. Grades ein und bestimmen Sie so 6 lineare Gleichungen mit 6 Unbekannten (Koeff.), erstellen Sie daraus die Matrix A und die rechte Seite b für das zu lösende Gleichungssystem! Geben Sie als Lösung das Interpolationspolynom an.
Folgende Programmierung habe ich bisher dazu:
Option Explicit
Sub gauss_sp() 'Gaussalgorithmus mit Spaltenpivotsuche
Dim max As Double 'maximalwert der spaltenpivotsuche
Dim s As Double 'Hilfsvariable
Dim b(1 To 14) As Double 'rechte Seite
Dim x(1 To 14) As Double 'Lösungsvektor
Dim a(1 To 14, 1 To 14) As Double ' Matrix
Dim n As Integer 'dimension
Dim i As Integer 'schleifenparameter
Dim j As Integer 'schleifenparameter
Dim k As Integer 'schleifenparameter
'Einlesen/Eingabe der Startwerte
n = InputBox("maximal 14", " Dimension")
If n > 14 Then
MsgBox ("n darf nicht größer als 14 sein")
n = InputBox("maximal 14", " Dimension")
End If
If n > 14 Then Exit Sub
With Tabelle1
For i = 1 To n
b(i) = .Cells(i, n + 2)
For j = 1 To n
a(i, j) = .Cells(i, j)
Next
Next
For i = 1 To n
'Spaltenpivotsuche
max = Abs(a(i, i))
k = i
For j = i + 1 To n
If Abs(a(j, i)) > max Then
max = Abs(a(j, i))
k = j
End If
Next
If k <> i Then
s = b(i)
b(i) = b(k)
b(k) = s
For j = i To n
s = a(i, j)
a(i, j) = a(k, j)
a(k, j) = s
Next
End If
If a(i, i) = 0 Then
MsgBox ("Matrix singulär")
Exit Sub
End If
'Dreieckszerlegung
For j = i + 1 To n
If a(j, i) <> 0 Then
s = a(j, i) / a(i, i)
a(j, i) = 0
b(j) = b(j) - b(i) * s
For k = i + 1 To n
a(j, k) = a(j, k) - a(i, k) * s
Next
End If
Next
Next
'Kontrollausgabe
'For i = 1 To n
' For j = 1 To n
' .Cells(i + n + 2, j) = a(i, j)
' Next
'Next
x(n) = b(n) / a(n, n)
.Cells(n, n + 4) = x(n)
For j = n - 1 To 1 Step -1
s = 0
For k = j + 1 To n
s = s + a(j, k) * x(k)
Next
x(j) = (b(j) - s) / a(j, j)
.Cells(j, n + 4) = x(j)
Next
End With
End Sub
Danke schon mal im Voraus