Partner von azubiworld.com - Logo
 
Mathematik online lernen im Mathe-Forum. Nachhilfe online
Startseite » Forum » Einschränkung von Funktionsparametern

Einschränkung von Funktionsparametern

Universität / Fachhochschule

Funktionen

Tags: Funktion 3. Grades

 
Antworten Neue Frage stellen Im Forum suchen
Neue Frage
Brokkoli3000

Brokkoli3000 aktiv_icon

13:57 Uhr, 12.08.2017

Antworten
Hallo Forum,

ich habe ein mathematisches Problem, das eng mit der Informatik zusammenhängt. Ich möchte eine Perlin Noise-Funktion aufstellen. Bei dieser geht es darum, eine Funktion zu finden, die durch zwei Punkte auf der X-Achse mit zwei vorgegebenen Steigungen geht. Der erste Punkt liegt im Ursprung, der andere im Abstand s auf der positiven X-Achse. Für beide Punkte sind die Steigungen m1 und m2 gegeben.
Ich habe bereits ein Polynom dritten Grades gefunden, das genau zu diesen Anforderungen passt. In dem Programm, dass dieses Konzept verwendet, sollen jetzt aber die Steigungen zufällig festgelegt werden, sodass ein zufälliges Terrain zwischen den beiden Punkten entsteht. Für dieses Terrain möchte ich aber als Input nicht die Steigungen der Punkte, sondern die maximale Amplitude der Funktion festlegen können.
Beispielsweise weiß ich, dass der Ausschlag des Polynoms zwischen den beiden Punkten maximal 50 betragen darf. Wie komme ich dann darauf, welchen "Definitionsbereich" die beiden Steigungen haben, also zwischen welchem Minimum und Maximum ich sie wählen darf?

Noch eine Anmerkung: Die Steigungen müssen prinzipiell komplett unabhängig festgelegt werden. Man darf also nicht die eine Steigung komplett zufällig festlegen und dann die andere eben so, dass die Funktion die Maximal-Amplitude einhält. Es muss ein von s und amax abhängiger Wert gefunden werden, der den maximalen Betrag der beiden Steigungen festlegt.

Sorry für so viel Text und danke für jede Hilfe! :-)

Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert):
"Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen."
Antwort
Roman-22

Roman-22

16:33 Uhr, 12.08.2017

Antworten
> Es muss ein von s und amax abhängiger Wert gefunden werden, der den maximalen Betrag der beiden Steigungen festlegt.

Was soll denn amax genau sein? Wirklich der höchste Punkt der Kubik zwischen den beiden gegebenen? Oder ev. auch der tiefste? Und was macht dich so sicher, dass es bloß einen Maximalwert für jede der beiden Anstiege gibt, der die Grenze bildet? Da gibts vl mehrere Bereiche, etc.
Du musst wohl definieren, was genau du als "Amplitude" bezeichnen möchtest. Soll das wirklich vom gewählten Koordinatensystem abhängig sein?

Ansonsten kannst du ja mal mit allgemeinem s und m1 und m2 die Kubik aufstellen, ableiten und die Extremwerte ermitteln. Deren y-Koordinaten werden dann von s und mi abhängig sein. Möglicherweise siehts du dann schon Begrenzungen für deine mi.
Aufpassen musst du dabei nur, ob der Extremwert auch wirklich zwischen deinen beiden Punkten liegt, seine x-Koordinate sich also in [0;s] befindet. Denn ansonsten ist er für deine Zwecke ja irrelevant.

Als kleine Starthilfe im Anhang die beiden Extremstellen und deren Funktionswerte. Beides in Abhängigkeit von s,m1 und m2. Wobei s ja vermutlich egal ist, das ist nur ein Skalierungsfaktor.
Viel Spaß damit ;-)


Bild
Brokkoli3000

Brokkoli3000 aktiv_icon

17:41 Uhr, 13.08.2017

Antworten
Danke für die Antwort!

Die Amplitude habe ich mir als das Maximum des Ausschlags der Funktion zwischen den beiden Punkten vorgestellt. Also wenn beide Extrema darin liegen, deren betragsmäßig größte Y-Koordinate.

