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

Wie groß können Matritzen sein in Matlab ?

 

Kai12365
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 15.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2019, 11:40     Titel: Wie groß können Matritzen sein in Matlab ?
  Antworten mit Zitat      
Hallo,

ich habe mal eine Frage bezüglich des Speicherplatzes von Matritzen.
Ich habe eine 20.000 x 20.000 Matrix X und will diese mit einer ebenso großen Matrix Y verbinden (ganz normal über A=[X,Y])
Wenn ich die Matrix X erzeuge, macht er es ziemlich schnell, aber beim verbinden hängt er sich immer auf und es klappt nichts mehr.
Jedes Mal stürzt Matlab ab.
Was kann man denn da tun und woran kann das liegen ?
Irgendwas am Speicher ?
Ich will dann später eine 40.000 x 40.000 Matrix haben, aber erstmal wäre die 20.000 x 40.000 ganz schön.

Liebe Grüße und ein tolles WOchenende wünsche ich euch !
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: 04.05.2019, 18:53     Titel:
  Antworten mit Zitat      
Hallo,

Anzahl Elemente * 8 (ein Double braucht 8 Byte) ergibt den Speicherbedarf. Die große Matrix benötigt also rund 6,4 GB, und mit den beiden kleineren bist du bereits bei 12,8 GB. Du benötigst also entsprechend viel Arbeitsspeicher.

Ein wenig Linderung kann die Wahl eines anderen Datentyps (single, uint8 etc., je nach Daten) schaffen.

Interessehalber: was soll denn mit den Daten gemacht werden? Durchschauen kann man das ja schlecht.

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
 
Kai12365
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 15.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2019, 20:50     Titel:
  Antworten mit Zitat      
Hallo lieber Harald,

vielen Dank, mir war gar nicht bewusst wie groß das dann wird. Aber das macht dann Sinn, dass es dann schnell mal abbricht. Ich erzeuge die matrix für ein Optimierungsproblem und in diesem werden dann die Nebenbedingungen gespeichert. In der matrix stehen aber Nur 0en, 1en und ein paar wenige Zahlen wie 2,3 und 4,aber alles integer. Wie kann ich denn dafür den sparsamsten Datentyp auswählen und welcher wäre das? Double ist ja unnötig.

Liebe Grüße und vielen Dank für deinen schnellen Hinweis!
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: 04.05.2019, 21:05     Titel:
  Antworten mit Zitat      
Hallo,

dafür solltest du dünnbesetzte Matrizen ( sparse ) verwenden. Dann werden nur die von 0 verschiedenen Einträge und deren Position gespeichert.

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
 
Kai12365
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 15.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2019, 15:33     Titel:
  Antworten mit Zitat      
Perfekt, es funktioniert schnell und einwandfrei !
Hab besten Dank für den Hinweis, damit hast du mir sehr geholfen.

Liebe Grüße,
Kai
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: 05.05.2019, 16:17     Titel:
  Antworten mit Zitat      
Hallo,

interessehalber: wie löst du das zugehörige Optimierungsproblem?

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
 
Kai12365
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 15.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2019, 18:06     Titel:
  Antworten mit Zitat      
Hallo, das ist mein nächstes Problem, wie ich grade gesehen habe. Ich wollte es über Cplex machen, also mit der Funktion cplexlip(linear integer Problem) aber er hat mir nach 2h noch kein Ergebnis ausgespuckt. Jetzt bin ich am suchen und überlegen, was man da alternativ machen könnte. Hast du denn Ideen? Die Nebenbedingungen sind leider so groß und es sind leider zu viele. Wie kann man das denn schnell lösen?

Liebe 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: 05.05.2019, 18:27     Titel:
  Antworten mit Zitat      
Hallo,

so aus dem Stand schwer zu sagen.
Bei 20000 (bzw. 40000?) Variablen gibt es sicher eine stark ausgeprägte Problemstruktur. Vielleicht kann man die in irgendeiner Form besser nutzen?
Bei den Größenordnungen würde ich aber auf jeden Fall nicht erwarten, dass das schnell geht. Vielleicht mal über Nacht laufen lassen und schauen, was passiert?
Falls hinsichtlich der Art der Nebenbedingungen passt, würde ich auch mal intlinprog versuchen.
Vielleicht noch iterativen Output einschalten, damit man sieht, was passiert.

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
 
Kai12365
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 15.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2019, 18:55     Titel:
  Antworten mit Zitat      
Okay, dankeschön für den Hinweis. Was ist das denn mit diesem iterativen output? Und wie kann man das anstellen?
Noch eine andere frage: so ein lineares Problem wird doch eigentlich immer von branch and bound gelöst, oder? Kann man die vielleicht die Anzahl der Schritte irgendwo nachverfolgen?
Danke für deine ganzen Tips und Hilfen!
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: 05.05.2019, 19:40     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Was ist das denn mit diesem iterativen output? Und wie kann man das anstellen?

