WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Wie schrebe ich die Formel

 

Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 13.01.2015, 22:09     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
was verstehst du denn an dem beispiel nicht ?
Zitat:
Find the moving-average of a vector without using a for loop.
ist doch das was du suchst.?


wenn ich das übersetze:
Zitat:
Finden Sie die gleitenden Durchschnitts eines Vektors ohne eine for-Schleife.


würde ich sagen ja das meine ich.

um bei meinen Daten zu bleiben.

meine matrix dydx (2141 * 395)

jetzt möchte ich den "gleitenden Durchschnitt" aus der matrix in d speichern.

sprich:
d(1,3) = (dydx(1,2)+dydx(1,3)+dydx(1,4))/3
d(1,4) = (dydx(1,3)+dydx(1,4)+dydx(1,5))/3
d(1,5) = (dydx(1,4)+dydx(1,5)+dydx(1,6))/3
...

Bitte entschuldige ich habe nie Matte studiert oder ein ABI absolviert Sad
daher ist das alles sehr abstrus für mich zu großen teil.


ich komme mit dem Syntax nicht klar und ich verstehe noch nicht mal im Ansatz was in dem Beispiel überhaupt passiert Sad und wie und warum ... Sad
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.01.2015, 22:30     Titel:
  Antworten mit Zitat      
Code:
data = [1:0.2:4]';
windowSize = 5;
filter(ones(1,windowSize)/windowSize,1,data)
 

so viele daten sind es ja nicht ^^ window size ist in deinem fall also 3 und data sind halt deine daten also dydx.
achtung der filter läuft hier in der ersten dimension durch. das heist du must noch 2 mal transponieren. einmal data und dann das ergebniss nochmal um wieder zur ausgangs dimension zu kommen. es ist zu beachten das der filter nicht vorhandene elemente mit 0 annimt. der gleitende mittelwert an der ersten stelle wäre also dann der entsprechende wert durch 3. der an der 2. die summe der ersten beiden elemente durch drei und ab der 3. stelle stimmt es das mit dem überein was du vorher gepostest hast. das kann man manuell beheben wenn man das will. denke aber das das bei dem von dir beschriebenen problem keine große rolle spielt
Zitat:
verstehe noch nicht mal im Ansatz was in dem Beispiel überhaupt passiert Sad und wie und warum ... Sad
das wiederum ist auch nicht ganz so trivial da der gleitende mittelwert ja nur ein spezielles beispiel ist was man mit filter machen kann. dazu musst du dir mal den algorythmus angucken. ich würde hier einfach mal machen und nicht nachforschen was da genau passiert. alternativ zum ganzen kannst du natürlich auch 2 for- schleifen verschachteln
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 13.01.2015, 23:33     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
Code:
data = [1:0.2:4]';
windowSize = 5;
filter(ones(1,windowSize)/windowSize,1,data)
 

so viele daten sind es ja nicht ^^ window size ist in deinem fall also 3 und data sind halt deine daten also dydx.


soweit habe ich das verstanden. - OK -
der Rest der Formel nur nicht Sad

Winkow hat Folgendes geschrieben:

achtung der filter läuft hier in der ersten dimension durch. das heist du must noch 2 mal transponieren. einmal data und dann das ergebniss nochmal um wieder zur ausgangs dimension zu kommen.

Am ja ne, ist klar, ...
was meinst du mit das der Filter nur in der ersten dimension durch läuft?
macht er nur die erste Zeile ? und die andern nicht?

das "transponieren" hatten wir auch schon mal, das bedeutet das ich etwas umschlüßeln muss, aber was wie, ... sorry.

Winkow hat Folgendes geschrieben:

es ist zu beachten das der filter nicht vorhandene elemente mit 0 annimt. der gleitende mittelwert an der ersten stelle wäre also dann der entsprechende wert durch 3. der an der 2. die summe der ersten beiden elemente durch drei und ab der 3. stelle stimmt es das mit dem überein was du vorher gepostest hast. das kann man manuell beheben wenn man das will. denke aber das das bei dem von dir beschriebenen problem keine große rolle spielt

davon bin ich ausgegangen das so was passiert, ist aber für mich nicht relevant.

Winkow hat Folgendes geschrieben:

Zitat:
verstehe noch nicht mal im Ansatz was in dem Beispiel überhaupt passiert Sad und wie und warum ... Sad
das wiederum ist auch nicht ganz so trivial da der gleitende mittelwert ja nur ein spezielles beispiel ist was man mit filter machen kann. dazu musst du dir mal den algorythmus angucken. ich würde hier einfach mal machen und nicht nachforschen was da genau passiert. alternativ zum ganzen kannst du natürlich auch 2 for- schleifen verschachteln
[/quote]

