Kurvenanpassen

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.484
Reaktionen
661
Also der THreadtitel passt eigentlich nicht wirklich ( I know guter Einstieg), aber mir fällt nichts bessere ein.

Ich suche ein Programm, wo ich ein Paar Punkte vorgegeben kann und dann eine Funktion/Linie durchlegen kann. Im Prinzip ein Polynom xten Grades. Ich hatte mal gehört, dass es ein Programm gab wo man die Krümmung einfach durch ziehen der Linien bestimmen kann, bzw weitere Punkt eintragen.

Z.b. ich fang mit der Linie A nach B an. Ich tu nen Punkt C drüber es wird zu Parabel. Ich tu einen Punkt D dazu es wird zum Polynom 3. Grades. Ich würde das ganze aber gerne so haben, dass es keinen zusätzlichen Wendpunkt gibt, sondern sich nur die Krümmung ändert.

Wo ichs gerade versucht hab in Paint zu machen. Ich such son bisschen was wie den Bogen. Leider kann ich da nur einen Zusatzpunkt zur Linie reinhauen. Ich möchte gerne noch mehr Punkte haben.


Anhang anzeigen 31725


edit sagt, dass ich nach Spline Interpolation suche, oder?
 
Zuletzt bearbeitet:
Mitglied seit
14.07.2003
Beiträge
3.128
Reaktionen
0
Also ich habe es grade mit open office draw getestet, damit funktioniert das was du beschreibst.

oder hast du die Punkte vorgegeben, und du willst eine Funktion durchfitten?
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.484
Reaktionen
661
Hab die PUnkte vorgegeben und möchte am ENde eine FUnktion haben um die Linie zwischen den Punkten zu malen-
 

mfb

Mitglied seit
18.07.2003
Beiträge
791
Reaktionen
0
Website
diablo3.ingame.de
Ich würde das ganze aber gerne so haben, dass es keinen zusätzlichen Wendpunkt gibt, sondern sich nur die Krümmung ändert.
Was genau soll das heißen?
Ein Polynom 3. Grades hat immer einen Wendepunkt.
Wenn du eine Parabel reinfitten willst: kann jede Tabellenkalkulation.

Splines geben Funktionen, die (üblicherweise) durch alle deine Punkte gehen und dazwischen halbwegs gleichmäßig verlaufen. Falls deine Daten aber etwas Streuung haben, kann auch Unfug herauskommen, oder du musst sie vorher noch glätten.

Mehr Info => bessere Möglichkeit zu helfen
 

ReVenger!

Community-Forum, Organisator ohne Grenzen OT-Turni
Mitglied seit
24.03.2007
Beiträge
3.134
Reaktionen
0
Ich verstehe auch nicht genau, was du machen willst aber meine Empfehlung wäre:
Sieh dir mal SciDavis an. Das ist kostenlos und es dreht sich komplett um Kurvenfits.
Man kann auch einfach viele Parameter vorgeben und dann einen entsprechenden Fit zu erhalten. Fand das Programm zumindest angenehmer zu bedienen als Excel oder ähnliches.
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.484
Reaktionen
661
Ich hab z.B. 3 Punkte.
P1[0,7],P2[10,10],P3[40,2]

Da kann ich eigentlich schon ein Polynom 3. Grades durchlegen. Ich würde nur gerne das der Knick vor x=40 früher kommt und dass das Maximum bei P2 ist.
Das kann ich jetzt z.B. in Maxima berechnen in dem ich die Bedinungen auflöse, aber die Kurve "gefällt" mir dann nicht, weil der Knick zu spät kommt.



Bei Maxima hatte ich z.B. was gefunden wo ich mit cubic splines methode interpolieren kann, aber dann hab ich kein Maximum auf P2 sondern erst dahinter, sonst sähe das eigentlich gut aus.
 

ReVenger!

Community-Forum, Organisator ohne Grenzen OT-Turni
Mitglied seit
24.03.2007
Beiträge
3.134
Reaktionen
0
Okay, das hilft schon mal. Dann bleibe ich dabei: Schau dir SciDavis an.
Da kannst du in deiner Anpassungskurve bestimme parameter festsetzen und somit dann auch das maximum schon entsprechend platzieren.

