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

Von Vektor Wert subtrahieren

 

Philipp68
Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 07.12.2016, 16:09     Titel: Von Vektor Wert subtrahieren
  Antworten mit Zitat      
Hallo,
ich möchte von jedem Y - Wert eines Vektors einen bestimmten Wert subtrahieren.

Code:

for i = 1:130
    Neu(:,i) = Alt(i)-Wert;
end  
 


Ich bekomme nun aber eine 130 x 130 Matrix und Neu(:,i) wird rot unterstrichen (appears to change size on every loop iteration).
Ansich soll nur ein neuer Vektor erstellt werden.
Wäre für einen Tipp sehr dankbar Smile
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.12.2016, 20:46     Titel: Re: Von Vektor Wert subtrahieren
  Antworten mit Zitat      
Hallo Philipp68,

Die Warnung lässt sich mit einer "Pre-allocation" lösen:
Code:
Neu = zeros(1, 130);
for i = 1:130
    Neu(:,i) = Alt(i)-Wert;
end

Ein iterativ wachsendes Array benötigt eine Menge Resourcen. In deinem Fall hat das Endergebnis 130*8 = 1040 Byte plus 100 Byte Header für die Variable. Matlab erstellt aber ohne Pre-allocation in jeder Iteration ein neues Array in und kopiert die alten Daten um. Dazu werden insgesamt sum(1:130)*8 + 130 * 100 = 21515 Byte. Je größer das Array w
ird, desto schlimmer wird das: Bei 1000 Elementen geht es schon um 4MB. Das kann ein Programm massiv ausbremsen.
Darum ist Pre-allocation grundsätzlich Pflicht.

Es geht in Matlab allerdings noch viel einfacher:
Code:
Neu = Alt - Wert;

Eine Schleife ist hier überflüssig.

Wieso Du eine 130x130-Matrix bekommst, weiß ich nicht. Poste bitte die Dimensionen der Inputs.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 08.12.2016, 11:49     Titel:
  Antworten mit Zitat      
Guten Morgen Jan,
vielen Dank für den Hinweis. An diese einfache Schreibweise habe ich nicht gedacht. Ich habe eben den Code nochmal laufen lassen, Workspace vorher gelöscht und nun einen 1 x 130 Vektor erhalten (neuen Werte sind identisch). Ich kann nun leider nicht mehr nachvollziehen, wie die 130x130 Matrix entstanden ist. Falls dieser Fall nochmal auftreten sollte, würde ich es hier posten.
Lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.12.2016, 16:47     Titel:
  Antworten mit Zitat      
Hallo Philipp68,

Eine Möglichkeit wäre z.B.:
Code:
Neu = zeros(130, 1);
for i = 1:130
    Neu(:,i) = Alt(i)-Wert;
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 13.12.2016, 15:07     Titel:
  Antworten mit Zitat      
Hallo Jan,
perfekt, vielen Dank! Smile
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.