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

Matrix, Schleife, Spalten löschen, Anfängerproblem, Matriz

 

tky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 05.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2017, 09:02     Titel:
  Antworten mit Zitat      
momentan wird meine Matrix, wie oben dargestellt, an eine function übergeben, welche meine Eigenwerte ausrechnet

Code:
     
       [sortEigenvalue]=eigenwert(Z)
 


jetzt möchte ich aber, dass Matlab mir nur die Matrizen ausgibt, bei denen Eigenwerte auftauchen, die zum Beispiel kleiner sind als 1 (Eigenwerte<1).

Hat da jemand einen Ansatz?
Private Nachricht senden Benutzer-Profile anzeigen


tky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 05.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.07.2017, 11:21     Titel:
  Antworten mit Zitat      
1) zum speichern könnte man ein Cell verwenden.
Der Befehl

Code:
A = cell(2, 2) %Wenn 2 Matrizen mit ihren Eigenwerten erzeugt werden

bringt mir also nicht so viel. Nun weiß ich aber nicht wie viele Matrizen später erzeugt werden.

Wie kann man das am besten umsetzen?

gruß
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: 21.07.2017, 10:11     Titel:
  Antworten mit Zitat      
Hallo tky,

Gib uns eine Chance zu antworten.

Zitat:
Code:
A = cell(2, 2) %Wenn 2 Matrizen mit ihren Eigenwerten erzeugt werden

bringt mir also nicht so viel. Nun weiß ich aber nicht wie viele Matrizen später erzeugt werden.

Wir wissen das auch nicht. Wie groß ist den die maximal mögliche Anzahl vor Outputs? Ein Cell-Array scheint schon recht passend zu sein. Man könnte also zunächst mit "cell(2, maxNumber)" die maximal mögliche Anzahl erstellen, und dann nur die Arrays hineinschreiben, die den Kriterien entsprechen. Zum Schluss entfernt man dann die nicht benötigten Cell-Elemente:
Code:
C = cell(1, 1000);
iC = 0;
for k = 1:1000
  data = rand;
  if data > 0.9
    iC = iC + 1;
    C{iC} = data;
  end
end
C = C(1:iC);

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 05.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2017, 13:34     Titel:
  Antworten mit Zitat      
Hallo leute,

Ich bin grade wieder an der selben Problematik dran. Das löschen von Spalten funktioniert mit dem code jedoch ist die Ordnung ein wenig durcheinander.

Ich würde gerne erst immer 1 spalte löschen und dann immer 2 in Kombination usw..

Also bei einer matrix mit 5 Spalten (1,3,4,5), (1,2,4,5), (1,2,3,5) usw.
Dann die 2er Kombinationen danach die 3er...

Kann wer helfen? Bei der 2er Kombination komm ich nicht weiter

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
tky
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 05.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2017, 16:09     Titel:
  Antworten mit Zitat      
Code:
function [cellarray] = spaltenloeschenZwo(matrix)
groesse=size(matrix);

k = 1;

for i=1
    for j = i+1
 mat=matrix;  
 mat(:,i)=[];
 mat(:,j)=[];
     cellarray(1,i:k:j)={mat};
     j=j+1;

     
    end
   
end


so sieht mein code momentan aus der mir immer 2 spalten löschen soll. Meine idee war zuerst eine zweite zählvariable j einzuführen die ich hochzähle.
Ziel war es die 1. und 2. dann die 1. und 3. spalte usw zu löschen dann die 2. und 3. usw. bis alle 2er kombinationen durch sind.

Danach das gleiche mit 3er,4er- und 5er- Kombination usw.

Vielleicht gibt es auch eine ganz simple lösung?
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: 01.08.2017, 13:02     Titel:
  Antworten mit Zitat      
Hallo tky

Zitat:
Code:
for i=1
    for j = i+1
 
mat=matrix;
Die "Schleifen" laufen hier jeweils nur über ein Element. Ist das beabsichtigt?
Wenn Du die i.te Spalte schon gelöscht hast, ist es nicht mehr korrekt, die j=i+1.te Spalte zu löschen.

Mit nchoosek kannst Du jeweils 2 Indices finden, die entfernt werden sollen. wenn das Problem klar definiert ist, könnte man auch expliziten Code dazu posten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.