Einfach mal ein ausgedachtes Beispiel:
Du gibts vor, dass er die Kurve für a, b, c anpassen soll mit der Funktion:
a*x^2+b*x+c

oder du kannst sie nur nach a, b anpassen lassen mit der Funktion:
a*x^2+b*x+4

Mit solchen Sachen solltest du eigentlich dann hinbekommen, was du willst.
Du musst dann eben nur die Variablen gut genug vorgeben.
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.484
Reaktionen
661
ICh schaus mir mal an. Klingt etwas mühsam, wenn ich das 50-60 Mal machen müsste und eigentlich brauch ich am Ende für meinen Webcalculator :)
 
Mitglied seit
21.01.2009
Beiträge
667
Reaktionen
0
die Kurve "gefällt" mir dann nicht, weil der Knick zu spät kommt.

Versuch mal genauer zu definieren, was du damit meinst (mathematisch). Ich nehme mal an, dass du das nicht willkürlich für jede einzelne Kurve durch ziehen mit der Maus machen willst.

Das Maximum kannst du dadurch bestimmen, dass du an der stelle eine Steigung von 0 vorgibst.

Grundsätzlich müsste sich das ganze mit so ziemlich jeder mathematischen Software (z.b. matlab oder scipy) machen lassen. Du musst dich allerdings noch entscheiden, ob du lieber abschnittsweise definierte (-> splines) oder ein durchgängiges Polynom haben willst. Splines sehen meistens besser aus, dafür hast du halt keine durchgehende Funktion.
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.484
Reaktionen
661
Anhang anzeigen 31729

Ja also ich würd schon gerne was automatisiertes haben, weil ich dem ganzen ein paar mehr mathematische BEdingungen mitgeben kann.

Ich hab nen Startwert in 2010 von meinetwegen 7 GT (P1) , dann soll das 2020 peaken auf sagen wir mal 10 GT (P2) und dann langsam runterlaufen bis 2050 auf 2 GT (P3). Jahre und Werte änderbar. Insgesamt soll dabei eigentlihc noch erfüllt werden, dass die Flächer unter des Integrals dazu z.B. = 240 sein soll.

Das fehlt noch als Bedingung in meinem Bild. Ich würde gerne das die Krümmung früher kommt zwischen P2 und P3. Eigentlich habe ich dann schon zu viele Bedingungen für nur 4 PArameter die ich brauche, oder?
 
Mitglied seit
14.07.2003
Beiträge
3.128
Reaktionen
0
du könntest P1,P2 und P3 vorgeben, dann mittels deinen regeln viele Punkte dazwischen synthetisch erzeugen und dann einfach ein polynom xten grades durchfitten. dann kannst du "einfache" Funktionen zwischen P1 und P2 bzw P2 und P3 definieren. also ax^2 + c oder sowas.
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.484
Reaktionen
661
Das hilft mir aber nicht zwingend mit der FLäche unter der Funktion Hatte schon mal eine Seite gesehen, wo sie das Integral mitangeben hatten. Am ehesten brauch ich also was automatisierbares, wo ich die Fläche mit reinbringen kann.
 

mfb

Mitglied seit
18.07.2003
Beiträge
791
Reaktionen
0
Website
diablo3.ingame.de
Um das zu automatisieren musst du all deine Wünsche in mathematische Formeln umwandeln.

Da lässt sich (fast) immer ein Polynom ausreichend großer Ordnung durchlegen, wenn deine Bedingungen nicht zu unrealistisch sind wird das in der Regel auch innerhalb der vorgegebenen Punkte sinnvoll aussehen.
Integral ist auch nur eine weitere lineare Gleichung, die Bedingungen an die Parameter stellt.

Und wieso kennst du die Förderung für 2040 schon heute? ;)
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.484
Reaktionen
661
Jo das hab ich gemacht, aber das Problem ist, dass die Zeichnung am Ende nicht ziwngend so aussieht wie ich möchte, weil die Maxima oder Minima oder Wendepunkte überall sein können.

Meine Bedingungen sind wenn ich nur die 3 Punkte nehmen.
P1(X1,Y1), P2(X2,Y2), P3(X3,Y3).

