Matroids Matheplanet Forum Index
Moderiert von matroid
Mathematik » Numerik & Optimierung » Rekonstruktion einer Funktion aus Datenpunkten bzw. Graphen
Autor
Universität/Hochschule Rekonstruktion einer Funktion aus Datenpunkten bzw. Graphen
gambi12
Junior Letzter Besuch: im letzten Quartal
Dabei seit: 20.03.2023
Mitteilungen: 6
  Themenstart: 2023-03-20

Hallo zusammen, für meine Strömungssimulation muss ich noch eine Funktion implementieren. Aus dem gegebenen Graphen im Anhang möchte ich also eine Funktion rekonstruieren, die ich dann in meine Simulation einbetten kann. Anbei schonmal die Datenpunkte: x=[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2,2.1,2.2, 2.3,2.3] y=[2.95,3.08,3.22,3.33,3.5,3.64,3.83,4.01,4.19,4.4,4.64,4.82,4.19,3.75,3.82,4, 4.22,4.5,4.7,4.98,5.24,5.58,5.93,6.45,2.33] X stell dabei den Winkel Θ in [Rad] dar und y den korrespondierenden Druck. Ich habe hier erstmal nur die Datenpunkte von 0−2.3 Rad eingefügt. Ich hatte an eine exponential steigende Funktion gedacht von 0−2.3 Rad und dann eine einfache vertikale von 2.3 Rad −2.3 Rad. Oder was sagt ihr ? Vielen dank:)


   Profil
willyengland
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 01.05.2016
Mitteilungen: 501
  Beitrag No.1, eingetragen 2023-03-20

s. https://www.mathelounge.de/1004142/rekonstruktion-funktion-gegebenen-datenpunkten-graphen


   Profil
hyperG
Senior Letzter Besuch: im letzten Monat
Dabei seit: 03.02.2017
Mitteilungen: 2009
  Beitrag No.2, eingetragen 2023-03-20

Normalerweise nimmt man die https://en.wikipedia.org/wiki/Nonlinear_regression aber wenn ich mir die Daten ansehe https://matheplanet.com/matheplanet/nuke/html/uploads/c/47407_NLR_4Abschnitte.PNG scheint es bei der Datenermittlung Probleme gegeben zu haben (oder Einschwingzeit z.B. beim Druck nicht beachtet). Entweder: a) saubere Daten besorgen, denn 2 mal den selben x-Punkt mit unterschiedliche y-Werte scheint unlogisch oder b) mit Gewalt diese Kurve -> dann besser in 4 Abschnitte aufsplitten und mit einem Case-Verteiler zu 1 Funktion verschmelzen. Grüße


   Profil
gambi12
Junior Letzter Besuch: im letzten Quartal
Dabei seit: 20.03.2023
Mitteilungen: 6
  Beitrag No.3, vom Themenstarter, eingetragen 2023-03-21

danke für die Rückmeldung HyperG, du hast natürlich Recht, am Punkt 2.3 habe ich den selben Y- Wert und das nun auch angepasst. Anbei auch die kompletten Datenpunkte von 0- 6,29 [Rad]. Wie du an den Daten auch erkennst, wiederholen sich die Werte ab 3.2 [Rad] bzw. pi. Was ist denn ein Case-Verteiler, am liebsten hätte ich am ende auch eine einzige Funktion für die gesamten Datenpunkte, aber ich weiß leider nicht ob das möglich ist. Auch wenn die Funktion ein klein wenig von den Datenpunkten abweicht ist das nicht so tragisch, wir bewegen uns hier beim Druck im Bar Bereich. Von der nonlinear regression habe ich noch nicht gehört, aber wenn es zielführend ist :). Hatte eigentlich an die Fourier Analyse gedacht, da die Datenpunkte ja pi-periodisch sind. Die Datenpunkte können auch übrigens in anderen Steps gewählt werden, habe nämlich einen Graphen und kann die Datenpunkte über einen einfach plotdigitalizer bestimmen, bin da also sehr flexibel. x = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6 6.1 6.2 6.28 6.29 ] y = [2.95 3.08 3.22 3.33 3.5 3.64 3.83 4.01 4.19 4.4 4.64 4.82 4.19 3.75 3.82 4 4.22 4.5 4.7 4.98 5.24 5.58 5.93 6.45 2.33 2.37 2.38 2.43 2.51 2.64 2.74 2.83 2.95 3.08 3.22 3.33 3.5 3.64 3.83 4.01 4.19 4.4 4.64 4.82 4.19 3.75 3.82 4 4.22 4.5 4.7 4.98 5.24 5.58 5.93 6.45 2.33 2.37 2.38 2.43 2.51 2.64 2.74 2.83 2.95] anbei auch der Graph nochmal: https://matheplanet.com/matheplanet/nuke/html/uploads/c/56232_Bildschirmfoto_2023-03-09_um_10.59.54.png


   Profil
