Suche bestimmte Funktion

Hallo Mathe-Genies, ich suche eine bestimmte „quadratische“ Funktion: Es gibt zwei Parameter a und b. Sagen wir a=20000.

Fall 1: Wenn b<a gilt, dann soll ein Wert zurückgegeben werden, der sich relativ zur Entfernung von b und a schneller vergrößert. Beispiel: b=19950 => zurückgegebener Wert: 19950x1.0001 = 19952.

Fall 2: Wenn b>a gilt, dann soll ein Wert zurückgegeben werden, der mit 1.00005 multipliziert wurde. Beispiel: b=20050 => zurückgegebener Wert: 20050x1.00005 = 20051.

Wie ist der zweite „Multiplikator“ in Fall 1? Wie bestimmt man den?

Mein Ansatz wäre (hier anstatt 20000 200 und anstatt 1.0001 1.1):

    public static double f(double a, double b) {
        double d = (a - b) / 2.0 * 1.1;
        if (d < 1.1) {
            return b + 1.1;
        }
        return b + d;
    }

for (int i = 190; i <= 200; i++) {
    System.out.println(i + " " + f(200, i) + " Delta: " + (f(200, i) - i));
}
190 195.5 Delta: 5.5
191 195.95 Delta: 4.949999999999989
192 196.4 Delta: 4.400000000000006
193 196.85 Delta: 3.8499999999999943
194 197.3 Delta: 3.3000000000000114
195 197.75 Delta: 2.75
196 198.2 Delta: 2.1999999999999886
197 198.65 Delta: 1.6500000000000057
198 199.1 Delta: 1.0999999999999943
199 200.1 Delta: 1.0999999999999943
200 201.1 Delta: 1.0999999999999943

