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
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 05.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2017, 10:55     Titel: Matrix, Schleife, Spalten löschen, Anfängerproblem, Matriz
  Antworten mit Zitat      
hallo,

ich habe eine Matrix mit 6 Spalten. Nun möchte ich im ersten Schritt die 1. Spalte löschen und mit der neuen Matrix mit 5 Spalten weiter arbeiten. Im Anhang ist der Code dazu.

Nun würde ich aber gern im nächsten Schritt das ganze wiederholen mit der 2. Spalte und dann mit der 3. usw. aber ohne die Schleife jetzt 6 mal hinzuschreiben. Kann mir jemand weiterhelfen?

Danke im Voraus

matrix.PNG
 Beschreibung:

Download
 Dateiname:  matrix.PNG
 Dateigröße:  2.72 KB
 Heruntergeladen:  283 mal
Private Nachricht senden Benutzer-Profile anzeigen


Xaratau
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 14.06.17
Wohnort: ---
Version: R2018b
     Beitrag Verfasst am: 06.07.2017, 11:13     Titel:
  Antworten mit Zitat      
Hallo tky,

einzelne Spalten einer Matrix kannst du so löschen:
Code:
Matrix(:,1)=[]


Was meinst du mit "Schleife 6 mal hinschreiben" ?
Willst du die Matrizen in einer function erstellen und auch dort zum weiterrechnen nutzen?
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: 06.07.2017, 11:41     Titel:
  Antworten mit Zitat      
Genau, so weit bin ich auch schon. Im ersten Schritt wollte ich nur die 1. Spalte entfernen. Meine Matrix hat dann lediglich nur noch 5 Spalten (hier dann 2-6). Damit möchte ich dann weiter rechnen.

Das ganze würde ich dann wiederholen aber diesmal mit entfernen der 2. Spalte, sodass die Matrix nur noch die Spalten 1,3-6 besitzt usw.

Irgendeine idee?? hab jetzt schon einiges versucht komm aber nicht auf das gewünschte Ergebnis Sad

So wie im Anhang soll es eigentlich aussehen. Später hat die Matrix aber weit aus mehr Spalten und mehr als 1000 Zeilen

spalten_löschen.PNG
 Beschreibung:

Download
 Dateiname:  spalten_löschen.PNG
 Dateigröße:  10.55 KB
 Heruntergeladen:  279 mal
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: 06.07.2017, 12:01     Titel:
  Antworten mit Zitat      
Bei einer kleinen Matrix könnte man es ja noch alles separat machen. Bei höher dimensionalen Matrizen wird das aber schwierig. Hat jemand eine Idee?? Wäre sehr dankbar.
Private Nachricht senden Benutzer-Profile anzeigen
 
Xaratau
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 14.06.17
Wohnort: ---
Version: R2018b
     Beitrag Verfasst am: 06.07.2017, 13:28     Titel:
  Antworten mit Zitat      
Vermutlich wird es am sinnvollsten sein, wenn du die einzelnen Matrizen in einem cell array speicherst.
Code:
function [cellarray] = spaltenloeschen(matrix)
cellarray{1,(length(matrix))}=[];%preallocation
for i=1:length(matrix)
    mat=matrix;
    mat(:,i)=[];
    cellarray(1,i)={mat};
end
end


In diese Funktion kannst du eine beliebige Matrix eingeben und er wird dir in der Ausgabe ein cell generieren, das in der ersten spalte die ursprüngliche MAtrix ohne die erste Spalte hat, in der zweiten die ursprüngliche Matrix ohne die zweite Spalte usw...

Abfragen kannst du sie dann ganz einfach über
Code:
cellarray{1,2}; %z.B. die Matrix ohne die zweite Spalte


Viele Grüße
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: 06.07.2017, 14:06     Titel:
  Antworten mit Zitat      
ja. das funktioniert super. vielen dank.
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: 07.07.2017, 11:39     Titel:
  Antworten mit Zitat      
Xaratau,

mit kleinen Spaltenlängen geht das ja noch aber ab länge 10 erhalte ich eine fehlermeldung. kann jemand weiter helfen?

error.PNG
 Beschreibung:

Download
 Dateiname:  error.PNG
 Dateigröße:  28.88 KB
 Heruntergeladen:  300 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Xaratau
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 14.06.17
Wohnort: ---
Version: R2018b
     Beitrag Verfasst am: 07.07.2017, 12:53     Titel:
  Antworten mit Zitat      
