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

Gerade über eine bestimmte Anzahl von Werte

 

heinzi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.04.2014, 21:31     Titel: Gerade über eine bestimmte Anzahl von Werte
  Antworten mit Zitat      
Hallo liebe Community-Freunde,

ich komm mal wieder bei einem Problem nicht weiter: Meine Matrix M hat die Größe 990x250. Bei dieser Matrix handelt es sich um eine Elektro-Messreihe. Ich möchte jetzt die Werte in den Zeilen mit einer Linearen Regression fitten und zwar immer über 24 Werte. Ich weiß leider nicht so recht, wie ich das verständlich erklären soll, aber versuch es mal: Ich nehme zB. die Werte von M(:,25) her. Jetzt nehme ich die ersten 24 Werte (1:24) und berechne mir daraus die Gerade, dann geh ich einen Wert nach rechts und nehm wieder 24 Werte her (2:25) ... so ähnlich wie bei einem Moving Average.

Mein Versuch:

Code:

N = 24;
dr = 200;
M_mean = mean(M)
 
for ii = 1:size(M,1)-N;
    for jj = 1:size(M,2);
    z(ii,jj) = (M(ii:ii+N,jj)-M_mean)*((i-((N+1)/2))*dr);
    end
end
 



Den Fehler den ich bekomme: ??? Error using ==> minus
Matrix dimensions must agree - in z(ii,jj) = (M(ii:ii+N,jj)-M_mean)*((i-((N+1)/2))*dr);

Abgesehen von der Fehlermeldung, bin ich mir auch nicht so ganz sicher, ob ich die Schleifen richtig gesetzt habe. Wäre toll wenn mal ein Profi drüber schauen könnte und mir weitere Tipps gibt Smile

Danke auf jeden fall schon mal.

ciao
Heinz


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 01.04.2014, 23:10     Titel:
  Antworten mit Zitat      
huhu. das programm ist so nicht lauffähig. da ist eine fehlersuche immer schwer.
du hast in dem einen abschnitt i verwendet und nicht ii. i ist die imaginäre einheit. das ist nicht gewünscht denke ich. ich hab heute schon eine ähnliche frage beantwortet :
http://www.gomatlab.de/linearer-fit-t32803.html das kannst du dir ja einmal angucken. das sollte sich auf dein problem übertragen lassen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2014, 18:32     Titel:
  Antworten mit Zitat      
Hallo,

danke für deine schnelle Antwort und den Link. Von dort hab ich mir die Inspiration für die Schleife geholt Smile

Ja, muss natürlich ii sein.

Code:

N = 24;
dr = 200;
M_mean = mean(M(:)) %
 
for ii = 1:size(M,1)-N;
    for jj = 1:size(M,2);
    z(ii,jj) = (M(ii:ii+N,jj)-M_mean)*((ii-((N+1)/2))*dr);
    end
end
 


Leider bekomme ich folgende Fehlermeldung:
??? Subscripted assignment dimension mismatch. Error in ==> z(ii,jj) = (M(ii:ii+N,jj)-M_mean)*((ii-((N+1)/2))*dr);

LG.
H
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.04.2014, 23:20     Titel:
  Antworten mit Zitat      
Hallo,

der Grund für die Fehlermeldung: rechts vom = entsteht ein Vektor, links davon wird auf ein Element einer Matrix zugegriffen --> das passt nicht zusammen.

Was soll z insgesamt bzw. z(ii,jj) denn letztlich beinhalten?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2014, 10:22     Titel:
  Antworten mit Zitat      
Hallo.

z sollte am Ende eine Matrix sein, dass ich zB. auf die Elemente Spaltenweise zugreifen kann z(:,5), z(:,10), ...

Ich versuche, so ähnlich wie bei einem Gleitendem Mittel, mit der untenstehenden Formel von 24 Werten eine Gerade zu berechnen, dann das ganze um eins zu verschieben und mit den 'neuen' 24 werten die nächste gerade berechnen. Für die Gerade sollten die Werte aus den Zeilen (990) genommen werden.

Am Ende sollte dann eine neue Matrix rauskommen die die Größe 990x360 hat. Bzw. werde ich die ersten und letzten 24 Werte mit NaN ersetzen müssen.

danke für eure mühe.

LG
Heinz
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2014, 18:07     Titel:
  Antworten mit Zitat      
guten Tag,

hat keiner eine Idee, wie ich das Problem lösen kann?

Schönen Sonntag.
 
Jan S
Moderator

Moderator


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

Ich verstehe die Frage immer noch nicht ganz.
Wie möchtest Du genau aus 24 Werten eine "Gerade" berechnen? Möchtest Du einen Least-Square-Fit? Wozu dient M_mean?

Zitat:
dann das ganze um eins zu verschieben und mit den 'neuen' 24 werten die nächste gerade berechnen

Das verstehe ich nicht.

Zitat:
Bzw. werde ich die ersten und letzten 24 Werte mit NaN ersetzen müssen.

Ist das eine Frage oder Feststellung? Wieso müssen die letzten 24 Werte Nan sein?

