Frage von Grobbeldopp, 120

Was könnte das für eine Funktion sein?

Ich kenne drei Werte und einige weitere Eigenschaften, die ich aber nicht mathematisch beschreiben kann, weil ich keine Ahnung habe wie die Fachbegriffe sind.

f(0)=0

f(9)=2

f(15)=7

Desweiteren: f(x) wird nie größer als x, nähert sich aber bei größeren Zahlen zunehmend x an. - es muss eine nette sanfte Kurve sein, die ähnlich aussieht wie eine Exponentialfunktion, also ich kann ungefähr raten wie andere Werte sind, z.B. f(100) ist irgendwas um 90 oder so, f(4) etwa 1 oder kleiner. Es muss jedenfalls so aussehen.

Allgemein je größer die Zahl, desto näher kommt f(x) an x ran und es muss durch die drei genannten Punkte gehen.

Mich interessiert nur der Zahlenraum zwischen 0 und 100, negative Zahlen können nicht auftreten.

Expertenantwort
von KDWalther, Community-Experte für Mathe & Mathematik, 59

Das ist ja echt eine Herausforderung :-)

Als erstes: "eine nette sanfte Kurve" ist eine tolle Beschreibung :-)))

Dann: "die ähnlich aussieht wie eine Exponentialfunktion" - kann nicht sein, weil die exp.-Funktion nämlich immer schneller ansteigt, als auch sehr schnell viel größer als x wird.

Mein Vorgehen:

f(x) soll an x rangehen: da nehme ich mir mal den Term x.

Die gegebenen y-Werte sind alle kleiner als x (bis auf (0|0)), also subtrahiere ich was.

Der Term, den ich subtrahiere, muss sich für große x null annhähern (damit f(x) gegen x geht). Das muss also ein Bruchterm sein. Ich habe mich (mehr oder weniger willkürlich) für den Nenner c·x²+1 entschieden. (Formvariable Nummer 1)

Dann soll der Graph durch die drei gegebenen Punkte laufen. Im Zähler des Bruchtermes nehme ich den linearen Term a·x + b - damit habe ich zwei weitere Formvariablen und stelle sicher, dass der Bruch gegen null konvergiert.

Insgesamt versuche ich es also mit der Funktion f(x) = x - (a·x + b) / (c·x² + 1).

Ich setze die Koordinaten der drei Punkte ein und lasse meinen Taschenrechner den Rest erledigen :-)
Der spuckt mir folgende Werte raus: a = 2688/11, b = 0, c = 2565/11

Der Graph dieser Funktion geht nun auf jeden Fall duch die 3 Punkte und nähert sich dem Graphen von y = a an. Allerdings stimmen die Werte bei x = 4 und x = 100 nicht so richtig mit Deinen überein.

Das zeigt: perfekt war meine Lösung nicht.

Ich wollte Dir nur einen möglichen Weg aufzeigen. Man könnte nun mit dem Funktionsterm ein wenig "spielen"; vielleicht erhält man dann eine bessere Lösung.

Expertenantwort
von PWolff, Community-Experte für Mathe & Mathematik, 57

Es gibt hier mehrere Ansätze.

Wenn f(x) nie größer als x wird, aber asymptotisch gegen x geht (immer näher an x herankommt), bietet es sich an, x von f abzuziehen:

g(x) := f(x) - x

Damit ist

g(0) = 0
g(9) = -7
g(15) = -8

Hierfür bietet sich ein Ansatz wie folgt an:

g(x) = -a x e^(-lambda x)

Durch Einsetzen der bekannten Funktionswerte kann man a und lambda ausrechnen. (Ich habe heraus:

a = 245/216 * wurzel(35/24)

lambda = 1/6 ln(24/35)

Es geht auch mit gebrochen-rationalen Funktionen, aber dazu bin ich jetzt zu müde.

Kommentar von KDWalther ,

Stimmt, ein Ansatz mit einer Exp.-Funktion ist eigentlich naheliegend, das umgeht auch das Problem mit Def.-Lücken :-)

