|
|
Einzelne Werte der Matrix ändern |
|
lunatik |

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 14.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.11.2008, 15:27
Titel: Einzelne Werte der Matrix ändern
|
 |
Wie kann ich in einer Matrix auf die Einzelnen Werte zugreifen?
wenn ich also z.B.
abs(diff(M))<2 vergleiche, will ich,dass in dem Fall dann der zweite Wert aus der Folgedifferenz dem ersten gleichgesezt wird.
Wär super dankbar, wenn's mir jemand erklären könnte!
|
|
|
|
|
dib0r |

Forum-Guru
|
 |
Beiträge: 413
|
 |
|
 |
Anmeldedatum: 09.05.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.11.2008, 18:41
Titel:
|
 |
Hallo,
dein Ausdruck erzeugt dir ein logisches Array. Du kannst die Werte dann direkt mit
abgreifen. Für dein Beispiel:
MfG
|
|
|
lunatik |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 14.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.11.2008, 12:15
Titel:
|
 |
Hallo
vielen Dank für die Antwort!
jetzt hab ich ein weiteres kleines Problem:
Meine Matrix sieht in etwa so aus:
5.0000 6.0000
5.3000 7.0000
5.3000 8.0000
2.4000 9.0000
2.2300 10.0000
2.4100 11.0000
1.9800 12.0000
hierbei ist die zweite achse, die Zeitachse. Die soll natürlich erhalten bleiben.
des Weiteren, bei den Zeilen
idx2 = [false(1,size(M,2));idx1]; % Indizes um 1 nach unten verschoben
idx1 = [idx1; false(1,size(M,2))]; % Größe korrigieren (wegen diff)
hab ich nicht ganz verstanden, was "size" bedeutet und, ob (M,2) dann in (M,1) verändert werden soll, fall die Vergleichszahl "1" wird?
|
|
|
dib0r |

Forum-Guru
|
 |
Beiträge: 413
|
 |
|
 |
Anmeldedatum: 09.05.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.11.2008, 12:54
Titel:
|
 |
Hallo,
size ist ein MATLAB-Befehl und gibt dir die Größe der Matrix an, d.h. Anzahl der Zeilen x Anzahl der Spalten (bzw. für jede Dimension die Anzahl der Einträge).
hier werden alle Indizes zurückgegeben, für die gilt dass abs(diff(M)) < 2. Allerdings fehlt eine Zeile, weil der Differenzoperator ja eine Zeile weglässt. Diese Zeile wird mit
wieder hinzugefügt, und zwar am Anfang, somit erhälst du immer dann eine 1 an der Stelle (i,j), wenn abs(M(i,j)-M(i-1,j)) < 2 ist. Jetzt brauchst du natürlich noch die Indizes der Elemente, die überschrieben werden sollen. Diese sind genau um 1 im Zeilenindex inkrementiert im Vergleich zu idx2, bzw. sind genau gleich idx1. Damit die Dimensionen der Wertezuweisung stimmen, wird dann zum Schluss nochmal eine Zeile hinzugefügt
Das hier ist diese Zeile.
Zum Schluss werden die Werte der Matrix dann noch überschrieben.
Falls du das ganze nur auf eine Spalte anwenden willst, ändert sich der Code ein wenig:
MfG
|
|
|
lunatik |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 14.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.11.2008, 15:51
Titel:
|
 |
|
 |
|
ok.. ich habe mein Problem wohl nicht ganz klar ausgedrückt:
das hier ist z.B. die Matrix:
TEST =
5.0000 5.1000
6.0000 5.0000
7.0000 5.3000
8.0000 2.3000
dann kommt der Code:
>> N = 1; % 1. Spalte
>> idx1 = abs(diff(TEST(:,N)))<2;
>> idx2 = [false(1,size(TEST(:,N),2));idx1]; % Indizes um 1 nach unten verschoben
>> idx1 = abs(diff(TEST(:,N)))<2;
>> TEST(idx1,N) = TEST(idx2,N); % Überschreiben der Werte
>> TEST(idx1,N) = TEST(idx2,N) % Überschreiben der Werte
das bekomme ich daraus:
TEST =
7.0000 5.1000
8.0000 5.0000
8.0000 5.3000
8.0000 2.3000
Aber eigentlich bräuchte ich:
TEST =
5.0000 5.1000
5.0000 5.1000
5.0000 5.1000
8.0000 2.3000
somit würden die Werte, die sich von den vorherigen um weniger, als 2 unterscheiden gleich den vorherigen.
Ganz perfekt wäre mein Problem gelöst, wenn die Werte nicht bloß um einen "nach links" (in dem Fall "nach oben") verschoben würden, sondern, wenn ich stattdessen den Mittelwert hätte.
Für mein Bsp hier:
aus
5.0000 5.1000
6.0000 5.0000
7.0000 5.3000
8.0000 2.3000
würde:
6.0000 5.2000
8.0000 2.3000
D.h. also, aus den naheliegenden Werten würde der Mittelwert gebildet und zeitlich auch in die Mitte gesetzt. Geht das irgendwie?
Mir ist wohl klar, dass das zwei völlig unterschiedliche Problemstellungen sind. Ich weiss halt selbst noch nicht genau, was besser ist und will verschiedenes ausprobieren.
|
|
|
|
|
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.
|
|