ja das mit einfach mal machen ist leichter gesagt als getan, ich habe das Beispiel bei mir in Matlab drin und habe da hin und her probiert um heraus zu finden was da überhaupt wie passiert.

Ich verstehe es nicht das es mir so extrem schwer fallt mir das mit den Dimensionen im Kopf richtig vorzustellen, ich kenne so was eigentlich von Früher aus Qbasic da gab es so was ähnliches um Bilder zu Speichern und aufzurufen, jedoch ist das schon 20 Jahre her.

habe da jetzt For schleifen gemacht, hoffe das ich das richtig gemacht habe.
mal schauen was das Ergebnis mir ausgibt.
im Excel war das irgend wie leichter Smile

Code:
   % Gleitender Mittelwert = d
       Gleitwert = 4;   % Anzahl der Werte davor und danach
       [Zeilen,Spalten] = size(dydx);    % Spalten 395   Zeilen 2142
       for i = 1+Gleitwert : Spalten-Gleitwert
        for ii = 1 : Zeilen
            d(ii, i) = (dydx(ii, i-4) + dydx(ii, i-3) + ...
                        dydx(ii, i-2) + dydx(ii, i-1) + ...
                        dydx(ii, i) + ...
                        dydx(ii, i+1) + dydx(ii, i+2) + ...
                        dydx(ii, i+3) + dydx(ii, i+4)) ...
                        / ((Gleitwert * 2) + 1);
        end
       end  

_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 14.01.2015, 00:19     Titel:
  Antworten mit Zitat      
