Seite 1 von 1
Mathe: Polynome einfach definieren
Verfasst: Donnerstag 11. März 2010, 19:04
von 4bit
Hallo,
wie findet ihr diese Idee, um Polynome in Python zu definieren?
Code: Alles auswählen
class polynomial():
def __init__(self, polynomstring):
# polynomstring is of type "x[0]+x[1]*x[2]-1"
self.polynomstring = polynomstring
def of(self, vector):
# vector is of type "[1,2,3]"
x=vector
return eval(self.polynomstring)
Grüße,
4bit.
Verfasst: Donnerstag 11. März 2010, 19:29
von Darii
Ein allgemeines Polynom würde ich einfach so definieren:
Code: Alles auswählen
class Polynomial(object):
def __init__(self, coefficients):
self.coefficients = coefficients
def eval_at(self, x):
return sum(a*x**i for i, a in enumerate(self.coefficients))
Was du da mit deinem Polynomstring willst und warum du ein 3-Tupel als Argument erwartest ist mir nicht so ganz klar.
Verfasst: Donnerstag 11. März 2010, 19:33
von 4bit
ok, aber für mehr als eine Variable?
Verfasst: Donnerstag 11. März 2010, 19:36
von numerix
4bit hat geschrieben:ok, aber für mehr als eine Variable?
hä?
Verfasst: Donnerstag 11. März 2010, 19:40
von Darii
4bit hat geschrieben:ok, aber für mehr als eine Variable?
Dann wird es kompliziert? Aber ich glaube du willst kein Polynom, sondern einfach einen Term haben, der von mehreren Variablen abhängt. Dann kann man das so machen, wenn man nicht allzu viel Aufwand betreiben will.
Verfasst: Donnerstag 11. März 2010, 19:40
von 4bit
Hä?
Eben ein Polynom in z.B. den 3 Variablen x, y und z.
x**2-2xyz-z**2+4
Verfasst: Donnerstag 11. März 2010, 19:41
von numerix
4bit hat geschrieben:Hä?
Eben ein Polynom in z.B. in den 3 Variablen x, y und z.
x**2-2xyz-z**2+4
Das ist kein Polynom.
Verfasst: Donnerstag 11. März 2010, 20:02
von Nocta
Ein Polynom hängt nur von einer Variable ab und hat die allgemeine Form:
a_n * x^n + a_(n-1) * x^(n-1) + a_(n-2) * x^(n-2) + ... + a_1 * x + a_0
Da macht Darii's Vorschlag, nur die Koeffizienten zu übergeben, sehr viel mehr Sinn. Das sind die einzigen Informationen, die man braucht und dann hast du auch gleich schon eine relativ praktische Datenstruktur.
Verfasst: Donnerstag 11. März 2010, 20:30
von hendrikS
Nocta hat geschrieben:Da macht Darii's Vorschlag, nur die Koeffizienten zu übergeben, sehr viel mehr Sinn.
Ich würde eine Liste von tuples verwalten [(Koeffizient, Exponent),...]. So sparst Du Dir die Potenzen, die nicht vorkommen als Nullen zu übergeben.
Bsp.: 4*x^1000 + x + c
Verfasst: Donnerstag 11. März 2010, 21:26
von 4bit
Polynome können sehr wohl von mehreren Variablen abhängen, nur trifft man die seltener an. Zum Beispiel im Mathestudium. Oder bei Wikipedia im Abschnitt "Verallgemeinerung".
Verfasst: Donnerstag 11. März 2010, 21:33
von ms4py
Verfasst: Donnerstag 11. März 2010, 22:29
von CM
Sympy ist toll für Analytik - je nach Fragestellung bietet sich aber eher numpy.polyval oder eine der scipy-Fitroutinen an. Du hast ja leider nicht gesagt, was Dein Ziel ist.
In jedem Fall ist der erste Ansatz nicht so doll: Zu geringe Flexibilität.
Gruß,
Christian
Verfasst: Donnerstag 11. März 2010, 22:57
von 4bit
Was ich beabsichtige führt weg von Python-Programmierung und hin zu einem Matheprojekt.
Ich erklärs trotzdem, wen es nicht interessiert, der muss ja nicht weiterlesen.
In einen Satz gefaßt: Ziel ist es nur mit der Struktur eines Polynoms etwas über seine Limitzyklen zu sagen. Was ist die Struktur? Und was sind Limitzyklen? Da ist etwas Erklärung notwendig.
Es geht um iterierbare Polynome. Das heißt Bild- und Urbildmenge sind identisch. Man kann also das Ergebnis des Polynoms wieder als Eingabe für ein nächstes Ergebnis betrachten und erhält so eine Sequenz von Punkten. Zur Zeit betrachte ich denkbar einfache Mengen, nämlich den n-fachen boolschen Raum.
Z.B. für n=3: B=[0,1]x[0,1]x[0,1]. "x" heißt kartesisches Produkt von Mengen. B enthält 8 Punkte. Ein Beispiel für ein Polynom von B nach B ist
f(a,b,c)=(ab+1,a+b+c,(1+a)(1+b)+1)
Wobei "+" und "*" modulus 2 gerechnet werden müssen. Da B endlich ist müssen sich die Punkte die in der Sequenz, die durch Iterierung von einem Startpunkt aus entstehen, irgendwann wiederholen. Der Teil der Sequenz, der sich wiederholt heißt Limitzyklus.
Das oben definierte f hat zum Beispiel 2 Limitzyklen. Der erste ist ein Fixpunkt, (101), und der zweite ein Zyklus der Länge 2: [(001),(110)]
Als erstes schreibe ich daher gerade ein Programm, das mir zu einem Polynom die Anzahl und Längen seiner Limitzyklen zurückgibt.
Grüße,
4bit
Verfasst: Freitag 12. März 2010, 09:36
von CM
Aber ein eigenes CAS für nur eine Aufgabe? Wäre sympy vielleicht doch etwas für Dich? Das hätte den Vorteil einer funktionierenden und großen Codebasis und eine interessierte Entwicklergemeinde.
Verfasst: Freitag 12. März 2010, 10:31
von 4bit
sollte man natürlich dran denken. Der passende Link von ice2k3 sieht auch witzig aus. werde sympi mal ausprobieren. würde auch gerne einen thread zu dem projekt anfangen, vielleicht gibts ja ein paar gute tips.
Grüße,
4bit.