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

for loop gegen vectorization

 

Edouard

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2009, 11:59     Titel: for loop gegen vectorization
  Antworten mit Zitat      
Hallo,

hier ist ein Code der ein Differential Gleichung integriert mit ode23. Es gibt 2 verschiedene Weg drin. Erstmal mit einem for loop and dann mit Vectorization.

Die for loop dauert ewig wenn ich große Vektoren als input eingebe, deswegen möchte ich Vectorization verwenden. Leider krieg ich unterschiedliche Ergebnisse dafür... in beide Fälle bekomme ich ein Matrix aber wenn ich es gegen die Zeit plotte dann sehe ich eine kleine Unterschied....

hier ist mein code.

Wenn Ihr ein Idee habt...
Code:

function x2 = fun_vector_loop(t,q,tu)
% diese funktion nimmt als imput die Wärme q und die Umgebungstemperatur tu
% als vektoren und integrierte  die Differentiale Gleichung über der Zeit


% q = linspace(5000,5100,1000)';
% tu = linspace(293,296,1000)';
% diese q und tu sollen als input eingegeben werden.


initial_cond = linspace(283,283,100);
tspan = [0 1:length(t)];

[t1,x1] = ode23((@(t,x) q./(800*480) - (((x)-tu)./(0.02 .* 800 .* 480))),tspan,initial_cond);


for i = 1:length(q);
    [t2,x2] = ode23((@(t,x)q(i)./(800*480) - (((x)-tu(i))./(0.02 .* 800 .* 480))),tspan,initial_cond);
end


subplot(2,1,1)
plot(t1,x1,'r')

axis tight
grid on
ylabel('Temperatur in Kelvin')
xlabel('Zeit in Sekunden')
title('Temperaturverlauf über der Zeit mit verändertlichem Q und Tu über der Zeit: Vektor')


subplot(2,1,2)
plot(t2,x2,'r')

axis tight
grid on
ylabel('Temperatur in Kelvin')
xlabel('Zeit in Sekunden')
title('Temperaturverlauf über der Zeit mit verändertlichem Q und Tu über der Zeit: For Loop')
 


edit by Maddy: code-Umgebung eingefügt. Bitte beim nächsten Mal selber dran denken.


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 24.04.2009, 12:15     Titel:
  Antworten mit Zitat      
Moin,

ich denke mal, dass du in der for-Schleife auch die Ergebnis-Vektoren indizieren müsstest:

Code:
t2 = zeros(1:length(q));
x2 = zeros(1:length(q));

for i = 1:length(q);
    [t2(i),x2(i)] = ode23((@(t,x)q(i)./(800*480) - (((x)-tu(i))./(0.02 .* 800 .* 480))),tspan,initial_cond);
end


Probier mal...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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.