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

if-abfrage

 

andi_1
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 10:53     Titel: if-abfrage
  Antworten mit Zitat      
Hallo Leute,

habe hier eine Matrix (M) mit 3x2. in spalte1 steht x in spalte2 steht y. mittels

R = pdist(M,'euclid')

bekomme ich eine matrix (R) mit 1x3, in der die abstände der punkte stehen.

Die Abstände in R sollen jeweils <1 sein. es sollen dann nur die punkte (x- und y-werte) ausgegeben werden, zwischen denen der abstand <1 ist.

wie kann ich das programmieren?
Gruß und Dank
Private Nachricht senden Benutzer-Profile anzeigen


andi_1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 12:18     Titel:
  Antworten mit Zitat      
R ist die Matrix mit den Abständen
Q ist die Matrix mit x und y werten
Q3ist die Ergebnismatrix

Code:
if ((R(1,1)<1))
        Q3(1,:) = Q(1,1:2)
        Q3(2,:) = Q(2,1:2)
   
    if ((R(1,2)<1))
        Q3(1,:) = Q(1,1:2)
        Q3(3,:) = Q(3,1:2)
       
    if ((R(1,3)<1))
        Q3(2,:) = Q(2,1:2)
        Q3(3,:) = Q(3,1:2)
   
    end



wenn ich diesen code durchlaufen lasse passiert nichts.
kann mir wer sagen, was daran falsch ist?
Private Nachricht senden Benutzer-Profile anzeigen
 
Caidence
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 12:23     Titel:
  Antworten mit Zitat      
Ich würde es vielleicht mal mit einem index probieren.
Z.B.
Code:
index = find(R(1,1) < 1);
Private Nachricht senden Benutzer-Profile anzeigen
 
andi_1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 13:48     Titel:
  Antworten mit Zitat      
hallo caidance,

was bringt mir hier die nutzung des index, bzw wie bau ich das ein?
funktioniert das nicht mit if oder ist meine syntax nur falsch?
gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 27.07.2010, 14:01     Titel:
  Antworten mit Zitat      
Hallo,

hier ein beispiel, hoffe es ist das was du suchst.
Code:

A=[1 1.5;1 3;4 4.8 ;5 5.9 ;4 8]
B=A(abs(A(:,1)-A(:,2))<1,:)  % nur werte deren abstand < 1
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
andi_1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 14:19     Titel:
  Antworten mit Zitat      
hallo fourier,

bei deinem beispiel gibt es keine punkte, die einen abstand <1 zueinander haben, trotzdem bekomme ich eine ergebnismatrix.

probiere mal:
abstand = pdist(A,'euclid');
hier werden dir alle möglichen abstände zwischen deinen punkten aufgezeigt.

kannst du mir vielleicht sagen was an meiner if-abfrage im zweiten thread falsch sein könnte.
Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
_Fourier

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 14:24     Titel: aa
  Antworten mit Zitat      
ahh jetzt verstehe ich was du meinst.
ich dachte der abstand zwischen x und y soll kleiner 1 sein.

wusste nicht dass x,y koordinaten entsprechen.
pdist kann ich gerade nicht testen (toolbox fehlt).

gruss
 
andi_1
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 15.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 14:36     Titel:
  Antworten mit Zitat      
hab nun jede einzelne if-abfrage mit "end" versehen. so funktionierts!

Code:
if (R(1,1)<1),
        Q3(1,: ) = Q(1,1:3)
        Q3(2,: ) = Q(2,1:3),
    end
    if (R(1,2)<1),
        Q3(1,: ) = Q(1,1:3)
        Q3(3,: ) = Q(3,1:3),
    end  
    if (R(1,3)<1)
        Q3(2,: ) = Q(2,1:3)
        Q3(3,: ) = Q(3,1:3),
    end
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: 27.07.2010, 14:37     Titel: Re: if-abfrage
  Antworten mit Zitat      
Hallo Andi,

Code:

M = rand(3, 2);
R = pdist(M, 'euclid');  % sqrt(sum(M .* M, 2))
Limited = (R < 1);
disp(M(Limited, :));
 


Das geht natürlich auch mit IF-Abfragen, aber "Mat"lab kann viel effizienter mit "Mat"ritzen rechnen, daher der Name.
Die Methode, die für "Limited" verwendet wurde, heißt übrigens "Logical indexing" und ist auch für Arrays mit Millionen von Elementen sehr effizient.

Gruß, Jan[/code]
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 - 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.