Verfasst am: 25.11.2013, 17:25
Titel: Testfunktion zum Lösen von ODEs
Hallo zusammen,
ich bin Neuling in Matlab und habe leider auch nur Grundkenntnisse in Sachen Programmierung. Bei folgender Aufgabe komme ich nicht weiter:
Ich soll eine Funktion wie folgt aufbauen:
function [result] = test(solver, function, timespan, init)
- Dabei soll man der Variable solver einen oder mehrere Solver übergeben können, z.B ode45,ode113,...Mit diesen solvern soll dann eine beliebige, einzugebende DGL (function) gelöst werden.
- timespan ist er Bereich in welchem die Funktion angenähert werden soll
- init sind die Anfangsbedingungen
Nach der Eingabe soll folgende Lösung in einer Zellvariablen ausgegeben werden.
Spalte 1: Solvername
Spalte 2: Lösungsvektor y
Spalte 3: Zeit t die zur Ermittlung der Lösung mit jeweiligem solver
Spalte 4: Anzahl der benötigten Schritte mit jeweiligem solver
Die Zeit kann ich ja über tic und toc messen lassen? Die Vektoren werden doch im Workspace hinterlegt, sodass ich die Anzahl der Schritte herauslesen und den Lösngsvektor aufrufen kann.
Leider komm ich beim Programmieren aber nicht wirklich voran, könnte mir jemand Starthilfe geben?
Vielen Dank!
Chefkoch
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.11.2013, 18:07
Titel:
Ich hab hier mal meinen bisherigen Ansatz, bitte nicht lachen
Für func hab ich einfach mal eine Bsp. DGL eingefügt.
Ich hab eine Funktion und ein Skript zum Aufruf:
Funktion
erstmal danke, ich habe das nun noch ein bisschen für mich angepasst und jetzt funktioniert es auch
Ich habe in der ersten Zeile: Function dgltest weggelassen, da es trotzdem funktioniert. Ist dieses function lediglich für eine mögliche weitere Verwendung von Nöten?
Nun habe ich noch eine Frage.
Ich habe jetzt eine etwas kompliziertere DGL. Für diese hab ich ein separates function file erstellt.
function ddx = DIFF(t,y)
. . .
Wie kann ich diese aufrufen ohne sie neu eingeben zu müssen?
Ich hab das so probiert:
an sich sollte das funktionieren.
Was funktioniert denn daran nicht?
D.h. welche Fehlermeldung bekommst du, oder inwiefern tritt ein unerwartetes Verhalten auf?
Grüße,
Harald
Chefkoch
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 26.11.2013, 23:54
Titel:
Ok, das hat sich erledigt.
Habe Groß-/Kleinschreibung nicht beachtet
Chefkoch
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.11.2013, 01:03
Titel:
Nun habe ich ein Problem beim Plotten.
Ich erstelle eine neue Funktion Plot(results). Beim Ausführen das Ergebnis der berechneten DGL plotten.
Wenn ich nun innerhalb der Funktion plot(t,y) eingebe erhalte ich folgenden Fehler:
Undefined function or variable 't'.
Die Werte sind ja eigentlich alle im Workspace hinterlegt. Tippe ich plot(t,y) im Command Window ein, funktioniert das ganze, innerhalb der Funktion nicht. Was muss ich beachten?
Hallo,
an welcher Stelle steht denn dein plot? Hast du schon mal einen Break-Point auf die Zeile gesetzt und geschaut, ob t und y an dieser Stelle wirklich verfügbar sind?
Grüße
Chris
_________________
--> Kapieren statt Kopieren <---
____________________________________________________
FAQs sind dazu da, FAQs zu beantworten Richtig fragen!
Die Werte sind ja eigentlich alle im Workspace hinterlegt. Tippe ich plot(t,y) im Command Window ein, funktioniert das ganze, innerhalb der Funktion nicht. Was muss ich beachten?
Eine Funktion sieht die Variablen vom workspace nicht. Du musst alle benötigten Variablen deiner Plotfunktion übergeben. In seltenen Fällen kann man auch globale Variablen benutzen, würde ich aber vermeiden.
Chefkoch
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.11.2013, 11:36
Titel:
Hi,
danke, habe ich gerade probiert und jetzt wird es auch geplottet.
Gibt es eine Möglichkeit übereinanderliegende Kurven transparent darzustellen? Ich habe jetzt die Kurve für jeden solver mit einer anderen Farbe. Es wird allerdings immer nur die oberste angezeigt.
Andernfalls musst du dich mit den Eigenschaften des plot-Handles auseinandersetzen. Manche Element kann man Transparent schalten. Bei einem einfachen plot scheint mir das nicht offensichtlich.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.