Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

10.08.2015, 14:31

Ich glaube nicht, dass es ein gebrochenes Polynom ist, habe nämlich mal ein Gleichungssystem für Grad 3 per Hand ausgerechnet. Die ersten drei Werte passen jetzt natürlich perfekt, aber danach nicht: Link. Ich würde einfach mal davon ausgehen, dass die Programmierer sich nicht die Mühe gemacht haben, ein hochgradiges Polynom zu berechnen, vorallem wenn man guckt, wie deine vorherige Formel aussieht ;) Ich werde mal ein bisschen mit dem Logarithmus experimentieren

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

12

10.08.2015, 15:09

Das schließt ein gebrochenes Polynom aber noch nicht aus. Möglicherweise handelt es sich um einen höheren Grad oder es gibt auch die Möglichkeit, das zu dem Polynom noch weitere Dinge im Nenner oder Zähler dazuaddiert werden. Beachte außerdem, dass deine Form (1/(ax²)+1/(bx)+c) nicht äquivalent zu meiner (1/(ax²+bx+c)) ist. Ich finde doch erstaunlich, dass bei bei der Approximation der Form (1/(ax²+bx+c)) mit dem Reziproken etwa zwei gültige Ziffern erzielbar sind..

Mit dem Logarithmus allein scheint mir da wenig zu machen sein. Ich halte das auch für abwegig und glaube nicht, dass es sich um eine Logarithmusfunktion handelt. Eine Exponentialfunktion halte ich noch für wahrscheinlicher. (Link). Eine Exponentialfunktion plus eine Konstante wäre denkbar. Leider weiß nicht nicht, wie man das mit Wolfram Alpha schnell überprüft.

Ist es möglich mehr bzw. größere Werte zu bekommen?
Konvergiert der Wert zu 0 oder einer anderen Konstante? (Das würde die Addition einer Konstante am Ende sehr wahrscheinlich machen)

13

10.08.2015, 15:33

Exponentialfunktion ist auch ne gute Möglichkeit, weiß aber leider auch nicht, wie man bei Wolframalpha gut damit arbeiten kann :( Ich hatte erstmal nicht mehr Werte gepostet, weil ich die Inputlängen Beschränkung bei WA erreicht hatte, kann aber gerne ein paar mehr Werte hier schreiben:

204000, 102000, 58285, 37090, 25230, 17739, 13161, 10200, 8160, 6688, 5513, 4636, 3961, 3428, 3000, 2632, 2331, 2081, 1871, 1692, 1533, 1397, 1278, 1175, 1085, 1002, 929, 864, 806, 754

Außerdem habe ich noch den Wert für Kommandozentrale Stufe 500 bestimmt: 2 für Stufe 999: 0. Das ganze konvergiert also gegen 0. Ich kenne mich leider nicht gut genug mit Mathe aus, bin total auf deine Hilfe angewiesen :D

Viele Grüße
newby

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

14

10.08.2015, 15:53

Also das Ergebnis macht eine Logarithmus- oder Exponentialfunktion als prägende Funktion unwahrscheinlich.
Setzt man in die approximierte Funktion von Wolfram Alpha 500 ein, kommt 1.78092 * 10^-120 raus. Also viele viele Größenordnungen zu klein und das scheint mir unvermeidlich bei einer Exponentialfunktion. Und der Logarithmus wird schließlich unweigerlich negativ wenn x größer wird. (Die Approximation von "fit" ist bei x=500 bereits bei -243672)

Die approximierte gebrochen rationale Funktion die ich vorgeschlagen habe ist bei x=500 dagegen bei 2.71191 und bei x=1000 gleich 0.679333. Die Größenordnung stimmt immernoch und wenn man abrundet sogar der exakte Wert.

Ich bin übrigens auch nicht der absolute Matheprofi, ich habe die andere Formel auch nur durch Beobachtung und ein wenig Zufall exakt bestimmen können ;) Es ist auch möglich, dass die gesuchte Funktion mit so vielen Termen/Funktionen nachkorrigiert wird, dass wir nie auf die exakte Form kommen. Da kann man im Prinzip nur hoffen...

15

10.08.2015, 15:59

Vielen Dank, dann werde ich mal ein bisschen mit den Koeffizienten der gebrochen rationalen Funktion spielen, eventuell auch noch welche in den Zähler packen. Muss doch möglich sein die Funktion rauszufinden ;)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

16

10.08.2015, 16:00

