Mathematica ndnum Fehler |
20.09.2013, 10:07 | saimen | Auf diesen Beitrag antworten » | ||||||||||
Mathematica ndnum Fehler ich habe ein kleines Problem mit Mathematica. Ich möchte ein DGL System numerisch lösen, um eine Flugbahn zu erhalten. Meine Befehl schaut so aus: NDSolve[{vx[0] == 173.2, vy[0] == 100, vx'[t] == -c/m*Sqrt[vx[t]^2 + vy[t]^2]*vx[t], vy'[t] == -9.81 - c/m*Sqrt[vx[t]^2 + vy[t]^2]*vy[t]}, {vx[t], vy[t]}, {t, 1, 200}][[1]] Wenn ich diesen ausführe, kommt immer dieser Fehler: NDSolve::ndnum: Encountered non-numerical value for a derivative at t == 0.`. Die Hilfe von Mathematica hat mir leider nicht geholfen. Es wäre echt super, wenn jemand weiß woran es liegt. Vielen Dank im Voraus |
||||||||||||
20.09.2013, 10:21 | Huggy | Auf diesen Beitrag antworten » | ||||||||||
RE: Mathematica ndnum Fehler Hast du den Konstanten c und m vorher Werte zugewiesen? Ohne das kann Mathematica natürlich keine numerischen Werte für die Ableitungen berechnen. |
||||||||||||
20.09.2013, 10:35 | saimen | Auf diesen Beitrag antworten » | ||||||||||
oh man^^ bin ich dumm hab sie oben zwar definiert, allerdings den Kernel danach wieder neugestartet... Danke! Allerdings folgt nun das nächste Problem. Zwar bekomme ich nun jeweils "interpolating function" allerdings weiß ich jetzt nicht, wie ich die Flugbahn plotten kann? |
||||||||||||
20.09.2013, 11:13 | Huggy | Auf diesen Beitrag antworten » | ||||||||||
Mathematica gibt die Lösung in Form einer Regel an. Zur Vereinfachung solltest du dieser Regel einen Namen geben, z. B indem die Anweisung zur Lösung in der Form
schreibst. Dann kannst du später einfach mit dem Namen auf die Regel zugreifen. Die Flugbahn plotten kannst du jetzt im Zeitintervall [a, b] mit
Dabei müssen a und b Zahlen sein, die in dem Intervall liegen, für das die numerische Lösung bestimmt wurde. Bei dir wäre das das Intervall [1, 200]. Dabei ist mir nicht klar, weshalb du die Anfangsbedingungen für t = 0 angibst, die Lösung aber nur ab t = 1 berechnen lässt. Edit: Das Plotten sollte zwar so funktionieren. Das ist aber nicht die Flugbahn. Denn du hast ja nur die DGL für die Geschwindigkeiten gelöst. Wenn du die Flugbahn möchtest, musst du eine DGL 2. Ordnung für den Ort aufstellen. |
||||||||||||
20.09.2013, 12:41 | saimen | Auf diesen Beitrag antworten » | ||||||||||
ja das mit t habe ich auch gemerkt, danke. OK, das leuchtet mir ein, wenn ich nämlich meins plotte, kommt eine komische kurve heraus. Wie komme ich jetzt auf meine Flugbahn? |
||||||||||||
20.09.2013, 15:06 | Huggy | Auf diesen Beitrag antworten » | ||||||||||
Statt vieler Worte: [attach]31521[/attach] Ich hoffe, das ist ohne Erläuterungen verständlich. Sonst frag einfach. Die Werte für c und m sind völlig willkürlich so gewählt, dass die Kurven mit und ohne Luftwiderstand sich nicht stark unterscheiden. |
||||||||||||
Anzeige | ||||||||||||
|
||||||||||||
20.09.2013, 20:00 | saimen | Auf diesen Beitrag antworten » | ||||||||||
Super! Vielen Dank, so hat es funktioniert. Allerdings habe ich noch ein Problem. Zwar passen mein Flugbahnen mit denen aus der Literatur überein, allerdings passen die Weiten, also die x-Werte nicht. Das selbe Problem habe ich, wenn ich die Flugbahn ohne Luftwiderstand plotte. Mit einem Applet aus dem Internet erhalte ich 188m, Mathematica gibt mir nur etwa 6m. Die Höhe passt allerdings. Ich habe mal Screenshots angehängt. Wo liegt mein Fehler? Vielen Dank PS: Anfangsgeschwindigkeit sind 43m/s und Abflugwinkel 45° |
||||||||||||
21.09.2013, 10:02 | Huggy | Auf diesen Beitrag antworten » | ||||||||||
So kann das ja nicht richtig funktionieren. Ich weiß gar nicht, wo ich bei den Fehlern anfangen soll. Du definierst die Funktion f zweimal. Damit überschreibt die zweite Definition einfach die erste. Auf der rechten Seite der Funktionsdefinition taucht die Variable x bzw. y gar nicht auf. Es sollen ja auch Funktionen der Zeit t sein. Dann sollte auf der linken Seite f[t_] stehen. Und die beiden Funktionen müssen unterschiedliche Namen bekommen. Der Plotbefehl funktioniert nur zufällig, weil er t variiert, obwohl in der Funktionsdefinition t nur als Parameter steht und nicht als Variable. Geplottet wird als Funktion von t. Die x-Achse ist also die Zeit und nicht die x-Koordinate der Flugbahn. Um die Flugbahn zu bekommen, musst du ParametricPlot verwenden. Ich habe das mal umgesetzt. Im ersten Bild werden die x- und die y-Koordinate als Funktion der Zeit geplottet. Im zweiten Bild wird die Flugbahn geplottet. Mit der Option AspectRatio könnte man noch die Größenverhältnisse der Achsen anpassen. [attach]31532[/attach] Dir fehlen einfach die notwendigen Grundkenntnisse von Mathematica. |
||||||||||||
21.09.2013, 11:56 | saimen | Auf diesen Beitrag antworten » | ||||||||||
ah ok, super jetzt klappts. DANKE! ich benutze es leider erst seit ein paar Tagen. Manche Befehle kenn ich schon, aber oftmals weiß ich halt nicht wann ich was genau einsetzen muss. Danke für deine Hilfe. Wie kann ich jetzt zB. eine zweite Flugbahn in dieses Diagramm einfügen? Also mit nem anderen Abflugwinkel? Und kann ich irgendwie festlegen, dass der Graph nur bis zur x-Achse geht? also das er nicht negativ wird. Danke |
||||||||||||
21.09.2013, 13:24 | saimen | Auf diesen Beitrag antworten » | ||||||||||
ok die erste Frage habe ich mir selbst beantwortet. ich geb den Parametricplots Namen, also zb drl1=parametricplot.... So führe ich dann alle aus die ich brauche. Und zum Schluss kommen die alle in ein Diagramm mit Show[drl1,drl2,...] Mein zweites Problem habe ich jetzt so gelöst, dass der Maximalwert von t bis zur NUllstelle geht. Allerdings klappt des ja nur hier so, weil ich dafür die Formel habe. Kann man das sonst noch irgendwie hinbekommen? Außerdem verstehe ich noch nicht, wie ich hier ne Legende hinbekomme. Sorry, für die vielen Fragen |
||||||||||||
21.09.2013, 15:04 | Huggy | Auf diesen Beitrag antworten » | ||||||||||
In Mathematica lässt sich fast jedes Problem auf unterschiedliche weise lösen. Um mehrere Funktionen/Kurven in ein Diagramm zu zeichnen, kann man, wie du es gemacht hast, erst die einzelnen Diagramme erzeugen und die dann mit Show zusammenfügen. Bequemer ist es oft, Funktionen wie Plot oder ParametricPlot gleich mit einer Liste von Funktionen/Kurven aufzurufen. Die Funktionen kann man vorher einzeln definieren. In deinem Beispiel ist es aber bequemer, den Winkel als zweite Variable w in die Funktionsdefinition aufzunehmen. Möchte man auch die Abfluggeschwindigkeit variieren, kann man eine dritte Variable v aufnehmen. Den Bereich, den man zeichnen möchte, kann man über die Option PlotRange spezifizieren. In dem folgenden Beispiel habe ich die Untergrenze auf 0 gesetzt, während die Obergrenze aus den Funktionswerten bestimmt wird. In die Funktionsdefinition habe ich in dem Beispiel nur den Winkel als zweite Variable aufgenommen. Er ist jetzt im Gradmaß anzugeben. Die Umrechnung ins Bogenmaß habe ich mittels der Konstanten Degree in die Funktionsdefinition eingebracht. Gezeichnet werden die Wurfparabeln für 45° und 30°. [attach]31539[/attach] Achsenbeschriftungen können mit AxesLabel erzeugt werden. |
||||||||||||
21.09.2013, 15:29 | Huggy | Auf diesen Beitrag antworten » | ||||||||||
Zu deiner PN_Frage: Legenden für die einzelnen Kurven Dazu gibt es diverse Möglichkeiten, die ich aber selbst bisher kaum genutzt habe. (1) Man kann in jedes Diagramm nachträglich Texte und Graphikelemente mittels des Menüs Graphics/Drawingtools einfügen und frei positionieren. (2) Man kann mit der Option Epilog völlig frei Legenden erzeugen. Das ist aber nicht ganz einfach. (3) Nach Laden des Pakets PlotLegends vereinfacht sich (2). Zu (2) und (3) schau dir mal http://wwwa1.kph.uni-mainz.de/Vorlesunge...thematica_2.pdf Seite 18/19 an. |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
|
Die Neuesten » |
|