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

Nachbarschaft in Matrizen

 

COK
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 25.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2011, 14:54     Titel: Nachbarschaft in Matrizen
  Antworten mit Zitat      
Hallo zusammen

Bin blutiger Anfänger in Matlab. Vielleicht kann mir jemand weiterhelfen:
Ich habe eine binäre 2x4 Matrix:

[0 1 1 0; 1 1 0 0]

0 1 1 0
1 1 0 0

Nun suche ich eine Funktion, die mir bei jeder 1 die Neumann-Nachbarschaft (also nur die direkt anliegenden Matrix einträge) "abtastet". Eine 1 soll zu einer 2 werden, wenn sie einen "aktiven" (eine 1) Nachbarn hat, zu einer 3 bei zwei aktiven Nachbarn usw... Die 0en sollen aber als solche nicht verändert werden.

Obenstehende Matrix müsste demnach anschliessend folgendermassen aussehen:

[0 3 2 0; 2 3 0 0]

0 3 2 0
2 3 0 0

oder bei Moore-Nachbarschafts-Definition:

[0 4 3 0; 3 4 0 0]

0 4 3 0
3 4 0 0

Kann mir jemand behilflich sein? Das ganze soll anschliessend auf alle 256 möglichen binären 2x4 Matrizen angewendet werden. Very Happy
Private Nachricht senden Benutzer-Profile anzeigen


Shin
Forum-Century

Forum-Century


Beiträge: 117
Anmeldedatum: 12.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 25.05.2011, 17:47     Titel:
  Antworten mit Zitat      
Code:
A = [0 1 1 0; 1 1 0 0];
counter = 1;
for y = 1:2
    for x = 1:4
        if A(y,x) == 1
           
           
if counter == 1
B1 = x;
C1 = y;
elseif counter == 2
B2 = x;
C2 = y;
elseif counter == 3
B3 = x;
C3 = y;
elseif counter == 4
B4 = x;
C4 = y;
elseif counter == 5
B5 = x;
C5 = y;
elseif counter == 6
B6 = x;
C6 = y;
elseif counter == 7
B7 = x;
C7 = y;
elseif counter == 8
B8 = x;
C8 = y;
end
        counter = counter+1;
        end
    end
end

if C1 == C2 && abs(B1-B2) == 1
    A(C1,B1) = A(C1,B1)+1;
    A(C2,B2) = A(C2,B2)+1;
end

if B1 == B2
    A(C1,B1) = A(C1,B1)+1;
    A(C2,B2) = A(C2,B2)+1;
end

if C2 == C3 && abs(B2-B3) == 1
    A(C3,B3) = A(C3,B3)+1;
    A(C2,B2) = A(C2,B2)+1;
end

if B2 == B3
    A(C3,B3) = A(C3,B3)+1;
    A(C2,B2) = A(C2,B2)+1;
end

if C3 == C4 && abs(B3-B4) == 1
    A(C3,B3) = A(C3,B3)+1;
    A(C4,B4) = A(C4,B4)+1;
end

if B3 == B4
    A(C3,B3) = A(C3,B3)+1;
    A(C4,B4) = A(C4,B4)+1;
end

if C1 == C4  && abs(B1-B4) == 1
    A(C1,B1) = A(C1,B1)+1;
    A(C4,B4) = A(C4,B4)+1;
end

if B1 == B4
    A(C1,B1) = A(C1,B1)+1;
    A(C4,B4) = A(C4,B4)+1;
end


Mit dem Ergebnis:
Code:
>> A

A =

     0     3     2     0
     2     3     0     0
 



Das funktioniert so für diese eine Matrix, für ALLE Fälle musst du die Vergleiche noch erweitern (der untere Teil des Skriptes). Wird aber auf jeden Fall so funktionieren, auch wenn es etwas umständlich ist.

Mit Sicherheit nicht der einfachste Weg, aber ich hab den ganzen Tag mit MATLAB gearbeitet - die Luft ist raus. :p
Vielleicht bringt es dir ja was, wenn du Fragen dazu hast, her damit.
Hat Spaß gemacht. :p
Private Nachricht senden Benutzer-Profile anzeigen
 
COK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 25.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 15:50     Titel:
  Antworten mit Zitat      
Vielen Dank für die schnelle Antwort!
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.