Ja das mit dem ableiten und mit 0 gleichsetzen hatte ich so auch schon gemacht, aber leider kann ich aus den Funktionswerten, die du ja auch geschrieben hast, praktisch gar nichts anfangen... :-D) Ich wüsste nicht, wie ich hieraus Einschränkungen für meine Steigungen ablesen sollte.

Ich war auf jeden Fall leicht stutzig, als ich bemerkt habe, dass die beiden Steigungen wegen unterschiedlichen Vorfaktoren unterschiedlichen Einfluss auf die Amplitude zu haben scheinen. Meine Vermutung war, dass das daran liegt, dass der Definitionsbereich nicht symmetrisch zum Ursprung ist (Abstände der beiden Punkte zum Ursprung sind verschieden). Habe deswegen die Funktion um s2 nach links verschoben; danach gibt es keine asymmetrischen Vorfaktoren mehr... Aber aus dem Term für die Amplitude bin ich auch nicht schlauer geworden als aus deinem hier geposteten... :-D)
Antwort
Roman-22

Roman-22

18:04 Uhr, 13.08.2017

Antworten
> Die Amplitude habe ich mir als das Maximum --- der Funktion zwischen den beiden Punkten vorgestellt.
Da du das KS ja den beiden Punkten angepasst hast, macht das vermutlich auch Sinn. Problematisch wie schon geschrieben die Unterscheidung, ob ein Extremwert zwischen den beiden Punkten liegt, oder nicht. Bei deiner Aufstellung gibts ja immer zwei Extremwerte, von denen mindestens einer auch zwischen den beiden Punkten liegt.

> Ich wüsste nicht, wie ich hieraus Einschränkungen für meine Steigungen ablesen sollte.
Ich auch nicht. Wollte dir das Ergebnis meines Programms aber nicht vorenthalten ;-)

> Ich war auf jeden Fall leicht stutzig, als ich bemerkt habe, dass die beiden Steigungen wegen unterschiedlichen Vorfaktoren unterschiedlichen Einfluss auf die Amplitude zu haben scheinen.
Das glaube ich nicht. Die Aufgabe müsste symmetrisch bzgl m1 und -m2 sein.

> Meine Vermutung war, dass das daran liegt, dass der Definitionsbereich nicht symmetrisch zum Ursprung ist (
Nein, mit der Lage der Punkte bzgl. des Ursprungs kann das nichts zu tun haben. Wenn du die Punkte gleichzeitig nach rechts oder links schiebst, ändert sich ja nichts an der Form der kubischen Parabel.

> Habe deswegen die Funktion um s2 nach links verschoben; danach gibt es keine asymmetrischen Vorfaktoren mehr...
Das mag rechentechnisch vielleicht Vorteile haben, aber am eigentlichen Ergebnis sollte das nichts ändern.


Ich bin mir nicht sicher, obs für deine Aufgabe eine Lösung geben wird. Natürlich gibts für jedes m1 einen Bereich für m2, sodass das Maximum nicht größer wird als ein vorgegebener Wert. Aber Grenzen, die unabhängig voneinander sind ...?
Naja, nehmen wir den Fall signum(m_1) signum(m_2). Dann liegt ja nur ein Extremwert zwischen den beiden Punkten. Jetzt könntest du den symmetrischen Fall |m1|=|m2| betrachten und herausfinden, für welchen Anstiegswert m dieses Extremum genau den a_max liefert. Dann hast du mit |m1|m und |m2|m Grenzen wie gewünscht gefunden. Allerdings ist m2 jetzt insofern doch wieder von m1 abhängig, weil ja die Vorzeichen der beiden Anstiege verschieden sein müssen.
für m1(0;m] und m2[-m;0) solltest du aber hinkommen.
Ähnliches könnte man sich vl für vorzeichengleiche Anstiege überlegen.



Kannst du bezüglich der Anstiege m1 und m2 irgendwelche Aussagen machen, oder sind die grundsätzlich beide beliebig in ganz zu wählen?
Brokkoli3000

Brokkoli3000 aktiv_icon

12:32 Uhr, 15.08.2017

Antworten
Noch mal dankesehr für die Hilfe! :-)

> Ich auch nicht. Wollte dir das Ergebnis meines Programms aber nicht vorenthalten ;-)
:'D

