www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Matlab" - Durchschnitt eines Graphens
Durchschnitt eines Graphens < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Durchschnitt eines Graphens: idee
Status: (Frage) überfällig Status 
Datum: 17:06 Di 12.12.2006
Autor: mjh53

Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

hallo,

ich bin noch recht frisch in matlab, daher ist diese frage wohl relativ einfach zu beantworten, nur mir fehlt gerade die idee, sollte jdn. einen tipp für mich haben, vielen dank im voraus...

ich habe einen ziemlich osszilierenden graphen, mit ca. 1000 punkten, wie kann ich denn mit dem Durchschnitt arbeiten, so dass der Graph mit Geraden überlagert wird, die jeweils über 100 Punkte reichen.... ich möchte also dann 10 Geraden haben, die meinen ursprünglichen Graphen überlagern...

gruss

mathias

        
Bezug
Durchschnitt eines Graphens: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:11 Di 12.12.2006
Autor: Martin243

Hallo,

Gegenfrage:
Woraus soll der Durchschnitt denn berechnet werden? Aus je 100 Werten? Dann hast du aber 10 waagerechte Strecken, also eine Treppenfunktion.
Oder sollen die Endpunkte der Strecken durch Mittelung von irgendetwas gewonnen werden?
Kannst du vielleicht deine Strategie erläutern (evtl. skizzieren?)


Gruß
Martin

Bezug
        
Bezug
Durchschnitt eines Graphens: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:42 Di 12.12.2006
Autor: Martin243

Noch etwas, wo du schon vom Durchschnitt sprichst:

Man kann auch den laufenden Durchschnitt der letzten k Elemente bilden. Das glättet die Kurve dann auch. Hier sollte k ungerade sein und die Druchschnittskurve nach links verschoben sein, damit der Durchschnittswert mitten im Intervall liegt und nicht an dessen Ende.
Natürlich sind die Ränder dieser Durchschnittskurve nicht aussagekräftig, aber in der Mitte sieht es ok aus.

Hier ein Beispiel:
data = rand(1,100); %Zufallsdaten, ziemlich ausgefranst
plot(data); hold on;
k=7; %Mittelung über die 7 letzten Werte
data1 = filter(ones(1,k)/k,1,data); %Berechnung des laufenden Durchschnitts
plot(data1(1+floor(k/2):end),'r');

So sieht es für die k-Werte 7, 15 und 31 aus:
[Dateianhang nicht öffentlich]


Gruß
Martin

Dateianhänge:
Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
Bezug
                
Bezug
Durchschnitt eines Graphens: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:52 Di 12.12.2006
Autor: mjh53

hallo...

ja das mit dem gleitenden durchschnitt ist erst mal super... ich würde aber auch gerne Geraden auf die Kurve legen, die die Tendenz in diesem Bereich wiederspiegelt.... also nicht nur waagrechte Geraden, sondern je nach Trend.. steigend, fallend, konstant....

gruss

mathias

Bezug
                        
Bezug
Durchschnitt eines Graphens: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:25 Di 12.12.2006
Autor: Martin243

Dann nochmal meine Frage nach deiner Strategie.

Falls dir das lokale Verhalten innerhalb jedes Intervalls reicht, dann könnte man es mit einer Regressionsgeraden pro Intervall versuchen. Das geht mit der Funktion polyfit und liefert z.B. bei 1000 Zufallswerten bei einer Unterteilung in 100er-Intervalle folgendes Bild:

[Dateianhang nicht öffentlich]


Gruß
Martin

Dateianhänge:
Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
Bezug
                
Bezug
Durchschnitt eines Graphens: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 10:52 Mi 13.12.2006
Autor: mjh53

hallo...

zwei Fragen dazu... einmal verstehe ich folgendes nicht ganz...
da ich das selbe problem hatte, frage ich nun nach...damals sah die zeile so aus..

