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

Faktor zwischen zwei Vektoren optimieren

 

Lucas
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2016, 19:32     Titel: Faktor zwischen zwei Vektoren optimieren
  Antworten mit Zitat      
Guten Abend,

ich habe folgendes Problem:

Ich habe ein gemessenes Signal F und ein simuliertes Signal T. Bei F handelt es sich um Druckdaten, die am Meeresboden aufgenommen wurden. Sie beinhalten also die Gezeitenschwankungen. Bei T handelt es sich um eine simulierte Datenreihe, welche die isolierten Gezeitenschwankungen darstellt. Die beiden Datenreihen liegen jeweils als Vektoren vor und sind "in Phase". Die Gezeitenamplituden haben jedoch unterschiedliche Größenordnungen.

Zieldaten = F - m * T

Ich möchte nun also T mit einem bestimmten Faktor m von F subtrahieren, sodass ich die Gezeiten aus F für meine Zieldaten auslösche. m soll also dahingehend optimiert werden, dass die Restamplitude minimal ist.

Ursprünglich dachte ich dieses simple Problem einfach mit fminsearch lösen zu können, scheitere nun aber an der Umsetzung. Vielleicht kann mir jemand auf die Sprünge helfen?

Gruß

Lucas
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.12.2016, 17:15     Titel:
  Antworten mit Zitat      
Hallo,

das ist ja ein (überbestimmtes) lineares Gleichungssystem, kann also mit \ gelöst werden:
Code:
m = T \ (F - Zieldaten)


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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2016, 18:04     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort, Harald!

Vielleicht stell ich mich gerade blöd an, aber mir kommt es so vor, als würde ich mich deinem Ansatz im Kreis drehen.
Die Zieldaten sind nicht gegeben, sie sollen aus der Subtraktion von T multipliziert mit dem konstanten Faktor m, welchen es zu optimieren gilt, resultieren. Optimal bedeutet hier, dass sich die Amplituden, die ja in beiden Signalen vorhanden sind, durch den Faktor m auf das gleiche Niveau gebracht werden sollen.

T besteht so gesehen also nur aus einer Signalkomponente. F besteht aus zwei Komponenten: die erste ist annäherungsweise m*T und die zweite das Restsignal, welches ich isolieren möchte (Zieldaten).

Die Charakteristik, die durch T dargestellt wird, steckt also zu einem gewissen (konstanten) Anteil (m) in dem Signal F. Für die Zieldaten soll nun diese Charakteristik weitestgehend ausgelöscht werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dann eben
Code:


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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2016, 19:29     Titel:
  Antworten mit Zitat      
Danke dir, aber ich glaube das ist nicht so wirklich das, wonach ich auf der Suche bin. Auf diese Weise wird mein m für jeden einzelnen Wert der Zieldaten berechnet.

Ich bin auf der Suche nach einer Möglichkeit (bspw. mit dem cftool) meine Datenreihe T an die Datenreihe F zu fitten, und somit ein m (und b für den Offset) zu bestimmen.

Ich möchte also den Term m * T(x) + b an F(x) fitten (x steht also jeweils für den xten Wert des jeweiligen Vektors). Leider weiß ich nicht wie ich Matlab bzw. dem cftool klarmache, dass ich keine Funktion, sondern eine Datenreihe an eine andere fitten möchte.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.12.2016, 21:41     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Danke dir, aber ich glaube das ist nicht so wirklich das, wonach ich auf der Suche bin.

Warum glaubst du das?
Hast du den Ansatz denn versucht? Welche Probleme sind dabei aufgetreten?

Zitat:
Ich möchte also den Term m * T(x) + b an F(x) fitten

Von b war bisher nicht die Rede, aber auch das geht.

Code:
p = [T, ones(size(T))] \ F

dann ist p ein Vektor mit zwei Elementen, m und b.

Alternativ kannst du fitlm verwenden
Code:


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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2016, 22:23     Titel:
  Antworten mit Zitat      
Sorry, das b kam nun dazu nachdem ich mich mehr mit der Thematik beschäftigt habe.

Ich muss gestehen, dass ich den \-Operator mit einem / verwechselt habe... Embarassed
War mir bisher gar nicht bekannt.
Wer lesen kann, ist wohl klar im Vorteil.

Trotzdem weicht mein m nach
Code:
von dem m nach
Code:
p = [T, ones(size(T))] \ F
deutlich ab.

Letztere Methode ist allerdings genau das, was ich gesucht habe und die Ergebnisse könnten besser nicht sein. Left division also. Vielen Dank dafür, Harald!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Abweichung kommt zustande, weil quasi versucht wird, den fehlenden y-Abschnitt durch eine andere Steigung zu "kompensieren".

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