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

Matrix abklappern ohne for schleife

 

fekal
Forum-Century

Forum-Century



Beiträge: 124
Anmeldedatum: 08.02.11
Wohnort: Mainz
Version: 2017b
     Beitrag Verfasst am: 06.06.2013, 10:47     Titel: Matrix abklappern ohne for schleife
  Antworten mit Zitat      
Hallo bestes Forum,
wie in dem Thread STVOl (http://www.gomatlab.de/besserer-algorithmus-ohne-schleife-t29110.html)

möchte ich auch eine For schleife ohne For schleife realisieren.


für die quadratische Abweichung ziehe ich von einem Datenfenster den wahren Wert ab.
(Pseudocode, ich hab ihn zur besseren Lesbarkeit ein wenig abgeändert)
Code:
for i = 1:n
   
        e(i)=-log(mean((y(i:i+x) - h).^2));
   
end


jetzt ist aber h nicht nur ein Wert sonder ein 186x1 vektor. Ich könnte natürlich jetzt wieder eine For Schleife in der For schleife laufen lassen und h durch rattern. Aber gibt es eine Möglichkeit, dass er von y direkt alle hs abzieht und dann später die unterschiedlichen Werte in e als Zeilen schreibt?

Besten Dank
Euer fekal
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.06.2013, 10:52     Titel:
  Antworten mit Zitat      
Hallo

wie groß ist denn y? Scheint mir größer als h zu sein? Ist x eine Konstante?
Private Nachricht senden Benutzer-Profile anzeigen
 
fekal
Themenstarter

Forum-Century

Forum-Century



Beiträge: 124
Anmeldedatum: 08.02.11
Wohnort: Mainz
Version: 2017b
     Beitrag Verfasst am: 06.06.2013, 11:04     Titel:
  Antworten mit Zitat      
Hy denny,

ja genau also y ist ein recht langer vektor, sagen wir mal 1x240000. Aus diesem nehme ich dann immer ein Fenster, dessen mittlere quadratische Abweichung ich berechne.

x ist also eine Konstante mit der die Fenstergroesse bestimmt wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.06.2013, 12:37     Titel: Re: Matrix abklappern ohne for schleife
  Antworten mit Zitat      
Hallo fekal,

Wenn y ein Zeilen-Vektor ist, und h ein Spalten-Vektor:
Code:
e = zeros(n, x + 1);  % Pre-allocate!!!
for i = 1:n    
        e(i, :) = -log(mean(bsxfun(@minus, y(i:i+x) - h) .^ 2, 1));
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
fekal
Themenstarter

Forum-Century

Forum-Century



Beiträge: 124
Anmeldedatum: 08.02.11
Wohnort: Mainz
Version: 2017b
     Beitrag Verfasst am: 06.06.2013, 13:00     Titel:
  Antworten mit Zitat      
Hy Jan

großartig, nach einem Befehl wie bsxfun habe ich gesucht.
Ich habe nur noch eine Frage. Matlabhilfe zu bsxfun(@minus, A,B) sagt mir das A von B abgezogen wird. warum hast du als zweites Element 1 geschrieben?
Muesste es nicht etwa so heißen
Code:
e = zeros(n, x + 1);  % Pre-allocate!!!
for i = 1:n    
        e(i, :) = -log(mean((bsxfun(@minus, y(i:i+x) ) , h)).^2);
end


Aber dann würde ja jeder wert von Y mit jedem wert von h subtrahiert werden. Ich möchte ja nur jeder Wert von Y mit einem wert von h nach dem anderen.
Wird das durch die 1 gewährleistet ?

edit: also e soll beim ersten Durchlauf 186x1 Werte haben, dann 186x2, ...

Vielen Dank für Eure Mühe.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.06.2013, 13:19     Titel:
  Antworten mit Zitat      
Hallo fekal,

Tippfehler! Nächster Versuch:
Code:
e(i, :) = -log(mean(bsxfun(@minus, y(i:i+x), h) .^ 2, 1))

Die ",1" gehört zu MEAN(), damit auf jeden Fall der Mittelwert entlang der ersten Dimension berechnet wird. Dies ist schneller als die Summe entlang der zweiten Dimension. Bei Bedarf also y und h so transponieren, dass MEAN entlang der ersten Dimension läuft - und viele Microsekunden sparen! In der gesparten Zeit kann man dann mal ein Eis esses - zumindest ein sehr kleines.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
fekal
Themenstarter

Forum-Century

Forum-Century



Beiträge: 124
Anmeldedatum: 08.02.11
Wohnort: Mainz
Version: 2017b
     Beitrag Verfasst am: 06.06.2013, 13:32     Titel:
  Antworten mit Zitat      
mmmmm,
schonmal tausend Dank aber ich bekomme noch nicht ganz das gewünschte Ergebnis. (ich hab mal ne professionelle paintzeichnung erstellt)

was ich suche würde mit ner zweiten For-Schleife etwa so aussehen
Code:
for i = 1:x
   
for k= 1:size(h)
        e(i,k)=-log(mean((y(i:i+x) - h(k,1)).^2));
    end
     
   
end


also pro y Fenster alle mittlere quadratische Abweichungen mit allen wahren werten von h, einzeln. Also ein mittlere quadratische Abweichungen von y Fenster 1 mit h1,h2,h3....

Vielen Dank trotzdem für deine Zeit und Mühe. Ich weiß es zu schätze, dass Ihr Euch mit andererleuts Problemen beschäftigt.

Ich mag Nuss Eis sehr gerne.

eis.png
 Beschreibung:

Download
 Dateiname:  eis.png
 Dateigröße:  14.67 KB
 Heruntergeladen:  441 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 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.