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

Array an Daten in Funktion umwandeln

 

Gabriel83

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2009, 09:39     Titel: Array an Daten in Funktion umwandeln
  Antworten mit Zitat      
Hallo!

Ich habe ein Array welches über der X-Achse aufgetragen eine Funktion aus zwei Geraden ergeben würde.

x = [0 1 2 3 4 5 6 7 8]
y= [0.5 2 3.5 5 4 3 2 1]

Gibt es eine Möglichkeit um mit Matlab eine abschnittsweise definierte Funktion zu erstellen damit so ein Ergebniss rauskommt??
Y1 = 1.5*x
Y2 = -x + 9

Das Problem ist dass ich nicht weiss nie wann der Extrempunkt kommt. Die Daten sind hier natürlich vereinfacht, ein Array hat bei mir ca. 200 Werte. Der Extrempunkt liegt immer zwischen dem 40- sten und 100- sten Wert.


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2009, 10:15     Titel:
  Antworten mit Zitat      
Dazu musst Du zumindest so ungefähr wissen, wie die Funktion aussieht. Linear, quadratisch, exponentiell, ...

Wenn die Punkte wirklich exakt bekannt sind schlage ich vor, das ganze von Hand auszurechnen. Für eine Gerade musst Du dazu ja nur zwei Punkte kennen.

Wenn die Punkte nur so mehr oder weniger auf der gesuchten Funktion liegen, kannst Du die Methode der kleinsten Quadrate anwenden. Auch das kann man von Hand machen, aber bei 200 Werten ist das ziemlich lästig.

Für Polynome (also auch Geraden - allerdings wirst Du da kein Maximum finden) gibt es dafür die Funktion polyfit.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gabriel83

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2009, 13:12     Titel:
  Antworten mit Zitat      
Hallo! Danke für die schnelle Antwort.

Ich muss allerdings ein Programm schreiben dass zu Messdaten die ich einlese diese Funktionen automatisch erstellt. Es ist also nicht möglich das manuell zu machen. Die Funktionen werden immer linear sein.
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2009, 13:18     Titel:
  Antworten mit Zitat      
Gabriel83 hat Folgendes geschrieben:
Ich muss allerdings ein Programm schreiben dass zu Messdaten die ich einlese diese Funktionen automatisch erstellt. Es ist also nicht möglich das manuell zu machen. Die Funktionen werden immer linear sein.


Du willst die Extremwerte einer linearen Funktion bestimmen? Ganz sicher? Wink

Du kannst mit polyfit das ganze auch automatisieren.

Für den linearen Fall findest Du auch tonnenweise Hinweise im Netz, wie sich die Steigung und der Achsenabschnitt gemäß der Methode der kleinsten Quadrate "von Hand" bestimmen lässt. Zum Beispiel auch hier: http://de.wikipedia.org/wiki/Regres.....ng_der_Regressionsgeraden
Private Nachricht senden Benutzer-Profile anzeigen
 
Gabriel83

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2009, 14:16     Titel:
  Antworten mit Zitat      
Also ich beschreibe das jetzt mal dann ausführlicher:

Ich bekomme ein Array von Daten. Über die X-Achse aufgetragen sieht es wie ein Trapez aus dass aus mehreren linearen Geraden besteht.

__/¯¯\__

Ich weiß nicht wo die Schnittpunkte dieser geraden liegen. Aber ich möchte am Ende die Gleichungen dieser Funktionen erhalten. Und das so, dass ich da nichts von Hand auszurechnen brauche, da es für ca. 80 Rechnungen pro Tag gebraucht wird. Also brauche ich zunächst etwas was mir die vier Eckpunkte herausgibt (Anfangs und Endpunkt habe ich ja), die ich dann mit Geraden verbinden kann, oder?

Grüße,

Gabriel83
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2009, 14:45     Titel:
  Antworten mit Zitat      
Ahh, ok! Das war aus deinen ersten Beschreibungen überhaupt nicht ersichtlich.

Dann musst Du deinen Punktehaufen erstmal irgendwie in Segmente einteilen. Habe mal ziemlich genau sowas gebaut, die perfekte Lösung war das sicherlich nicht, gibt sicherlich Menschen, die sich da schonmal mit etwas mehr mathematischem Hintergrund an diese Problematik gewagt haben.

Code:

winkel_alt = 0;
last_edge_index = 1;
threshold = 0.5; %winkel, ab dem ein Knick erkannt wird (in rad)
for iCount = 1:anzahl_messwerte-1
    winkel = atan2(messung_y(iCount + 1) - messung_y(iCount), messung_x(iCount + 1) - messung_x(iCount)); %berechnet den Winkel der geraden zwischen zwei benachbarten Punkten
    if abs(winkel - winkel_alt) > threshold %winkel unterscheidet sich sehr vom Winkel der beiden vorherigen Punkte? -> Knick!
        berechne_regressions_gerade(messwerte(last_edge_index, iCount + 1); %regressionsgerade vom letzten Knickpunkt bis zum neu entdeckten Knickpunkt berechnen
        last_edge_index = iCount + 1; %knickpunkt-index speichern
    end
    winkel_alt = winkel;    
end
 


Wenn Deine Messwerte start verrauscht sind, funktioniert das Verfahren gar nicht mehr. Abhilfe kann dann eine vorangestellte Filterung bringen. Aber so ganz sauber ist das nicht...
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.