Expertenantwort
von hypergerd, Community-Experte für Mathematik, 38

Wenn nur 3 Punkte und der asymt. Teil bekannt sind, können das unendlich viele verschiedene Funktionen sein...

a) Typ

(9.137326065e-3*pow(x,2.452427815))*(0.5-tanh((x-20)/2)/2)+x*x*(tanh((x-20)/2)/2+0.5)/(x+1)

b) Typ 

1.493496635*x-3.76406011*sqrt(x)-1.184170923e-2*pow(x,1.5)

Der Iterationsrechner 

http://www.gerdlamprecht.de/Roemisch_JAVA.htm#(9.137326065e-3*@Px,2.452427815))*(0.5-tanh((x-20)/2)/2)+x*x*(tanh((x-20)/2)/2+0.5)/(x+1)@NaB=Array(0,9,15,100,1000);@N@Ci]=Fx(@Bi]);aD[i]=1.493496635*@Bi]-3.76406011*@Q@Bi])+2.166946376e-2-1.184170923e-2*@P@Bi],1.5)@Ni%3E4@N0@N0@N#

(LINK endet mit N#)

und das Universal-Diagramm

http://www.gerdlamprecht.de/Liniendiagramm_Scientific_plotter.htm

aB[0]<1?(9.137326065e-3*pow(x,2.452427815))*(0.5-tanh((x-20)/2)/2)+x*x*(tanh((x-20)/2)/2+0.5)/(x+1):(1.493496635*x-3.76406011*sqrt(x)+2.166946376e-2-1.184170923e-2*pow(x,1.5))

Bild 2 bestätigen die geg. Punkte

Bei Bedarf kann ich Dir weitere "basteln" ( denn die 2. hat ja einen kleinen negativen Bereich -> was man noch verbessern kann)

Dann gibt es noch zig andere Typen (kenne über 300 Funktionen).

Kommentar von Grobbeldopp ,

Hm. Ich merke allmählich dass es da wohl keine Lösung gibt, die sehr naheliegend oder einfach ist, sondern dass man sich das auf viele Arten sozusagen zurechtmachen kann.

Damit kann ich auch keine eleganten einfachen Erklärungen für die Kurve erwarten vergleichbar mit "da wächst etwas exponentiell" (also nur als Beispiel, ist schon klar dass das nicht der Fall ist)

Kommentar von hypergerd ,

"exponentiell" stimmte ja auch, aber nur im Bereich bis x kleiner 16 

9.137326065e-3*pow(x,2.452427815)

=x^2.452427815 * 0.009137...

-> daher war meine Lösung a)

2 Teil-Funktionen, die per Angleichungsfunktion (tanh) verbunden worden sind...

Dann gibt es noch andere Typen! -> morgen mehr...

Kommentar von precursor ,

@hypergerd

Wenn ich mir dein 2-tes Bild anschaue, dann sehe ich, dass beide Funktionen "durchschwingen", also Extremwerte im Bereich von 0 <= x <= 100 haben.

Genau dies soll, laut Beschreibung des Fragestellers, aber nicht sein, er möchte eine Funktion ohne Extremwerte im Bereich haben, damit es wie er es nannte "eine nette sanfte Kurve sein, die ähnlich aussieht wie eine Exponentialfunktion, ..." ist.

Ich habe mehrere Funktionen gefunden gehabt, die aber alle das Manko haben, an mindestens einer Stelle einen Extremwert im Bereich zu haben, meistens irgendwo zwischen  0 <= x <= 9

Zum Beispiel diese Funktion hier -->

y = x - 0.345 * x ^ 2 / e ^ (0.05677 * x) + 0.03233 * x ^ 3 / e ^ (0.0979 * x)

Die Parameter sind auf nur 5 Stellen gerundet, das geht natürlich noch besser, sieht dann aber nicht so schön aus ;-))

https://goo.gl/4V7XgJ

