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

Speicher- und Laufzeitkomplexität - Call by Value

 

Daniela
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2020, 16:16     Titel: Speicher- und Laufzeitkomplexität - Call by Value
  Antworten mit Zitat      
Hallo,

Matlab arbeitet ja nach dem Call by Value Prinzip.
Das heißt wenn ich nun die Speicheranalyse einer Funktion
function [x] = test(a,v) (a ist eine nxm Matrix, v und x Vektoren mit m Spalten)
durchführe arbeitet Matlab mit einer Kopie der Variablen a und v. Somit hat die Fkt. einen Speicherbedarf von O(m*n)+O(m) oder? Gilt dies auch für die Laufzeit, also führt das kopieren der Eingabevariablen auch dazu, dass ich ein Laufzeit von O(m*n)+O(m) habe?
Und wie ist es mit der Rückgabevariable x. Falls ich diese Funktion in einer anderen Funktion aufrufe, kopiert dann die zweite Funktion das x, dass sie von der Funktion x bekommen hat?

Vielen Dank
Daniela
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

Kopien werden im Speicher nur dann angelegt, wenn es notwendig ist. Wenn also eine Variable in der Funktion nicht verändert wird, wird sie auch nicht kopiert (copy-on-write). Selbst wenn sie verändert wird, muss eine Kopie nicht unbedingt angelegt werden, wenn MATLAB erkennt, dass die ursprüngliche Variable nicht mehr benötigt wird (in-place optimization).
https://de.mathworks.com/help/matla.....ssary-copies-of-data.html

Du kannst eine Funktion bei geöffnetem Task Manager Schritt für Schritt im Debugger abarbeiten und die Entwicklung des Speichers verfolgen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniela
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2020, 12:48     Titel:
  Antworten mit Zitat      
Danke schonmal für Ihre Antwort, hat mir sehr weitergeholfen.

Und falls die Eingabevariable verändert wird, also kopiert wird, führt das dann auch zu zusätzlicher Laufzeit. Also falls eine nxm Matrix übergeben wird, und in der Funktion verändert wird, wird ja eine Kopie davon gemacht also ein Speicheraufwand von O(nxm). Führt die aber auch zu einer zusätzlichen Laufzeit von O(nxm) oder ist die Laufzeit dieser Kopie konstant?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.03.2020, 14:10     Titel:
  Antworten mit Zitat      
Hallo,

meine Empfehlung wäre: ausprobieren.
Meine Erwartung wäre: asymptotisch linear.

Darf man fragen, was der Hintergrund all dieser Fragen ist?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniela
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2020, 14:26     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Anwort.

Das war auch mein erster Gedanke. Da ich jedoch neu in Matlab bin muss ich mich erst mal erkunden wie man die Laufzeit direkt misst. Ich habe bis jetzt tic .. toc ausprobiert oder einzelne Teile meines Algorithmus geplottet.

Ich arbeite gerade an einem Algorithmus in Matlab und will diesen im Moment optimieren. Jedoch habe ich nicht ganz so viele Programmierkentnisse deswegen habe ich auf dieses Forum zurückgegriffen. Zugriff auf Bücher habe ich wegen der aktuellen Situation leider nicht sonst hätte ich in der Bücherei geschaut. Aber man findet Gott sei Dank viele Informationen über Matlab auch online.

Mfg. Daniela
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.03.2020, 15:13     Titel:
  Antworten mit Zitat      
Hallo,

neben tic / toc würde ich zur Laufzeitmessung den Profiler empfehlen ("Run and Time" im HOME Tab oder profile-Befehl). Mit dem Profiler lässt sich aufschlüsseln, wo die Zeit tatsächlich verbracht wird.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniela
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2020, 15:23     Titel:
  Antworten mit Zitat      
Vielen Dank für deinen Tip, werde ich auf jeden Fall ausprobieren.

Hast du auch einen Tip was ich für den Speicheraufwand verwenden kann.
Da ich mir an einigen Stellen meines Codes nicht sicher bin ob ich Speicheraufwand habe.

Z.B.

Ich habe eine Funktion, die nach dem "In-Place" Prinzip arbeitet, d.h. die Eingabevariablen sind auch Ausgabevariablen und ich ändere (denke ich) während des Codes die Eingabevariablen nicht großartig. (also ich habe eine Matrix a und lösche die komplette erste Zeile raus, falls diese nur aus nullen besteht, und gebe die neue Matrix a dann zurück). Nun weiß ich aber nicht, ob der Befehl a(1,: ) = [] dazu führt, ob neuer Speicher angelegt wird, da die Dimension der Matrix verändert wird.

Mfg.Daniela
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.03.2020, 15:27     Titel:
  Antworten mit Zitat      
Hallo,

wie gesagt:
Zitat:
Du kannst eine Funktion bei geöffnetem Task Manager Schritt für Schritt im Debugger abarbeiten und die Entwicklung des Speichers verfolgen.


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Daniela
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2020, 15:32     Titel:
  Antworten mit Zitat      
Vielen Dank Harald, so habe ich es bis jetzt auch immer gemacht.
(Ich dachte vllt dass es hier auch eine Funktion wie tic...toc gibt)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.03.2020, 16:25     Titel:
  Antworten mit Zitat      

_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.