Das (insbesondere das if (d < 1.1) {) ist aber einfach geraten. :frowning:

Ich hab’s… Die Lösung ist eigentlich denkbar einfach:

    public static double f(double a, double b) {
        if (a < b) {
            return b + (b - a + 8.0) / 8.0;
        }
        return b + (a - b + 8.0) / 8.0;
    }

for (int i = (int) (20000 * (1.0 - 0.0015)); i <= 20030; i++) {
    System.out.println(i + " " + f(20000, i) + " Delta: " + (f(20000, i) - i));
}
19970 19974.75 Delta: 4.75
19971 19975.625 Delta: 4.625
19972 19976.5 Delta: 4.5
19973 19977.375 Delta: 4.375
19974 19978.25 Delta: 4.25
19975 19979.125 Delta: 4.125
19976 19980.0 Delta: 4.0
19977 19980.875 Delta: 3.875
19978 19981.75 Delta: 3.75
19979 19982.625 Delta: 3.625
19980 19983.5 Delta: 3.5
19981 19984.375 Delta: 3.375
19982 19985.25 Delta: 3.25
19983 19986.125 Delta: 3.125
19984 19987.0 Delta: 3.0
19985 19987.875 Delta: 2.875
19986 19988.75 Delta: 2.75
19987 19989.625 Delta: 2.625
19988 19990.5 Delta: 2.5
19989 19991.375 Delta: 2.375
19990 19992.25 Delta: 2.25
19991 19993.125 Delta: 2.125
19992 19994.0 Delta: 2.0
19993 19994.875 Delta: 1.875
19994 19995.75 Delta: 1.75
19995 19996.625 Delta: 1.625
19996 19997.5 Delta: 1.5
19997 19998.375 Delta: 1.375
19998 19999.25 Delta: 1.25
19999 20000.125 Delta: 1.125
20000 20001.0 Delta: 1.0
20001 20002.125 Delta: 1.125
20002 20003.25 Delta: 1.25
20003 20004.375 Delta: 1.375
20004 20005.5 Delta: 1.5
20005 20006.625 Delta: 1.625
20006 20007.75 Delta: 1.75
20007 20008.875 Delta: 1.875
20008 20010.0 Delta: 2.0
20009 20011.125 Delta: 2.125
20010 20012.25 Delta: 2.25
20011 20013.375 Delta: 2.375
20012 20014.5 Delta: 2.5
20013 20015.625 Delta: 2.625
20014 20016.75 Delta: 2.75
20015 20017.875 Delta: 2.875
20016 20019.0 Delta: 3.0
20017 20020.125 Delta: 3.125
20018 20021.25 Delta: 3.25
20019 20022.375 Delta: 3.375
20020 20023.5 Delta: 3.5
20021 20024.625 Delta: 3.625
20022 20025.75 Delta: 3.75
20023 20026.875 Delta: 3.875
20024 20028.0 Delta: 4.0
20025 20029.125 Delta: 4.125
20026 20030.25 Delta: 4.25
20027 20031.375 Delta: 4.375
20028 20032.5 Delta: 4.5
20029 20033.625 Delta: 4.625
20030 20034.75 Delta: 4.75

Oder habe ich noch etwas nicht bemerkt?

Ich weiss nicht, wie da jemand etwas zu sagen soll. Die ganze Beschreibung ist mehr verwirrend als sonst irgendwas …

So suchst Du z.B. nach einer quadratischen Funktion? Nur da ist ja nichts quadratisch sondern da wird etwas linear ausgedrückt.

Die Methode selbst kannst Du aber auch einfach ohne if abbilden und einfach Math.abs(a-b) nehmen.

Und ich sehe daher auch nicht, dass sich der Wert bei größerem Abstand schneller verändert:
Wenn die Werte gleich sind, wird ein Delta von 1 ausgeben.
Abstand 8 → Delta von 2
Abstand 16 → Delta von 3
Abstand 24 → Delta von 4
Also klar erkennbar ist dies eine lineare Methode - mit Steigung von 8 bzw 1/8 je nachdem, was auf x und y Achse eingetragen wird.

Es kann sehr gut sein, dass dies die Methode ist, die Du haben willst / brauchst … aber ich denke, dass uns einfach zu viele Informationen fehlen um da etwas beitragen zu können.

Ich verstehe deine Antwort leider nicht genau, kannst du das nochmal auf Nicht-Chinesisch ausdrücken?

Ja ich suche eine quadratische Funktion, je nach Entfernung der beiden Parameter sollen sich beide unterschiedlich schnell annähern. Ich weiß nicht, was daran missverständlich sein könnte?

Falls du es nicht kannst, ist es auch nicht schlimm, nicht zu antworten…

Hier ein Plot

Also in ganz einfachen Worten, die Du (Tobias nehme ich an, oder? Die Art und Weise kommt mir so bekannt vor…) vielleicht verstehen kannst:
Wenn Du eine quadratische Funktion suchst, dann ist Deine Lösung so schlicht falsch, da Du eine rein lineare Methode hast.

Zur Erläuterung:

Da siehst Du, wie eine quadratische Funktion aussieht (graphisch, kann man gut erkennen. Steigung bei x=0 ist 0 und die Steigung wird immer größer je größer der absolute Wert von x wird.

Und bei Deinem Link siehst Du sehr gut, dass die Funktion, die Du dort verwendest, eine lineare Funktion ist: Die graphische Darstellung entspricht zwei Linien, die von einem Punkt aus nach Rechts oben bzw. Links oben gehen.

Und da Du zu wenig Informationen gibst, was Du genau für eine Funktion für was genau suchst, kann ich Da leider nicht sagen, was Du suchst.

Wenn der Abstand quadratisch steigen soll, dann kann es ein einfaches f(a,b) = (a-b)^2 sein. Aber eine Quadratische Gleichung hat die Form ax^2 + bx + c und wenn Du x durch deine Differenz bzw. den absoluten Wert deiner Differenz ersetzt, dann kannst Du noch beliebige Werte für a, b und c annehmen.

Du hast eine Frage, ich verschwende meine Zeit um Dir zu helfen (ja, darauf läuft es derzeit hinaus) und dann kommen vor allem Angriffe von Dir. Das meinte ich mit Art und Weise.

Und ja, quadratische Funktion meint ein Polynom zweiten Grades oder eine ganzrationale Funktion zweiten Grades.

Und wenn du jetzt nach ‚Die Kurve soll anfangs quadratisch wachsen, dann linear verlaufen (langsam, stetig wachsen). Außerdem soll kein Sprung oder Knick enthalten sein.‘ suchst, dann suchst du nicht:

  • das, was du derzeit als Lösung hast (da kein quadratisches Wachstum und Funktion ist nicht stetig (hat ein ‚Knick‘ wie du gesagt hast)
  • ist nicht eine ‚Quadratische Funktion‘, denn die erfüllt ja nicht den zweiten Teil.

Aber da Alternativen zu bringen erspare ich mir, denn die Anforderungen sind noch viel zu schwammig. Diese Anforderung könnte man z.B umsetzen mit einer Methode, wie f(x)=x*x für x<= c
Und für x>c hat man dann eine Gerade welche die Steigung hat wie das x*x an dieser Stelle und f(c) ergibt bei beiden Berechnungen den gleichen Wert.
→ eine Funktion die erst quadratisch ist und ab einem Wert linear und die durchgehend definiert und stetig ist (= keine Sprünge und Knicke)

Das kann man gerne fachlich vertiefen, aber bitte konzentriere Dich dann auf die Aufgabe. Ansonsten können wir es einfach sein lassen.

Warum ist der zweite Ausgabewert auf einmal kleiner als der vorherige?

        double d = 19965;
        for (int i = 19970; i < 20030; i++) {
            System.out.println("i = " + i);
            System.out.println(
                    (1.0 + (i - d) * 0.000025)
                            * (1.0 + 0.000025)
                            * i);
            d = (1.0 + (i - d) * 0.000025)
                    * (1.0 + 0.000025)
                    * i;
        }

Du setzt d ja immer wieder auf den berechneten Wert.

Beim ersten Durchgang ist die Differenz i - d = 19970 - 19965 = 5
Beim zweiten Durchgang ist i - d = 19971 - 19972.99556240… = -1.99556240… und damit wird von den 19971 sogar etwas abgezogen und es kommt 19970.029… raus.

Und natürlich kommt noch der Faktor hinzu, dass die Schrittweite bei i (die ist 1) geringer ist, als die Veränderung durch die Gleichung.

Und ja, jetzt hast Du eine Quadratische Gleichung - wenn Du deine Formel etwas ausklammerst, dann erhältst Du unter anderem ein i^2.

Den Off Topic Kram lasse ich ansonsten unbeantwortet da nicht zielführend.

Was ich jetzt mal annehme was er will:
Falls b<a, also Fall 1, dann soll die Konstante abhängig von der Differenz von a und b sein.
Also wenn abs(a-b) größer ist, ist auch das größer womit a multipliziert wird.

Vermute ich mal, keine Ahnung.
Die Erklärung war zu verwirrend ansonsten.