Mathe: Polynome einfach definieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

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.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

ok, aber für mehr als eine Variable?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

4bit hat geschrieben:ok, aber für mehr als eine Variable?
hä?
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
Zuletzt geändert von Darii am Donnerstag 11. März 2010, 19:41, insgesamt 1-mal geändert.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Hä?
Eben ein Polynom in z.B. den 3 Variablen x, y und z.
x**2-2xyz-z**2+4
Zuletzt geändert von 4bit am Donnerstag 11. März 2010, 19:41, insgesamt 1-mal geändert.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

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.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

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
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

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".
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Schau dir mal sympy an:
http://code.google.com/p/sympy/

Hier noch ein passender Link aus der Doku:
http://docs.sympy.org/tutorial.html#symbols
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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.
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

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.
Antworten