|
|
automatische erzeugung einer DGL |
|
xzw4gd |
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 25.06.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.06.2007, 00:40
Titel: automatische erzeugung einer DGL
|
|
|
|
|
Hallo erstmal,
ich hab momentan ein kleines Problem, wir sollen zur übung ein Programm schreiben um das verhalten gekoppelter Pendel zu berechnen und zu visualisieren. Das einzige Problem was mich mometan wirklich beschäftigt ist,
das ich meine DGL nicht für beliebig viele Glieder automatisch erzeugen kann.
Grundlegendes zum Programm:
Berechnung erfolgt mittels ode, die DGL 2`ter Ordung wurde dazu reduziert.
Es gibt für vorgegebene Randbedingungen immer eine bestimmte folge von Summand pro Pendel. Stellt man Bspweise den
ode-> differenzen Gleichung auf erhält man so was wie:
function dX = pendel_dgl(tt, X)
% DGL mit Dämpfung
% sin(x) Nährung nicht mehr!
global g m D Rho L
dX=[ X(4), X(5), X(6),...
-g/L * sin(X(1)) - D/m * (sin(X(1))-sin(X(2)))- Rho * X(4),...
-g/L * sin(X(2)) - D/m * (sin(X(2))-sin(X(1))) - D/m * (sin(X(2))-sin(X(3))) - Rho *X(5),...
-g/L * sin(X(3)) - D/m *(sin(X(3))-sin(X(2)))- Rho * X(6) ]';
diese Funktion gibt der Funktion ode immer einen Vektor mit 6 Elemten zurück. Die ersten 3 sind auslenkungen die nächsten 3 sind Geschwindigkeiten.
So meine Frage ist nun, wie kann ich einen String erzeugen der mir so ein DGL erzeut. Man müsste ja eigentlich nur den mitteleren Teil immer neu erzeugen. Hatte da ne Idee, aber die funktioniert leider nicht. Viell fehlt euch was besseres ein:
function erzeugendA()
%global D m g L Rho dA X
global dA X
%DGL-System ohne Dämpfung sin x für kleine ausschläge ~x
anzahl = 2;
m = 0.1;
D = 0.4;
g = 9.81;
L = 0.5;
for i=(anzahl+1) : (2*anzahl)
dA(i-anzahl) = {X(i)};
end
dA(anzahl+1) = sin(X(1)) - (sin(X(1))-sin(X(2))) - X(anzahl+1);
if (anzahl > 2)
for i=2:(anzahl-1)
dA(anzahl+i) = -g/L * sin(X(i)) - D/m * (sin(X(i))-sin(X(i-1))) - D/m * (sin(X(i))-sin(X(i+1))) - Rho *X(anzahl+i);
end
end
dA(2*anzahl) = -g/L * sin(X(anzahl)) - D/m *(sin(X(anzahl))-sin(X(anzahl-1)))- Rho * X(2*anzahl);
-> (dA') würde dann dem Funktionfile übergeben.
Kann jemand helfen?
|
|
|
|
|
Bijick |
Ehrenmitglied
|
|
Beiträge: 914
|
|
|
|
Anmeldedatum: 18.06.07
|
|
|
|
Wohnort: Nürnberg
|
|
|
|
Version: R2006b, R2008b
|
|
|
|
|
|
Verfasst am: 27.06.2007, 09:54
Titel: Nachfragen
|
|
|
|
|
Hallo xzw4gd,
leider verstehe ich Dein Problem nicht ganz. Dass noch niemand sonst geantwortet hat, könnte dafür sprechen, dass es auch anderen so geht.
Deine Beschreibung macht für mich zwei Fälle wahrscheinlich:
1. Du möchtest die Funktion pendel_dgl mit verschiedenen Parametern g m D Rho L aufrufen.
2. Du möchtest die ode mit verschiedenen Funktionen aufrufen, die nur in der Form mit pendel_dgl übereinstimmen.
Die erste Variante sollte aber mit den globalen Variablen, die Du eingeführt hast, schon funktionieren. Für die zweite Variante ist es am einfachsten, die verschiedenen Funktionen einzeln zu schreiben (eventuell als "nested functions") und dann über eine Variable, die das function handle enthält, an die ode zu übergeben:
usw. (Bezeichnungen wie in der Matlab-Hilfe zu ode23, etc. (Suchwort ODE Solvers).
Wenn Du etwas ganz anderes meinst, bitte nachfragen! Zum Beispiel ist mir nicht klar, wofür Du den String definieren möchtest. Es geht aber bestimmt.
Herzliche Grüße
_________________
>> why
|
|
|
marcel |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.09.2007, 15:53
Titel: Re: Nachfragen
|
|
|
|
|
Bijick hat Folgendes geschrieben: |
Hallo xzw4gd,
leider verstehe ich Dein Problem nicht ganz. Dass noch niemand sonst geantwortet hat, könnte dafür sprechen, dass es auch anderen so geht.
Deine Beschreibung macht für mich zwei Fälle wahrscheinlich:
1. Du möchtest die Funktion pendel_dgl mit verschiedenen Parametern g m D Rho L aufrufen.
2. Du möchtest die ode mit verschiedenen Funktionen aufrufen, die nur in der Form mit pendel_dgl übereinstimmen.
Die erste Variante sollte aber mit den globalen Variablen, die Du eingeführt hast, schon funktionieren. Für die zweite Variante ist es am einfachsten, die verschiedenen Funktionen einzeln zu schreiben (eventuell als "nested functions") und dann über eine Variable, die das function handle enthält, an die ode zu übergeben:
usw. (Bezeichnungen wie in der Matlab-Hilfe zu ode23, etc. (Suchwort ODE Solvers).
Wenn Du etwas ganz anderes meinst, bitte nachfragen! Zum Beispiel ist mir nicht klar, wofür Du den String definieren möchtest. Es geht aber bestimmt.
Herzliche Grüße |
Kurz um ich erzeuge mir mit diesem Fall einen neuen DGL-File. Die Anzahl der Glieder ist hier offen. für 5 Pendel erzeugt die Datei ein DGL System 1 Ordnung aus 5 Diff.-Gleichungen. Hoffe es ist jetzt klarer. Gruß Marcel
|
|
|
Bijick |
Ehrenmitglied
|
|
Beiträge: 914
|
|
|
|
Anmeldedatum: 18.06.07
|
|
|
|
Wohnort: Nürnberg
|
|
|
|
Version: R2006b, R2008b
|
|
|
|
|
|
Verfasst am: 25.09.2007, 10:26
Titel:
|
|
Hallo marcel,
die Variable ist also die Anzahl der Pendel, bezeichnet mit "anzahl"? Dann liegt das Problem wohl nur im Funktionsaufbau. Am einfachsten ist es mal wieder mit geschachtelten ("nested") Funktionen. Bei Angaben, die ich nicht hatte (z.B. Rho) habe ich mal Fantasiewerte eingesetzt und ansonsten deinen Code übernommen.
Jetzt kann man die Funktion mit der Anzahl und einem passenden Startwert aufrufen. Ist es das, was Du wolltest? Sonst weiterfragen. Herzliche Grüße
Bijick
_________________
>> why
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|