Willkommen im PC-Welt-Forum
Liebe Leser,
Wenn dies Ihr erster Besuch hier ist, lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Sie müssen sich vermutlich registrieren, bevor Sie Beiträge verfassen können. Klicken Sie rechts auf 'Jetzt registrieren.', um den Registrierungsprozess zu starten.
Wenn dies Ihr erster Besuch hier ist, lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Sie müssen sich vermutlich registrieren, bevor Sie Beiträge verfassen können. Klicken Sie rechts auf 'Jetzt registrieren.', um den Registrierungsprozess zu starten.
Ergebnis 1 bis 9 von 17
-
23.06.2012, 15:27 #1
ROM
- Registriert seit
- 06.2012
- Beiträge
- 7
VBA - Hilfe zu Aufgabenstellung
Hallo,
ich habe in der FH eine Aufgabenstellung bekommen, die ich gerade verzweifelt zu lösen versuche (habe normalerweise weder mit numerischer Mathematik noch mit Algorithmen viel zu tun und bin daher eher ahnungslos).
Es geht um die Modifizierung des Newtonverfahrens in VBA. Das Verfahren selbst haben wir schon programmiert, jetzt sollen folgende Änderungen vorgenommen werden:
1. die Eingabe von zwei Startnäherungen x-1=a und x0=b ermöglichen (wenn │f(x-1)│ < │f(x0)│ dann tauschen Sie x-1 und x0).
2. die Ableitung durch den Differenzenquotienten f(xn)- f(xn-1)/ xn - xn-1 ersetzen (Regula falsi).
Test am Bsp.: x7 – 4x3 + cos(x) + 2
Dokumentieren Sie Ihre Modifikation durch ein Flussdiagramm und den VBA-Code.
Hier unser VBA-Code zum Newtonverfahren:
Sub newton()
Dim x As Double
Dim eps As Double
Dim s As Double
Dim n As Integer
Dim i As Integer
With Tabelle1
x = .Cells(1, 1)
eps = .Cells(1, 2)
n = .Cells(1, 3)
For i = 0 To n
.Cells(3 + i, 1) = i
.Cells(3 + i, 2) = x
.Cells(3 + i, 3) = f(x)
If Abs(f(x)) < eps Then
MsgBox ("Nullstelle erreicht mit dem " & i & ".ten Iterationsschritt")
Exit Sub
End If
If Abs(df(x)) < eps Then
MsgBox ("Ableitung = 0 beim " & i & ".ten Iterationsschritt")
Exit Sub
End If
s = f(x) / df(x)
If Abs(s) < eps Then
MsgBox ("Genauigkeit erreicht mit dem " & i & ".ten Iterationsschritt")
.Cells(4 + i, 1) = i + 1
.Cells(4 + i, 2) = x - s
.Cells(4 + i, 3) = f(x - s)
Exit Sub
End If
x = x - s
Next
.Cells(3 + n, 1) = n
.Cells(3 + n, 2) = x
.Cells(3 + n, 3) = f(x)
End With
End Sub
Function f(x As Double) As Double
f = x ^ 7 - 4 * x ^ 3 + Cos(x) + 2
End Function
Function df(x As Double) As Double
df = 7 * x ^ 6 - 12 * x ^ 2 - Sin(x)
End Function
------------------
So. Mein Problem fängt schon bei den zwei Startnäherungen an, denn ich kann ja keine 2 Schleifen gleichzeitig laufen lassen, sondern nur hintereinander. Dass man ne neue Variable (zB xx) definiert und einlesen muss ist klar.
Wie das mit dem Vertauschen geht weiß ich auch und ein Flussdiagramm bekomm ich notfalls auch noch hin.
Aber: wie gebe ich den Differenzenquotienten ein? was muss ich dafür definieren?
Und dann brauche ich die Funktion und den Diff.quot. ja jeweils einmal für x und einmal für xx, richtig?
Und wie läuft das dann mit den Schleifen? Muss ich erst die eine Näherung laufen lassen und dann die andere, oder erste Schleife von Näherung 1, erste Schleife von Näherung 2, zweite Schleife von Näherung 1, etc (also immer hin und her)?
wäre über jeden Tipp dankbar.
LG
-
23.06.2012, 17:57 #2
Ein halb ausgebilderter Ingenieur ist eine tickende Zeitbombe, sagte unser Automatisierungsguru.
Und auf Plagiatismus steht der Entzug des akademischen Grades ... .
Ein Kommilitone kann da sicher besser helfen, ansonsten mal in ein gutes Buch sehen:
http://www.amazon.de/Microsoft-Excel...0466980&sr=8-1 .
-
23.06.2012, 18:11 #3
@chipchap, erschrecke doch unseren neuen Forenteilnehmer nicht..

