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

index eines elements in matrix; find funktioniert nicht!?!?

 

kamaswami
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 17.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2009, 21:50     Titel: index eines elements in matrix; find funktioniert nicht!?!?
  Antworten mit Zitat      
hallo,

ich habe eine matrix und möchte mit einer for schleife jedes element auf eine eigenschaft überprufen. wenn es die eigenschaft erfüllt (größer ist als ein bestimmer referenzwert) soll dieses element selbst und alle weiteren elemente bis zum ende der jeweiligen spalte mit einer einfachen operation verändert werden (zb zu jedem element 5 dazuzählen).

das 'zielelement' alleine zu ändern ist kein problem aber wie bringe ich maltab dazu von diesem punkt aus auch gleich alle weiteren darunterliegenden werte mitzubearbeiten.

ich wollte dazu zunächst den index (row/col - werte) des zielelements bestimmen und von da ausgehend alle weiteren adressieren. das seltsame ist aber, dass der find-command bei meinen werten nicht funktioniert Shocked

als beweis möchte ich dazu ein beispiel geben:


Code:
>> t=rand(5)
t =
    0.9194    0.8730    0.8030    0.2184    0.8404
    0.1542    0.4287    0.9614    0.9869    0.9570
    0.3417    0.7508    0.1631    0.6915    0.9564
    0.4794    0.8896    0.6488    0.6339    0.4930
    0.2719    0.2340    0.6163    0.4264    0.7765

>> find(t==0.2340)
ans =
   Empty matrix: 0-by-1


sollte hier nicht 10 rausgegeben werden? oder wenn man es mit [I J] macht I=5 und J=2???

ich wäre jedenfalls sehr dankbar wenn mir jemand auf die sprünge helfen könnte, um entweder das subproblem (das indexfinden) zu lösen oder überhaupt einen anderen weg für mein problem zu finden.

vielen dank,
kamaswami
Private Nachricht senden Benutzer-Profile anzeigen


MatLabNooB
Forum-Guru

Forum-Guru


Beiträge: 262
Anmeldedatum: 27.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2009, 22:07     Titel:
  Antworten mit Zitat      
bin mir nicht sicher, aber der grund könnte sein, dass bedingt durchs short format zwar 0.2340 angezeigt wird es aber in wirklichkeit sowas wie 0.23401 ist und deshalb dein find scheitert?

wenn du nun dein Index hast, selektierst du den rest der Spalte, indem du so:
Code:
t(gefundener index:end,spalte) =
Private Nachricht senden Benutzer-Profile anzeigen
 
kamaswami
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 17.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2009, 22:29     Titel:
  Antworten mit Zitat      
hi,

danke, genau das war der plan. aber ich bekomme den index nicht. auch nicht, wenn man die randomisierten werte auf zb 2 dezimalstellen rundet.

fällt jemandem noch etwas ein??
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 17.12.2009, 01:12     Titel:
  Antworten mit Zitat      
Hi,

MatlabNoob hatte schon recht, es liegt an Rundungsfehlern, man sollte in Matlab doubles nie mit == vergleichen. Du brauchst ja sowieso nur den größer als vergleich, und der funktioniert ja bei deinem Beispiel.

Mit dem runden klappts so:

Code:

t1=round(t.*100)./100;
find(t1==0.44);
 


Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
kingkamali

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2009, 01:39     Titel:
  Antworten mit Zitat      
such doch mal so nach 0.2340:

find ( t>0.2339 & t<0.2341);

und glaube das klappt so mit deiner idee:


Code:


%t=rand(5);
[z,s] = size (t);          
for (i=1:s)                
    for (j=1:z)
        if (t(j,i)> 0.4500 && t(j,i)< 0.4502)  
            for(n=j:z)      
                t(n,i)=t(n,i)+ 5;
            end
        end
    end
end

 


hoffe hilft dir weiter...
 
kamaswami
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 17.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2009, 18:53     Titel:
  Antworten mit Zitat      
hallo,

vielen dank für eure antworten. ich habe das problem umschifft, eure vorschläge haben mir sehr geholfen.

ciao.
Private Nachricht senden Benutzer-Profile anzeigen
 
Madprofessor1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2011, 11:09     Titel: find Befehl auf double anwenden
  Antworten mit Zitat      
hi an alle,

Ich habe ein sehr ähnliches Problem, Ich habe eine Matrix mit double Einträgen und würde gerne bestimmte Einträge mit dem FIND Befehl finden.

Ich habe schon ausprobiert die Daten mit dem Roundbefehl zu bearbeiten.
Code:

a=100
t1=round(t.*a)./a;
find(t1==0.44);
 


Dabei gibt es folgendes Problem. Je nachdem wie ich den ROUND Befehl ausführe bekomme ich andere Ergebnisse. Für a=100,1000,10.000 habe ich das ganze mal durchgespielt. Das ist irgendwie schon komisch.

Hatte jemand schonmal dasselbe Problem?

LG, Andy
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.11.2011, 13:02     Titel:
  Antworten mit Zitat      
Hallo,

soll heißen, du findest nicht die Einträge, die du zu finden erwartest?
Probier mal
Code:
find(abs(t1-0.44)<1e-12);


Grüße,
Harald
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.