Mal eine prinzipielle Frage: Angenommen, den Daten liegt ein Polynom zu Grunde, aber die Ergebnisse werden gerundet bzw. der Nachkommateil abgeschnitten (das ist ja ziemlich sicher der Fall hier). Würde man mit herkömmlichem Fitting überhaupt jemals auf die korrekten Koeffizienten kommen? Ich denke, man müsste das Fitting so anpassen, dass es nicht unbedingt versucht die exakten Werte zu erreichen, sondern dass die gerundeten Werte gleich sind.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

17

10.08.2015, 16:25

Ich denke, dass es möglich wäre, wenn man mal die richtig Funktionsform gefunden hat. In unserem Fall kann man natürlich hoffen, dass es wieder relativ gerade Zahlen sind die man erraten kann, aber auch sonst sollte man es mit ausprobieren und annähern die Lösung finden können. Wolfram Alpha ist da natürlich nicht das perfete Tool. Dadurch, dass alle Werte über einer Zahl zwischen 500 und 1000 genau 0 ergeben und man nur die Werte dazwischen prüfen muss, sollte es möglich sein, alle Koeffizienten durchzuprobieren und alle Ergebnisse zu vergleichen. Es wird natürlich einen gewissen Toleranzbereich geben, der das gerundete Ergebnis nicht verändert. Somit könnte man eine andere Funktion finden die das gleiche Ergebnis liefert.

18

11.08.2015, 15:23

Ich habe jetzt durch rumprobieren und Gleichungen lösen eine sehr gute und zugleich simple Funktion gefunden: Link. Die ersten vier Zahlen passen, danach ist die Funktion immer etwas zu groß. Hat vielleicht jemand eine Idee, welche Anpassung ich machen könnte, ohne die "sauberen" Koeffizienten zu verlieren?

Edit:
Könnte es eventuell sein, dass das Spiel mit weniger Nachkommastellen rechnet als Wolframalpha?

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

19

11.08.2015, 16:40

Ja das ist wahrscheinlich sogar, allerdings ist das hier eher noch nicht das Hauptproblem. Wie du siehst gibt es keine wechselnde Abweichung sondern die Abweichung stetig zu nimmt. (Differenz zwischen deinem Polynom und 204000 geteilt durch die gegebenen Werte)

So einfach ist das mit dem geraden Koeffizienten auch nicht, denn im Prinzip kannst du den Bruch beliebig Kürzen und erweitern und wenn etwas anderes als 1 oder 204000 im Nenner steht, werden vielleicht vermeintlich krumme Werte auf einmal sehr gerade. Ich habe mal eine andere Seite zur Polynomregression gesucht und die Reziproken mal da eingegeben. Leider kann man das Ergebnis da wohl nicht in der URL kodieren, deshalb hier die Eingabe:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1 0.00000490196
2 0.00000980392
3 0.0000171571
4 0.0000269614
5 0.0000396354
6 0.000056373
7 0.0000759821
8 0.0000980392
9 0.000122549
10 0.000149522
11 0.000181389
12 0.000215703
13 0.000252461
14 0.000291715
15 0.000333333
16 0.000379939
17 0.000429
18 0.000480538
19 0.000534474
20 0.000591017
21 0.000652316
22 0.00071582
23 0.000782473
24 0.000851064
25 0.000921659
26 0.000998004
27 0.00107643
28 0.00115741
29 0.00124069
30 0.00132625994


Man kann im Bild unten sehen, dass sich der Graph vom Grad 2 schon sehr gut anschiegt. Für noch exakter Koeffizienten damit wirklich alle Ziffern stimmen musst du wahrscheinlich tatsächlich ein Programm finden, dass das Ergebnis direkt unter der Anahme annhähert, dass nach der Rundung des Reziproken, alle Zahlen übereinstimmen.

20

11.08.2015, 18:00

Bin auf diese Seite gestoßen, scheint ganz gut zu funktionieren und kann auch irgendwas mit gerundeten Werten machen. Hier mal die Eingabe:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  1   204000
  2   102000
  3    58285
  4    37090
  5    25230
  6    17739
  7    13161
  8    10200
  9     8160
 10     6688
 11     5513
 12     4636
 13     3961
 14     3428
 15     3000
 16     2632
 17     2331
 18     2081
 19     1871
 20     1692
 21     1533
 22     1397
 23     1278
 24     1175
 25     1085
 26     1002
 27      929
 28      864
 29      806
 30      754


Wenn man einmal die richtige Funktionsart gefunden hat, müsste man damit eigentlich die korrekten Parameter finden können, oder?

Werbeanzeige