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

Speicherbelegung bei unbekannter Länge eines Vektors

 

Mihawk
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 30.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2015, 17:12     Titel: Speicherbelegung bei unbekannter Länge eines Vektors
  Antworten mit Zitat      
Hallo zusammen,

ich bin noch relativ neu in Matlab und bin viel am rum experimentieren.
Nun bin ich auf folgendes Problem gestoßen:

Wenn sich bei einer Schleife ein Vektor mit jeder Wiederholung um eine Spalte/ Zeile verlängert, sollte man ja den Vektor bereits im vorhinein erstellen um den Speicherplatz vorzubelegen. Beispielsweise mit zeros(1,n).

Im Sekantenverfahren zur Nullstellenberechnung zum Beispiel ist ja unbekannt bei welcher Iteration eine gewünschte Genauigkeit erreicht wird. Gibt es hier auch eine halbwegs elegante Möglichkeit den Speicherplatz schon vorzubelegen?

Vielen Dank & viele Grüße
Mihawk
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: 30.01.2015, 20:09     Titel:
  Antworten mit Zitat      
Hallo,

Möglichkeiten sind:
- eine Maximalgröße vorbelegen (üblicherweise begrenzt man ja die Anzahl der Iterationen)
- einen Block vorbelegen und bei Bedarf einen weiteren Block dazunehmen
In beiden Fällen muss man am Ende den nicht benötigten Teil wieder freigeben.

Insbesondere bei neueren MATLAB-Releases ist es jedoch so, dass die Verlangsamung durch fehlende Vorbelegung häufig minimal ist.

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

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 30.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2015, 20:19     Titel:
  Antworten mit Zitat      
Danke für die Antwort, vor allem das die Verlangsamung nur sehr gering ist gut zu wissen!
Die Anzahl der Iterationen ist bei mir nur durch erreichen der Genauigkeit begrenzt. Bei Vorgabe einer stetig-differentierbaren Funktion und bei VZW in dem Intervall muss es dann ja eine Nullstelle geben.

Könntest du mir evtl. ein Beispiel für die vorbelegung und spätere Besetzung von einzelnen Blöcken geben? ich kann mir da gerade nichts drunter vorstellen.
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: 31.01.2015, 11:39     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
vor allem das die Verlangsamung nur sehr gering ist gut zu wissen!

So allgemein habe ich das nicht geschrieben und würde ich auch nicht sagen. Es ist nur in vielen Fällen so.

Zitat:
Könntest du mir evtl. ein Beispiel für die vorbelegung und spätere Besetzung von einzelnen Blöcken geben?

z.B. so:
Code:
M  = nan(1000,1);
L = 1000;
I = 1;
while rand > 1e-5 % wird "irgendwann" verletzt
    if I > L % kein Platz mehr
        M = [M; nan(1000,1)]; % Platz schaffen
        L = L + 1000;
    end
    M(I) = rand;
    I = I + 1;
end
M(I+1:end) = [];


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