Das Problem ist hier, dass ich den Befehl length verwendet habe. Length gibt jedoch immer die größte Dimension aus. Das bedeutet, wenn die Matrix mehr Zeilen als Spalten hat, wird diese Zahl ausgegeben, umgekehrt genauso.
Abhilfe schafft hier der Befehl size. Dieser gibt einen Vektor mit Anzahl der Zeilen und Anzahl der Spalten zurück. Also einfach den Befehl length mit size(2) ersetzen:
Code:
function [cellarray] = spaltenloeschen(matrix)
groesse=size(matrix);
cellarray{1,(groesse(2))}=[];
for i=1:groesse(2)
    mat=matrix;
    mat(:,i)=[];
    cellarray(1,i)={mat};
end
end


Ich bin davon ausgegangen, dass es sich immer um Matrizen handelt, bei denen die Anzahl an Spalten und Zeilen gleich ist. Dann hätte length auch gepasst.
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: 07.07.2017, 13:10     Titel:
  Antworten mit Zitat      
Very Happy Perfekt! Das muss man natürlich wissen. Vielen Dank für die Erklärung
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: 14.07.2017, 11:20     Titel:
  Antworten mit Zitat      
hallo,

ich würde den code gerne erweitern, so dass ich mehrere spalten kombiniert lösche.
Zum Beispiel bei einer matrix mit 4 spalten

spalte 1 und 2
spalte 1 und 3
spalte 1 und 4

solange bis ich alle kombinationen durch habe. ich würde gerne 2er und 3er Kombinationen versuchen.

theoretisch ginge das auch noch von hand wenn ich den code

Code:
Matrix(:,1:2)=[]

Code:
Matrix(:,2:3)=[]

verwende. Jedoch wird das ab bestimmter Größe der Matrix umständlich. Hat jmd ein Ansatz?
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: 14.07.2017, 17:34     Titel:
  Antworten mit Zitat      
Hallo tky,

Wie wäre es dann einfach mit einer zweiten Schleife? Statt "1:2" kannst Du ja schreiben:
Code:
for a = 1:4
  for b = a+1:4
    disp(a:b);
  end
end


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: 15.07.2017, 12:24     Titel:
  Antworten mit Zitat      
Danke Jan S.
Code:
gibt mir aber eben nur die Spaltenzahl aus nicht die Spalten der Matrix selbst. Aber der Ansatz mit den For-Schleifen sieht sehr gut aus Very Happy


ich habs mal mit zwei For-Schleifen versucht. Irgendwo scheint aber noch ein Fehler zu sein. Matlab gibt mir die Matrizen mit meinen Spaltenkombinationen nicht aus Crying or Very sad Crying or Very sad

Weiß jemand wo der Fehler ist?




Code:
function [cellarray] = spaltenloeschen(matrix)
groesse=size(matrix);
cellarray{1,(groesse(2))}=[];
 for a = 1:groesse(2)
  for b = a+1:groesse(2)
        mat=matrix;
        mat(:,a:b)=[];
        cellarray(1,a:b)={mat};

  end
 end
end
 
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: 17.07.2017, 11:00     Titel:
  Antworten mit Zitat      
weiß jemand wie ich die Spalten in einer matrix mit dem code von Jan S ausgeben kann?
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: 18.07.2017, 16:24     Titel:
  Antworten mit Zitat      
hallo,

ich habs jetzt ganz gut hinbekommen. Danke für jede Hilfe.

Ich würde mein Code gerne um eine Bedingung erweitern hab aber noch keinen Ansatz.

Matlab soll mir jetzt nur die Matrizen ausgeben, von denen die Eigenwerte bestimmte Größen haben!
Momentan gibt mir Matlab alle Matrizen und ihre dazugehörigen Eigenwerte aus.


Kann jmd weiter helfen?

Vielen Dank
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: 18.07.2017, 18:24     Titel:
  Antworten mit Zitat      
Hallo tky,

Wenn man nur den Code sieht, der nicht funktioniert, ist noch nicht klar, was Du genau bekommen möchtest. Was ist denn der "Fehler"?
Soll "cellarray" hinterher alle Matrizen enthalten, in denen jeweils die Spalten fehlen?

Zitat:
Matlab soll mir jetzt nur die Matrizen ausgeben, von denen die Eigenwerte bestimmte Größen haben!
Momentan gibt mir Matlab alle Matrizen und ihre dazugehörigen Eigenwerte aus.

Dann post den Code und erkläre, was noch nicht wie gewünscht läuft und wie es statt dessen aussehen soll.

Gruß, Jan
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.