Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 22.01.2012 um 17:40 Uhr
Zuletzt editiert am: 22.01.2012 um 17:40 Uhr
|
|
Hi,
ich will eine App schreiben, mit der man das Integral berechnen kann.
Wie hier zu sehen ist, geht das mit einfachen Funktionen nach dem Prinzip a*x^b ganz gut.
Jetzt will ich das ganze aber noch erweitern, indem der User in einem einzigen Textfeld eine Funktion eingeben kann, von der dann (im gewünschten Intervall) das Integral berechnet wird.
Die Empfehlung eines Users war ein mathematischer Parser wie dieser hier.
Das wäre schon mal ein Anfang, aber ich will die Gleichung ja nicht lösen, sondern mit Variablen weiterrechnen, was dieser nicht kann.
Hätte jemand einen Tipp für mich?
P.S.: Die Sprache ist VB.NET.
|
|
s1m0n - 33
Experte
(offline)
Dabei seit 11.2007
1294
Beiträge
|
Geschrieben am: 22.01.2012 um 17:43 Uhr
|
|
Wolframalpha App :P
http://www.sysprofile.de/id54604
|
|
Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 22.01.2012 um 17:57 Uhr
|
|
Zitat von s1m0n: Wolframalpha App :P
Ich weiß dass es diverse andere Programme können, nur würde ich das gerne auch mal als Übung machen.
|
|
piepmax - 37
Profi
(offline)
Dabei seit 04.2006
794
Beiträge
|
Geschrieben am: 24.01.2012 um 14:54 Uhr
|
|
Zitat von Protagonist: Zitat von s1m0n: Wolframalpha App :P
Ich weiß dass es diverse andere Programme können, nur würde ich das gerne auch mal als Übung machen.
Es gibt die Möglichkeit Code direkt aus der Anwendung heraus zu kompilieren. Damit wäre es möglich.
Wäre aber mit Kanonen auf Spatzen geschossen.
Die Feder ist mächtiger als das Schwert - Die Ignoranz gefährlicher als das Messer.
|
|
EE_Toddi_EE - 28
Halbprofi
(offline)
Dabei seit 01.2010
101
Beiträge
|
Geschrieben am: 24.01.2012 um 15:07 Uhr
|
|
schreib lieber ne app die die lösungen von jedem mathe buch hat
|
|
the_pen
Profi
(offline)
Dabei seit 05.2009
665
Beiträge
|
Geschrieben am: 24.01.2012 um 15:13 Uhr
|
|
Zitat von EE_Toddi_EE: schreib lieber ne app die die lösungen von jedem mathe buch hat
Und wo soll er die lösungen herbekommen ??
\_/ This is my cup of care. Oh look, it's EMPTY!
|
|
Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 24.01.2012 um 16:44 Uhr
|
|
Zitat von the_pen: Zitat von EE_Toddi_EE: schreib lieber ne app die die lösungen von jedem mathe buch hat
Und wo soll er die lösungen herbekommen ??
Beziehungsweise warum sollte ich mir die Mühe machen?
Das ist sowieso illegal, also würde das heißen, dass ich mich für eine Abmahnung bemühe.
|
|
bredator - 41
Champion
(offline)
Dabei seit 03.2008
5319
Beiträge
|
Geschrieben am: 24.01.2012 um 16:58 Uhr
|
|
Zitat von Protagonist: Zitat von the_pen: Zitat von EE_Toddi_EE: schreib lieber ne app die die lösungen von jedem mathe buch hat
Und wo soll er die lösungen herbekommen ??
Beziehungsweise warum sollte ich mir die Mühe machen?
Das ist sowieso illegal, also würde das heißen, dass ich mich für eine Abmahnung bemühe.
Na ja, so schwachsinnig der Vorschlag auch ist, illegal wäre es nicht.
Lache nicht über jemanden, der einen Schritt zurück macht. Er könnte Anlauf nehmen.
|
|
Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 24.01.2012 um 17:13 Uhr
|
|
Hab mal irgendwo gelesen dass es illegal sein soll.
Aber auch wenn's legal wäre würde ich mir wohl kaum die Mühe machen ^^
|
|
bredator - 41
Champion
(offline)
Dabei seit 03.2008
5319
Beiträge
|
Geschrieben am: 26.01.2012 um 12:06 Uhr
|
|
Schau dir mal die Seite hier an:
MyCSharp
Ist zwar in C#, aber ein Umwandeln in VB.NET ist ja recht einfach.
Lache nicht über jemanden, der einen Schritt zurück macht. Er könnte Anlauf nehmen.
|
|
Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 26.01.2012 um 13:46 Uhr
|
|
Aha ich hätte hier einen Code gefunden:
Zitat: double simpsonFormel(double l, double r, long int d, double (*f)(double x))
{
if (l == r) return(0.0);
else if (l > r) {
//linke > rechte Grenze --> vertauschen
double swap = l;
l = r;
r = swap;
}
if (d < 4) d = 4;
if (fmod(d,2) > 0) d++; //gerade anzahl an stüzstellen schaffen
double delta = ((r - l) / (double)d); //deltaX = (rechte Grenze - linke Grenze) geteilt durch Schrittzahl
double A = 0.0;
double x = l + delta; //x = linke grenze + schritt (x1)
//gerade Summen : Summe 3 = 4*(y2 + y4 + ... + y(2n-2))
for(int i = 2; i < ((2*d)-2); i += 2) {
A += f(x);
x += delta; //x 1 schritt weiter setzen
}
A *= 2.0;
x = l + (0.5 * delta); //x = linke grenze + schritt (x1)
//ungerade Summen : Summe 2 = 2*(y1 + y3 + ... + y(2n-1))
for(int i = 1; i < ((2*d)-1); i += 2) {
A += f(x);
x += delta; //x 1 schritt weiter setzen
}
A *= 2.0;
A += f(l) + f(r); //Summe 1 = y0 + y(2n)
A *= (0.5 * delta / 3); //Fläche = (Summe 1 + Summe 2 + Summe 3) * h / 3 (h = delta/2)
return(A);
}
l = linke Grenze
r = rechte Grenze
d = Anzahl der Schritte
f = Funktion f(x) deren Integral berechnet werden soll
Als Funktion muss man dann eine eigene Funktion definieren, die Funktionswerte zurückgeben kann z.B. :
double f(double x)
{
return(sqrt(1.0 + (2.0*x*x*x*x)));
}
Wenn man das Integral beliebiger Funktionen errechnen will, muss man die Eingaben des Benutzers auswerten. Der gibt eine Funktion an, die dann anstatt "f" benutzt wird...
Ich muss mal schauen ob ich's mit dem hinkriege, ich werde dann hier meine Ergebnisse posten ^^
|
|
Rifleman - 40
Experte
(offline)
Dabei seit 09.2003
1540
Beiträge
|
Geschrieben am: 26.01.2012 um 14:03 Uhr
Zuletzt editiert am: 26.01.2012 um 14:30 Uhr
|
|
Zitat von Protagonist: Ich muss mal schauen ob ich's mit dem hinkriege, ich werde dann hier meine Ergebnisse posten ^^
Wie wärs damit:
Ein Parser mit Vorkompilierung (Auswertung sollte effizient sein). Siehe dazu Bredators Link.
Dann: Gauß-Quadratur n-ter Ordnung...
Wäre glaube ich eine gute Übung, und gleichzeitig kannst du dir etwas Numerik anschauen...
/edit:
Alternativ, aber etwas anspruchsvoller, falls dir Gauß zu einfach ist oder du eine Fehlerkontrolle willst: Romberg-Verfahren...
Es sind die kleinen Dinge, die einen zum Wahnsinn treiben.
|
|
Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 26.01.2012 um 14:43 Uhr
|
|
Naja zu einfach kann man eig. nicht sagen, in der Schule haben wir vor ca. 2 Wochen mit der Integralberechnung angefangen <.<
|
|
Rifleman - 40
Experte
(offline)
Dabei seit 09.2003
1540
Beiträge
|
Geschrieben am: 26.01.2012 um 14:58 Uhr
|
|
Zitat von Protagonist: Naja zu einfach kann man eig. nicht sagen, in der Schule haben wir vor ca. 2 Wochen mit der Integralberechnung angefangen <.<
Macht ja nichts. Dann schaust dir eben erst die Gauß-Quadratur an. Vielleicht verstehst du dann nicht genau, warum das genau so gemacht wird und was mathematisch dahinter steckt (versuchen kann mans allemal...), aber implementieren sollte kein Problem sein
Es sind die kleinen Dinge, die einen zum Wahnsinn treiben.
|
|
Protagonist - 30
Champion
(offline)
Dabei seit 05.2010
2451
Beiträge
|
Geschrieben am: 27.01.2012 um 18:46 Uhr
Zuletzt editiert am: 27.01.2012 um 19:11 Uhr
|
|
Also ich habe mir die Gauß-Quadratur angeschaut, aber verstehen tu ich sie nicht ganz, ich frage mich auch wie ich die implementieren sollte.
Mein Hauptproblem ist ja eigentlich das Analysieren der Funktion (und das aufteilen in Teile, je nach Priorität der Operatoren.
Gibt's da nicht irgendwie einen schon geschriebenen Code für?
Alle Parser die ich bis jetzt gefunden habe lösen nur Gleichungen bzw. können z.B. sin etc. berechnen, aber zum Integrieren finde ich nichts.
Edit: Ich habe gerade eine Library namens ALGLIB gefunden, die das Integral u.a. mit der Gauss-Quadratur berechnen kann, womit für mich die Analyse wegfallen würde.
Nur komm ich grad nicht drauf wie ich die eingegebene Funktion an die Function übergeben kann, bzw. welche ich nehmen sollte.
|
|