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

Aufbau einer Block-Hankelmatrix

 

Speedy24
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 10.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2022, 11:10     Titel: Aufbau einer Block-Hankelmatrix
  Antworten mit Zitat      
Hallo zusammen,

ich möchte gerne eine Block-Hankelmatrix aufbauen. Eine Hankelstruktur sieht wie folgt aus.


Jedes Kästchen mit gleicher Farbe steht für eine Untermatrix beliebiger quadratischer Dimension. z.B. 3x3 oder 27x27.

Die Berechnung der jeweiligen Untermatrix passiert in einer Schleife von 1(Eintrag Links oben) bis zum letzten Eintrag 9(Rechts unten). Die Anzahl der Blöcke ist aber beliebig und kann sehr groß werden.

Aktuell werden die Ergebnisse der Untermatrix wie in diesem Beispiel von 1 bis 9 in einem Cell-Array gespeichert und dann mit einer separaten Schleife in die Blockhankel Struktur geschrieben.

Das konvertieren des Cellarrays und die entsprechende Schleife verlangsamen das Programm deutlich und es ist nicht wirklich elegant.

Ich suche daher die Möglichkeit die Zuordnung der Untermatrizen über die gleiche Schleife womit sie auch berechnet werden hinzubekommen. Z.b. in dem es einen Befehl gibt wie ich die Neben(Querdiagonalen) beschreiben kann, oder die linke untere Dreiecksmatrix um dann noch zu flippen. Für Anregungen wäre ich sehr dankbar!

Beste Grüße

Code:
channel=3;
timeshifts=3;
alpha=timeshifts; %Alpha=beta=timeshifts aus Gründen der Notataion.
beta=timeshifts; %Alpha=beta=timeshifts aus Gründen der Notataion.
Hankel=zeros(channel*(alpha+2), channel*(beta+2));

%% Schleife in der idealerweise direkt die Zuordnung zur Hankelmatrix stattfindet
% alpha+beta+2+1 bei alpha=3 und beta=3 "9" und damit letzter Eintrag
% rechts unten.
for i=1:1:alpha+beta+2+1
    RM{i}=eye(channel,channel); %Zeros als Beispiel
end

for n=1:1:beta+2
    Hankel(1:channel*(alpha+2),channel*(n-1)+1:channel*n)=cell2mat(RM(n:(alpha+2+(n-1))))';
end
 


2022_05_13_11_50_49_Window.png
 Beschreibung:
Hankelmatrix mit Index

Download
 Dateiname:  2022_05_13_11_50_49_Window.png
 Dateigröße:  22.46 KB
 Heruntergeladen:  230 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.05.2022, 13:35     Titel:
  Antworten mit Zitat      
Hallo,

auf Anhieb finde ich es schwierig, die Schleifen sinnvoll und effizienzsteigernd zu kombinieren, da die Anzahl der Iterationen unterschiedlich sind und in der zweiten Schleife auf mehrere RM zugegriffen wird.
Bei dem Beispiel gibt es ja eher keine Performance-Probleme. Kannst du Parameter zur Verfügung stellen, bei denen du Performance-Probleme hast?
Befehle in die Richtung der gesuchten wären diag oder tril .

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Speedy24
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 10.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2022, 10:01     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielleicht war die Ausgangsfragestellung nicht günstig formuliert. Auch große Matrizen werden in der Regel schnell berechnet. Ich konnte die Konvertierung durch cell2mat umgehen und das Ganze noch etwas beschleunigen.

Aber eine sinnvolle Kombination der for Schleifen will mir wirklich nicht einfallen.


Jetzt kriege ich aber zum Teil das Problem das die Matrix zu groß für den Speicher wird?! Gibt es eine Möglichkeit das irgendwie zu umgehen?

Bei der Dimension 48000x48000 ist mein Arbeitsspeicher 32 Gb voll und das Programm wird abgebrochen.

Beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Aber eine sinnvolle Kombination der for Schleifen will mir wirklich nicht einfallen.

Sehe ich wie gesagt auch nicht.

Zitat:
Jetzt kriege ich aber zum Teil das Problem das die Matrix zu groß für den Speicher wird?! Gibt es eine Möglichkeit das irgendwie zu umgehen?

Wenn die Matrix dann sehr viele Nullen enthält, ist es speichersparend (und teilweise auch schneller), mit dünnbesetzten Matrizen zu arbeiten.
https://www.mathworks.com/help/matlab/sparse-matrices.html
Speicher sparen kann man auch durch den Einsatz anderer Datentypen wie single, int8, uint8, ... . Ob das sinnvoll ist, hängt von deinen Daten ab.

Sollte das nicht ausreichend weiterhelfen, wäre es interessant mehr darüber zu erfahren, was du mit dieser Matrix weiter machen möchtest.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.