Da ich also nicht verstehe, was Du genau erreichen möchtest und das gezeigte Programm nicht läuft, kann ich nichts hilfreiches raten.
Bitte erkläre nochmal mathematisch genau, nach welcher Formel der Wert rechts von den 24 Werten ersetzt werden soll. Sind für das Ergebnis die Orginal-Werte ab dem 25.ten Element überhaupt von Bedeutung oder nicht?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2014, 20:54     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich probier das Problem noch mal zu beschreiben: Mit der oben angegebenen Formel (bezieht sich wie du schon angesprochen hast auf die Methode der kleinsten Quadrate) soll ich mit den Werten, die in den Zeilen (990) meiner Matrix stehen die Werte einer Kurve berechnen. Jedoch nicht über die gesamte Matrix, M hat eine Size von 990x360, sondern immer nur über 24 Werte. Die Formel, die ich im Code stehen habe ist im Übungsbeispiel angegeben.
Als Hinweis haben wir bekommen, dass die Berechnung so ähnlich ist, wie die für den MovingAverage, wo man auch 24 Werte mittelt, eins weitergeht und die nächsten 24 werte mittelt, bis zum Ende.
Bei diesem Beispiel will ich es so ähnlich machen, nämlich, dass ich mir mit der angegebenen Formel aus 24 Messwerten einen Punkt berechne, dann nach rechts weiter gehe und mir wieder aus 24 Messwerten einen PUnkt berechne ... Am Ende erhalte ich dann 990-48 berechnete Punkte, aus denen ich eine Kurve zeichne, die den Messwerten am 'nächsten' liegt.
Da das ganze einen Matrix ist, ich aber die Kurve nur für die Zeilenwerte berechne, sollte wieder eine Matrix rauskommen, M_reg, mit der gleichen Dimension, bzw. dass ich spaltenweise auf die neuberechneten Werte zugreifen kann (M_reg(:,5), M_reg(:,20)). Wir sollten am Ende einige Plots erstellen und zeigen, dass zb. bei Höhe 5 (die Spalten beziehen sich auf die Höhe), die Werte berechnet mit der neuen Methode so verteilt sind.

Zitat:

Bzw. werde ich die ersten und letzten 24 Werte mit NaN ersetzen müssen.


Das hätte ich als Annahme getroffen, da bei einem Moving Average Prozess ja auch die ersten und letzten 24 Werte wegfallen.

Ich hoffe es ist nicht zu 'weird' erklärt und einigermaßen verständlich.

Danke fürs weiterprobieren Smile

glg.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.04.2014, 22:29     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
z sollte am Ende eine Matrix sein, dass ich zB. auf die Elemente Spaltenweise zugreifen kann z(:,5), z(:,10), ...

Das kann man nun bei jeder Matrix, sofern sie genug Spalten hat.
Wie sollen diese Elemente aber nun belegt werden?

Warum es zu der Fehlermeldung kommt, habe ich dir ja geschrieben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2014, 22:28     Titel:
  Antworten mit Zitat      
Hallo,

ich versteh nicht so ganz, warum es zur Fehlermeldung kommt. Ich lasse doch die Werte in den Zeilen durchlaufen, und mit der zweiten Schleife durchlaufe ich alle Spalten. Und diese Werte speichere ich in die z-Variable rein. Dann stehen doch auf der linken und der rechen Seite jeweils Matrizen, oder steh ich auf dem Schlauch?

LG
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.04.2014, 19:42     Titel:
  Antworten mit Zitat      
Hallo,

nein. Auf der linken Seite steht genau ein Element der Matrix (nämlich Zeile ii, Spalte jj), und in dieses eine Element kann man nicht einen Vektor oder eine Matrix zuweisen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2014, 20:56     Titel:
  Antworten mit Zitat      
und wie kann ich das lösen?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.04.2014, 19:26     Titel:
  Antworten mit Zitat      
Hallo,

ich könnte jetzt sagen: indem man dafür sorgt, dass die Dimensionen zusammenpassen, was dir aber wenig helfen wird.

Um dir damit weiterhelfen zu können, müsstest du die Rückfragen beantworten - siehe 08.04.2014, 22:29.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2014, 21:11     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Mühe.

Zitat:

Wie sollen diese Elemente aber nun belegt werden?


Wenn ich deine Frage richtig verstehe (du hast es sicher schon gemerkt, aber ich bin ein totaler Anfänger) und du das meinst, dann sollte in der neuen Matrix in den Zeilen die berechneten Punkte über die 24 Werte abgespeichert werden und in den Spalten die dazugehörigen Winkel.

Die Formel, die ich oben geschrieben habe, habe ich von einem MovingAverage Prozess übernommen, bei dem die Werte in den Zeilen immer über eine Anzahl von Werten gemittelt wird. Da kommt dann ja auch ein Wert raus. Also wenn ich die Werte 1-24 Mittle hab ich einen Wert, wenn ich 2-25 mittle hab ich einen weiteren Wert usw. Und so ähnlich hätte ich das bei diesem Problem probiert, nur dass ich halt immer diese Fehlermeldung bekomme.

Lg.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.04.2014, 22:26     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Da kommt dann ja auch ein Wert raus.

Nein, eben nicht ein Wert, sondern ein ganzer Vektor. Es gibt also zwei Möglichkeiten:
a) es soll wirklich nur ein skalarer Wert herauskommen --> die Formel ist falsch
b) die Formel ist richtig und es soll ein Vektor herauskommen --> du musst entscheiden, was mit diesem Vektor passieren soll. In einen Eintrag einer Matrix passt er jedenfalls nicht.

Grüße,
Harald
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.