|
|
Mittelwert über Messwerte aus Matrix |
|
Prikindel |

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 11.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2011, 00:31
Titel: Mittelwert über Messwerte aus Matrix
|
 |
Hallo Leute,
ich habe Textdateien mit Messwerten aus denen ich mir 2 Zeilen rausnehme die dann z.B. so aussehen:
R = [0 1 1 1 1 2 2 2 2 2 2 3 3 3 3 .... x x x x x x x x x]
Ay = [11.34 12.65 11.23 11.97 12.12 13.45 ... x x x x x x x x x]
wobei x immer unterschiedlich groß sein kann. Ob ich jetzt 4 mal die Zahl 1 im Vektor habe, oder 6 Mal, kann auch alles variieren.
ich muss jetzt den Mittelwert aus dem Zweiten Vektor berechnen und zwar jeweils für die Einträge die einer Zahl aus dem ersten Vektor entsprechen. Heißt Mittelwert für alle Werte die der Zahl 1 entsprechen (12.65 11.23 11.97 12.12), dann Mittelwert für Alles was der Zahl 2 entspricht usw.
Hier mein Ansatz der aber nicht funktioniert:
i=1;
n=1;
for k=1:length(R)
while R(k)<R(k+1)
Mittelwert(i)=mean(Ay(n:k));
i=i+1;
n=k+1;
end
end
Ich hoffe ich konnte erklären, wo mein Problem liegt.
Wäre sehr dankbar wenn mir jemand helfen könnte!
|
|
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2011, 01:18
Titel:
|
 |
Hallo Prikindel,
Deine Lösung hat mehrere Fehler:
1. while-Schleife terminiert nicht
für k=1 ist R(k)=0 und R(k+1)=1, die Bedingung also erfüllt.
Da sich k innerhalb der Schleife nicht ändert, gibt das eine Endlosschleife.
Nimm "if" statt "while".
2. für das letzte Element, k=length(R), ist R(k+1) nicht definiert, und es gibt
einen Indexfehler.
3. für die letzte Gruppe an Zahlen wird der Mittelwert nicht mehr berechnet,
da die for-Schleife schon zu Ende ist.
Folgende Zeile löst Dein Problem:
unique(R) erzeugt einen Vektor, der jede Zahl in R genau einmal enthält, also [0, 1, 2, ...]
Für jede dieser Zahlen wird mittels arrayfun die Funktion mean aufgerufen.
Ay(R==idx)) wählt die Elemente von Ay aus, die an den Positionen stehen, an denen in R die Zahl idx steht.
|
|
|
soad |

Forum-Century
|
 |
Beiträge: 150
|
 |
|
 |
Anmeldedatum: 10.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2011, 01:31
Titel:
|
 |
Eine Möglichkeit wäre:
edit: Sirius Lösung ist natürlich schöner
|
|
|
Prikindel |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 11.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2011, 10:08
Titel:
|
 |
vielen Dank für eure Antworten!
es hat mir sehr geholfen
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2011, 10:10
Titel:
|
 |
Hallo soad,
die Fehler stecken in den Details.
Nehmen wir den Fall R=[0, 1, 1, 1, 3, 3, ...]
Bei meiner Lösung werden Zahlen die in R 0-mal vorkommen ganz ignoriert, so dass die Zuordnung
Mittelwert(idx)
so einfach nicht geht.
Deine Lösung bricht in diesem Fall ganz ab.
Wir wärs damit?
oder
Ich hab gerade nochmal nachgeschaut, mean([]) liefert NaN, was dann ein Hinweis auf fehlende Indizes wäre.
|
|
|
soad |

Forum-Century
|
 |
Beiträge: 150
|
 |
|
 |
Anmeldedatum: 10.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2011, 13:46
Titel:
|
 |
Hallo Sirius3,
danke für deine Antwort.
Ja, den Fehler, wenn die Indizes in R nicht fortlaufend größer werden, hatte ich später auch bemerkt. Weiters nahm ich an, dass Werte mit Indizes 0 nicht beachtet werden sollen, aber mit deiner Modifikation werden diese Fälle nun auch berücksichtigt.
Also nochmals danke für den Hinweis!
|
|
|
|
|
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.
|
|