|
|
if in einem ODE befehl ...ist das möglich |
|
mike793 |

Forum-Century
|
 |
Beiträge: 119
|
 |
|
 |
Anmeldedatum: 11.08.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.10.2009, 10:00
Titel: if in einem ODE befehl ...ist das möglich
|
 |
hallo zusammen!!!
ich würde gerne mal wissen ob es möglich ist, eine if bedingung in einem ode Befehl unterzubringen? und wie würde das aussehen?
meine Frage kommt deswegen auf, da ich einer fixe größe im differenzialgleichung sagen muss werde,wenn die z(1) größer als 100 dann werde sehr hoch!!!!
wobei z(1) ein gesuchter wert von der differenzialgleichung ist!
also Formelmäßig schaut das so aus
und c1 ist 10 jedoch wenn z(1) größer ist als 100 dann soll c1 1000 sein!!
geht sowas überhaupt???
Danke[/code]
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 15.10.2009, 10:15
Titel:
|
 |
Hallo,
wie wäre es damit:
Oder dzdt direkt mit if definieren.
Grüße,
Harald
|
|
|
mike793 |
Themenstarter

Forum-Century
|
 |
Beiträge: 119
|
 |
|
 |
Anmeldedatum: 11.08.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.10.2009, 10:28
Titel:
|
 |
wow es geht!!!!! DANKE!!!
wie meinst du das eigentlich dzdt direkt mit if definieren?
aber vielen DANK nochmals!!!
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 15.10.2009, 10:34
Titel:
|
 |
Gemeint war die Alternative:
Grüße,
Harald
|
|
|
mike793 |
Themenstarter

Forum-Century
|
 |
Beiträge: 119
|
 |
|
 |
Anmeldedatum: 11.08.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.10.2009, 09:45
Titel:
|
 |
hat irgendwer eine Ahnung, wie man dieses Problem mit einer Event funktion lösen kann.... denn bei mir spuckt das Programm nicht das Passende heraus!!!!!!!
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 22.10.2009, 12:54
Titel:
|
 |
Hallo Mike,
ich weiss nicht, was du unter einer Event-Funktion verstehst. Wenn du Event im Sinne von Event und Listener meinst, müsstest du objektorientiert arbeiten, was mir hier jedoch als Overkill erscheint.
Mal eine ganz andere Frage... mich verwundert die Modellierung ein wenig. Wenn ich es richtig verstehe, wird z(1) noch HÖHER gewichtet, wenn es ohnehin schon sehr groß ist. Ist das wirklich sinnvoll? Ein anderes Problem sehe ich darin, dass das Verhalten um z(1) = 100 unstetig ist. Bist du also sicher, dass das Problem nicht evtl. in der Modellierung zu suchen ist?
Viele Grüße,
Harald
|
|
|
mike793 |
Themenstarter

Forum-Century
|
 |
Beiträge: 119
|
 |
|
 |
Anmeldedatum: 11.08.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.10.2009, 14:04
Titel:
|
 |
...nein eigentlich nicht ich will mit der einfachen Bedingung nur dass, man ab einer gewissen höhe von z(1) einen anderen Parameter nimmt in diesem Fall einen Höheren!
Für mein System würde ich jedoch eine differenzierbare Funktion nehmen, diese passt sowieso besser zu meinem Problem! dieses habe ich ja schon gemacht nur wenn die Funktion hochgradig nicht linear ist bzw Wenn der ausdruck c1*z(1) nicht annähernd konstant ist bekomme ich eine Fehlermeldung und ein falsches ergebnis
Im Prinzip will ich aus der konstante c1 eine von z(1) abhängige Variable machen!!!! nur bis jetzt klappt das noch nicht so richtig!!!!!
hier ein kleiner ausschnitt aus meinem system wenn ich nun e1 sehr groß machen will bekomme ich immer einen fehler!!!!
Kann man dieses Funktion (soll einen lineare mit einem kubischen anteil ergeben) anderes dem ode mitgeben?
Danke
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 22.10.2009, 14:42
Titel:
|
 |
Hallo,
Zitat: |
Für mein System würde ich jedoch eine differenzierbare Funktion nehmen, diese passt sowieso besser zu meinem Problem! dieses habe ich ja schon gemacht nur wenn die Funktion hochgradig nicht linear ist bzw Wenn der ausdruck c1*z(1) nicht annähernd konstant ist bekomme ich eine Fehlermeldung und ein falsches ergebnis |
WELCHE Fehlermeldung?
Zitat: |
hier ein kleiner ausschnitt aus meinem system wenn ich nun e1 sehr groß machen will bekomme ich immer einen fehler!!!! |
Sind aus 2 DGLen jetzt 13 geworden, oder warum verwendest du hier z(13)? Und.... WELCHE Fehlermeldung? Das einzige Problem, das ich sehe, ist die Verwendung von sign. Dadurch wird die Funktion unstetig und nicht differenzierbar. Was steckt denn da dahinter? Ist das wirklich das Verhalten des realen Systems?
Grüße,
Harald
|
|
|
mike793 |
Themenstarter

Forum-Century
|
 |
Beiträge: 119
|
 |
|
 |
Anmeldedatum: 11.08.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.10.2009, 14:56
Titel:
|
 |
insgesamt hat das system 22 gleichungen!
... und mit dem sign will ich nur aus einem linearen ansteigen ein kubisches ansteigen erhalten. Wenn man sich den verlauf ausschreiben lässt hat die Funktion keine knicke oder unstetigkeitsstellen also ist das aus meiner sicht differenziebar!
... Warning: Failure at t=1.014256e+000. Unable to meet integration tolerances
without reducing the step size below the smallest value allowed (3.603363e-015)
at time t.
... zum schluss will ich mich bei dir mal sehr herzlich bedanken Harald
DANKE!!!!
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 22.10.2009, 17:11
Titel:
|
 |
Hallo,
sign erzeugt zwangsläufig Unstetigkeiten.
sign(-0.0000000...1) = -1
sign(0) = 0
sign(0.0000000...1) = 1
Man könnte sich durch eine Annäherung behelfen:
sign(x) = tanh(100*x)
Zum Vergleich:
Wenn dir die entstehenden Ungenauigkeiten zu groß sind, nimm statt 100 einen größeren Wert (aber nicht übertreiben, sonst hast du dein altes Problem wieder). Denke dabei einfach daran, dass die Ungenauigkeit ja (hoffentlich) nur über einen sehr kurzen Zeitraum auftritt.
Edit:
Alternative: versuche es doch mal mit einem anderen Löser, z.B. ode15s statt ode45.
Grüße,
Harald
|
|
|
|
|
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 - 2025
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.
|
|