@Simone1987, ein Thread reicht zu deinem Thema!
Gruß
XSei ein Teil der Lösung, nicht Teil des Problems.Die Regeln<>Für NeueinsteigerWer nicht mit der Zeit geht, der geht mit der Zeit.
-
23.06.2012, 18:25 #4
ROM
- Registriert seit
- 06.2012
- Beiträge
- 7
@x.man: sorry, wusste nicht wo es am besten hinpasst.
@chipchap: für die schlechte qualität meiner ausbildung im bezug aufs programmieren kann ich nichts. und bücher zum thema habe ich, es hapert aber an der Umsetzung.
-
23.06.2012, 18:27 #5
Hinweis: Hausaufgaben werden hier von den Helfern zu 98% nicht übernommen...kann mich aber auch irren...
Sei ein Teil der Lösung, nicht Teil des Problems.Die Regeln<>Für NeueinsteigerWer nicht mit der Zeit geht, der geht mit der Zeit.
-
23.06.2012, 18:30 #6
ROM
- Registriert seit
- 06.2012
- Beiträge
- 7
Ich erwarte ja nicht, dass jemand mir die Aufgabe löst.
Die Antwort auf eine meiner Fragen unten wäre u.U. schon hilfreich.
-
23.06.2012, 18:38 #7
-
23.06.2012, 21:02 #8
-
23.06.2012, 21:32 #9
Newton… Regula falsi… Da hab ich plötzlich eine akute Form von Unlust

Quälen wir das Gehirn was damals im LK über mich hereinkam (auf Ethan-1-ol werde ich aber besser mal verzichten):
Was sollen denn a, b, x, und x0 vorstellen? Und wieso speziell x-1?1. die Eingabe von zwei Startnäherungen x-1=a und x0=b ermöglichen (wenn │f(x-1)│ < │f(x0)│ dann tauschen Sie x-1 und x0).
Weiterhin: die Tauschanweisung ist mir auch nicht schlüssig. wenn ich das einmal mit a durchlaufen lasse bekomme ich einige f(a). Mache ich das auch mit b kriege ich einen Schwung f(b). Und ich kann mir lebhaft vorstellen, dass mal der Betrag von a kleiner als der von b ist - und umgekehrt. Für welches a bzw. b ist denn die Bedingung zu erfüllen um als Schalter zu fungieren?
Dies durchläuft den Code 2x und nutzt jeweils die Spalten A,B,C sowie D,E,F die mit den Vorgaben gefüttert werden müssen.Code:Sub newton() Rem Serie 1 (x-1) in Salten A,B,C; Serie 2 (x0) in E,F,G Dim x As Double Dim eps As Double Dim s As Double Dim n As Integer Dim i As Integer Dim ab As Byte ab = 0 Do x = Cells(1, ab * 5 + 1) eps = Cells(1, ab * 5 + 2) n = Cells(1, ab * 5 + 3) For i = 0 To n Cells(3 + i, ab * 5 + 1) = i Cells(3 + i, ab * 5 + 2) = x Cells(3 + i, ab * 5 + 3) = f(x) If Abs(f(x)) < eps Then MsgBox ("Durchlauf " & ab + 1 & vbCr & vbCr & "Nullstelle erreicht mit dem " & i & ".ten Iterationsschritt") Exit For End If If Abs(df(x)) < eps Then MsgBox ("Durchlauf " & ab + 1 & vbCr & vbCr & "Ableitung = 0 beim " & i & ".ten Iterationsschritt") Exit For End If s = f(x) / df(x) If Abs(s) < eps Then MsgBox ("Durchlauf " & ab + 1 & vbCr & vbCr & "Genauigkeit erreicht mit dem " & i & ".ten Iterationsschritt") Cells(4 + i, ab * 5 + 1) = i + 1 Cells(4 + i, ab * 5 + 2) = x - s Cells(4 + i, ab * 5 + 3) = f(x - s) Exit For End If x = x - s Next Cells(3 + n, ab * 5 + 1) = n Cells(3 + n, ab * 5 + 2) = x Cells(3 + n, ab * 5 + 3) = f(x) ab = ab + 1 Loop Until ab = 2 End Sub Function f(x As Double) As Double f = x ^ 7 - 4 * x ^ 3 + Cos(x) + 2 End Function Function df(x As Double) As Double df = 7 * x ^ 6 - 12 * x ^ 2 - Sin(x) End Function
Was fehlt wäre ein Umschalten, aber die Bedingungen sind für mich undurchsichtig.
»Nebel, Nebel gehe weg - verzieh dich an ’nen andren Fleck!« (nach Hägar , dem Schrecklichen)
Eric MarchEric March • »Wenn du eine Frage stellst musst du auch akzeptieren eine Antwort zu bekommen.« (Weisheit aus dem Kongo)
Ähnliche Themen
-
hilfe hilfe hilfe...grafikkarte wird nich erkannt...finde keine lösung
Von kiwi22 im Forum Grafikkarten & MonitoreAntworten: 4Letzter Beitrag: 14.06.2011, 20:05 -
!!!Hilfe!!!! brauche schnelle Hilfe Computer Stürzt immer ab
Von brunobanani im Forum CPU, BIOS & Motherboards, RAMAntworten: 14Letzter Beitrag: 21.12.2008, 14:07 -
hilfe brauche dringend hilfe wegen mein mp3 player
Von oli16 im Forum AudioAntworten: 1Letzter Beitrag: 24.04.2007, 19:33 -
HILFE!!Kann Festplatte nicht öffnen!!Brauche Hilfe
Von niked12 im Forum Festplatten, SSD, USB-Sticks, CD/DVD/Blu-rayAntworten: 17Letzter Beitrag: 19.04.2007, 14:01 -
Hilfe!!! 250gb Platte Funktioniert Nich Richtig! Hilfe!!!
Von MaddinZ im Forum Festplatten, SSD, USB-Sticks, CD/DVD/Blu-rayAntworten: 12Letzter Beitrag: 25.07.2006, 16:51
Stichworte
12

Zitieren

Lesezeichen