Sieht auf den ersten Blick schön aus, wenn man jedoch genauer hinsieht, dann erkennt man auch hier, dass die Funktion ganz leicht durchschwingt, an den Stellen x=2.8829 (Maximum) und x = 4.80572 (Minimum), also im Bereich um x = 4 herum findet das Dilemma statt.

Vielleicht ist das ein Indiz dafür, dass der Fragesteller den Wert f(4) = 1 doch nicht so gut geschätzt hat, wie er dachte.

Ich frage mich jetzt, ob man einen Wert f(4) = ? finden kann, der nicht so weit vom Wert 1 entfernt ist, es aber gleichzeitig nicht zum Durchschwingen kommt.

Kommentar von precursor ,

Hier noch mal dieselbe Funktion von oben, nur mit einem kleineren Ausschnitt im Koordinatensystem, wo man es besser sehen kann -->

https://goo.gl/zwYj9i

Echt traurig, dass es wirklich ganz ganz minimal durchschwingt ;-((

Kommentar von Grobbeldopp ,

Ja, das kann sein dass die Schätzung schlecht ist. Es könnte deutlich unter 1 sein.

Ich möchte eben eher einen nicht zu weit hergeholten Weg wissen, wie man aus diesen drei Punkten die Werte dazwischen "fundiert" erraten könnte, als genau die Kurve zu erhalten, die ich mir ausgemalt habe.

Ich will am Schluss sagen können: "Wenn ich jetzt angesichts der mageren 3 Werte, deren "Verhalten" ich allerdings ungefähr erraten kann (bei kleineren x zwischen 15 und 9 wird f(x) überproportional kleiner und darunter auch) annehme, dass die Werte bei anderen Zahlen zwischen 1 und 15 wie folgt aussehen, dann ist das nicht völlig beliebig, sondern legt folgende relativ einfache mathematische Funktion zu Grunde".

Was ändert sich denn, wenn ich das ganze so fasse, dass mich nur die Werte zwischen 1 und 15 interessieren, und es danach weitergehen kann wie es will?

Also es bleibt bei f(9)=2 und f(15)=7, f(0) darf undefiniert sein und f(x) auch beliebig größer werden als x jenseits der 15.

Kann man dann eine Exponentialfunktion irgendwie so manipulieren, dass das geht?

Kommentar von Grobbeldopp ,

gp

Kommentar von Grobbeldopp ,

OK kurz ausprobiert.

Wenn ich f(x)= (x^2,45)/108,859 ausrechne kommt das hin mit den Werten zwischen 0 und 15 und liefert mir irgendwelche exponentiell steigenden Werte.

Das ist also etwa mein Niveau :-). Schade nur, dass das eben dann sofort nach dem Bereich 15 durch die Decke geht und damit der Zahlenraum über 15 unrealistische Werte liefert, die ich ausschließen kann aber besser wie nichts. Also meinen Kommentar ignorieren :-)

Kommentar von Grobbeldopp ,

das "exponentiell steigen" habe ich als auch schonmal nicht verstanden. Parabolisch reicht völlig.

Kommentar von precursor ,

Für Extrapolationen sind Interpolationen ohnehin praktisch nur in den seltensten Fällen zu gebrauchen, schon nach sehr kurzem Abstand zum Wertebereich können die geschätzten Werte fast gar nichts mehr mit den wahren Werten zu tun haben.

Interpolation ist dafür da, um Zwischenwerte im Wertebereich abzuschätzen, nicht außerhalb des Wertebereichs.

Kommentar von precursor ,

Du hattest ja ausdrücklich geschrieben, dass dich nur der Wertebereich 0 <= x <= 100 interessiert.

Kommentar von precursor ,

Ich habe es noch mal ausprobiert, es scheint immer durchzuschwingen ganz egal welchen Wert man an der Stelle x = 4 verwendet, kann eventuell auch am Funktionsansatz liegen, obwohl in bei einigen anderen Funktionen, die ich ausprobiert habe, dasselbe beobachtet habe.

Kommentar von hypergerd ,

Wenn man bei
http://www.gerdlamprecht.de/Liniendiagramm\_Scientific\_plotter.htm
nur eine Kurve angibt und die Punktezahl auf auto stellt, dann kann man per Button "Ableitung" sehen, dass die erste Funktion


