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

Zeilen aus Matrix löschen

 

Ingmar

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2009, 15:20     Titel: Zeilen aus Matrix löschen
  Antworten mit Zitat      
Hallo Leute,

eigentlich ein ganz einfaches Anwendungsbeispiel:

Aus der Matrix B (Auszug eines Beispiels)

x0 x1 x2 x3 x4

1 1.5 2 1 23
1 1.5 2 2 15
1 1.5 2 3 7

1 1.5 3 1 7
1 1.5 3 2 5
1 1.5 3 3 4

1 1.5 4 1 2
1 1.5 4 2 34
1 1.5 4 3 8

Matrix C

1 1.5 4 2 34

Aus eine großen Matrix A [250 x 5] möchte ich mir erstens alle Zeilen in einer Matrix B ausgeben lassen die das Kriterium x0=1 sowie x1= 1.5 erfüllen. Danach ergibt sich obige Matrix B.
Danach soll jetzt die Zeile herausgesucht werden für die x3 Maximal (oder auch Minimal) ist. Diese Zeile soll in einer Matrix C abgespeichert werden. Danach beginnt alles mit einer neuen Wertematrix A von Vorna an. Die wiederum ermittelte Zeile mit dem maximalen x3 soll ebenfalls in C eingetragen werden.

Hoffe mein Probelm ist einigermaßer veständlich formuliert. Über schnelle Antwort würde ich mcih sehr freuen.


Grüße

Zur Lösung des ersten Probelms dachte ich an:


B(find(A(:,2)==1.5,Smile=[];

klappt aber nicht Sad


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2009, 15:34     Titel:
  Antworten mit Zitat      
... hier nochmal die Matritzen in übersichtlicher Form ...


Matrix B





Matric C

 
Christian
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 25.03.08
Wohnort: Dortmund
Version: 2008a
     Beitrag Verfasst am: 05.10.2009, 15:45     Titel:
  Antworten mit Zitat      
Warum funktioniert deins nicht? Fehlermeldung(wenn ja, welche?) oder falsches Ergebnis?
...ist jetzt nur mal so aus dem Kopf heraus, ohne es ausprobiert zu haben:
Code:

B= A( A(:,2)==1.5, : );

[value, index] = max( B(:,4) );

C=B ( index, : );
 


Vielleicht hilft es ja weiter Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 05.10.2009, 15:56     Titel:
  Antworten mit Zitat      
Hallo,
Zitat:
Danach soll jetzt die Zeile herausgesucht werden für die x3 Maximal (oder auch Minimal) ist


Verstehe ich nicht, nach Beispiel würde ich meinen das Maximum von x4 gemeint ist.

Woher bekommst du A?
Wird es aus einem File geladen, oder irgendwo generiert?

Es könnte ungefähr so aussehen:
Code:


% den code muss du in deine for schleife packen
% for each matrix A


if ~exist('B','var')
  B=[]
end

B = vertcat(B,A(A(:,1)==1 & A(:,2)==1.5,:))


if ~exist('C','var')
  C=[]
end

[max_val, max_pos] =max(B(:, 5));
C = vertcat(C, B(max_pos,:))

% end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2009, 16:01     Titel:
  Antworten mit Zitat      
Hi Leute Danke für die umgehenden Antowrten.


Es ist natürlich x4 für das ein Maximum gesucht werden soll!
Die "große" Matrix A ist ein importiertes file.
Werde mir gleich aml alle Lösungsvorschläge anschauen und ein bischen herumprobieren. Melde mich nochmal ob ich alles so gelöst bekommen habe wie gewollt. Dann kann jmd. den thread auch als "mit Vorschlag" titulieren Wink

Grüße aus Dresden
 
Ingmar

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2009, 08:20     Titel:
  Antworten mit Zitat      
Hallo Leute,

eine Frage noch, wenn ich meine Matrix A nach 2 Kriterien gleichzeitig absuchen will, könnte ich das dann so machen?

B= A( [A(:,4)==5, A(:,5)==10], : );

Nur die Zeilen in denen die Kriterien Spalte 4 = 5 sowie Spalte 5 =10 sollen ausgelesen werden.



Alternativ sehe ich nur die Möglichkeit das so zu machen

B= A( A(:,4)==5, : );
C= B( B(:,5)==10, Smile;

Erscheint mir aber überhaupt nicht elegant Very Happy.


Grüße
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.10.2009, 08:57     Titel:
  Antworten mit Zitat      
Hallo,
wenn du nach mehreren Kriterien durchsuchen möchtest
dann muss du logische Verknüpfungen verwenden

z.b wenn beide Kriterien gleichzeitig erfüllt sein sollten
x0==1 und x1==1.5

A(A(:,1)==1 & A(:,2)==1.5,Smile

z.b wenn einer der Kriterien erfüllt sein sollte

x0==1 oder x1==1.5

A(A(:,1)==1 | A(:,2)==1.5,Smile

man kann auch die Funktionen and,or verwenden
Code:

% and
A(A(:,1)==1 &  A(:,2)==1.5,:)
A(and(A(:,1)==1, A(:,2)==1.5),:)

% or
A(A(:,1)==1  |  A(:,2)==1.5,:)
A(or(A(:,1)==1, A(:,2)==1.5),:)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Ingmar

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2009, 09:54     Titel:
  Antworten mit Zitat      
Klasse, funktioniert!

Und gleich die nächste Frage. Es geht ums runden.

Habe eine Spalte in der Matrix A die ich gerne aus Vergleichsgründen abrunden möchte.

Es handle sich z.B. um Spalte 3 der Matrix A die z.B. 0.997 beinhaltet. Diese möchte ich auf die 1. Kommastelle runden.

Dazu benutze ich derzeit in einer Schleife:

mit

disp(num2str(A(k,3),'%7.1f'));

bekomme ich die Zahlen auch angezeigt und gerundet aber wie müsste der code aussehen wenn ich die gerundeten Ergebnisse direkt in A(k,3) eintragen will?

Grüße Bertram
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.10.2009, 10:16     Titel:
  Antworten mit Zitat      
Was du benutzt hast, ist nur für Stirng- Format-Ausgabe vorgesehen.

Es gibt keinen direkten Befehl, mit dem, Nachkomma-Stelle punktgenau runden lässt. Muss so zusagen mit round tricksen

Code:

A(k,3)= round(A(k,3)*10)/10;
 


du kannst aber deine eigene round-Funktion schreiben, die das tut
z.b so:
Code:

function A = myround(A, anz_stell)

if nargin<2
   anz_stell = 0;
end
if nargin<1
   error('Wrong number of input arguments');
end
% komma multiplikator
kom  = 10^anz_stell;
A    = round(A * kom)/ kom;
 
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.