|
Autor |
Rekonstruktion einer Funktion aus Datenpunkten bzw. Graphen |
|
gambi12
Junior  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  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  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  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  Dabei seit: 02.11.2004 Mitteilungen: 9726
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  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  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  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  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  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  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  Dabei seit: 17.11.2006 Mitteilungen: 2315
 | 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  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  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. |
|
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]
|