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

Minimum/Maximum

 

MixmasterPhil
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2012, 17:59     Titel: Minimum/Maximum
  Antworten mit Zitat      
Hallo,
für meine Bachelorarbeit benötige ich das Maximum als auch das Minimum eines 1x525600 Vektors. Es soll immer das Maximum bzw das Minimum in Schritten von 60 gefunden werden. Das heißt im ersten Schritt:
1. Die ersten 60 Werte vergleichen Maximum und Minimum finden
2. Den errechneten Wert in die Matrix PMAX bzw PMIN schreiben
3.Werte von 61 bis 120 vergleichen usw.

Hier mein Code für PMAX

Code:
% Finden der Maxima in 60er Zeitschritten
% Dim PNetzoSpeicher(525600x1)
for i=1:1:8760
   
z=PNetzoSpeicher(((i-1)*60)+1:60*i)
PMAX(i)=max(z)

end


Das funktioniert irgendwie noch nicht und ich habe leider grad keine anderen Ideen mehr!

Vielen Dank für die Hilfe


Philipp
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.08.2012, 18:06     Titel:
  Antworten mit Zitat      
Hallo,

und was funktioniert daran nicht? Gibt es eine Fehlermeldung? Unerwartete Ergebnisse? Welche?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 09:22     Titel:
  Antworten mit Zitat      
Das Programm als solches funktioniert jetzt.

Der Vektor PMIN ist nach der Ausführung des Skripts 1x8760 lang. Jetzt benötige ich aber wieder einen Vektor für meine Simulation in Simulink der 1x525600 lang ist, d.h ich muss einen Vektor bilden, in dem sich die einzelnen Werte von PMIN immer 60 mal wiederholen. So kommt man am Ende wieder auf den großen Vektor.

Mein jetztiges Programm

Code:
PMAX=zeros(1,525600)
PMIN=zeros(1,525600)
for i=1:1:8760
   
mini=min(PNetzoSpeicher(((i-1)*60)+1:60*i))
maxi=max(PNetzoSpeicher(((i-1)*60)+1:60*i))
PMAX(((i-1)*60)+1:60*i)=maxi
PMIN(((i-1)*60)+1:60*i)=mini
end



Das läuft jetzt leider schon seit über 10 Stunden.
Kann man sowas irgendwie anders lösen?


Vielen Dank für die Hilfe!


Philipp
Private Nachricht senden Benutzer-Profile anzeigen
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 10:17     Titel:
  Antworten mit Zitat      
Hallo,
wenn ich das richtig verstehe, dann suchst du für einen Vektor das Maximum und das Minimum jeweils alle 60 Elemente.
Ich würde das ganze wie folgt implementieren:
Code:

% Der Vektor, hier einfach mal mit randi erzeugt:
x = randi(1000,525600,1);
% Umsortieren des Vektors in eine Matrix mit einer Spaltenlänge von 60
x = reshape(x,[60 8760]);
% Die max() bzw. min()-Funktionen berechnen nun spaltenweise das Maximum bzw. das Minimum
maxi = max(x);
mini = min(x);
% Nun willst du das Maximum und das Minimum jeweils 60 mal wiederholen. Hierfür eignet sich die repmat() Funktion:
maxi = repmat(maxi,[60 1]);
mini = repmat(mini,[60 1]);
% Die entstandene Matrix wird nun als Vektor dargestellt:
maxi = maxi(:);
mini = mini(:);
 

Entspricht das deinem erwünschten Ergebnis?
mfg

Ajax
Private Nachricht senden Benutzer-Profile anzeigen
 
MixmasterPhil
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 10:57     Titel:
  Antworten mit Zitat      
Ich habe eine Simulation die 525600 Zeitschriite lang ist.
Der Vektor PNetzoSpeicher ist 525600x1 groß
Jetzt muss ich die jeweiligen Maxima und Minima immer in 60er Schritten ausgeben.
Dann bekomm ich mit meinem vorherigen Programm einen Vektor der 8760x1 lang ist. Diesen muss ich nun wieder auf die Größe des vorigen Vektors also 525600x1 erweitern. Das heißt ich muss alle 8760 gefundenen Maxima bzw Minima jeweils 60 mal wiederholen, so dass ich die beiden entstandenen Vektoren PMIN und PMAX wieder in der Simulation verwenden kann.


Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.08.2012, 11:09     Titel:
  Antworten mit Zitat      
Hallo,

was Ajax dir vorgeschlagen hat, macht auf den ersten Blick das, was du beschreibst. Hast du das denn mal versucht?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 11:38     Titel:
  Antworten mit Zitat      
Mein Code schaut gerade so aus:
Code:
PNetzoSpeicher = reshape(PNetzoSpeicher,[60 8760]);
for i = 1:8760
maxi = PNetzoSpeicher(i);
mini = PNetzoSpeicher(i);  
PMAX = repmat(maxi,[60 1]);
PMIN = repmat(mini,[60 1]);
end
PMAX = PMAX(:);
PMIN = PMIN(:);
 

Mit diesen Code bekomm ich aber jetzt für PMAX und PMIN 1x60 Vektoren.

Noch funktioniert es leider nicht so wie es soll! Ich kann meinen Fehler gerade nicht erkennen!

Grüße

Philipp
Private Nachricht senden Benutzer-Profile anzeigen
 
MixmasterPhil
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 11:47     Titel:
  Antworten mit Zitat      
Blöder Smiley:

Das Ende des Codes:
Code:
PMAX = PMAX(:);
PMIN = PMIN(:);
Private Nachricht senden Benutzer-Profile anzeigen
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 11:48     Titel:
  Antworten mit Zitat      
Warum verwendest du weiterhin die for-Schleife und nicht den oben vorgestellten Code. Dieser umgeht diese Schleife ist mit Sicherheit deutlich schneller.
In deiner Schleife überschreibst du die Variablen in jedem Durchlauf. Daher hat dein Vektor am Ende nur eine Länge von 60.
Lass einfach die Schleife weg.
mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
MixmasterPhil
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 11:59     Titel:
  Antworten mit Zitat      
Jetzt hats geklappt! Danke!
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.