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

Teilen einer Matrix

 

red-blizz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2009, 11:52     Titel: Teilen einer Matrix
  Antworten mit Zitat      
Hallo, ich habe da ein kleines Problem:
Ich habe eine matrix (140x3) gegeben. In den drei Spalten der Matrix stehen x,y und z Koordinaten. Plottet man die x,y Koordinaten, so ergeben die 140 Punkte ein Raster. Nun muss ich das Raster in der "Mitte" in 2 Teile teilen.
Also z.b.: wenn die x-Koordinaten von 0-1 gehen will ich bei 0.5 das Raster in 2 Matrizen teilen, die zusammen aber wieder die Ausgangsmatrix ergeben.
D.h. ich hab eine Matrix mit 70 Punkten deren x-Koordinaten größer als 0.5 und eine Matrix mit 70 Punkten deren x-Koordinaten kleinerals 0.5 sind.
Hab dazu eine Funktion geschrieben, die aber nicht korrekt läüft. Die 2.te Matrix hat statt den 70 Punkten ebenfalls 140...
Hoffe jemand kann man mir Helfen, kann den Fehler irgendwie nicht finden...
Hier der Code:
Code:

min_value = min(Daten(:,1));
max_value = max(Daten(:,1));
Grenze = (min_value + max_value)/2;

for k = 1:length(Daten)
    if Daten(k,1) > Grenze
        DI(k,:) = Daten(k,1:end);
    end
       
    if Daten(k,1) < Grenze
        DII(k,:) = Daten(k,1:end);
    end
end
 


vielen dank schonmal!


Fragewurm
Forum-Century

Forum-Century


Beiträge: 180
Anmeldedatum: 23.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2009, 12:07     Titel:
  Antworten mit Zitat      
Hi
Finde im Augenblick keinen Fehler aber du könntest um eine doppelte Abfrage zu vermeiden deine if-Schleife umschreiben:
Code:

if Daten(k,1) > Grenze
     DI(k,:) = Daten(k,1:end);
     elseif Daten(k,1) < Grenze
     DII(k,:) = Daten(k,1:end);
end                      
 

Das würde auch etwas schnelles gehen da Matlab dann nicht bei jedem Durchlauf 2 Abfragen machen müsste.

Alternativ könntest du auch mit
Code:

Arbeiten
Dann müsstets du nur noch die Matrix mittig teilen.

Gruss Fragewurm
_________________

Fehler jeglicher Art Dienen zur allgemeinen Belustigung
Private Nachricht senden Benutzer-Profile anzeigen
 
red-blizz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2009, 12:32     Titel:
  Antworten mit Zitat      
ok, danke schonmal. Schleife hab ich schob vereinfacht.

aber mir fällt gerade auf, dass es an dem Index liegen könnte...

die 2.te Matrix also DII hat nämlich in den ersten 70 Zeilen nur nullen und dann kommen 70 Zeilen die Daten....

das mit den Indizes ist auch immer so eine sache bei Matrizen...
 
Fragewurm
Forum-Century

Forum-Century


Beiträge: 180
Anmeldedatum: 23.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2009, 12:36     Titel:
  Antworten mit Zitat      
jup hast recht Wink
Ich dachte da stehn überall Werte drin.
Matlab füllt Vektoren... mit Nullen auf wenn du ein Elemet überspringst.
Bsp.:
Code:

vec=[1,2,3]
ans: vec = 1 2 3

vec(5)= 5
ans: vec= 1 2 3 0 5
 


Gruss Fragewurm
_________________

Fehler jeglicher Art Dienen zur allgemeinen Belustigung
Private Nachricht senden Benutzer-Profile anzeigen
 
red-blizz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2009, 12:40     Titel:
  Antworten mit Zitat      
muss ich also besser 2 Schleifen schreiben?
oder wie muss ich den Index verändern?
Sorry, steh momentan ein bisschen auf dem Schlauch Rolling Eyes
Danke schön!
 
Fragewurm
Forum-Century

Forum-Century


Beiträge: 180
Anmeldedatum: 23.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2009, 12:45     Titel:
  Antworten mit Zitat      
Du könntest statt 2 Schleifen doch einfach 2 index laufen lassen ungefähr so:
Code:

x=1
y=1
if Daten(k,1) > Grenze
     DI(x,:) = Daten(k,1:end);
     x=x+1;
     elseif Daten(k,1) < Grenze
     DII(y,:) = Daten(k,1:end);
     y=y+1;
end            
 
 


Vielleicht geibt es auch noch bessere Lösungen aber das ist die erste die mir eingefallen ist Wink

Gruss Fragewurm
_________________

Fehler jeglicher Art Dienen zur allgemeinen Belustigung
Private Nachricht senden Benutzer-Profile anzeigen
 
red-blizz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2009, 12:48     Titel:
  Antworten mit Zitat      
ach, natürlich!
Vielen Dank!
 
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 - 2025 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.