Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Entwicklungsingenieur (m/w) für modellbasierte Softwareentwicklung
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler (m/w) für automatische Codegenerierung
Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink im Bereich Fahrwerkregelsysteme
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Resident-Ingenieur (w/m) Hardware-in-the-Loop-Simulation
Inbetriebnahme und Software-Anpassungen der HIL-Systeme
dSPACE GmbH - Wolfsburg

Embedded Software- Entwickler (m/w) - Hardwarenahe Software für innovative Steuerungssysteme
Design, Implementierung und Test von Embedded Software
DR. JOHANNES HEIDENHAIN GmbH - Traunreut (Raum Rosenheim)

Ingenieur (w/m) modellbasierte Entwicklung/Embedded Programmierung
Organisation und Durchführung von Projekten zur Integration von TargetLink
dSPACE GmbH - Böblingen (bei Stuttgart)

weitere Angebote

Partner:


Vermarktungspartner


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, 16: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: 17.537
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 30.01.2015, 19: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, 19: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: 17.537
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 31.01.2015, 10: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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.