|
|
Matrix nach geraden, ungeraden Elementen durchsuchen |
|
upt0zer0 |

Forum-Century
|
 |
Beiträge: 107
|
 |
|
 |
Anmeldedatum: 10.07.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.11.2013, 19:19
Titel: Matrix nach geraden, ungeraden Elementen durchsuchen
|
 |
Hey
ich habe eine Matrix, die theoretisch jede Zahl enthalten kann.
Jetzt soll folgendes getan werden:
nehme Matrix A
durchsuche Matrix A nach Spalten und Zeilen
findest du eine gerade Zahl -> schreibe 0
findest du eine ungerade Zahl -> schreibe 1
irgendwie find ich hierfür keinerlei Befehle...
|
|
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 28.11.2013, 19:36
Titel:
|
 |
Hallo
das wird durch Modulo gemacht, Befehl heißt MOD
|
|
|
upt0zer0 |
Themenstarter

Forum-Century
|
 |
Beiträge: 107
|
 |
|
 |
Anmeldedatum: 10.07.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.11.2013, 21:09
Titel:
|
 |
Okay, ich habe folgendes vor:
Wenn ich Matrizen multipliziere, können ja alle möglichen Zahlen rauskommen: 0,1,2,...
Wenn ich dagegen binär addiere, gilt:
0+0 = 0;
1+0 = 1;
0+1 = 1;
1+1 = 0;
folglich kann ich eine normale Multiplikation einfach zu einer binären machen, indem ich alle geraden Elemente suche, und diese zu Null setze und alle ungeraden Elemente suche, und diese zu eins setzen.
also z.B.:
0 3 2
1 3 4
wird zu
0 1 0
1 1 0
Folglich hab ich folgenden Code geschrieben:
Wobei A meine ursprüngliche Matrix ist und mit dem size Befehl bstimmt wurde, wieviele spalten und zeilen es gibt.
Code läuft auch, nur macht er das nicht so wie ich das will. Jemand irgendein Plan wo mein Denkfehler sen könnte?
|
|
|
Nras |

Forum-Meister
|
 |
Beiträge: 608
|
 |
|
 |
Anmeldedatum: 21.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.12.0.635 (R2011a)
|
 |
|
|
 |
|
Verfasst am: 28.11.2013, 21:36
Titel:
|
 |
Hallo,
hast du den Beitrag über deinem gut gelesen? Gerade Zahlen zu 0 und ungerade Zahlen zu 1 zu machen, geht mit dem mod-Befehl ohne Schleifen und if's:
Im Übrigen ist dein Code auch nicht besonders sinnvoll, beispielsweise
Wenn A2 in der Zeile i und Spalte j den Eintrag 0 hat, dann setz den Eintrag an der Stelle auf 0. Das bringt nichts, da an der Stelle ohnehin bereits eine 0 stand.
Weiteres Beispiel:
mod(...,2) hat für natürliche Zahlen nur die Ausgaben 0 und 1. Das heißt, wenn das Ergebnis ungleich 0 ist, dann ist es zwangsläufig bereits 1. Da muss man dann auch nicht mehr eine 1 hinsetzen, denn da war bereits eine.
Viele Grüße,
Nras.
|
|
|
upt0zer0 |
Themenstarter

Forum-Century
|
 |
Beiträge: 107
|
 |
|
 |
Anmeldedatum: 10.07.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.11.2013, 22:05
Titel:
|
 |
Okay, dann hab ich den Befehl grundsötzlich falsch verstanden. Interessant.
Ok, mein Ziel jetzt: wenn ich die Matrix in den 1,0-Stil konvertiert hab, mit Hilfe des mod-Befehls, soll die Matrix so oft mit der Ursprungsmatrix multipliziert werden und dann mit der Ursprungsmatrix verglichen werden (hier isequal Befehl) bis sie gleich sind.
Beispiel:
A=[0,1,1;1,0,0;0,0,0]
dann ist ja
A²=[1,0,0;0,1,1;0,0,0]
und wiederum
A³=A.
Hab also ne While Schleife gemacht, die solange laufen soll, bis isequal erfüllt ist. eine Variable n soll mitzählen, bei welcher Potenz ich bin.
Mein Code hierzu:
|
|
|
Nras |

Forum-Meister
|
 |
Beiträge: 608
|
 |
|
 |
Anmeldedatum: 21.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.12.0.635 (R2011a)
|
 |
|
|
 |
|
Verfasst am: 29.11.2013, 10:47
Titel:
|
 |
Hallo,
und wo ist daran deine Frage? Das scheint doch für das Beispiel gut zu funktionieren.
Übrigens liefert isequal() eine 1 oder eine 0. Das heißt true (sind gleich) oder false (sind nicht gleich).
isequal(A,A2)==1 ist dann wieder doppelt gemoppelt, da kann man sich das ==1 auch sparen. Wie auch immer, manche finden das lesbarer.
Ich weiß nicht, ob das für jede Matrix klappt. Wenn das mal nicht klappt, dann sitzt du in einer Endlosschleife. Ein Ausweg wäre es zum Beispiel eine maximale Iterationsanzahl festzulegen, nach der abgebrochen wird. Z.B. so.
Das bricht dann nach 1000 Versuchen ab und liefert für n -1 zurück. Oder NaN wäre denkbar.
|
|
|
Verschoben: 29.11.2013, 12:03 Uhr von denny Von Matlab intern nach Programmierung |
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|