WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Kleines Problem mit DGL-Berechnung

 

gluck

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.06.2011, 17:38     Titel: Kleines Problem mit DGL-Berechnung
  Antworten mit Zitat      
Hallo zusammen!

Ich schreibe gerade eine Pflichtaufgabe in Matlab. Eigenltihc sunktioniert das Programm auch allerdings erhalte ich immer folgende Fehlermeldung:

Code:
Warning: Failure at t=4.690991e-002.  Unable to meet integration tolerances without reducing the step
size below the smallest value allowed (1.110223e-016) at time t.
> In ode113 at 487
  In haupt at 73


und haupt in Zeile 73 sieht so aus:

Code:
options = odeset('RelTol', 1.0E-8);
[tWerte,ZWerte] = ode45('G',TSpan,Z0,options);


Die relative Toleranz ist eine Vorgabe und muss verwendet werden.

Kann mir da jemand helfen?

Danke![/code]


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.06.2011, 21:57     Titel:
  Antworten mit Zitat      
Hallo,

ohne genauere Informationen, was 'G' ist, kann man dazu wenig sagen.
Wenn bei expliziten Lösern wie ode45 die Schrittweite in die Knie geht, kann man ode23s oder ode15s versuchen. Alternativ besteht die Möglichkeit, dass die Lösung gegen unendlich läuft.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gluck

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2011, 13:17     Titel:
  Antworten mit Zitat      
danke für deine Antwort! Es scheint, dass das Problem aus einem Tippfehler stammte, aber nun habe ich ein weiteres was ich mir nicht erklären kann:

In meinem Hauptprogramm habe ich folgendes Codestück (Tut mir leid das ich nicht mit dem ganzen Code raus rücken kann, aber da das ein öffentliches Forum ist und ich meinem Prof. keine Erklärung liefern möchte, wenn jemand den selben Code hat wie ich, poste ich nur Auszüge. Ich hoffe ihr könnt das nachvollziehen... )

Code:
% Zeitspanne festlegen:

t0 = 0;
tmax = 0.4;
TSpan = [t0 tmax];

% Anfangswerte festlegen und in in Spaltenvektor Z0 schreiben:

phi1 = 0;
phi1p = 0;
x2 = r1+L+a;
x2p = 0;

Z0 = [phi1; phi1p; x2; x2p];

% DGL lösen:

options = odeset('RelTol', 1.0E-8);
[tWerte,ZWerte] = ode45('G',TSpan,Z0,options);
 


In der Funktion G steht nun folgendes drin:

Code:

% Momentane Zustandsgrößen entnehmen:

phi1  = Z(1);
phi1p = Z(2);
x2    = Z(3);
x2p   = Z(4);

% Hilfsgrößen berechnen:

[...]

n = mod(floor(phi1/pi),4);
 


Das Problem ist nun, dass phi1 aus irgendeinem Grund manchmal komplex wird und ich keine Ahnung habe weshalb. Wenn ich mir die Zahlen ausgeben lasse steht da z.B. 4.3453 +0.0000i

Da phi1 sonst net wirklich vorkommt müsste der gepostete Code ausreichen.

Danke für eure Hilfe!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.06.2011, 16:52     Titel:
  Antworten mit Zitat      
Hallo,

nein, reicht leider nicht. Zumindest muss man wissen, was Ein- und Ausgabeargumente von G sind.

Meine Empfehlung wäre, das Problem mit dem Debugger zu untersuchen; insbesondere:
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gluck

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2011, 17:58     Titel:
  Antworten mit Zitat      
wie kann ich das denn genau mit dem debugger machen? hab ich leider noch nie gemacht^^

meinst du das:

Zp = G(t,Z)


Zp = [phi1p; phi1pp; x2p; x2pp];

dazwischen werden die werte in Zp ausgerechnet...
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.06.2011, 18:39     Titel:
  Antworten mit Zitat      
Hallo,

gib mal das ein, was ich geschrieben habe. Dann bleibt MATLAB automatisch in der Zeile stehen, in der das erste NaN auftritt.

Und ja, das meinte ich. Das Problem ist aber vermutlich irgendwo im restlichen Code zu finden. Irgendwo sqrt, acos oder sowas?

Und lies doch mal die Doku zum Debugger?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gluck

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2011, 20:42     Titel:
  Antworten mit Zitat      
Bin jetzt nimmer zu Hause und kann Net genau gucken aber es gibt eine Stelle an der asin(phi1) vorkommt... Allerdings ist die nach der Stelle die den Fehler verursacht.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.06.2011, 22:50     Titel:
  Antworten mit Zitat      
... und welche Stelle genau verursacht den Fehler?
Wenn das Argument von asin betragsmäßig minimal größer als 1 ist, könnte das zu den merkwürdigen komplexen Ergebnissen führen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gluck

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2011, 23:12     Titel:
  Antworten mit Zitat      
Das mit dem asin werd ich morgen mal überprüfen.

Diese Stelle, welche aus dem obigen codeauszug stammt, verursacht das problem:

n = mod(floor(phi1/pi),4);

Phi1 wird wie gesagt teilweise Komplex. Das seltsame ist halt das phi1 durch den ode- Solver komplex Zu werden scheint, da es vorher gar Net benutzt wird...
 
gluck

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2011, 17:38     Titel:
  Antworten mit Zitat      
also das asin hat ein anderes argument...

der winkel phi1 wird von mir gar nicht generiert sondern muss durch den odesolver und das TSpan seine werte erhalten... ich versteh das net...
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.06.2011, 19:31     Titel:
  Antworten mit Zitat      
Hallo,

meine Empfehlung wäre wie gesagt
Code:

Falls du das Problem damit nicht aufspüren kannst, fürchte ich, dass wir um ein Minimalbeispiel, bei dem das Problem auftritt, nicht herumkommen.
Alternativ kannst du mir deinen Code per PN schicken.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.