Wally
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 02.11.2004
Mitteilungen: 9727
Wohnort: Dortmund, Old Europe
  Beitrag No.4, eingetragen 2023-03-21

\(\begingroup\)\(\newcommand{\D}{\displaystyle}\) Fourieranalyse ist fast ok, aber die Approximation ist dann im \( L^2\)-Sinn, und beim Sprung schlägt das Gibb'sche Phänomen zu. Viele Grüße Wally \(\endgroup\)


   Profil
gambi12
Junior Letzter Besuch: im letzten Quartal
Dabei seit: 20.03.2023
Mitteilungen: 6
  Beitrag No.5, vom Themenstarter, eingetragen 2023-03-21

ich würde mich einfach mal an der Fourier Analyse versuchen. Da sich die Werte ab pi bzw. 3.2 Rad wiederholen wird es ja nicht notwendig sein, darüber hinaus die Punkte erneut zu definieren. Wenn ich einen Abstand von 0.1 Rad zwischen den benachbarten x-Werten wähle, dann müsste ich 33 Datenpunkte definieren, sodass die neuen Datenpunkte wie folgt aussehen: x = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3 3.1 3.2]; y = [2.95 3.08 3.22 3.33 3.5 3.64 3.83 4.01 4.19 4.4 4.64 4.82 4.19 3.75 3.82 4 4.22 4.5 4.7 4.98 5.24 5.58 5.93 6.45 2.33 2.37 2.38 2.43 2.51 2.64 2.74 2.83 2.95];


   Profil
hyperG
Senior Letzter Besuch: im letzten Monat
Dabei seit: 03.02.2017
Mitteilungen: 2009
  Beitrag No.6, eingetragen 2023-03-21

Ich habe hier mal eine schnelle Möglichkeit, die ich mit meinen Tools einfach umsetzen kann: "trigonometrische Interpolation": Die ersten 25 Stützstellen (also Ende der Periode bei y=2.33) ergeben für ganzzahlige x-Werte die Funktion: \sourceon y(t) 4.212-0.1720433448097946*cos(2*PI*t*1/25)-0.6076096915876725*sin(2*PI*t*1/25)-0.39448171694121287*cos(2*PI*t*2/25)-0.7211165451466656*sin(2*PI*t*2/25)-0.31987137884657996*cos(2*PI*t*3/25)-0.038582639789573554*sin(2*PI*t*3/25)-0.3799350464383562*cos(2*PI*t*4/25)-0.12013004313232922*sin(2*PI*t*4/25)-0.2249162439304845*cos(2*PI*t*5/25)+0.16340829575449423*sin(2*PI*t*5/25)-0.23004584480264792*cos(2*PI*t*6/25)+0.13600030250340864*sin(2*PI*t*6/25)-0.0639229159608645*cos(2*PI*t*7/25)+0.22791985285145255*sin(2*PI*t*7/25)-0.04881195009660367*cos(2*PI*t*8/25)+0.21435102054451913*sin(2*PI*t*8/25)+0.08473039603853927*cos(2*PI*t*9/25)+0.20277705927993608*sin(2*PI*t*9/25)+0.10691624393048471*cos(2*PI*t*10/25)+0.16092522760155362*sin(2*PI*t*10/25)+0.17895947147225016*cos(2*PI*t*11/25)+0.0960532593898475*sin(2*PI*t*11/25)+0.20142233038526547*cos(2*PI*t*12/25)+0.04931204341141461*sin(2*PI*t*12/25) \sourceoff Auf http://www.gerdlamprecht.de/Liniendiagramm_Scientific_plotter2.htm sieht es dann wegen der Periode mit 52 statt 25 Punkten und mit x(t)=t/9 so aus: https://matheplanet.com/matheplanet/nuke/html/uploads/c/47407_TrigonomInterpol25.PNG Eindeutig zu viel Überschwingen, da nur 25 Stützstellen verwendet wurden. Natürlich könnte man die Anzahl verdoppeln und immer zwischen 2 y Werte einen neuen Punkt per Mittelwert generieren, aber Case-Verteiler mit 4 Teilfunktionen sieht bestimmt besser aus... wenn ich Zeit habe...


   Profil