Hm ja die Gedanken kann ich nachvollziehen. Für das ganze spätere Programm ist dieses Problem aber eigentlich noch ein bisschen komplexer: Genau genommen werden n + 1 Punkte mit Abstand s auf der X-Achse verteilt und jeder bekommt eine Steigung zugewiesen. Jetzt sucht man in jedem Intervall zwischen zwei benachbarten Punkten einen passenden Funktionsterm.
Das macht es deswegen schwieriger, weil die maximale Amplitude eigentlich für ALLE Funktionen gilt. Also a_max bezeichnet jetzt nicht mehr den Ausschlag einer einzigen Funktion, sondern den maximalen Ausschlag aller n Teilfunktionen. Dabei muss man zusätzlich leider davon ausgehen, dass die beiden Steigungen an den äußersten Punkten vorgegeben, also nicht beliebig wählbar sind.
Wenn ich zum Beispiel im Voraus allen "inneren" Punkten ein zufälliges Vorzeichen für die Steigung zuweise, kann ich wie von dir beschrieben, z.B. für das erste und letzte Intervall jeweils die maximale Steigung und dann einen zufälligen Funktionsterm herleiten. So kann man immer weitergehen, bis in der Mitte nur noch ein bzw. zwei Intervalle übrig bleiben. Und die müssen jetzt eigentlich genau zusammen- und zur maximalen Amplitude passen, aber das lässt sich dann wohl nicht mehr gewährleisten...

Vielleicht sollte man sich eher nach einem anderen Funktionsterm umschauen. Vielleicht wäre ja ein Polynom vierten Grades praktikabler. Oder eine ganz andere Funktion. Grundsätzlich geht es ja einfach darum, eine stetige zufällige Funktion zu finden, die durch diese n + 1 gleich weit entfernten Punkte auf der X-Achse geht. Und Sinus und Cosinus scheiden praktisch aus, weil sie am Computer zu viel Leistung verbrauchen... :-D)
Antwort
Roman-22

Roman-22

13:44 Uhr, 15.08.2017

Antworten
Na, wenns nur stetig sein soll, dann kannst du ja einfach die Spitzen abschneiden.
"Wenn y-Wert>max, dann y-Wert=max".
Das Problem scheint mir da aber eher die "Zufälligkeit" zu sein.
Warum sollten Sinus und Kosinus zu rechenintensiv sein? Werd doch auch nur mit Potenzreihen, also auch nur Polynomen, erledigt und außerdem könnte man mit flotten vorberechneten lookup tables arbeiten.

Wenn die Steigung im ersten Punkt vorgegeben ist, dann muss aber zwangsläufig die Steigung im zweiten Punkt von dieser abhängig sein. Genau das, was du aber vermeiden wolltest.
Brokkoli3000

Brokkoli3000 aktiv_icon

14:25 Uhr, 15.08.2017

Antworten
Hups wie peinlich, ich meinte natürlich differenzierbar :-D)

Hm ja so ne Lookup Table wäre wahrscheinlich einigermaßen effizient... Würde ich aber trotzdem eher vermeiden... Keine Ahnung... :'D

> Wenn die Steigung im ersten Punkt vorgegeben ist, dann muss aber zwangsläufig die Steigung im zweiten Punkt von dieser abhängig sein. Genau das, was du aber vermeiden wolltest.

Ja da hast du Recht. Das ist mir auch erst bei meinem letzten Post eingefallen... Eigentlich sollten die inneren Steigungen doch komplett unabhängig von den beiden äußeren sein.
Mal ein Beispiel: Man hat nur zwei Teilintervalle und legt jetzt in der Mitte ein zufälliges Vorzeichen für die Steigung fest. Jetzt lässt sich für das linke Teilintervall ein erlaubter Bereich für die Steigung errechnen und für das rechte auch. Der insgesamt erlaubte Bereich ist dann eben die Schnittmenge von den beiden Teilbereichen.
Aber wenn man jetzt mehr Teilintervalle hat, wüsste ich nicht mehr, wie man mit demselben Konzept vorgehen könnte... Und außerdem ist ja dann eben wirklich wieder eine Abhängigkeit da...

