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

Stationären Zustandswert und dessen Zeit ausgeben

 

Sebii2
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 22.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2009, 00:40     Titel: Stationären Zustandswert und dessen Zeit ausgeben
  Antworten mit Zitat      
Hallo Zusammen

Ich habe eine Simulation für den Temperaturverlauf in einem Haus aufgebaut und soweit funktioniert auch alles. Im Anhang befindet sich der geplottete Temperaturverlauf im Haus.

Nun zu meinem Problem: Ich wollte mittels einer Schleife den stationären Zustand der Temperatur ermitteln und wann (Zeit) dieser eintritt. Leider ist die einzige Ausgabe die Startwerte, also 273 K bei 0 sekunden.

Wo liegt mein Fehler??

Hier die Schleife:
Code:

% Ermitteln des stationären Zustandes
i=1; %Zähler
while(1)
i=i+1;
if (TR3(i)/TR3(i+1))>0.9995    % TR3 ist die Raumtemperatur
    TR3stat=TR3(i);                 % übergabe des stationären Wertes an eine Variable

    break
   
end
end

tstat=t(i);                    % Übergabe des Zeitpunktes der stationärität an eine Variable
 


Hoffe mir kann jemand helfen.

edit by steve: Willkommen im Forum. Verwende bitte in Zukunft die Code-Umgebung für die Codeschnipsel über den Butten oben in der Mitte.

Temperaturverlauf.jpg
 Beschreibung:

Download
 Dateiname:  Temperaturverlauf.jpg
 Dateigröße:  22.84 KB
 Heruntergeladen:  667 mal
Private Nachricht senden Benutzer-Profile anzeigen


derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 22.05.2009, 10:31     Titel:
  Antworten mit Zitat      
Hi, macht doch eigentlich Sinn, die Änderung scheint am Anfang doch sehr stark zu sein, dadurch wird halt gleich der erste Wert genommen und die Schleife bricht ab.

Besser wäre folgendes:

Code:

stati=TR3(1:end-1)./TR3(2:end);
plot(stati);
 


Damit löst du das Problem schnell und ohne Schleife. Und du kannst dir den Verlauf angucken und gegenbenenfalls einen Schwellenwert (z.B. 0.995) berechnen. Aber wäre nicht eigentlich der Absolutwert der Differenz sinnvoller?

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Sebii2
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 22.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2009, 12:20     Titel:
  Antworten mit Zitat      
Danke für deine Antwort.
Ich kenne mich in matlab und simulink leider noch nicht so gut aus.
Was ich vergessen hab zu sagen war das ich die Simulation in simulink aufgebaut habe und die Temperatur TR3 als Array an matlab übergebe.
Ebenso die Zeit t

meine Schleife mit If Anweisung soll also den ersten mit dem nächsten arraywert vergleichen und wenn sich dieser (so gut wie) nicht mehr ändert den aktuellen Wert Ausgeben. Deswegen die Schleife.

Ich habe deinen Code probiert, leider kann ich den plot nicht interpretieren (habs mal hochgeladen).

graph2.jpg
 Beschreibung:

Download
 Dateiname:  graph2.jpg
 Dateigröße:  15.81 KB
 Heruntergeladen:  633 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 22.05.2009, 12:39     Titel:
  Antworten mit Zitat      
Hi mit Simulink kenne ich mich leider nicht aus.

Die Grafik zeigt dir die Änderung wie du sie berechnen möchtest. Dort siehst du auch, warum es bis jetzt nicht funktioniert hat. Der Wert 0.9995 wird schon am Anfang erreicht. Dann steigt es pro Zeitwert immer weiter an, danach negiert sich die Änderung und dann gibt es keine Änderung mehr. Jetzt kannst du den Vektor interpretieren, zB. rausfinden wann sich die Änderung negiert (max) usw.

Viele Grüße,

der Oli

P.S. versuche in Zukunft nicht mehr i und j als Variablen zu benutzen (komplexe Rechnung).
Private Nachricht senden Benutzer-Profile anzeigen
 
Sebii2
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 22.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2009, 14:19     Titel:
  Antworten mit Zitat      
Ok ich danke dir.
Weiß zufällig jemand wie ich das Problem des Schwellwerts ändern könnte? Hab schon die Schrittweite meiner Schleife geändert um einen höhere Differenz zu den einzelnen Werten des Arrays zu bekommen. leider auch ohne guten Erfolg (Zeigt mir dann den max (TR3) Wert an)

Wie könnte ich die Schleifenbedingung anpassen damit es funktioniert?
Hab sie schon erweitert, da die Temperatur kurzzeitig fällt und somit meine abbruchbedingung falsch wäre:

Code:

c=1;
while(1)
c=c+1;
if (TR3(c)/TR3(c+1))>0.9995 && (TR3(c)/TR3(c+1))<= 1
    TR3stat=TR3(c);
    break
   
end
end

tstat3=t(c);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 27.05.2009, 10:24     Titel:
  Antworten mit Zitat      
Hi Sebil,

was ist denn genau deine Abbruchbedingung???

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 27.05.2009, 10:29     Titel:
  Antworten mit Zitat      
Achso jetzt seh ich erstmal den Fehler in der if Abfrage,

die Schleife ist an der falschen Stelle, du willst wahrscheinlich das hier schreiben:

Code:

(TR3(c)/TR3(c+1))>0.9995 && (TR3(c)/TR3(c+1)<= 1)
 


Aber wie gesagt, ich würde es einfach nicht mit einer Schleife machen, sondern mit dem Code weiter oben, ohne Schleife. Ich versteh bloß deine Abbruchbedingung nicht.

Grüße,

der Oli
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 - 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.