(9.137326065e-3*pow(x,2.452427815))*(0.5-tanh((x-20)/2)/2)+x*x*(tanh((x-20)/2)/2+0.5)/(x+1)


im Bereich x > 0 nie eine Ableitung (blau gestrichelt) kleiner 0 hat:
http://lamprecht.bplaced.net/Bilder/Ableitung9\_2.png
die von precursor 

x-0.345*x*x/exp(0.05677*x)+0.03233*pow(x,3)/exp(0.0979*x)


jedoch schon im Bereich 3 ... 4.6

Oder was bezeichnet Ihr als "durchhängen"???

Kann es sein, dass Ihr nur mit dem Syntax von JavaScript nicht klarkommt?
tanh(x)=(e^(2*x)-1)/(e^(2*x)+1)
9.137326065e-3=0.009137326065
pow(x,2.452427815)=x^2.452427815
exp(x)=e^x
@Grobbeldopp:
Ich habe immer noch nicht verstanden, was Dir an der Funktion
(x^2.452427815 * 0.009137326065)*(0.5-tanh((x-20)/2)/2)+x*x*(tanh((x-20)/2)/2+0.5)/(x+1)
nicht gefällt? Sie erfüllt doch alle Bedingungen.


"Was ändert sich denn, wenn ich das ganze so fasse, dass mich nur die Werte zwischen 1 und 15 interessieren..."
-> na dann kann man die 2. Teilfunktion und die Verbindungs-Teilfunktion weglassen und es beleibt wie auch schon genannt:


x^2.452427815 * 0.009137326065


über.

Kommentar von hypergerd ,

Oder gefällt Dir nur die Verbindungsfunktion tanh nicht -> es gibt zig andere, die nur minimal anders verlaufen...

Kommentar von hypergerd ,

noch genauer und primitiver, die jeder verstehen sollte:

pow(x,3)/(x*x+428.68503235-60.54686124*log(x+2))

=x³/(x*x+428.68503235-60.54686124*log(x+2))
Kommentar von precursor ,

@hypergerd

Ja, mit "durchschwingen" meine ich die Anwesenheit von Extremwerten im Wertebereich der zugrundeliegenden Daten.

Es ist schön, dass deine erste Funktion keine Extremwerte hat, da haben mich meine Augen betrogen ;-))

Kommentar von hypergerd ,

Die letzte ist doch aber nun:

- primitiv genug (nur Grundrechenarten und eine ln(x) )

- ohne Verbindungsfunktion

- für die 3 geg. Stützstellen 10 Nachkommastellen genau

- immer unter oder gleich x

- Ableitung nie negativ und nur minimale Änderung (kein Schwanken, keine Zusatz-Kurven)

- konvergiert gegen x

Braucht noch jemand ein Bild als Beweis, oder fehlt noch was... primitiver bekommt man so viele Randbedingungen in keine Funktion...

Antwort
von precursor, 26

Ich gehe davon aus, dass du willst, dass die Funktion ganz exakt (!!) durch diese Werte hindurch geht.

Das nennt sich Interpolation.


Die Schwierigkeit wird sein eine Interpolationsfunktion /
Interpolationsansatz (es sind nicht nur Polynome möglich !) zu finden,
der zwischen den Wertepaaren, also im Interpolationsintervall, keine
Extremwertstelle hat, also nicht durchschwingt.

Falls alles andere scheitert kannst du es mit der Spline-Interpolation versuchen -->

http://www.arndt-bruenner.de/mathe/scripts/kubspline.htm

(Diese Webseite erfordert möglicherweise die Aktivierung von Javascript oder Java).

Die Splineinterpolation liefert für deine Werte eine glatte Kurve, habe ich selber ausprobiert.

0 | 0

4 | 1

9 | 2

15 | 7

100 | 90

Mit Hilfe der Webseite kannst du auch beliebige andere f(x) bzw. S(x) berechnen lassen.

Das kommt dabei heraus -->