plot(startzeit:(endzeit-startzeit)/(size(kurs,2)-1):endzeit,kurs);
nun
plot(kurs(1+floor(k/2):end),'r');
es geht um die "1"... einmal ziehst du sie ab, das andere mal addierst du sie... mir ist schon klar, dass das eine nichts mit dem anderen zu tun hat, und das dies ein genereller vorgang ist bei, um ein bestimmtes problem zu lösen... welches denn??

zweite Frage... zufällig möchte ich exakt die den ersten plot mit dem zweiten glätten... da habe ich aber das problem mit der x-achse... wie kann ich die x-achse beim zweiten plot dem ersten anpassen...

gruss

mathias


Bezug
                        
Bezug
Durchschnitt eines Graphens: Antwort
Status: (Antwort) fertig Status 
Datum: 13:48 Mi 13.12.2006
Autor: Martin243

Hallo,

die Sache mit der Eins... Richtig, die beiden Einsen haben nichts miteinander zu tun und lösen zwei grundverschiedene Probleme:

1. plot(startzeit:(endzeit-startzeit)/(size(kurs,2)-1):endzeit,kurs);
Hier geht es darum, dass wir genauso viele x-Werte haben wollen wie y-Werte vorhanden sind. Wir geben dabei den ersten und den letzten x-Wert vor. Dazwischen liegt ein Intervall. Allgemein unterteilen n Stützstellen ein großen Intervall in (n-1) kleinere.
Da wir size(kurs,2) y-Werte haben, wollen wir das Intervall [startzeit,endzeit] in (size(kurs,2)-1) kleinere Intervalle der Länge (endzeit-startzeit)/(size(kurs,2)-1) unterteilen.

2. plot(kurs(1+floor(k/2):end),'r');
Hier geht es darum, dass wir über eine ungerade Anzahl von Werten gemittelt haben. Das hat den Vorteil, dass es ein mittleres Element gibt. Da die Mittelwerte aber bei der filter-Funktion immer am Ende des Intervalls stehen, müssen wir sie um die "kleinere" Hälfte von k nach links verschieben. Wir ziehen von k diese "kleinere" Hälfte ab un erhalten als Startindex:
$k - floor(k/2) = 1 + floor(k/2)$, weil k ungerade ist und deshalb gilt:
$k = 2*floor(k/2) + 1$
(floor entspricht ja der Gaußklammer)


Die zweite Frage habe ich leider nicht verstanden... Du willst einen Plot mit einem anderen glätten?!?


Gruß
Martin

Bezug
                                
Bezug
Durchschnitt eines Graphens: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 15:36 Mi 13.12.2006
Autor: mjh53

hallo...

ich habe meine daten (kurs) erzeugt und stelle sie mittles plot graphisch dar... die x-achse soll dabei nun die zeit darstellen, daher habe ich anfangszeit und endzeit mittles datenum() erzeugt....
-->
plot(startzeit:(endzeit-startzeit)/(size(kurs,2)-1):endzeit,kurs);

nun möchte ich diesen graphen glätten...
-->
plot(kurs(1+floor(k/2):end),'r');

dabei bekomme ich aber probleme mit der x-achse, die ich nicht in den begriff bekomme... ich müsste doch dem zweiten plot die x-achsenwerte des ersten mitübergeben... wie mir dies gelingen kann ist nun meine frage....

gruss

mathias

Bezug
                                        
Bezug
Durchschnitt eines Graphens: Antwort
Status: (Antwort) fertig Status 
Datum: 21:44 Mi 13.12.2006
Autor: Martin243

Aaah,

wieso sagst du nicht einfach:
plot(startzeit:(endzeit-startzeit)/(size(kurs,2)-1):endzeit, kurs(1+floor(k/2):end),'r');

Wenn plot einen Vektor übergeben bekommt, interpretiert er diesen als y-Werte und nimmt einfach 1,2,3... als x-Werte. Bei zwei Vektoren interpretiert er den ersten als x- und den zweiten als y-Werte.


Gruß
Martin

Bezug
                        
Bezug
Durchschnitt eines Graphens: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:20 Fr 15.12.2006
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]