Thema Datum  Von Nutzer Rating
Antwort
09.12.2010 19:44:21 Florian Krüger
NotSolved
Blau Aw:Stammfunktion in VBA programmieren
11.12.2010 11:42:47 Holger
NotSolved

Ansicht des Beitrags:
Von:
Holger
Datum:
11.12.2010 11:42:47
Views:
887
Rating: Antwort:
  Ja
Thema:
Aw:Stammfunktion in VBA programmieren
Hallo Florian,
es ist nicht klar, ob du wirklich die Stammfunktion berechnen willst, oder nur eine nummerische Integration durchführen willst.

Die Bestimmung einer Stammfunktion ist sehr aufwändig. Für nicht zu komplizierte Funktionen habe ich das früher einmal in Fortran bewerkstelligt. Dieses Programm stelle ich aber nicht zur Verfügung.

Das Programmieren einer nummerischen Integration ist eigentlich einfach, weil es doch nur darum geht, das Intervall zwischen den Integrationsgrenzen in kleine Intervalle aufzuteilen, die Fläche, die die Funktion mit der x-Achse einschließt z.B. durch Näherung als Rechteck jeweils für jedes Teilintervall zu berechnen und alle Flächen zu addieren. Ich halte eine solche Aufgabe von Anfängern für lösbar!
Aus der Literatur sind dir wahrscheinlich verschiedene Näherungen bekannt. Ich habe mich für Simpson entschieden, weil erfahrungsgemäß so die Konvergenz leicht überprüft werden kann und so die besten Ergebnisse erzielt werden. Dabei wird die Anzahl der Teilintervalle automatisch so lange erhöht, bis der Quotient zweier aufeinander folgender Iterationen den Fehlerwert unterschreitet.

Das Makro ist für Excel vorgesehen.

Sub Integral_nach_Simpson()
'untere_Integrationsgrenze = A2
'obere_Integrationsgrenze = B2
'Funktion = C2
'relative Genauigkeit = D2, z.B. 0,0001
'Mit der Funktion müssen sowohl Excel als auch VBA etwas anfangen können:
'Die Integrationsvariable muss x heißen.
'z.B. x^3, sin(x)*ln(x) oder abs(ln(x))^log(x).
'Aber z.B. "Wurzel(x)" oder Sqr(x) gehen nicht, dafür z.B. "x^0.5".
'Fehler aus Polstellen oder Unstetigkeiten werden nicht unbedingt aufgefangen!
Cells(1, 1) = "untere Grenze"
Cells(1, 2) = "obere Grenze"
Cells(1, 3) = "Funktion(x)"
Cells(1, 4) = "Genauigkeit"
ActiveSheet.Range(Cells(1, 1), Cells(1, 4)).ColumnWidth = 15
ActiveSheet.Range(Cells(1, 3), Cells(1, 3)).ColumnWidth = 30

Application.Volatile
If Cells(2, 4) = 0 Or Cells(2, 4) = "" Then Cells(2, 4) = 0.001
f = Replace(Cells(2, 3), "e", "2,71828182845905")
d = Replace(f, "x", Cells(2, 1))
s = Evaluate(Replace(d, ",", "."))
d = Replace(f, "x", Cells(2, 2))
s = (s + Evaluate(Replace(d, ",", "."))) / 2
n = 2
Do
c = (Cells(2, 2) - Cells(2, 1)) / 2 / n
v = 0
a = Cells(2, 1)
For i = 1 To n - 1
a = a + c
d = Replace(f, "x", a)
v = v + 2 * Evaluate(Replace(d, ",", "."))
a = a + c
d = Replace(f, "x", a)
v = v + Evaluate(Replace(d, ",", "."))
Next i
a = Cells(2, 2) - c
d = Replace(f, "x", a)
v = v + 2 * Evaluate(Replace(d, ",", "."))
v = (Cells(2, 2) - Cells(2, 1)) * (s + v) / 3 / n
fehler = Abs(w - v)
If n = 2 Then fehler = 10000
w = v
z = w * CDbl(Cells(2, 4)): If w kleiner 1 Then z = 1'Kleiner-Zeichen verwenden!"
n = n + 1
Loop Until fehler kleiner= z 'Kleiner-Zeichen verwenden!"
MsgBox v
End Sub

Ich würde das Makro in eine passende UserForm einbetten.
Ich bitte um Rückmeldung!
Gruß
Holger



Florian Krüger schrieb am 09.12.2010 19:44:21:

Hallo zusammen,

ich bin absoluter Neuling auf dem Gebiet der Programmierung und habe von unserm Dozenten ein Studienprojekt zur nummerischen Integration zugeteilt bekommen. Bisher bin ich schon ganz gut voran gekommen (Funktion einlesen, mittelwerte u.s.w.), nur an der Stammfunktion hapert es. Denn diese muss für jede mathematische Funktion gültig sein...Wie kann ich sowas in VBA programmieren??Vor allem wie definiere ich die Grenzen für eine beliebige Funktion????

danke im voraus

Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
09.12.2010 19:44:21 Florian Krüger
NotSolved
Blau Aw:Stammfunktion in VBA programmieren
11.12.2010 11:42:47 Holger
NotSolved