Suche nach Kurve ähnlich zu x^n, welche die Vorgabe von Gradienten bei x=0 und x=1 erlaubt
-
Schönen guten Tag,
ich habe ein mathematisches Problem, mit dem ich derzeit nicht weiterkomme und erhoffe mir hier ein paar neue Anregungen zu finden.
Folgende Situation:
Ich suche nach einer Funktion, die in dem Bereich 0 bis 1 einen stetigen Verlauf besitzt und ebenfalls die Funktionswerte 0 bis 1 annimmt. Gleichzeitig möchte ich die Krümmung der Kurve variieren können, weshalb ich zunächst mit y=x^n begonnenhabe. Durch die Variation von n lässt sich y sehr schön für meine Zwecke verformen (Beispiel y=x^(0.1) oder in die andere Richtung y=x^10), aber leider gibt mir die Funktion keine Möglichkeit die Steigung am Anfang (x=0) und am Ende (x=1) der Kurve vorzugeben.Hier nun meine Frage:
Kann mir jemand einen Ansatz für y nennen, welche die Eigenschaften von y=x^n erhält, gleichzeitig aber erlaubt die Steigung dydx1 bei x=0 und dydx2 bei x=1 vorzugeben?Vielen Dank im Voraus.
-
Dein y=x^n hat scheinbar einen Freiheitsgrad - nämlich n - damit wird es schwierig insgesamt vier Bedingungen einzuhalten (y(0) = 0, y(1) = 1, y'(0) = m1, y'(1) = m2). Ich würde dafür ein kubisches Polynom ax3+bx2+cx+d verwenden, dass genau die vier Freiheitsgrade hat, aber ich weiß nicht ob deine Anforderung y=x^n so zwingend notwendig ist und kubische Polynome nicht in Frage kommen. Ggf. kannst Du mal nach Hermite Polynomen schauen, die definieren sich aus zwei zu interpolierenden Punkten und zwei Ableitungen an den gleichen Stellen.
-
Das 'd' brauch man nicht, ist immer 0 wegen f(0) = 0.
Problem ist ggf. auch noch, ob die Funktionendie Funktionswerte 0 bis 1 annimmt
oder die Funktionswerte genau einmal annimmt. Ich vermute letzteres ist gemeint.
-
Hallo,
ja, die Antworten gehen bereits genau in die richtige Richtung. Sicherlich wäre ein polynomialer Ansatz denkbar/sinnvoll. Allerdings möchte ich keine Schwingungen in dem Verlauf, was ja eine Eigenschaft von Polynomen ist...
Leider kann ich keinen Screenshot schicken, wie ich mir den Funktionsverlauf genau vorstelle. Aber in Worten kann ich es wie folgt beschreiben: Ich möchte durch einen Koeffizienten (daher hatte ich "n" bei y=x^n als Steuerparameter gesetzt) beeinflussen wie "schnell" die Kurve von y=0 auf y=1 übergeblendet wird. Mache ich mich hier verständlich? Man sieht ganz gut, was ich meine, wenn man y=x^n für n=0.1 oder n=10 einmal plottet...
Und ja, die Funktionswerte 0 und 1 dürfen nur genau einmal auftreten.
Vielen Dank,.
-
Ich meinte eigentlich, ob die Funktion monoton steigend sein muss. Zumindest in [0,1].
Wie wäre es denn mit einer zusammengesetzen Funktion?
-
Ja, die Funktion soll stetig sein. Angenommen, die Steigungen bei x=0 und x=1 sollten null sein m1=0 und m2=0, dann stelle ich mir eine Art "S" vor, dessen Mittelpunkt/Drehpunkt man zu kleineren oder größeren x-Werten ziehen kann.
-
-
Ist der Post von megaweber angekommen? Es ist nämlich wirklich fraglich ob es nicht einfach reicht, die Ableitungen am Rand festzulegen und per Hand das lineare Gleichungssystem für ein passende Polynom aufzustellen.
Du könntest auch eine quadratische Bézierkurve nehmen und den zweiten Kontrollpunkt entsprechend wegbewegen.
-
Ich habe gerade das Polynom y=a*x^3 + b*x^2 + c*x + d einmal getestet. Das sieht sehr gut aus. Leider habe ich dann aber gar keine Eingriffsmöglichkeiten mehr, wenn alle vier Forderungen erfüllt werden.
Demnach müsste ich wohl ein Polynom mit einer Ordnung mehr verwenden, was dann wiederum gefährdet ist zu schwingen. Das geht aber nicht.
Über Beziers habe ich auch bereits nachgedacht. Habe diese Funktion auch bereits in meinem Programm implementiert. Aber wie würde man denn die beiden Punkte am besten koppeln?
Und wie Präge ich den Bezierkurven die Steigung am Anfang und am Ende auf?
-
Zum Schwingen: Ich glaube, du bildest dir da ein Problem ein, das nicht existiert. Das hast du bei Polynomen hohen Grades, also wenn du durch 15 Punkte eine Kurve interpolieren willst oder sowas. Weißt du, wie der Graph eines Polynoms 4. Grades im Allgemeinen aussieht? So: http://www.wolframalpha.com/input/?i=plot+x^4+-+3x^3+%2B+2x^2+%2B+x+-+1
Also höchstens zwei Minima und dazwischen ein Maximum, oder umgekehrt. Im Prinzip eine Parabel mit einer "Einbuchtung". Wenn du jetzt eine Kurve durch 2 Punkte mit jeweils vorgegebenen Gradienten hast, und daran immer noch drehen willst, dann entspricht das genau dieser Einbuchtung.
-
Du legst bei Bezierkurven die Ableitungen am Rand durch die Wahl der Kontrollpunkte fest. Die Gerade die durch P1 und P2 entspricht der Tangente am linken und die Gerade durch P~n - 1~ und Pn der Tangente am rechten Rand.
Du kannst auch Splineinterpolation mit Hermite-Randbedingungen versuchen. Da kannst du deine Ableitungen festlegen, genau bestimmen wo deine Kurve durchgehen soll und hast keine Schwinger (obwohl die, wie Bashar schon schreibt, auch mit quartischen Polynomen nicht zu erwarten sind).
-
Nachtrag: Was meinst du mit "Punkte koppeln"?
-
Ach, ok - ich habe nun eine Idee - wie ich mit dem Bezierkurven vorgehen könnte. Danke vorerst.