0 | 0.0000

1 | 0.2932

2 | 0.5691

3 | 0.8105

4 | 1.0000

5 | 1.1319

6 | 1.2462

7 | 1.3946

8 | 1.6287

9 | 2.0000

10 | 2.5463

11 | 3.2497

12 | 4.0785

13 | 5.0010

14 | 5.9854

15 | 7.0000

20 | 12.0774

25 | 17.1193

30 | 22.1280

35 | 27.1056

40 | 32.0544

45 | 36.9767

50 | 41.8745

55 | 46.7503

60 | 51.6060

65 | 56.4440

70 | 61.2666

75 | 66.0758

80 | 70.8739

85 | 75.6632

90 | 80.4458

95 | 85.2240

100 | 90.0000

(Auf 4 Stellen nach dem Komma gerundet.)

Du könntest aber immer noch Glück haben und eine einzelne Interpolationsfunktion finden, die also nicht durch stückweise stetige Interpolationspolynome zusammengesetzt ist, aber die Suche wird mühsam sein.

Falls du nicht willst, dass die Funktion ganz exakt durch diese Wertepaare hindurch geht, dann nennt sich das Ausgleichsrechnung bzw. Ausgleichungsrechnung, auch da muss ein erfolgreicher Funktionsansatz erst mal gefunden werden.

Kommentar von Grobbeldopp ,

Das ist sehr interessant, danke. Das ist dann sozusagen "ich bastel mir meine benötigte Kurve zusammen".

Kommentar von precursor ,

Gerne ;-)) !

Kommentar von hypergerd ,

Möglich - ja, aber dieser Algorithmus hat 2 Nachteile:

1. da immer nur 3 Punkte pro Teilbereich, ergibt das bis 100 eine sehr lange Formel (können schnell über 88 Zeichen werden)

2. da kubische Splines für Rundungen und nicht für asymptotische Annäherungen gemacht wurde, gibt es zum Ende hin immer Überschwingungen in Richtung + oder - x hoch höchste Potenz

Kommentar von precursor ,

Ja, das stimmt.

Glücklicherweise hat der Fragesteller geschrieben, dass ihn nur Werte zwischen x = 0 und x = 100 interessieren, und in diesem Bereich liefert die Spline-Interpolierende in diesem vorliegenden Fall gute Ergebnisse.

Was die Länge der Formel betrifft hast du natürlich recht.

Ich habe vor sehr langer Zeit mal in einem Buch gelesen, ich weiß leider nicht mehr welches, dass man als Spline-Funktionen auch was anderes als Polynome verwenden kann, bzw. das mischen kann, so dass man für das Endintervall auch was anderes als ein kubisches Polynom verwenden könnte. Außerdem habe ich gelesen, das es nicht nur Interpolation durch Splines gibt, sondern auch Ausgleichsrechnung durch Splines, ich habe diesbezüglich jedoch noch keine Webseite gefunden, so dass man es sich selber programmieren müsste.

Antwort
von Spongebob1994, 65

Also deine Funktion lautet

F(x)=5/6x

Wie komme ich darauf?

P3 15/7
P2 9/2

P3-P2=> (y2-y1)/(x2-x1)= (15-9)/(7-2)=5/6

Somit ist 5/6 deine Steigung, auch als m bekannt.

Anbei auch die Funktion im Graphen. Von 0-100, was ja interessant für dich ist, kannst du ja eine Wertetabelle machen

Kommentar von Spongebob1994 ,

Die Punkte sind im Übrigen einer liniaren Funktion zugeordnet ;) für eine f(x) höheren Grades bräuchte man andere koordinaten

Kommentar von ETechnikerfx ,

Das kann nicht stimmen. Mit x = 9 bei F(x) ist y = 2. Mit x = 15 ist y = 7. Trage dies einmal in ein Koordinatensystem ein, so wirst du feststellen dass die Funktion nicht eine Gerade ist. Werte kleiner 0 sind nicht erlaubt.

Keine passende Antwort gefunden?

Fragen Sie die Community