Mittelwert mit Abhängigkeiten < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 13:39 Di 13.11.2012 | Autor: | matlabi |
Hallo zusammen
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt: http://matheplanet.com (Leider bislang ohne Erfolg)
ich habe folgendes Problem und keine Ahnung wie es zu lösen ist. Daher bin ich froh um jeden Lösungsansatz.
Beispielmatrix A =
1 3
1 4
1 5
4 2
5 3
Ziel: nun soll in der zweiten Spalte der Mittelwert errechnet werden und zwar von denjenigen Zahlen, welche in den Zeilen sind, welche dieselben Werte in der ersten Spalte haben. (In diesen beispiel wäre dies der Mittelwert von 3, 4 und 5 (also 4), weil in der ersten Spalte die ersten drei Werte 1 sind.)
Ich hoffe ich habe mich klar ausgedrückt, ansonsten bitte melden!
Vielen Dank für jeden Beitrag!
|
|
|
|
Hallo matlabi,
Vorab: ich habe keinerlei Ahnung von Matlab, aber vielleicht kann ich Dir trotzdem weiterhelfen.
> ich habe folgendes Problem und keine Ahnung wie es zu
> lösen ist. Daher bin ich froh um jeden Lösungsansatz.
>
> Beispielmatrix A =
>
> 1 3
> 1 4
> 1 5
> 4 2
> 5 3
>
> Ziel: nun soll in der zweiten Spalte der Mittelwert
> errechnet werden und zwar von denjenigen Zahlen, welche in
> den Zeilen sind, welche dieselben Werte in der ersten
> Spalte haben. (In diesen beispiel wäre dies der Mittelwert
> von 3, 4 und 5 (also 4), weil in der ersten Spalte die
> ersten drei Werte 1 sind.)
Also: Du hast eine [mm] $m\times [/mm] 2$-Matrix vorliegen.
Ist die erste Spalte immer geordnet, so wie hier?
Ist die höchste Zahl maximal m=Zeilenzahl?
Sind die Einträge beider Spalten ganzzahlig und womöglich gar positiv?
In welchem Format soll der Mittelwert ermittelt werden? Gerundet ganzzahlig oder "rational" (Gleitkommaformat)?
Diese Fragen sind erst noch zu klären.
Ansonsten legst Du eine zweite [mm] $m\times [/mm] 2$-Matrix an, in deren erster Spalte jeder vorkommende Wert genau einmal steht, und in der zweiten Spalte die Zahl des Vorkommens. Außerdem brauchst Du noch ein eindimensionales Array (am besten getrennt von der zweiten Matrix, da u.U. anderer Datentyp) mit m Plätzen (das ist das Maximum, das Du brauchst).
Danach gehst Du Deine ursprüngliche Matrix durch und kannst die Mittelwerte schrittweise berechnen.
Sei z.B. die Zahl in der ersten Spalte eine 2.
Beim ersten Auftreten weist Du dem entsprechenden Platz im Array (Indizierung über erste Spalte der zweiten Matrix) den Wert zu, der sich aus Division des Werts in der zweiten Spalte der ersten Matrix (also Datenvorgabe) durch die Häufigkeit (zweite Spalte zweite Matrix) ergibt. Die Zuweisung geschieht am besten einfach durch Addition des bestehenden Werts mit dem neu errechneten. Dazu muss das Array zu Beginn komplett auf Null stehen - und genau das tut es ja in allen mir bekannten Sprachen...
In Deinem obigen Beispiel hättest Du also in der zweiten Matrix in der ersten Spalte obenan die 1 stehen, in der zweiten Spalte die 3 (weil in der Datenvorlage = erste Matrix die 1 dreimal in der ersten Spalte vorkommt).
Der ersten Variablen im Array weist Du dann nacheinander erst 0+3/3 (3 aus 1.Matrix, 2.Spalte, durch 3 aus 2. Matrix, 2. Spalte), dann 3/3+4/3=7/3, dann 7/3+5/3=12/3=4 zu.
Got me?
Grüße
reverend
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:18 Di 13.11.2012 | Autor: | matlabi |
Vielen Dank für den bisherigen Beitrag von reverend. Die aufgabenstellung könnte man übrigens auch wie folgt Stellen:
Zwei Vektoren derselben Länge sind vorhanden. Z.B.:
a=[8 3 4 5 5 5] und b=[7 4 5 6 4 2]
nun soll an der stelle bei der beim vektor a derselbe Eintrag vorhanden ist, beim vektor b der mittelwert genommen werden, sodass folgender vektor b bei obigem Beispiel entsteht:
b=[7 4 5 4]
Es handelt sich um ganze, positive Zahlen, welche nicht geordnet sind. Das Format des Mittelwerts kann Ganzzahlig sein.
Vielen dank für eure Hilfe mit der Realisation in Matlab
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:41 Di 13.11.2012 | Autor: | leduart |
Hallo
in matlab gibt es direkt sort Befehle, die die 2 Vektoren ordnet, so dass du dann 3 4 5 5 5 8 beim ersten stehen hast der zweite entsprechend geordnt.
2. es gibt einen logischen befehl alle Teile der matrix mit 1. eintrag a in eine neue matrix zu schreiben, du hättest dann 4 neue Matrizen, und musst nur die 2.te zeile in allen aufsommieren und durch die lange teilen.
den befehl musst du om handbuch suchen, das dauert mir zu lange, du musst ja eh den Umgang mit dem manueal lernen
Gruss leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 21:00 Di 13.11.2012 | Autor: | matlabi |
Vieleicht muss ich die Frage umformulieren:
Vektor a und b sind Messwerte, wobei der Vektor a Zeitwerte enthält und der Vektor b die Messresultate. Da Mehrere Messinstrumente verwendet wurden, gibt es verschiedenen Messungen zur gleichen Zeit. Diese sollen nun gemittelt werden.
Die Anzahl der Messinstrumente variert jedoch über die Dauer der Messung!
Beispiel:
Vektor a mit Zeitwerten: a=[1;1;1;1;1;1;1;1;1;1;2;3;6]
Vektor b mit Messwerten: b= [1;2;3;4;5;6;7;8;9;1;2;3;4]
Ziel: Vektor mit gemittelten Messwerten: c=[4.6;2;3;4]
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 21:13 Di 13.11.2012 | Autor: | luis52 |
Moin,
wenn du nicht mit MATLAB "verheiratet" bis so haette ich eine Loesung in R. Vielleicht kannst du so etwas auch in MATLAB umsetzen.
1: | R> a <- c(1,1,1,1,1,1,1,1,1,1,2,3,6)
| 2: | R> b <- c(1,2,3,4,5,6,7,8,9,1,2,3,4)
| 3: | R> u <- unique(a)
| 4: | R> u
| 5: | [1] 1 2 3 6
| 6: | R> m <- NULL
| 7: | R> for(i in u)m <- c(m,mean(b[i==a]))
| 8: | R> m
| 9: | [1] 4.6 2.0 3.0 4.0
|
vg Luis
P.S Das geht noch schneller:
1: | R> sapply(split(b,a),mean)
| 2: | 1 2 3 6
| 3: | 4.6 2.0 3.0 4.0
|
|
|
|
|