Hallo Jan100,
wenn es so wichtig für euch ist, finde ich es merkwürdig, dass ihr euch nicht die Mühe macht, mit Hilfe der VBA-Hilfe nachzuvollziehen, was man euch vorgeschlagen hat. Ich weiß ja nicht, was die "Wichtigkeit" ist, doch ist bei der Beschreibung davon auszugehen, dass es sich um Übungen für Schule, Studium oder Berufsausbildung handelt. Wollt ihr denn später für die Lösung eurer Aufgaben auch die ganze Welt beteiligen? Programmieren lernt man nur durch Programmieren. Ich verstehe das Forum so, dass man dann weiter hilft, wenn jemand an einer Stelle nicht weiter kommt. Dass es manchmal für mich schneller geht, eine fertige Lösung zu schicken, als speziell auf ein Problem einzugehen, liegt daran, dass oft schon fertige Lösungen vorliegen, die ich nur kopiere. Nur in den wenigsten Fällen wird dadurch ein Problem vollständig gelöst. Ich verwende ungern mehr als 10 Minuten dafür, ein Anliegen zu bearbeiten. Ich gehe davon aus, dass jeder hierfür Verständnis aufbringen wird. Ich kann deshalb meistens auch nicht die Vorschläge komplett austesten. Meine Anpassung an die Fragestellung ist deshalb auch manchmal nicht vollständig. Ich verstehe die Vorschläge immer nur als Hinweise, wie man das Problem in den Griff bekommen kann. Oft sind die Beschreibungen in den Fragestellungen auch sehr unscharf, so dass es zu viele Möglichkeiten gibt, was der Schreiber eigentlich möchte - von Orthografie und Interpunktion ganz abgesehen.
Dass ich in meinem Vorschlag für die Berechnung des Integrals anstelle der ersten Spalte die erste Zeile der Excel-Tabelle genommen habe, obwohl ich etwas anderes beschrieben habe, wird jedem ernsthaften Lernenden des VBA sofort aufgefallen sein und liegt am o.a. Kopieren. Der Witz meines Vorschlages war, dass in E1 die zu integrierende Funktion als Text (ohne Gleichheitszeichen!) und nicht als Excel-Funktion stand. So war ja sinngemäß die Aufgabe gestellt. Dieses ggf. in eine Excel-Funktion umzusetzen, sollte auch einem Anfänger möglich sein.
Wenn ihr in A5 eine Excel-Funktion, z.B. "=A4^3", "=sin(A4)*ln(A4) oder "=abs(ln(A4))^log(A4)",
in A1 die untere Integralgrenze, in A2 die obere Integralgrenze und in A3 die Schrittweite einsetzt, ist das Programm doch ganz einfach. Fehler aus Polstellen oder Unstetigkeiten werden natürlich auch hier nicht aufgefangen! Der Funktionswert wird jeweils ungefähr in der Intervall-Mitte genommen. Das hat zwei Vorteile: erstens kann man annehmen, dass das Produkt aus Funktionswert mal Intervallbreite der zu berechnenden Teilfläche besser entspricht, wie wenn der Funktionswert an einer Intervallgrenze genommen wird, und zweitens vermeidet man Probleme mit dem Abbruch einer Berechnungsschleife, weil bei Addition kleiner Zahlen Rundungsfehler dadurch entstehen, dass im Binärsystem Zahlen durchaus periodisch nicht abbrechen, die dies im Dezimalsystem tun (rechnet doch einmal 0,1 im Binärsystem aus!). Nun ist die Intervallbreite für alle Intervalle gleich, weshalb man die Multiplikation auch zum Schluss machen kann. Um das Integral zu berechnen, braucht man also zunächst nur die Funktionswerte zu addieren.
Sub Integral_mit_Funktion_in_Zelle_A5()
s = 0 'Variable zum Aufaddieren der Funktionswerte
For x = Cells(1, 1) + Cells(3, 1) / 2 To Cells(2, 1) Step Cells(3, 1) 'jeweils ca. die Intervallmitte
Cells(4, 1) = x 'lfd x
s = s + Cells(5, 1) 'Aufaddition der in A5 von Excel berechneten Funktionswerte
Next x
MsgBox s * Cells(3, 1) 'Ergebnis der Addition multipluziert mit Intervallbreite
End Sub
Gruß
Holger
Jan100 schrieb am 27.02.2009 16:33:33:
Finde es toll dass auf dieser seite wirklich sehr kompetente leute anzutreffen sind.
eure hilfe ist zu gut, sprich die lösungen sind derart raffiniert, dass niemand davon aus gehen würde, dass sie von uns laien stammen.
unser problem liegt darin, dass es sich bei den aufgaben um etwas sehr wichtiges handelt. bewusst erwähne ich diese wichtigkeit nicht muss leider reichen.
geholfen wäre mir bzw paddy mit einer einfach strukturierten lösung, die von einem laien gewählt würde.
weiss nicht ob dieser beitrag noch rechtzeitig gelesen wird von jemand kompetenten der sich der aufgabe gewachsen fühlt eine anfänger lösung zu basteln.
mir wäre nur geholfen wenn dies noch bis ca 22 uhr der fall wäre
vielen dank
bis demnächst :)
Jan100 schrieb am 27.02.2009 10:31:13:
Sub Integral()
Schreiben Sie ein Programm zur numerischen Integration einer Funktion mit einer Variablen "x". Die Zellen eines Arbeitsblattes enthalten A1: die untere Integralgrenze, A2: die obere Integralgrenze, A3: die Schrittweite, A4: x (muss vom Programm in einer Schleife bestimmt werden), A5: die Funktion als Formel. Das Integral soll in einer MsgBox ausgegeben werden.
Dim obereIntegralgrenze#, AnzahlTeilintervalle#, x#, Breite#, irgendwas# 'deklariert als double
Dim Laufvariable1% 'deklariert als integer
Dim Funktionsgleichung$ 'deklariert als string
Dim Ergebnis! 'deklariert als single
'eingabe der benötigten werte
uIntgrenze = InputBox("untereIntegralgrenze")
oIntgrenze = InputBox("obereIntegralgrenze")
Anzinterv = InputBox("AnzahlTeilintervalle")
Fnktgl = InputBox("Funktionsgleichung") 'z.B (=4*x+6)
'
Cells(1, 1) = uIntgrenze
Cells(2, 1) = oIntgrenze
Cells(3, 1) = Anzinterv
Cells(5, 1) = Fnktgl
Breite = (oIntgrenze - uIntgrenze) / Anzinterv
For Laufvariable1 = 1 To Anzinterv 'laufindex
Vari = uIntgrenze + (Laufvariable1 * Breite) ' ZelleA4 x
Cells(4, 1) = x
irgendwas = Cells(5, 1)
irgendwas = irgendwas + Cells(6, 1)
Call Zwischenergebnis(irgendwas)
Next
Ergebnis = Breite * Cells(6, 1)
MsgBox (Ergebnis)
End Sub
Sub Zwischenergebnis(irgendwas)
Cells(6, 1) = irgendwas
End Sub
Habe mich an der Aufgabe versucht, jedoch beziehe ich weder meine Werte aus der Tabelle, noch gibt mir das Programm stets die gleichen Ergebnisse aus.
Vielen Dank nochmals im Vorraus
Jan100 |