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
Ableitung eines Polynoms
@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.
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.
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?...
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?...
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.
Das Leben ist wie ein Tennisball.
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.
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.
Zumindest für den Spezialfall, dass alle Koeffizienten != 0 verschieden sind ^^deets hat geschrieben:Eine Moeglichkeit waere zB die Schluessel als Koeffizienten aufzufassen, und die Werte alt Potenz.
Du meintest wohl: y = a*x**n + b*x**(n-1) + c*x**(n-2) + ...deets hat geschrieben:y = a**n + b**n-1 + c**n - 2 + ...
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.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...
Das Leben ist wie ein Tennisball.
So müssten doch die Koeffizienten eindeutig sein. --> { n : a, n-1 : b, n-2 : c, ...}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, ...}
Das riecht dann natürlich nach Liste .... aber soll wohl eine Übungsaufgabe zu Dictionaries sein (um jeden Preis) ...
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
@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.
@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.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
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 andersRekrul hat geschrieben:So müssten doch die Koeffizienten eindeutig sein. --> { n : a, n-1 : b, n-2 : c, ...}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, ...}
Das riecht dann natürlich nach Liste .... aber soll wohl eine Übungsaufgabe zu Dictionaries sein (um jeden Preis) ...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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.
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.
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.
@lalalu: Nein so kannst Du das nicht schreiben:
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.
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
@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.
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.
sooo... was sagt ihr denn hierzu?
... er schmeißt jetzt ein dic raus aber verkehrt herum warum?
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
Zuletzt geändert von Anonymous am Sonntag 3. Juni 2012, 21:32, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Grund: Quelltext in Python-Code-Tags gesetzt.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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.
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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert