Moien
Ein Programm soll bei einem Polynom der Form: y = x + a(x-i)^3 + b(x-j)^5 + c(x-k)^7 … lösen (alles gegeben ausser x). Das Teil kann bis zur 127’ten Potenz anwachsen. Es kommen nur reelle Zahlen vor. Bekannt ist ausserdem das Intervall in dem x liegen kann (wird eher klein sein, also grob von -200 bis 200).
Ein Programm soll das ganze nun schnell lösen können. Mein Ansatz bisher:
- Lookuptabelle anlegen mit 10.000-100.000 Werten.
Für jedes x:
- Mit x in Lookuptabelle nachschlagen.
- Optimierungsverfahren a la Newton.
Geht das irgendwie schneller ? Gibt es da wegen der speziellen Form (keine geraden Potenzen) nicht eine Abkürzung ?
Danke
Moien
ebenfalls,
Ein Programm soll bei einem Polynom der Form: y = x + a(x-i)^3
- b(x-j)^5 + c(x-k)^7 … lösen (alles gegeben ausser x). Das
Teil kann bis zur 127’ten Potenz anwachsen. Es kommen nur
reelle Zahlen vor. Bekannt ist ausserdem das Intervall in dem
x liegen kann (wird eher klein sein, also grob von -200 bis
200).
Suchst du die Nullstellen?
Anfang der 80er Jahre hab ich mal ein BASIC-Programm für sowas geschrieben, allerdings nicht bis zur 127ten Potenz. Müsste sich aber anpassen lassen, wenn man BASIC kennt …
Wenns dich interessiert, schick ich es dir als Word-Datei in Courier als Font.
Danke
gerne doch und Gruß
Pat
Moien
Suchst du die Nullstellen?
Joo. Könnte man ja als 0 = - y + x + a(x-i)^3 + b(x-j)^5 + c(x-k)^7 … schreiben.
Anfang der 80er Jahre hab ich mal ein BASIC-Programm für sowas
geschrieben, allerdings nicht bis zur 127ten Potenz. Müsste
sich aber anpassen lassen, wenn man BASIC kennt …
BASIC ist kein Problem. Schick mal bitte rüber. Ich baus dann in C++ nach. Ob später tatsächlich alle Potenzen gebraucht werden weiss ich noch nicht. 127 ist wahrscheinlich zu hoch gegriffen, aber so 100 wird es wohl werden.
Danke
Darüber müssen wir nochmal reden …
Moien
Dank für die Post.
Wenn ich das richtig sehe:
- laufe den möglichen x-Bereich in gewissen Schrittweite ab
- Erkenne den 0-Durchgang
- Reduziere die Schrittweite und geh einen Schritt zurück
- Brich ab wenn das Teil nummerisch instabil wird (das ist Zeile 120) oder sehr nahe an der Lösung ist.
Das sollte im Durchschnitt „(Breite-des-Interval/Schrittweite)/2 + (Schrittweite/neue-Schrittweite)/2 + … + (alte-Schrittweite/Schrittweite-kleiner-als-sehr-nahe-dran)/2“ Schritte brauchen.
Bisection liefert ein „Breite-des-Intervall / (2^Anzahl-der-Schritte)“ genaues Resultat in jedem Schritt. Wenn die Intervallbreite 1 ist und man 10^-3 als genau genug annimmt braucht der 10 Schritte. Damit sollte einfache Bisection schneller sein.
Newton könnte noch schneller gute Resultate liefern. Allerdings ist Newton nicht immer erfolgreich. Dem Braten trau ich nicht so wirklich, vorallem weil das später Resultate liefern muss. Da wird kein Benutzer ständig aufpassen.
Könnte ich nicht irgendwie Profit aus der monoton steigend Eigenschaft schlagen ?
Danke.
Moien
Dank für die Post.
Wenn ich das richtig sehe:
- laufe den möglichen x-Bereich in gewissen Schrittweite ab
- Erkenne den 0-Durchgang
- Reduziere die Schrittweite und geh einen Schritt zurück
besser: erst mit der momentan gültigen Schrittweite zurück vor den 0-Durchgang, dann Schrittweite neu = alt/10
- Brich ab wenn das Teil nummerisch instabil wird (das ist
Zeile 120) oder sehr nahe an der Lösung ist.
richtig erkannt!
Das sollte im Durchschnitt
„(Breite-des-Interval/Schrittweite)/2 +
(Schrittweite/neue-Schrittweite)/2 + … +
(alte-Schrittweite/Schrittweite-kleiner-als-sehr-nahe-dran)/2“
Schritte brauchen.
???
Bisection liefert ein „Breite-des-Intervall /
(2^Anzahl-der-Schritte)“ genaues Resultat in jedem Schritt.
Wenn die Intervallbreite 1 ist und man 10^-3 als genau genug
annimmt braucht der 10 Schritte. Damit sollte einfache
Bisection schneller sein.
???
die 10^-3 war beim Commodore 8032 deshalb sinnvoll, weil der bei höheren Potenzen schon mal an der vierten Stelle ungenau war ;-(
Newton könnte noch schneller gute Resultate liefern.
Allerdings ist Newton nicht immer erfolgreich. Dem Braten trau
ich nicht so wirklich, vorallem weil das später Resultate
liefern muss. Da wird kein Benutzer ständig aufpassen.
wenn ich mich recht erinnere, war Newton bei hohen Potenzen recht unhandlich
Könnte ich nicht irgendwie Profit aus der monoton steigend
Eigenschaft schlagen ?
keine Ahnung! Ich bin leider nicht Mathematiker! Meine Lösung war seinerzeit als Brechstange gedacht, ein Rätsel zu lösen. Später hab ich damit öfter mal auch andere Probleme lösen können. Schick mir doch mal ein kompliziertes Problem aus deiner Sammlung, ich werd dann die Zeit stoppen, die für die Lösung mit QBASIC auf WinME benötigt wird.
Danke.
gerne doch und Gruß
Pat