Dann bräuchte ich zwei kubische Splinefunktionen zwischen den Punkten, ich nenne sie mal S1(X) und S2(X)

S1(X1)=Y1
S1(X2)=Y2
S2(X2)=Y2
S3(X3)=Y3

Das sind die 3 Punkte und S1 und S2 müssen übereinstimmen
Damits schön aussieht sollte Steigung und 2 Ableitung bei S1 udn S2 am 2. Punkt übereinstimmen, daher:

S1'(X2)=S2'(X2)
S1''(X2)=S2''(X2)
Dann noch am Anfang die Bedingungen für die 2 Ableitung der Startpunkt = 0
S1''(X1)=0
S2''(X3)=0

Dann hab ich 8 Bedingungen. Davon müsste ich eine ersetzen mit meiner Fläche
Integral S1 von X1 bis X2 + Integral S2 von X2 bis X3 = Z

Es sieht leider nie wirklich so aus wie ich will, vor allem fehlt mir der Peak an dem Jahr was ich möchte, weil das Maximum davor oder dahinter sein kann usw. Auch mit 4 Punkten wird’s nicht wirklich besser, bzw kanns dann auch wie Sinuswellen ausschauen, wenn ich Pech habe. Wenn ich Polynome 4. Grades nehme um z.B. genau zu sagen wos Maximum ist usw kann ich immer noch andere Maxima und Minima dazwischen haben wo ich sie nicht will.
 

mfb

Mitglied seit
18.07.2003
Beiträge
791
Reaktionen
0
Website
diablo3.ingame.de
Muss die Kurve exakt durch die Punkte gehen?

Du kannst dir eine Funktionsform basteln die alle gewünschte Eigenschaften hat und die dann geeignet skalieren. Aber um eine mathematische Definition von "die Funktion sieht so aus wie ich möchte" wirst du nicht herum kommen.
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.484
Reaktionen
661
naja der Anfangs und der Endpunkt wären schon toll. Wie hoch der Peak ist, ist mir auch fast egal, eher das ich entscheide wann er ist.

SOnst ist mir eher die FLäche unter der FUnktion wichtig, das muss stimmen.

mom ich häng noch mal Beispiel an was ich ok fand, aber wenn ich z.B. die FLäche stark reduziere siehts wesentlich "blöder" aus.

Anhang anzeigen 31730

Anhang anzeigen 31731

Hatte noch gehört, man kann die splines mit Sinus oder COsinus Funktionen berechnen? kennt das wer?

Also ich könnte mir bei den kubischen splines ja ein Ranking der Punkhöhen überlegen, die Punkhöhen sind mir sonst egal, aber das Ranking wär mir wichtig, aber dann kann ich das ja nicht mehr lösen?
 
Zuletzt bearbeitet:

mfb

Mitglied seit
18.07.2003
Beiträge
791
Reaktionen
0
Website
diablo3.ingame.de
Hatte noch gehört, man kann die splines mit Sinus oder COsinus Funktionen berechnen? kennt das wer?
Nimmt man eben A*sin(Bt+C) als Funktion. Hat dann aber nur drei Freiheitsgrade.

Kannst du nun bitte mal all deine Wünsche als klare Liste formulieren?
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.484
Reaktionen
661
Ok dan noch mal.

Ich hab ein Budget X von z.B: 200 GT / CO2 über den Zeitraum 2010-2050.
Ich kenne den Verbrauch in 2010, also P1(2010, 7 GT).
Ich gebe vor, dass der Verbrauch in 2020 peaken soll.
Danach bis 2050 langsam runter gehen soll auf z.B 2. GT.
Die FLäche unter dem Verlauf der Kurve soll gleich X sein.

Der Verlauf der Kurve soll in etwa so aussehen wie bei Beispiel eins in Post #16.


Problem ist dass ich das ganze wahrscheinlich 60 mal machen möchte und sich X stark ändern kann, dass das eventuell mit dem Peak nicht immer klappt. Der Defintionsbereich nur postive sein sollte und ich keine weiteren Knicke zwischen den Punkten haben möchte. z.B. kann sein, dass der Peak statt 2020 eher 2030 sein sollte.
 
Zuletzt bearbeitet:

FORYOUITERRA

