|
|
Darstellung einer nichtlinearen DGL 1. Ordnung in Simulink |
|
matlab123 |
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 17.09.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 17.09.2012, 20:10
Titel: Darstellung einer nichtlinearen DGL 1. Ordnung in Simulink
|
|
|
|
|
Hallo Leute, ich bin ein Matlab/Simulink-Neuling, und habe eine Frage zur Abbildung einer DGL in Simulink. Es geht dabei um eine DGl 1.Ordnung, die ich soweit vereinfacht habe, das sie folgende Form besitzt:
y' + a*y + b*y^4=c
a,b,c sollen dabei erst einmal feste Werte sein, vielleicht müssen sie im zweiten Schritt noch einmal variabel gestalltet sein (sind aber auch dann nicht von y abhängig, sondern einfach verschiedene Messwerte)
Die DGL habe ich im Matlab über den "dsolve"-Befehl eingegeben und eine sehr lange Näherungsgleichung bekommen, was schon mal sehr gut war. Jetzt würde ich die DGL aber auch gerne in Simulink mit den Blockparameter darstellen, wobei mir aber ein geeigneter Ansatz fehlt. Die Koeffizienten a,b und c könnte ich ja einfach als gain-Glieder einfügen. y' müsste ja einfach das Integrations-Glied sein. Bei mir scheiterts nun daran, wie ich die Sachen miteinander verknüpfen muss.
Ich hoffe ich konnte mein Problem halbwegs verständlich erklären, ansonsten bitte fragen. Es wäre super wenn mir jemand einen Ansatz geben könnte, vielen Dank schon einmal!
|
|
|
|
|
Caravaggio |
Forum-Fortgeschrittener
|
|
Beiträge: 86
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: Braunschweig
|
|
|
|
Version: R2012a
|
|
|
|
|
|
Verfasst am: 17.09.2012, 20:17
Titel:
|
|
Stell die Gleichung einfach nach y' um. y' geht in den Integrator. Aus dem Integrator kommt y, welches dann mit deinen Koeffizienten a und b multipliziert wird. Danach noch c addieren und das negative Vorzeichen nicht vergessen...hast du y' und bist wieder am Anfang.
|
|
|
matlab123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 17.09.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.09.2012, 12:59
Titel:
|
|
Hallo Caravaggio, vielen Dank für deine schnelle Antwort. So ganz weiss ich noch nicht, was ich tun muss, um das Schaltbild zu bekommen. Wenn ich die Gleichung nach y' umstelle, bekomme ich ja:
y'= c-a*y-b*y^4
Das y ' steht für eine Temperaturänderung (T) mit der Zeit (t), dann würde die DGL ja heissen:
dT/dt= c-a*T-b*T^4
Nun weiss ich nicht, welche Blöcke ich wie genau mit einander kombinieren muss, vor allem da die beiden "T"s ja verschiedene Koeffizienten haben und bei dem zweiten "T" eine vierte Potenz eingeht.
|
|
|
Caravaggio |
Forum-Fortgeschrittener
|
|
Beiträge: 86
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: Braunschweig
|
|
|
|
Version: R2012a
|
|
|
|
|
|
Verfasst am: 18.09.2012, 13:39
Titel:
|
|
Hmm...vielleicht bin ich schon etwas betriebsblind, aber du musst doch "nur" noch die Gleichung zusammenklicken. Sagt dir der Begriff "Regelungsnormalform" etwas? Darauf versuchst du ja zu kommen und die Gleichung ist ja bereits danach umgestellt. Habe bei Wikipedia ein gutes Bild gefunden, dass die grundlegende (für dich mit einem Integrator weniger!) Struktur zeigt, die du dann auch bei Simulink haben wirst:
Notfalls schaust du in ein Buch deiner Wahl....versuch die DGL dann bei Simulink nachzubauen bevor du in meine Lösung schaust, dass ist eine Sache von einer Minute basteln/klicken/Symbole suchen! Der Lerneffekt ist wesentlich höher und gehört meiner Meinung nach zu den Sachen, die man im Schlaf können sollte
VG
Beschreibung: |
|
Download |
Dateiname: |
GoMTLB_NDGL.mdl |
Dateigröße: |
28.08 KB |
Heruntergeladen: |
765 mal |
|
|
|
matlab123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 17.09.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.09.2012, 23:53
Titel:
|
|
|
|
|
Hey Caravaggio,
noch mal vielen Dank für deine schnelle und ausführliche Antwort. Ich bin in dem Thema leider ein kompletter Neuling und habe keine Vorlesung oder Ähnliches dazu, leider wird dazu auch nix angeboten hier an der Uni und die Zeit drängt ein wenig bei mir. Grundlegend wäre mir dein Gedankengang auch gekommen, allerdings hätte ich die Vorzeichen nicht über den Summenblock gemacht sondern hätte probiert dies über Vorzeichen in den Verstärkungsgliedern zu machen, was wahrscheinlich nicht geklappt hätte. (Ich bin auch was Regelungstechnik ein kompletter Amateur ) Ich werde nun versuchen das Schaltbild etwas zu "verfeinern", indem ich die Koeffizienten ein wenig aufteile und über ein Editorfile einbinde. Ich werde das dann schnellstmöglich hier posten, vielleicht hast du dann ja noch mal Lust einen Blick draufzuwerfen, obwohl das für dich wahrscheinlich eher langweilig ist
Also, vielen Dank noch mal, deine Ausführungen haben mir wirklich sehr geholfen!
|
|
|
Caravaggio |
Forum-Fortgeschrittener
|
|
Beiträge: 86
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: Braunschweig
|
|
|
|
Version: R2012a
|
|
|
|
|
|
Verfasst am: 19.09.2012, 05:43
Titel:
|
|
Zum Simulinkmodell: Du kannst auch das negative Vorzeichen in die Gain-Blöcke packen, musst aber bei der Summation ebenfalls die Vorzeichen ändern, sonst hast du einen Vorzeichenfehler.
Zum Rest: Wenn du keine Vorlesungen dazu gehört hast, dann ist deine Ausgangslage ja eine ganz andere ich denke die meisten hier, die Simulink benutzen, haben auch (etwas) Erfahrung mit Regelungstechnik und dem Umgang mit DGL´s
matlab123 hat Folgendes geschrieben: |
Ich werde das dann schnellstmöglich hier posten, vielleicht hast du dann ja noch mal Lust einen Blick draufzuwerfen, obwohl das für dich wahrscheinlich eher langweilig ist |
Das wäre sehr vorbildlich und es langweilt mich nicht
|
|
|
matlab123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 17.09.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.09.2012, 12:53
Titel:
|
|
|
|
|
Hey Caravaggio,
also grundlegend habe ich mal was von Regelungstechnik und DGLs gehört, aber dieses "abstrahieren" ist nicht ganz einfach für mich. Ich habe das Modell ein wenig erweitert, und habe nun versucht folgende DGL darzustellen:
y'= C - a*y + a*d - b*(y^4) + b*(d^4)
C, a, b und d sind dabei weiterhin Koeffizienten. Das habe ich in folgendes Schaltbild überführt:
Ich hoffe, es ist verständlich was ich gemacht habe. beim "u^v"-Glied werden die "u" und "v" Variablen dadurch definiert, ob man es jeweils unten oder oben verbindet, oder?
Im nächsten Schritt würde ich die Koeffizienten nun gerne im Matlab definieren, was ich ja prinzipiell einfach über den "edit" Befehl machen kann. Ist dies denn die "eleganteste" Lösung, oder gibt es da andere Möglichkeiten.
Und wie könnte ich in dem Schaltbild vorgehen, wenn bspw. einer der Koeffizienten wiederrum aus anderen Koeffizienten zusammengesetzt wird? Wenn bspw. C ein Produkt aus "e" und "f" ist. Am einfachsten wäre wohl dann einfach unter "Math Operations" das "Dot Product" auszuwählen.
Eine Frage dann noch zu der Simulationszeit. Diese wird immer in Sekunden eingegeben, oder? Ich find das gerade noch nicht ganz sinnvoll, wenn ich beispielsweise eine Arbeitsschicht von 8 Stunden simulieren will, müsste ich da ja 28800 Sekunden eingeben!?
Vielen Dank aber schon mal für deine Starthilfe Caravaggio. Das hat mir der Einstieg schon mal sehr vereinfacht!
|
|
|
Caravaggio |
Forum-Fortgeschrittener
|
|
Beiträge: 86
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: Braunschweig
|
|
|
|
Version: R2012a
|
|
|
|
|
|
Verfasst am: 25.09.2012, 13:04
Titel:
|
|
|
|
|
matlab123 hat Folgendes geschrieben: |
Das habe ich in folgendes Schaltbild überführt: |
Sieht beim ersten Anblick richtig aus.
matlab123 hat Folgendes geschrieben: |
Ich hoffe, es ist verständlich was ich gemacht habe. beim "u^v"-Glied werden die "u" und "v" Variablen dadurch definiert, ob man es jeweils unten oder oben verbindet, oder? |
Genau, aber ich persönlich kontrolliere den Block immer vorher nochmal mit einem Scope und z.B. den Zahlen 2 und 5...2^5 = 32; 5^2 = 25...ich habe die Erfahrung gemacht, dass sie die Eingänge nicht immer so drehen wie man den Block invertiert bzw rotiert...kann bei den neueren Versionen nun richtig sein, aber lieber einmal zuviel als zu wenig^^
matlab123 hat Folgendes geschrieben: |
Im nächsten Schritt würde ich die Koeffizienten nun gerne im Matlab definieren, was ich ja prinzipiell einfach über den "edit" Befehl machen kann. Ist dies denn die "eleganteste" Lösung, oder gibt es da andere Möglichkeiten. |
Über den edit-Befehl habe ich das noch nicht gemacht, daher weiß ich auch nicht so richtig, was du da genau machst. Ich habe meist ein m-File geschrieben, wo die Variablen definiert werden...das lasse ich dann vorher durchlaufen.
matlab123 hat Folgendes geschrieben: |
Und wie könnte ich in dem Schaltbild vorgehen, wenn bspw. einer der Koeffizienten wiederrum aus anderen Koeffizienten zusammengesetzt wird? Wenn bspw. C ein Produkt aus "e" und "f" ist. Am einfachsten wäre wohl dann einfach unter "Math Operations" das "Dot Product" auszuwählen. |
Entweder so, oder du schreibst dies in dein m-File rein. Es kommt darauf an, ob dies im Modell ersichtlich sein soll oder ob das C bekannt ist und man weiß woher es kommt.
matlab123 hat Folgendes geschrieben: |
Eine Frage dann noch zu der Simulationszeit. Diese wird immer in Sekunden eingegeben, oder? Ich find das gerade noch nicht ganz sinnvoll, wenn ich beispielsweise eine Arbeitsschicht von 8 Stunden simulieren will, müsste ich da ja 28800 Sekunden eingeben!? |
Du kannst ja die Simulationszeit mit der Variablen Tsim ersetzen und diese dann bei MATLAB definieren -> Tsim = 8 * 3600;
Allerdings musst du dann auch die Schrittgröße auf eine sinnvolle Größe anpassen
|
|
|
matlab123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 17.09.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.10.2012, 17:34
Titel:
|
|
|
|
|
Hey, also vielen Dank noch mal für deine schnelle Antwort. Ich muss leider "nebenbei" noch den Theoriekram etc. schreiben und komm nicht so viel zum Testen in Simulink. Ich hab am Wochenende aber versucht einmal die DGL mit allen Variablen "aufzuschlüsseln", dabei würde diese so aussehen:
a, b, c, d, e, f, g und h sind dabei wieder beliebige Werte. Überführt habe ich das ganze in folgendes Simulink Modell:
Jetzt frag ich mich natürlich obs Sinn macht das so detailliert aufzuschlüsseln, weils ja schon recht unübersichtlich ist. Bzw. ich bin mir nicht mal ganz sicher obs so wirklich richtig ist, weil ich die Unterscheidung zwischen Gain-Blöcken und Constant-Blöcken nur getroffen habe, da Constant-Blöcke ja keinen "Eingang" haben.
Ich würde aber nun ganz gerne erst einmal die DGL mit bestimmten Werten für die Koeffizienten testen. Ich hab das dann so verstanden, dass du dazu einfach im normalen Matlab Command Window die einzelnen Werte eingibst, also z.B. a=1;b=2 usw. und das dann als .m-file speicherst, oder? Wäre natürlich gut wenn man die Ergbenisse exportiert und so anderen Leuten zur Verfügung stellen kann, in diesem Fall also das .m und .mdl file.
Das mit dem Testen von dem u^v ist ne gute Idee, ich trau solchen Sachen auch ungerne!
Also, vielen Dank nochmals, ich bin natürlich immer interessiert was du so zu meinen Ideen sagst und davon hälst.
|
|
|
Caravaggio |
Forum-Fortgeschrittener
|
|
Beiträge: 86
|
|
|
|
Anmeldedatum: 20.04.12
|
|
|
|
Wohnort: Braunschweig
|
|
|
|
Version: R2012a
|
|
|
|
|
|
Verfasst am: 05.10.2012, 09:11
Titel:
|
|
Du kannst das ganze in ein Subsystem packen und dann die Parameter als Eingänge festlegen...dann hast du zwar intern ein paar Kreuzungen, aber nach aussen sieht es sauber aus. Alternativ kannst du ja auch MATLAB-Functions einbinden und die Gleichung per m-File einbinden.
Was die Parameterübergabe angeht: Wenn die Variablen im Workspace deklariert sind, dann kennst sie Simulink...ob du nun
oder
machst spielt ja in dem Sinne keine Rolle, weil im m-File steht ja nur das, was du dann im Workspace händisch eintippen würdest. Aber das m-File kannst du ja in deinem Simulinkmodell so einbinden, dass es automatisch beim Start geladen wird, dann kannst du das Modell (also *.mdl + *.m) leicht an jemanden schicken und dieser Mensch brauch es nur öffnen.
|
|
|
matlab123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 17.09.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.10.2012, 12:26
Titel:
|
|
Hey, das mit den matlab-Functions ist ne gute Idee, auch wenn ich jetzt 2 Tage gebraucht habe um das mit Visual Basic hinzubekommen. Das ist ja echt ne Qual nen Compiler zu installieren mit gefühlten 100 Fehlermeldungen. Ich werds dann glaube ich so machen, das ich in ein m.File die ganzen Parameter schreibe und sie dann über die functions-Blöcke in das System einbinde und berechne.
|
|
|
matlab123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 17.09.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.10.2012, 16:40
Titel:
|
|
|
|
|
Hallo nochmals zusammen,
ich habe noch eine kleine Frage zum Integrator in Simulink und stelle diese einfach mal in diesem Thread, da sie thematisch auf meiner vorherigen Frage aufbaut. Die Fragestellung liegt darin, dass mir noch nicht ganz klar ist, wie die Variable die in den Integrator geht bzw. aus diesem kommt definiert ist. Nehmen wir als Beispiel die DGL y'=x-K*y mit x und K als beliebeigen variablen.
Als simples Modell würde dies ja wie folgt aussehen:
Dabei ist dann ja klar, dass "y'" in den Integrator geht und "y" rauskommt. wird nun y mit k multipliziert ist dies ja eindeutig, da nur y in den verstärker reingeht und dieser einen Wert besitzt.
mein Problem besteht nun darin, wenn ich den Ausgang des Integrators in eine function einbauen will. Das Beispielbild:
Ich verstehe noch nicht ganz, wie ich dann in der Function definieren kann, dass "y" das Ausgangssignal vom Integrator sein soll und nicht irgendeine andere Varibale, die ich der function drin haben kann. Bzw. wenn ich im function-Block eine Funktion eingeben will (z.B. y²) was ich dann für das y schreiben muss. Der Gedanke mit y'->Integrator->y ist ja sozusagen meine eigene willkürliche Festlegung.
ich hoffe ich konnte das Problem halbwegs verständlich erklären und würde mich freuen, wenn mir da jemand auf die Sprünge helfen kann.
Grüße
|
|
|
matlab123 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 13
|
|
|
|
Anmeldedatum: 17.09.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.10.2012, 14:01
Titel:
|
|
Hallo Leute,
da bisher noch keine Antwort kam, wollte ich eben anfragen, ob ich denn mein aktuelles Problem verständlich schildern konnte? Sonst probiere ich gerne ein genaueres Beispiel zu geben.
Viele Grüße
|
|
|
|
|
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.
|
|