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

Anfängerproblem if Bedingung funktioniert nicht

 

kiwi121

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2013, 10:37     Titel: Anfängerproblem if Bedingung funktioniert nicht
  Antworten mit Zitat      
Hi Leute,
ich bin absuluter Matlab Anfänger und habe auch gleich zu Beginn meiner Simulation ein Problem. Ich habe verschiedene Strahlungswerte die auch zu Null werden. Um für diesen Fall eine Ausnahme zu schaffen soll in der For-Schleife eine if-Bedingung realisiert werden. Leider funktioniert das nicht wie es soll. Sobald die Strahlung Null wird soll eigentlich der Wert für Tout an dieser Stelle auf einen bestimmten Wert gesetzt werden und gar keine Berechnung mit der Strahlung gemacht werden. Kann mir vielleicht einer sagen warum es nicht funktionert? Warum wird die if Bedingung nicht beachtet und sobald i=0 ist, alle Werte auf NaN gesetzt (trotz if- Bedingung)?


Vielen Dank schon mal im Vorraus für eure Hilfe.

Code:
%mein Ansatz
A=2.286;
k1=3.38;
k2=0.0166;
n0=0.85;
m=5;
Ta=283;
cp=4200;
Tinstart=Ta;
Tinneu = Tinstart;
Tout =286;
deltaT=0.01;
 
 
 i=[500 600 0 850 700 800]'; %Beispieldaten
 
for zahl = 1:  max(length(i))
   
Tabs=((Tinneu+Tout+deltaT)./2);
 

if i(zahl) <= 0

 Tout= Ta;
 
else
 deltaT = (i.* A.*(n0-((k1.*(Tabs-Ta))./i)-(k2.*((Tabs-Ta).^2)./i))./(cp .* m));



Tout = Tinstart +cumtrapz(deltaT);

Tinneu= Tout;
 
end
end


Kascho
Forum-Century

Forum-Century


Beiträge: 195
Anmeldedatum: 24.03.10
Wohnort: Jena
Version: R2008b ... :(
     Beitrag Verfasst am: 23.08.2013, 10:59     Titel:
  Antworten mit Zitat      
Hi Kiwi,
ich denke mal, dass er schon die Bedingung beachten. Problem ist nur das du Tour mit jedem Durchgang überschreibst, und am Ende nur den Wert des letzten Schleifendurchgangs hast.
Besser:

Code:


Gruß, Kascho
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 23.08.2013, 11:03     Titel:
  Antworten mit Zitat      
du teilst trotzdem durch i auch wenn du elementweise teilst enthällt i immernoch eine 0 und darum das nan
meinst du vieleicht i(zahl)
anmerkung: i ist die imaginäre einheit und sollte nicht mit variablen namen überschrieben werden.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2013, 11:21     Titel:
  Antworten mit Zitat      
Also ich habe jetzt mal eine Kleinigkeit geändert (Tout(zahl)), aber das Ergebnis stimmt immer noch nicht ganz.

Code:
A=2.286;
k1=3.38;
k2=0.0166;
n0=0.85;
m=5;
Ta=283;
cp=4200;
Tinstart=Ta;
Tinneu = Tinstart;
Tout =286;
deltaT=0.01;
 
 
 i=[500 600 0 700 0 0]';
 
for zahl = 1:  max(length(i))
   
Tabs=((Tinneu+Tout+deltaT)./2);
 

if i(zahl) <= 0

 Tout(zahl)= Ta;
 
else
 deltaT = (i.* A.*(n0-((k1.*(Tabs-Ta))./i)-(k2.*((Tabs-Ta).^2)./i))./(cp .* m));



Tout = Tinstart +cumtrapz(deltaT);

Tinneu= Tout;
 
end
end
 


das kommt dabei raus:

Code:
Tout =

  283.0000
  283.0509
       NaN
       NaN
  283.0000
  283.0000


Also am Ende macht er das richtige, aber für den ersten Null-Wert und den darauf folgenden Wert nicht. Woran kann das liegen? Wenn ich für i überall i(zahl) einsetze kommt am Ende nur ein Wert heraus,...
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 23.08.2013, 11:26     Titel:
  Antworten mit Zitat      
phuuu aaaallllsoo du speicherst jetzt wen i=0 ist einmal einen wert bei tout(zahl) sonst überschriebst du einfach nur alle werte in tout im anderen fall da du da keinen index hast. dann hast du immernoch das problem das dein deltaT keine zahl sondern ein array ist das nunmal werte hat die nan sind da i irgendwo 0 ist. denk nochmal drüber nach was du rechnen willst und was du als ergebnis haben willst. wenn du i(zahl) nimmst soll am ende ja auch nur ein wert rauskommen. das ist das was du programmiert hast. denke der rest ist ein fehler. wenn du alle werte haben willst must du die auch seperat speichern wie du es im fall tout(zahl) gemacht hast. am besten du gehst mal mit dem debugger rein damit dir klar wird was dein programm eigentlich macht Smile
_________________

richtig Fragen
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.