TROLL
Mitglied seit
22.07.2002
Beiträge
4.498
Reaktionen
371
Website
www.frauentag.de
warum nicht einfach ne batemanfunktion dafür nehmen? noch nie alkohol getrunken?

die fläche unter der funktion über dem kompakten intervall ist im übrigen total irrelevant, da du die mit einer normierung immer anpassen kannst.
 
Zuletzt bearbeitet:

mfb

Mitglied seit
18.07.2003
Beiträge
791
Reaktionen
0
Website
diablo3.ingame.de
Beliebig normieren geht nicht, da wir den Startwert vorgegeben haben.

In Jahren nach 2010, wobei F die Stammfunktion ist:

F(40)-F(0)=g
f(0)=7 (Beispiel)
f'(10)=0 (ggf. verschiebbar)
f''(c)=0 für genau ein c zwischen ~10 und ~40.

Batemanfunktion ist schon ein interessanter Ansatz, wir müssen sie aber noch verschieben damit wir über 0 anfangen. Effektiv sind dadurch beide Vorfaktoren frei, und dann wird es kompliziert.

Vorschlag: a(x+c)/(x^2+b)

Tatsächlich minimieren würde ich irgendwas im Stil von (f(0)-7)^2 + (f'(10))^2 + 0.01*(F(40)-F(0)-g)^2 wobei der Vorfaktor 0.01 berücksichtigt, dass die Abweichungen beim Integral eher größer sind. Kann man beliebig tunen.
Gibt für ein beispielhaftes Integral von 200 dann die Parameter a=64, b=222, c=24.5 als gute Näherung.

Alternativ auch a(x+c)/(x^4+b), das schiebt den Peak bei gleichem Integral leichter nach hinten, führt dann aber entsprechend zu einem niedrigeren Endwert.
a=23200, b=27700, c=8
 
Zuletzt bearbeitet:

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.484
Reaktionen
661
Danke noch mal für die Vorschläge.

Jetzt das von mfb, das heisst du minimierst numerisch, in welchem Programm? An sich sieht es mit den von dir vorgeschlagenen Werten recht gut aus.

Müsste die Rechnung noch auf eine Webseite übertragen können.

Batemanfunktion muss ich mir noch mal anschauen.
 
Zuletzt bearbeitet:

FORYOUITERRA

TROLL
Mitglied seit
22.07.2002
Beiträge
4.498
Reaktionen
371
Website
www.frauentag.de
das maximierungsproblem von mfb ist natürlich eine möglichkeit, auch wenn ich die abweichung von sämtlichen bedingungen bestrafen würde und nicht nur den flächeninhalt.

bateman hätte halt ne ziemlich gute interpretation in dem zusammenhang, die sich ziemlich gut verkaufen ließe...auf sowas fahren leute einfach ab.

alternativer ansatz, den ich zuerst ausprobiert hätte:
nimm die dichtefunktion einer beta(a,b) verteilten zufallsvariable (obda auf [0,1]). die ist linksschief für 1<a,b mit a<b. der modus ist normalerweise bei (a-1)/(a+b-2).
problem sind die randbedingungen:

allerdings sollte für die parameterkonstellation f(0) = 0 = f(1) gelten, was die bestimmung der randpunkte leichtmacht:

die idee wäre dann statt f die funktion
g(x) = f(x) + c*x + c_0
zu betrachten,
wobei c_0 = g(0) die linke randbedingung ist
und c so gewählt wird, dass
g(1) = c+c_0 = c_1 der rechten randbedingunge entspricht.

es sollten sich nun leicht parameter konstellationen von a und b finden lassen, so dass dein vorgegebener wert x* die funktion g(x) maximiert. (tatsächlich bin ich der meinung, dass man einen der beiden parameter sogar direkt festhalten könnte, was das problem nochmals vereinfacht. (ich würde und habe beim austesten c_0 auf 1 gesetzt und dann den endbestand c_1 entsprechend relativ von c_0 intepretieren...das sollte hier garantieren, dass x* in [0,1] ist. alternativ müsste man ohne diese normierung wohl d*f(x) statt f(x) anschauen.)


----------------------------------------------------------
allerdings bleibt das zusätzliche problem mit dem flächeninhalt.

Eine Stammfunktion von g(x) ist
G(x) = F(x) +1/2 c*x^2 + c_0 *x + d
die Fläche ist dann G(1)-G(0) = F(1)-F(0) + 1/2*c (1-0) + c_0*(1-0) = 1 + 0.5c + c_0
= 1+0.5*(c_1-c_0) + c_0

da c_1 und c_0 fest ist, hast du da ein problem. Meine Idee wäre dann einfach statt g(x) für eine konstante e die funktion e*g(x) anzuschauen.
der extremwert x* sollte identisch sein (??) und alle probleme wären gelöst (vermutlich ist es aber auch besser einfach f(x) in g(x) durch e*f(x) für eine passende konstante e zu ersetzen...).

(per pn schick ich dir meinen namen, damit ich mit aufs paper komme :[)
 
Zuletzt bearbeitet:

mfb

Mitglied seit
18.07.2003
Beiträge
791
Reaktionen
0
Website
diablo3.ingame.de
Jetzt das von mfb, das heisst du minimierst numerisch, in welchem Programm? An sich sieht es mit den von dir vorgeschlagenen Werten recht gut aus.
Die Ableitungen sahen zu hässlich aus für analytische Lösungen und die gibt es ggf. auch nicht immer.
Die genannten Werte habe ich mit dem Excel-Solver bekommen.

@FORYOUITERRA: Ich bestrafe alle Änderungen, aber ohne Vorfaktor hat der Flächeninhalt ein viel zu großes Gewicht weil seine Zahlenwerte größer sind. Man könnte sich auch ein relatives Kriterium überlegen.
 

FORYOUITERRA

TROLL
Mitglied seit
22.07.2002
Beiträge
4.498
Reaktionen
371
Website
www.frauentag.de
tatsache, lässt sich natürlich so interpretieren. beim lesen hatte ich es als standard ausgleichsreichnung mit nebenbedingung interpretiert. so formuliert wäre dann halt nur die letzte bedingung als nebenbedingung aufgetaucht. sprich als ein solches optimierungsproblem:
minimiere über alle funktionen f:
(f(0)-c_o)^2 + (f(1) -c1)^2
unter den nebenbedingungen
f'(x*) = 0
f'(x) != 0 für x != X*
f''(x*)<0
und F(1)-F(0) = G.
-----------------------------------------

defakto kannst du das problem auch ganz einfach als warping problem auffassen:
dafür nimmst du eine eingipflige funktion, beispielsweise
f(x) = -(2*x-1)^2+2 auf dem intervall [0,b] mit b <= (sqrt(2)+1)/2]. Das intervall schneidest du nach gusto (=wahl von c_1) ab.

1. f(x) hat ein maximum an der stelle 0.5
2. gesucht ist eine warping funktion g(x), so dass das g(x*) = 0.5 ist (triviales time warping: lineare interpolation, d.h. g ist stückweise linear durch die punkte (0,0),(x*,0.5),(b,b))
3. profit: für warped(x) = f(g(x)) gilt warped(0) = c_0 =1, warped(b) = c_1 , warped(x*) = max_x warped(x).


es gibt natürlich unendlich viele warping funktionen g die zum ziel führen.

problem was übrig bleibt ist deine flächeninhaltsbedingung, also
integral_0^b f(g(x)) dx = G...
die zieht tatsächlich bisschen mehr bedingungen an f nach sich.

ich würde mir darüber allerdings absolut null gedanken machen und einfach alles in einen optimierungsalgorithmus reinhauen.
 
Zuletzt bearbeitet:

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.484
Reaktionen
661
Äh das muss ich mir die Tage noch mal genauer durchlesen. Ich bin jetzt eigentlich am besten mit mfbs Variante gefahren. Hat bisschen gedauert bis ichs gecheckt habe wie man das Programmieren kann in Maxima. Hab jetzt nen Optimierungsprogramm gefunden mit constraints in > < . Dann die least sqaures Bedingungen aufgestellt und optimiert. Ist die Frage ob ich das übertragen kann für die Webapplikation.

Paper wirds wohl nicht werden, aber vielleicht kann ich ne Fußnote "thx to mfb and FORYOUITERRA einschmugglen " °°
 
Oben