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

Beschleunigung einer Schleife die über Heaviside integriert

 

sitzpillow
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.12.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2016, 16:24     Titel: Beschleunigung einer Schleife die über Heaviside integriert
  Antworten mit Zitat      
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 Very Happy

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

Besten Dank!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

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?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.12.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2016, 17:31     Titel:
  Antworten mit Zitat      
Danke für den Hinweis. Ich glaube es lag an der Verwendung von int(). Mit  Integral 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
       
        abtemp=abtemp+exp(k*j*T)*heaviside(texact(i) - T*j).*integral(@(tau) exp(-tau*(k - ka)).*(tau - T*j).^(n - 1), T*j, texact(i) )
    end;
    ab(i)=exp(-k*texact(i))*abtemp/(factorial(n-1));
end

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
sitzpillow
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 07.12.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2016, 17:35     Titel:
  Antworten mit Zitat      
Kann man das ganze nun noch vektorisieren?
Z.B. indem man die äußere Schleife nach innen holt und mit ganz texact rechnet.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

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