Verfasst am: 09.11.2016, 16:24
Titel: Beschleunigung einer Schleife die über Heaviside integriert
Guten Tag,
ich benötige eure Hilfe. Ist es möglich die Schleife zu beschleunigen? Schon für die kleinsten Intervalle benötigt meine Programmierung Minuten :/
Ich muss diese for-Schleife mehrmalig und in verschiedenen Skripten durchlaufen. Deshalb würde ich mich nur ungern mit der Wartezeit zufrieden geben
Code:
texact=linspace(0,15,30)'; % gerne würde ich statt 30 mindestens 200 verwenden
ab=0*texact;
syms tau
for i=1:length(texact) %diese Schleife durchläuft meinen Zeitvektor und gibt auch Integrationsgrenze an
abtemp=0;
for j=0:M-1% diese for-Schleife stellt eine Summe dar disp(['i=',int2str(i),' of ',int2str(length(texact)),...
' j=',int2str(j),' of ',int2str(M-1)]); % das kann natürlich im endgültigen Skript gelöscht werden
abtemp=abtemp+int(heaviside(tau-j*T)*(tau-j*T).^(n-1).*exp(-k.*tau),tau,0,texact(i)).*exp(j*T);
end;
ab(i)=exp(-k*texact(i))*abtemp/(factorial(n-1));
end
es macht das Leben deutlich einfacher, wenn alle Variablen mitgeliefert werden (M, T, ...).
Die Idee an symbolischen Integralen ist ja gerade, dass man sie nur einmal ausrechnet und dann unterschiedliche Werte einsetzt. Hast du das mal versucht?
Danke für den Hinweis. Ich glaube es lag an der Verwendung von . Mit geht das schon flotter! Ich hatte nicht auf die unterschiedliche Funktion der beiden Befehle geachtet.
Nun in "relativ" flott...
Code:
%Parameter
k=0.5;
ka=k;
T=3;
n=6;
texact=linspace(0,15,100)';
ab=0*texact;
for i=1:length(texact) %diese Schleife durchläuft meinen Zeitvektor und gibt auch Integrationsgrenze an
abtemp=0;
for j=0:15% diese for-Schleife stellt eine Summe dar disp(['i=',int2str(i),' of ',int2str(length(texact)),...
' j=',int2str(j),' of ',int2str(M-1)]); % das kann natürlich im endgültigen Skript gelöscht werden
innerhalb der Integrale variierst du ja nur die Grenzen. Das heißt, du könntest das Integral auch ermitteln, indem du ab dem vorherigen Endwert integrierst und dann das vorherige Integral addierst.
Dazu musst du die Integrale wohl zwischenspeichern, da die Vorfaktoren unterschiedlich sind.
(und ich würde am Ende vergleichen, ob du die gleichen Ergebnisse bekommst)
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
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.