An intlinprog Optionen übergeben und 'Display' auf 'iter' setzen.

Zitat:
Noch eine andere frage: so ein lineares Problem wird doch eigentlich immer von branch and bound gelöst, oder?

Für intlinprog siehe hier:
https://www.mathworks.com/help/opti.....g-algorithms.html#btv2z9y

Zitat:
Kann man die vielleicht die Anzahl der Schritte irgendwo nachverfolgen?

Beim iterativen Output ;) Siehe oben.

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
 
Kai12365
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 15.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2019, 16:53     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe das mal probiert und bin immer noch nicht wirklich weiter.
Ein Ansatz hätte ich aber noch:
Ich kann auch cplexbilp(prob) machen und dann muss ich prob als structure definieren. Wie kann ich denn dieses Optimierungsproblem als structure definieren, damit ich dann am Ende loesung = cplexbilp(prob) verwenden kann ?
Kann ich es dann so in der Art machen:
Code:
prob = optimproblem('ObjectiveSense','minimize');
X=optimvar('X',[N,1],'Type','integer','LowerBound',0,'UpperBound',1);
Q=optimvar('Q',[N,N],'Type','integer','LowerBound',0,'UpperBound',1);
prob.Objective = sum(sum(Q.*M));
    e=ones(N,1);
opt = cplexoptimset('cplex');
opt.mip.limits.nodes=400;
opt.mip.strategy.search=1;  
prob.Constraints.con1= Q <= e*X.';
prob.Constraints.con2= Q <= X*e.';
prob.Constraints.con3= Q >= e*X.'+X*e.' - 1;
prob.Constraints.con4= A*X <= b';
prob.Constraints.con5= Aeq*X==beq';


Da habe ich jetzt mehrere Nebenbedingungen, und die anderen Sachen habe ich auch da als Input, aber wenn ich jetzt loesung = cplexbilp(prob) mache, sagt er mir:
Code:
CPLEX could not extract data from matlab due to data type mismatch.

Hast du dafür Ideen ?

Liebe 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: 09.05.2019, 19:50     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ich habe das mal probiert und bin immer noch nicht wirklich weiter.

Heißt... was?

Ich kenne CPLEX nicht, insofern kann ich wenig dazu sagen.
Der spärlichen Doku nach, die ich gefunden habe, wird die von dir verwendete Syntax einfach nicht unterstützt. Du erzeugst ein OptimizationProblem Objekt, unterstützt werden aber nur Strukturen oder einzelne Inputs.
https://www.ibm.com/support/knowled.....lex/html/cplexbilp-m.html

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
 
Kai12365
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 15.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2019, 20:13     Titel:
  Antworten mit Zitat      
Okay und es macht bestimmt keinen Unterschied ob ich eine Struktur nehme oder die Funktion direkt, aber mir kam noch eine andere gute Idee.
Diese Sachen werden ja über Branch and Bound gelöst und wie ist es denn mit dem Anfangswert ? Wenn ich dort schon einen guten Anfangswert reinstecke, dann werden doch evtl schon einige Möglichkeiten nicht betrachtet, oder ?Also je besser mein x_0 desto schneller sollte es doch gehen, oder ?!
Oder kann ich was an den Nebenbedingungen machen um es evtl. schneller zu machen ?
Kannst du dir da ein paar Sachen vorstellen ?
Denn wenn ich einen niedrigen Funktionswert beim x_0 schon habe, dann geht der doch einige Äste evtl gar nicht durch, oder ?
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: 09.05.2019, 20:38     Titel:
  Antworten mit Zitat      
Hallo,

aus der Doku von intlinprog:

Zitat:
Providing x0 can change the amount of time intlinprog takes to converge. It is difficult to predict how x0 affects the solver. For suggestions on using appropriate Heuristics with x0, see Tips.
x0 must be feasible with respect to all constraints.


Es ist naheliegend, dass das bei CPLEX ähnlich ist. Ich kenne CPLEX aber wie gesagt nicht, und dokumentiert ist es leider recht knapp.

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
 
Kai12365
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 15.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2019, 20:46     Titel:
  Antworten mit Zitat      
Ja das es recht knapp dokumentiert ist, nervt mich auch. Aber mal sehen ob ich das mit einem guten Startwert etwas beschleunigen kann.
Ich melde mich wenn ich wieder mal irgendwo nicht durchblicke.
Vielen Dank für deine andauernde Hilfe !

Liebe Grüße,

Kai
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.