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

Effizienzproblem

 

Elaine

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2009, 15:17     Titel: Effizienzproblem
  Antworten mit Zitat      
Hallo,

ich bin gerade dabei, mein Script ein wenig zu überarbeiten, damit es bei der Ausführung nicht so viel Zeit benötigt.
Hier ist ein kleiner Teil des Gesamtcodes, der auf 1. Sicht vielleicht nicht lang für die Ausführung braucht, die Schnelligkeit des Gesamtablaufs aber sehr einschränkt.
(Ziel / Motivation: Ich möchte mit dieser und anderen Abänderungen meinen Gesamtablauf unter 4 Stunden bekommen.
Momentan würde er bei mehreren Tagen liegen. (Bei Input von entsprechend vielen Eingabewerten um die 30.000))

1. Kann man unten stehenden Code auch ohne for-schleifen realisieren?

2. Wenn nicht, gibt es einen effizienteren Weg, den ich gehen kann, um schneller auf die Lösung meines Problems zu kommen?

3. Angenommen fden ist ein Vektor von Funktionen. Kann ich das in die Funktion int oder eine ähnliche Funktion irgendwie einbringen oder brauch ich hierfür auch eine extra for-schleife?

4. Ist 'int()' die richtige Wahl oder gibt es andere Integralfunktionen, welche schneller arbeiten?

Vorliegen habe ich einen Vektor 'bereich'.
In diesem Vektor stehen Zahlen wie zum Beispiel 12.342 oder 7.649 .

'funkt' ist eine Funktion wie zB.
0.15*exp(-0.7*x^2)

Code:


for k=1:length(bereich)

     temp = -ceil(bereich(k))-1:1:ceil(bereich(k))+1;

             for i = 1:length(temp)

                  wert(i) = int(funkt,x,temp(i)-0.5,temp(i)+0.5);

             end;
                                           
end;

 


Ich würde mich sehr freuen, wenn mir hierbei jemand helfen kann.

freundliche Grüße
Elaine


Elaine

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2009, 09:54     Titel: Korrektur
  Antworten mit Zitat      
Korrektur:
3. Angenommen 'funkt' ist ein Vektor von Funktionen. Kann ich das in die Funktion int oder eine ähnliche Funktion irgendwie einbringen oder brauch ich hierfür auch eine extra for-schleife?
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 09.06.2009, 10:53     Titel:
  Antworten mit Zitat      
Ich würde vorschlagen die Integration nur einmal auszuführen (also aus der Schleife zu entfernen) und dann erst die Bereiche einzusetzen. So wie es jetzt da steht, wird jedesmal das Integral aufwendig berechnet. Das sollte die Ausführung deutlich beschleunigen.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Elaine

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2009, 12:36     Titel: danke & weitere Frage
  Antworten mit Zitat      
ok vielen Dank!

Ich habe das nun folgendermaßen ungeschrieben:


Code:

zwert = int(funkt);

for k=1:length(bereich)

    temp = -ceil(bereich(k))-1:1:ceil(bereich(k))+1;

    wert = subs(zwert,x,temp+0.5)-subs(zwert,x,temp-0.5);

end;
 


oder kann man das besser lösen?
Wenn ich nun einen Vektor von Funktionen habe, kann ich das nur mit einer for-schleife lösen oder gibt es eine Integralfunktion, die als Eingabe einen Vektor von Funktionen akzeptiert?

mit forschleife würde es so aussehen:

Code:


for l=1:length(funkt)

   zwert(l) = int(funkt(l));
   for k=1:length(bereich)

      temp = -ceil(bereich(k))-1:1:ceil(bereich(k))+1;
      pdez = subs(zwert,x,temp+0.5)-subs(zwert,x,temp-0.5);

   end;
end;

 
 
Elaine

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2009, 12:50     Titel: korrektur
  Antworten mit Zitat      
Habe gerade gesehen, dass ja int schon einen Vektor von Funktionen annimmt. Jedoch ist jetzt das Problem die subs-Funktion.

Die folgende Lösung würde einen Fehler auswerfen.
Code:

Code:


zwert = int(funkt);
for k=1:length(bereich)

   temp = -ceil(bereich(k))-1:1:ceil(bereich(k))+1;
   wert = subs(zwert,x,temp+0.5)-subs(zwert,x,temp-0.5);

end;

 


Also doch besser bei der for-schleife bleiben oder gibt es eine andere Möglichkeit?
 
Elaine

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2009, 13:11     Titel: Zusatz
  Antworten mit Zitat      
Hätte mich wohl mal anmelden sollen, damit ich editieren kann Wink

Also mit for-schleife würde der Code so aussehen:

Code:


wert = ones(length(funkt),length(temp));
zwert = int(funkt);

for l = 1:length(funkt)
   for k = 1:length(bereich)

      temp = -ceil(bereich(k))-1:1:ceil(bereich(k))+1;
      wert(l,:) = subs(zwert(l),x,temp+0.5)-subs(zwert(l),x,temp-0.5);

   end;
end;


 


Jetzt sind die aktuellen Fragen:
Kann man dies effizienter gestalten?
Kann man die äußere for-schleife weglassen, wenn man anstelle von subs() etwas anderes benutzt (da keine Eingabe von Vektoren an 1. Stelle der subs-funktion möglich)?

vielen Dank schonmal.

freundliche Grüße
Elaine
 
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.