lula
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 17.12.2007
Mitteilungen: 11480
Wohnort: Sankt Augustin NRW
  Beitrag No.7, eingetragen 2023-03-21

https://www.onlinemathe.de/forum/Rekonstruktion-einer-Funktion-aus-Datenpunkten also in mindestens 3 Foren mit cut und past


   Profil
hyperG
Senior Letzter Besuch: im letzten Monat
Dabei seit: 03.02.2017
Mitteilungen: 2009
  Beitrag No.8, eingetragen 2023-03-21

Und so sieht es mit 400 Stützstellen aus (per BMP2SVG in Vektorgrafik -> dann aus SVG -> 2 Arrays -> 2 Funktionen): https://matheplanet.com/matheplanet/nuke/html/uploads/c/47407_trigonomInterpolFunktion400.jpg Schnelles sauberes Ergebnis, aber 5336 Zeichen lange Formel https://matheplanet.com/matheplanet/nuke/html/images/forum/subject/rotate.gif Bis später... [Die Antwort wurde nach Beitrag No.6 begonnen.]


   Profil
gambi12
Junior Letzter Besuch: im letzten Quartal
Dabei seit: 20.03.2023
Mitteilungen: 6
  Beitrag No.9, vom Themenstarter, eingetragen 2023-03-22

danke für die Rückmeldung HyperG, sieht ja schonmal nicht schlecht aus, der Trend ist ja klar zu erkennen. Weiß nur nicht, ob die Simulation aufgrund der Schwingungen Probleme bereiten würde. Zu dem Graphen mit den 400 Stützstellen, keine Frage perfekt aber denke viel zu lang ^^. Hast du hierzu ein Programm genutzt oder Matlab ?


   Profil
hyperG
Senior Letzter Besuch: im letzten Monat
Dabei seit: 03.02.2017
Mitteilungen: 2009
  Beitrag No.10, eingetragen 2023-03-22

