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

einfache Frage zur Fortschreibung des Maximums

 

beginner111
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 10.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2012, 21:19     Titel: einfache Frage zur Fortschreibung des Maximums
  Antworten mit Zitat      
Servus

Ich bin über jede Hilfe dankbar, da ich absoluter Einsteiger bin.
Es geht um die Fortschreibung des Spaltenmaximums eines Vektors.
Man nehme einen beliebigen SpaltenVektor z.B. x= [-5,10,1,5,8,12]',
herauskommen soll dann als Ergebnis der Prozedur:= [-5,10,10,10,10,12]' .
Also möchte man eine Prozedur erschaffen welche nach diesem Schema vorgeht: [max{a1};max{a1,a2};..............;max{a1,.....,an}]
Also ein Vergleich der einzelnenWerte und Ausgabe des Maximums bis zu diesem Punkt.

Folgenderweise lautet meine bisherige laufende Funktion:

function[spaltenmax]= maxx(x)
% Funktion zur Fotschreibung des Spaltenmaximums eines Vektors

spaltenmax=[max(x(1,1));max(max(x(1,1)),x(2,1));max(max(max(x(1,1)),x(2,1)),x(3,1));...
max(max(max(max(x(1,1)),x(2,1)),x(3,1)),x(4,1))];


Meine Frage lautet nun wie ich das Problem umsetze sodass mir die Funktion ein Ergebnis für jeden möglich großen Spaltenvektor ausgeben kann.

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.06.2012, 11:48     Titel:
  Antworten mit Zitat      
Hallo nutze einfach dazu eine FOR-Loop:
Code:

x= [-5,10,1,5,8,12]'
v= zeros(size(x));
for k=1:length(x)
  v(k)= max(x(1:k));
end
disp(v)
 
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: 11.06.2012, 12:32     Titel:
  Antworten mit Zitat      
Hallo beginner111, hallo denny,

Das wiederholte Aufrufen von MAX wird ineffizient für große Arrays, da immer größere Speicher-Abschnitte bearbeitet werden müssen, die dann irgendwann nicht mehr in den Cache passen. Deshalb würde ich dies mit einer sequentiellen Schleife lösen:
Code:
x = [-5,10,1,5,8,12];
v= zeros(size(x));
m = -Inf;
for k = 1:length(x)
  if x(k) > m
    m = x(k);
  end
  v(k)= m;
end
disp(v)

Ich kann den Laufzeitunterschied zur Zeit nicht messen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 10.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2012, 22:48     Titel:
  Antworten mit Zitat      
Vielen Dank denny und Jan:)

Könntet ihr mir vielleicht noch sagen, ob man dieses Problem darüberhinaus auch ohne kontrollstrukturen(schleifen etc.) lösen kann?
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.