ja for schleifen sind meist leichter zu verstehen und nicht zwingend langsamer. bei verschachtelten forschleifen kann man noch auf den index achten also ob der erte index in der äußeren schleife ist oder in der inneren. da geibt es unterschiede. dazu gab es hier im forum schon einen post.
die lösung mit filter siht so aus
Code:
windowSize =3;
d=filter(ones(1,windowSize)/windowSize,1,dydx')';

grüße
ps : transponieren heist nur das A(i,j)=A(j,i) wird
Zitat:
was meinst du mit das der Filter nur in der ersten dimension durch läuft?
macht er nur die erste Zeile ? und die andern nicht?
nein aber das er bei einer nxm matrix die werte für jede spalte entlang der dimension der reichtung n berechnet. du wolltest es aber genau anders rum. darum muss man das 2 mal transponieren. 1 mal damit er das entlag der n dimension machen kann und danach dann wieder zurück damit du es so vorliegen hast wie du es wolltest
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 14.01.2015, 02:06     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
ja for schleifen sind meist leichter zu verstehen und nicht zwingend langsamer. bei verschachtelten forschleifen kann man noch auf den index achten also ob der erte index in der äußeren schleife ist oder in der inneren. da geibt es unterschiede. dazu gab es hier im forum schon einen post.
die lösung mit filter siht so aus
Code:
windowSize =3;
d=filter(ones(1,windowSize)/windowSize,1,dydx')';

grüße


ich muss gestehen das ich das gerade nicht wegen der Geschwindigkeit mache Smile
daran habe ich noch gar nicht gedacht, Matlab ist extrem schnell finde ich.
wenn ich überlege wie das mit dem Octave war da dauerte ein Bruchteil der Daten
zu laden 20 min bei mir. Jetzt lade ich die gesamte csv und interpoliere noch die Daten
im Bruchteil der zeit. habe noch nicht gestoppt, aber bestimmt nicht länger als eine min.

dein Code ist fiel Hübscher als meine, auch wenn ich da nicht ganz durchsteige.
Danke dir.



Winkow hat Folgendes geschrieben:

ps : transponieren heist nur das A(i,j)=A(j,i) wird
Zitat:
was meinst du mit das der Filter nur in der ersten dimension durch läuft?
macht er nur die erste Zeile ? und die andern nicht?
nein aber das er bei einer nxm matrix die werte für jede spalte entlang der dimension der reichtung n berechnet. du wolltest es aber genau anders rum. darum muss man das 2 mal transponieren. 1 mal damit er das entlag der n dimension machen kann und danach dann wieder zurück damit du es so vorliegen hast wie du es wolltest


ah Ok, daher das Hochkomme ' bei meinen Daten dydx und dann noch mal beim Klammer schlissen also wenn der Befehl fertig ist.


Ich wies nicht wie ich das noch sagen soll aber DANKE




ich habe jetzt noch mal so eine doppelte For mit If abfrage gemacht, kann man bei so was auch den filter anwenden?

ich gehe jetzt das d durch und schaue wo das Ergebnis (immer Positiv) größer als "Steigung" ist, wenn das der Fall ist dann schreibe an die Stelle bei D1 eine 1 hinein.
vorher habe ich D1 schon angelegt und alles mit 0 gefüllt.

sieht dann so aus
Code:
   % d>1
      Steigung = 0.8;
      [Zeilen,Spalten] = size(d);         % Spalten 395   Zeilen 2142
        d1 = repmat(0, Zeilen, Spalten);  % Füllen mit, Zeilen, Spalten    % d1 komplet mit 0 füllen
      for i = 1 : Spalten
        for ii = 1 : Zeilen
            if abs(d(ii, i)) > Steigung
                d1(ii, i) = 1;
                C1(ii, i) = 10;      % nur für mich das sind die gefunden Daten die ich Visualisieren lasse. der Farbwert ROT wäre nicht schlecht zu kennen.
            end
        end
       end  


dann muss ich noch mal eine abfrage machen, die kommt aber später.
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
AndyAndyAndy
Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 22.12.14
Wohnort: Nähe Offenburg
Version: GNU Octave 4.1.0+
     Beitrag Verfasst am: 14.01.2015, 08:56     Titel:
  Antworten mit Zitat      
Muecke82 hat Folgendes geschrieben:

daran habe ich noch gar nicht gedacht, Matlab ist extrem schnell finde ich.
wenn ich überlege wie das mit dem Octave war da dauerte ein Bruchteil der Daten
zu laden 20 min bei mir.


Nicht das Laden hat bei dir lange gebraucht sondern das Plotten in der vollen Auflösung (du verwendest in Matlab mittlerweile 1/9 der originalen Auflösung) mit mesh mit einem inoffiziellen GNU Octave binary ohne OpenGL Support auf einem ranzigen MacOS.

Bitte keine falschen Tatsachenbehauptungen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 14.01.2015, 10:32     Titel:
  Antworten mit Zitat      
AndyAndyAndy hat Folgendes geschrieben:
Muecke82 hat Folgendes geschrieben:

daran habe ich noch gar nicht gedacht, Matlab ist extrem schnell finde ich.
wenn ich überlege wie das mit dem Octave war da dauerte ein Bruchteil der Daten
zu laden 20 min bei mir.


Nicht das Laden hat bei dir lange gebraucht sondern das Plotten in der vollen Auflösung (du verwendest in Matlab mittlerweile 1/9 der originalen Auflösung) mit mesh mit einem inoffiziellen GNU Octave binary ohne OpenGL Support auf einem ranzigen MacOS.

Bitte keine falschen Tatsachenbehauptungen.


Bitte entschuldige das sollte nicht abwertend sein.
Jedoch hast du recht das ich ein Octave verwendet habe das so ein Installationspacker schon zusammen gesetzt war.

Und ja du hast auch recht da war war Zwergs Grafit etc.

Das ist nicht mein anliegen hier etwas Falsches zu behaupten oder etwas oder jemanden schlecht zu machen, ganz im gegen teil ich bin dermaßen Froh das Ihr mir helft , alleine hätte ich das nicht geschafft bis hier her.


EDIT: habe es gerade ausprobiert wenn ich wie im Octave den Surf Befehl nehme und alles anzeigen lasse dann habe ich zwar auch schneller die Grafik da und ich kann sie auch schneller Drehen wie in Octave doch das Führe ich mal auf die bei mir fehlende Grafig Installation bei Octave zurück.
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 14.01.2015, 11:35     Titel:
  Antworten mit Zitat      
Hmm, anscheinend ist das was ich mache nicht so Erfolgs versprechend Sad

naja war ein Idee wert.

Das ist jetzt mein Ergebnis (Anhang) das Bild ist etwas Groß (Pixel mäßig) das es gut ins Forum passt.


Es handelt sich dabei um eine Draufsicht auf die Daten von oben !
die von mir gefunden kanten habe ich Heller dargestellt auf dem Bild.

hmm, muss mir was neues einfallen lassen wie man so was machen könnte.

Bildschirmfoto 2015-01-14 um 11.29.35.png
 Beschreibung:
naja war ein Idee wert.

Das ist jetzt mein Ergebnis (Anhang) das Bild ist etwas Groß (Pixel mäßig) das es gut ins Forum passt.

Download
 Dateiname:  Bildschirmfoto 2015-01-14 um 11.29.35.png
 Dateigröße:  1.56 MB
 Heruntergeladen:  668 mal

_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.