Seite 1 von 2
Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 09:11
von lalalu
Hallo Leute,
da ich ein absoluter Neuling bin in der Programmierung, wollte ich euch mal fragen ob ihr mir helfen könnt.
Nun zur Aufgabe:
Schreiben Sie eine Funktion abl zur Ableitung eines Polynoms. Das Polynom soll durch ein Dictionary beschrieben werden. Die Funktion abl erhält als Funktionargument das Polyno in Form eines Dictionaries und gibt das abgeleitete Polynom wieder in Form eines Dictionaries zurück.
Um ehrlich zu sein habe ich überhaupt keine Ahnung wie man das machen soll. Und währe euch sehr dankbar wenn ihr mir helfen könntet. :K
Re: Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 09:37
von BlackJack
@lalalu: Was hast Du denn bis jetzt? Hast Du das Tutorial aus der Python-Dokumentation schon mindestens bis vor Klassen durchgearbeitet, oder etwas was Dich auf einen vergleichbaren Wissensstand bringt?
Wie sieht ein Polynom allgemein aus? Wie eine Ableitung davon? Wie kann man ein Polynom als Wörterbuch darstellen? Beantworte (Dir) diese Fragen und dann ist das eigentlich ganz einfach.
Re: Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 09:51
von lalalu
naja ein Polynom wäre doch zb. x²+3x-2 ... und die erste Ableitung wäre doch 2x+3...
In einem Dictionary können beliebige Typen als Werte verwendet werden. Dort werden doch praktisch wie bei einer Variablen Werte zugewiesen oder nicht?...
Und Allgemein lautet die Ableitungsregel doch ... y=a*x(hoch n) ... y'=n*a*x(hoch n-1)
und wie soll ich das ganze jetzt in ein dictionary bringen?...
Re: Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 09:55
von EyDu
Indem du die Exponenten und die Koeffizienten in dem Dictionary codierst. Jetzt musst du dir nur noch überlegen, welchen der beiden du als Schlüssel verwendest und welchen als Wert.
Re: Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 09:57
von deets
Eine Moeglichkeit waere zB die Schluessel als Koeffizienten aufzufassen, und die Werte alt Potenz. Also
y = a**n + b**n-1 + c**n - 2 + ...
Damit ergibt sich ein dict
{ a : n, b : n - 1, c : n - 2, ...}
Und danach das abgeleitete:
{ n*a : n - 1, b * (n - 1), ... }
Sollte sich fast schon in einer einzigen List-Comprehension ausdruecken lassen.
Re: Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 10:14
von lalalu
Vielen dank für eure Antworten aber ich seh da grad überhaupt nicht durch. Wäre echt nett wenn ihr mir einen Quelltext zukommen lassen könntet...
Re: Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 10:21
von EyDu
deets hat geschrieben:Eine Moeglichkeit waere zB die Schluessel als Koeffizienten aufzufassen, und die Werte alt Potenz.
Zumindest für den Spezialfall, dass alle Koeffizienten != 0 verschieden sind ^^
deets hat geschrieben:y = a**n + b**n-1 + c**n - 2 + ...
Du meintest wohl: y = a*x**n + b*x**(n-1) + c*x**(n-2) + ...
lalalu hat geschrieben:Vielen dank für eure Antworten aber ich seh da grad überhaupt nicht durch. Wäre echt nett wenn ihr mir einen Quelltext zukommen lassen könntet...
Dann zeig doch mal, was du bisher versucht hast. Deine Hausaufgaben wird hier sicher niemand für dich machen, auch wenn es nur ein Einzeiler ist.
Re: Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 10:24
von lalalu
also bisher habe ich das hier...
bsp.: -3x+2x**3-x**5
polynom = {0: -3, 3: 2, 5: -1}
def abl(polynom):
return sum([polynom[p]*x**p for p in polynom])
Re: Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 10:32
von Rekrul
deets hat geschrieben:y = a**n + b**n-1 + c**n - 2 + ...
Damit ergibt sich ein dict
{ a : n, b : n - 1, c : n - 2, ...}
So müssten doch die Koeffizienten eindeutig sein. --> { n : a, n-1 : b, n-2 : c, ...}
Das riecht dann natürlich nach Liste .... aber soll wohl eine Übungsaufgabe zu Dictionaries sein (um jeden Preis) ...
Re: Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 10:39
von cofi
@Rekrul: Damit musst du allerdings alle Potenzen aufbauen deren Koeffizient = 0 ist.
@lalalu: Ich sehe da nur Code, der ein Polynom auswerten wuerde, aber in einem NameError resultiert, weil `x` nicht bekannt ist. Wenn da wieder ein Dictionary rauskommen soll, musst du auch eines erstellen. deets hat dir die Loesung ja eigentlich schon gezeigt, auch wenn du Keys und Values vertauschen solltest.
Re: Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 10:47
von deets
Rekrul hat geschrieben:deets hat geschrieben:y = a**n + b**n-1 + c**n - 2 + ...
Damit ergibt sich ein dict
{ a : n, b : n - 1, c : n - 2, ...}
So müssten doch die Koeffizienten eindeutig sein. --> { n : a, n-1 : b, n-2 : c, ...}
Das riecht dann natürlich nach Liste .... aber soll wohl eine Übungsaufgabe zu Dictionaries sein (um jeden Preis) ...
Ups (und EyDu auch) - stimmt. Ich finde ehrlich gesagt auch, das ein dict da voellig ungeeignet ist. Ich hatte erstmal ueber die Potenzen nachgedacht, und da ergibt sich natuerlich dasselbe Problem. Kann aber natuerlich sein, dass die per Definition eindeutig sind. Damit dreht sich das dict dann um. Auch nicht wirklich viel anders