zur Länge bei "Trigonometrischer Interpolation": Es ist immer ein Kompromiss zwischen Genauigkeit und Länge der Näherungsfunktion! Ich könnte auch eine mit 100 Stützstellen erstellen, die sehr viel kürzer ist. Wo wäre denn Deine Obergrenze bei a) Länge der Funktion in Zeichen ? b) Maximale Abweichung zum Sollwert ? Das Programm habe ich selbst geschrieben: diesmal per html5 + JavaScript, da man svg-Code (Vektorgrafik) leicht in Arrays wandeln kann. Der Algorithmus ist beim Iterationsrechner unter http://www.gerdlamprecht.de/Roemisch_JAVA.htm Beispiele 135...138 beschrieben. Durch Parameterdarstellung x(t), y(t) kann man auch Gesichter & andere komplizierte Symbole leicht in Formeln wandeln: http://www.gerdlamprecht.de/Beispielbilder_zum_Universal_Diagramm_Plotter.html (weiter unten) Aber hier noch ein anderer Ansatz ohne Periode: Algorithmus "Aufteilung in mehrere Unterfunktionen (weiche Case-Übergänge) incl. Übergangsfunktion": 1. nichtlineare Regression der ersten 12 Punkte ergibt \sourceon f1 0.956893138638439+8.5572004774205*exp(0.60643177134768*x-1.45693585502277) \sourceoff 2. NLR 2. Abschnitt ergibt \sourceon f2 2.46566375177274+0.62077730552679*exp(1.15071723663413*x-0.797812226407021) \sourceoff 3. Übergangsfunktion mit atan(x): mit Verschiebung entlang der x-Variable (hier etwa bei x=1.2) hat man den Wechselpunkt des Überganges von f1 & f2 Mit Faktor und Offset wird atan auf 0...1 normiert: \sourceon Übergangsfunktion mit Härte=90 atan((x-1.2)*90)/PI+1/2 \sourceoff 4. Zusammen: f1*(negierte Übergangsfunktion) + f2*Übergangsfunktion \sourceon zusammen (1/2-atan((x-1.2)*90)/PI)*(0.956893138638439+8.5572004774205*exp(0.60643177134768*x-1.45693585502277))+(atan((x-1.2)*90)/PI+1/2)*(2.46566375177274+0.62077730552679*exp(1.15071723663413*x-0.797812226407021)) \sourceoff https://matheplanet.com/matheplanet/nuke/html/uploads/c/47407_f1_f1_Uebergang_Ergebnis.PNG Formelsprache kompatibel zum Plotter http://www.gerdlamprecht.de/Liniendiagramm_Scientific_plotter2.htm und zu WolframAlpha.com: https://matheplanet.com/matheplanet/nuke/html/uploads/c/47407_f1_f1_Uebergang_Ergebnis_Plotter.PNG Mit weiteren Teilfunktionen f3, f4,.. und weiteren Übergangsfunktionen kann man das beliebig erweitern... Grüße Gerd Hinweis zur Härte: ein etwas weicherer Übergang mit Härte 9 sieht so aus: https://matheplanet.com/matheplanet/nuke/html/uploads/c/47407_f1_f1_Uebergang_Ergebnis_PlotterH9.PNG und bei Härte 1 sieht man den Übergang nicht mehr, als wenn es eine einzige exp-Funktion wäre.


   Profil
Delastelle
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 2320
  Beitrag No.11, eingetragen 2023-03-23

Hallo gambi12! Ich würde die Punkte aus Beitrag 3 benutzen um mehrere stückweise definierte Funktionen zu ermitteln. So f_1(x) von 0 bis 1.1 (ca.) f_2(x) von 1.1 bis 2.2 (ca.) ... Viele Grüße Ronald


   Profil
gambi12
Junior Letzter Besuch: im letzten Quartal
Dabei seit: 20.03.2023
Mitteilungen: 6
  Beitrag No.12, vom Themenstarter, eingetragen 2023-03-28

Hallo zusammen, vielen dank für die Rückmeldung und die Bereitstellung des Programms HyperG, komme erst jetzt dazu, hatte eine unangenehme Grippe hinter mir. Ich habe mal beim Support Team angefragt, wie lange die Funktion sein darf. Ich würde es erstmal mit Fourier Analyse ausprobieren wollen und dann gegebenenfalls die Aufteilung in mehrere Unterfunktion. Ich habe mir die Seite: www.gerdlamprecht.de/Roemisch_JAVA.htm angeschaut, aber leider verstehe ich hier noch nicht ganz wo ich die gegebenen Arrays eingeben bzw. die Anzahl von Stützstellen definieren kann ? Bin leicht überfordert viele grüße und danke für die Hilfen


   Profil
gambi12
Junior Letzter Besuch: im letzten Quartal
Dabei seit: 20.03.2023
Mitteilungen: 6
  Beitrag No.13, vom Themenstarter, eingetragen 2023-03-29

Hallo zusammen, ich hab es jetzt in Matlab mit der der curve fitter toolbox gemacht, ganz praktisch. Leider können nur maximal 8 Terme gewählt werden, das Support Team hat mir gesagt, dass es kein Zeichenlimit gibt, yuhuu. Daher würde ich die Terme gerne etwas erhöhen, so schaut der Plot aus. Für 8 Terme finde ich das nicht schlecht :) https://matheplanet.com/matheplanet/nuke/html/uploads/c/56232_Bildschirm_foto_2023-03-29_um_21.09.43.png viele grüße


   Profil
gambi12 hat die Antworten auf ihre/seine Frage gesehen.
gambi12 wird per Mail über neue Antworten informiert.

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]