Vielleicht sollte man es ganz anders machen: Vielleicht sollte man einen weiteren Funktionsparameter einbauen. Dann werden zuerst komplett unabhängig die Steigungen festgelegt. Und dann wird der zusätzliche Parameter zufällig so gewählt, dass die maximale Amplitude passt.
Antwort
Roman-22

Roman-22

16:22 Uhr, 15.08.2017

Antworten
Vielleicht wäre folgende Vorgangsweise praktikabel.

erstes linkes Intervall: vorgegeben ist m1.
Bestimme den Bereich, in dem sich m2 bewegen darf, sagen wir [-a;b]

letztes Intervall analog, wir bestimmen für m1 den erlaubten Bereich [-c;d].

Der Durchschnitt dieser beiden Intervalle sei nun [-e;f]. Das ist aber noch nicht die Lösung, denn da bekämen wir Probleme mit zu großen Amplituden, wenn die vorgegebenen Anstiege sehr klein sind.
Also müssen wir diese Durchschnittsintervall weiter beschränken. Seien die gegebenen Steigungen m1 und m2.

Jetzt gehts um Fallunterscheidungen. Ist mi>0, dann müssen wir die obere Intervallsgrenze mit min(f,mi) berechnen.
Ist mi<0, dann ist die untere Intervallgrenze max(-e,mi).

Das sollte, glaube ich mal auf die Schnelle, das gewünschte leisten, auch wenn bei ungünstigen Steigungsvorgaben das sich ergebende Intervall sehr klein ausfallen kann.
Brokkoli3000

Brokkoli3000 aktiv_icon

16:40 Uhr, 15.08.2017

Antworten
Hm sorry das habe ich jetzt nicht ganz verstanden...

> Der Durchschnitt dieser beiden Intervalle sei nun [-e;f].
Was ist hier mit dem Durchschnitt gemeint? Die Schnittmenge von [-a; b] und [-c; d]?

> denn da bekämen wir Probleme mit zu großen Amplituden, wenn die vorgegebenen Anstiege sehr klein sind
Was meinst du damit...?
Antwort
Roman-22

Roman-22

17:19 Uhr, 15.08.2017

Antworten
Nehmen wir, für das erste Intervall ergibt sich, dass m2 aus [-2,3; 4,1] zu wählen ist, damit der Betrag des Maximums zwischen den ersten beiden Punkten den vorgegebenen Höchstwert nicht überschreitet. Das habe ich mit [-a;b] bezeichnet. -a mit a>0 deshalb, um deutlich zu machen, dass es sich idR um einen negativen Wert handeln wird.

Bei den letzten beiden Punkten könnte sich einstellen, dass m1 aus [-1,5; 5,3] wählbar ist.

Damit wäre der Durchschnitt das Intervall [-1,5; 4,1]

Wenn nun der vorgegeben Anstieg ganz links 3,5 ist und der ganz rechts -2,5, so sollte jeder der mittleren Anstiege im Bereich [-1,5; 3,5] wählbar sein.
Ist noch nicht ganz durchgedacht - möglicherweise muss man die Vorzeichen der Anstiege noch detaillierter unterscheiden.
Frage beantwortet
Brokkoli3000

Brokkoli3000 aktiv_icon

18:51 Uhr, 18.08.2017

Antworten
So, ich habe jetzt eine ganz andere Möglichkeit gefunden.

Bei der Anwendung ging es ja darum zufälliges, Terrain zu generieren. Und ich habe das jetzt so gelöst: Anfangs existiert ein einziges Polynom zwischen zwei Punkten mit zwei Steigungen. Jetzt wird dieses Intervall in n kleinere Intervalle zerlegt. Für jeden der Grenzpunkte werden Höhe und Steigung des Polynoms bestimmt. Jetzt können auf diese ermittelten Werte je nach gewünschtem Terrain zusätzliche Zahlen addiert werden. Die entstehenden Punkte bilden die neuen Aufhängungspunke. Es wird also das alte Polynom verworfen und n neue Polynome zwischen den Punkten gebildet.
So hat man das Terrain also von einem groben Basis-Profil "verfeinert". Das kann man solange wiederholen, bis man das geeignete Terrain gefunden hat.

Danke für die Hilfe! :-D)