Re: Ableitung eines Polynoms
Verfasst: Freitag 1. Juni 2012, 11:01
von EyDu
Wenn wir einfach mal dünn besetzte Polynome mit einem sehr hohen Grad annehmen, dann ist ein Dictionary schon gar nicht mehr die schlechteste Lösung.
Re: Ableitung eines Polynoms
Verfasst: Samstag 2. Juni 2012, 10:11
von Leonidas
Ich denke für den Fall wär eine Liste eine deutlich einfachere Lösung. Für dünn besetzte Polynome ist ein Dictionary besser, aber ich denk das ist eher eine Hausaufgabe und da muss man jetzt nicht Overengineeren

Oh Listen, da war ja was... richtig, in der SICP-Vorlesung wird vorgemacht wie man sowas in Scheme implementiert, mit Listen natürlich

Re: Ableitung eines Polynoms
Verfasst: Samstag 2. Juni 2012, 10:20
von BlackJack
Zitat Aufgabenstellung: „Das Polynom soll durch ein Dictionary beschrieben werden.” Den Freiheitsgrad eine Liste zu wählen haben wir also nicht. Also *wir* schon, aber der OP nicht.

Re: Ableitung eines Polynoms
Verfasst: Samstag 2. Juni 2012, 17:24
von lalalu
y = a**n + b**n-1 + c**n - 2
und so muss ich das jetzt schreiben? d = { a : n, b : n - 1, c : n - 2}
und so gibt er mir das denn nachher aus oder wie? { n*a : n - 1, b * (n - 1)}
aber wie printe ich das denn?...
... Das Fach Programmierung habe ich mir auch nicht ausgesucht, das ist ein Semester was ich da überstehen muss, vielleicht erbarmt sich ja doch jemand und kann mir ein Quelltext zeigen.
Re: Ableitung eines Polynoms
Verfasst: Samstag 2. Juni 2012, 19:16
von BlackJack
@lalalu: Nein so kannst Du das nicht schreiben:
Code: Alles auswählen
In [158]: d = { a : n, b : n - 1, c : n - 2}
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/home/bj/<ipython console> in <module>()
NameError: name 'n' is not defined
Was auch irgendwie klar sein sollte wenn man auch nur ein ganz bisschen Python verstehen würde. So wird das wohl nichts, wenn es echt darauf hinausläuft dass Du nur fertige Lösungen erbetteln möchtest.
Re: Ableitung eines Polynoms
Verfasst: Sonntag 3. Juni 2012, 10:18
von lalalu
Wenn ichs verstehen würde, würde ich wohl kaum euch fragen...
Re: Ableitung eines Polynoms
Verfasst: Sonntag 3. Juni 2012, 11:10
von BlackJack
@lalalu: Was Dir hier an Wissen fehlt kann Dir niemand auf magische Weise in den Kopf einpflanzen.
Du brauchst ein mathematisches Grundverständnis, hier insbesondere über Polynome. Und ein Grundverständnis was programmieren ist, die Bedeutung von grundlegender Syntax von Python, und wie so ein Programm abgearbeitet wird. Und sowohl für den mathematischen als auch den Programmierteil die Fähigkeit vom konkreten Problem, also zum Beispiel ein konkretes Polynom oder den Vorgang eine Ableitung davon zu erstellen, auf eine allgemeine Darstellung eines Polynoms und eine formale Beschreibung des Ableitungsvorgangs zu abstrahieren, so dass Du beides einem Rechner in einer Programmiersprache vermitteln kannst.
Ein Polynom allgemein und konkret inklusive der konkreten Ableitung und der allgemeinen Ableitungsregel hast Du ja schon gegeben. Und ja, Wörterbücher bilden Objekte (Schlüssel) auf andere Objekte (Werte) ab. Dabei müssen die Schlüssel einmalig sein, genau wie man zu jeder gegebenen Zeit nur ein Objekt an einen (Variablen)Namen binden kann.
Jetzt musst Du Dir anschauen wie Du ein allgemeines Polynom in seine Bestandteile zerlegen kannst, die veränderlich sind, und die das Polynom eindeutig beschreiben. Dann wie man die Bestandteile zu (Schlüssel, Wert)-Paaren aufteilt, und was davon der Schlüssel und was der Wert sein muss. Dann weisst Du wie Du x²+3x-2 als Wörterbuch aufschreiben kannst. Kleiner Tipp: Schreibe Dir beim Überlegen die Polynome so regelmässig wie möglich auf, damit sie der allgemeinen Form am nächsten kommen. Bei dem Beispiel x²+3x-2 wird dabei ja so einiges weg gelassen.
Wenn Du Polynome als Wörterbücher kodieren kannst, muss Du eine Funktion entwickeln, die ein solches Wörterbuch als Argument bekommt und daraus ein neues Wörterbuch mit der Ableitung erstellt. Da reicht es nicht das irgendwie so ähnlich hin zu schreiben wie es in der allgemeinen Vorschrift zum ableiten aussieht, und zu hoffen das der Rechner oder die Programmiersprache schon irgendwie wissen was man möchte und das richtige tun. Du musst Dir überlegen wie die einzelnen Schritte bei einer Ableitung aussehen und diese dann mit Mitteln ausdrücken, welche die Programmiersprache zum Beschreiben von Abläufen anbietet.
Re: Ableitung eines Polynoms
Verfasst: Sonntag 3. Juni 2012, 21:28
von lalalu
sooo... was sagt ihr denn hierzu?
Code: Alles auswählen
def abl(a, b, c, n):
abl = {n*a:n-1, b*(n-1):n-2, c*(n-2):n-3}
return abl
... er schmeißt jetzt ein dic raus aber verkehrt herum warum?
Re: Ableitung eines Polynoms
Verfasst: Sonntag 3. Juni 2012, 21:40
von Hyperion
Dictionaries sind nicht "sortiert". Wenn Du eine bestimmte Ausgabeform haben willst, musst Du Dir z.B. mittels `sorted` die Schlüssel des Dicts in eine sortierte Liste übertragen, mit deren Hilfe Du Dir dann die Elemente sortiert anzeigen lassen kannst. Oder Du holst Dir die Tupel mittels `dict.items` und sortiert diese.
Deine "Lösung" ist wenig generisch. Zum einen muss man da eine andere Struktur übergeben, als man zurück bekommt, zum anderen klappt das ja nur für Polynome 2. Grades. Alles in allem also wenig flexibel.