Seite 1 von 1
Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 11:40
von THLC53
Erstmal vorrab, ich programmiere in Python erst seit einem Monat.
Ich muss hier eine Aufgabe lösen. Ich möchte hier keine Lösung oder Lösungsweg, ich brauche einfach nur einen Ansatz. Im Kopf weis ich wie es so grob ablaufen muss, aber ich habe Probleme mit der Aufgabenstellung.
Wird an stelle vom "t" dann eine tupel eingeben? ich weis einfach nicht wie ich da anfangen soll, es kommen immer fehler meldungen.
aufgabe a)
(wie aufgabe b geht weis ich dann wenn ich aufgabe a gelöst habe )
Nur ein kleinen Tipp bitte keine Lösung.
Vielen Dank schonmal für die Hilfe
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 12:18
von DasIch
Bevor du dich zu weit in spezifische Code reinsteigerst überleg erstmal was du eigentlich tun musst, auf rein mathematischer Ebene. Konkret heisst dass schau dir die
Ableitungsregeln an und überlege dir welche in diesem Fall überhaupt in Frage kommen.
Dann überlege dir ein paar Beispiele, also unterschiedliche Polynome und deren Ableitungen, so dass alle möglichen Fälle abgedeckt sind. Das verschafft dir einen Überblick was du machen musst und erlaubt dir sicherzugehen dass du am Ende auch alles richtig gemacht hast.
Wenn du so vorbereitet dann an first_deriv herangehst sollte es eigentlich kein großes Problem mehr darstellen.
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 12:22
von heiner88
Code: Alles auswählen
tupel = (1,2,3,4,5,6,7)
def p(t):
print(t)
#hier ableitung berechnen
a = t
return a
print(p(tupel))
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 12:38
von THLC53
Danke!
wie ein ableitung funktioniert weis ich

.
@heiner88
ich hatte immer in die Tupel da "a" mitgenommen.
also als tupel dashier:
tupel =(a0, a1, a2, a3, a4)
warum muss man das a nicht mitnehmen, bzw. in die Tupel reinschreiben?
Ist das einfach logisch, oder habe ich da irgendwie einen Denkfehler?
Vielen dank schonmal
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 12:43
von BlackJack
@THLC53: In dem Tupel sollen die *Koeffizienten* stehen. Also *Werte*. `a0` ist ein Name. Wenn Du da *vorher* einen Wert dran bindest, dann kannst Du beim erstellen eines Tupels `a0` schreiben. Das Beispiel von heiner88 hätte auch (42, 0, 23, 4711) lauten können.
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 12:46
von heiner88
BlackJack war schneller als ich. Die Antwort ist die Gleiche.
p(x) = 42 + 23*x^2 + 4711*x^3
==>
(42, 0, 23, 4711)
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 13:02
von THLC53
Danke euch allen!

Jetzt wird mir das auch klar!!
Habe mich schon wegen der Aufgabe verrückt gemacht
Danke Danke Danke!
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 13:37
von THLC53
Code: Alles auswählen
tupel = (1,2,3,4,5,6,7)
def first_deriv(t):
print(t)
alist= []
for i, x in enumerate (t):
if i == 0:
continue
a= x*i
print(a)
alist = alist + [a]
return tuple(alist)
print(first_deriv(tupel))
so siehst aus und funktioniert auch, habe es getestet, sieht auch richtig aus oder?
also ergebnis kommt dann:
(2, 6, 12, 20, 30, 42)
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 14:16
von Sirius3
@THLC53: Deine Variablennamen sind allesamt schlecht gewählt. Namen sollten aussagekräftig sein, t, x, a, i oder alist sind das nicht. Außerdem sollte man nicht ohne Not abkürzen und Funktionen sollte eine Tätigkeit beschreiben, also statt first_deriv calculate_first_derivative.
Listen haben eine .append-Methode, um ein Element anzuhängen, statt in dem Schritt zwei neue Listen zu erzeugen. Wenn Du das erste Element nicht brauchst, dann lass die for-Schleife ab dem zweiten Laufen, statt das erste Element besonders zu behandeln. Die Funktion hat drei Leerzeilen zu viel.
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 14:34
von DeaD_EyE
Hier mal als Generator implementiert.
Code: Alles auswählen
def p(t):
iterator = iter(t)
first = next(iterator)
for i, x in enumerate(iterator, start=1):
a = x*i
yield a
Da ich das erste Element in die Variable first packe, braucht man auch nicht auf 0 abfragen. Damit enumerate bei 1 anfängt, habe ich start=1 an die Funktion übergeben. Zumindest kommt das gleiche wie bei dir raus.
Code: Alles auswählen
In [30]: tupel
Out[30]: (1, 2, 3, 4, 5, 6, 7)
In [31]: list(p(tupel))
Out[31]: [2, 6, 12, 20, 30, 42]
Die Variablennamen sollten wie bereits erwähnt besser gewählt werden. Wir haben bei Python dynamische Typen und der einzige Anhaltspunkt für was die Variable sein könnte, ist der Name.
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 14:44
von BlackJack
@DeaD_EyE: Und jetzt führ das bitte mal für das Nullpolynom aus.

Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 15:01
von BlackJack
Code: Alles auswählen
from itertools import count, islice
from operator import mul
def first_deriv(t):
return tuple(map(mul, islice(t, 1, None), count(1)))
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 15:20
von DeaD_EyE
Ich habe nicht behauptet die Funktion wäre Mathematisch korrekt. Keine Ahnung wozu das überhaupt gut sein soll.
Für was braucht man das?
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 15:29
von heiner88
Deine Frage ist jetzt nicht ernst gemeint,oder ?
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 15:30
von DasIch
BlackJack hat geschrieben:Code: Alles auswählen
from itertools import count, islice
from operator import mul
def first_deriv(t):
return tuple(map(mul, islice(t, 1, None), count(1)))
Naja, da find ich aber die Comprehension Variante schöner:
Code: Alles auswählen
def first_deriv(t):
return tuple(
coefficient * exponent
for exponent, coefficient in enumerate(t[1:], start=1)
)
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Mittwoch 16. November 2016, 15:43
von BlackJack
@DeaD_EyE: Egal ob man das nun braucht oder nicht, es sollte zumindest die Aufgabenstellung erfüllen und da steht wie Polynome als Tupel dargestellt werden, und da ist auch das Nullpolynom dabei — es wird sogar noch mal explizit erwähnt — also sollte die Funktion damit auch als Eingabe klar kommen. Und bei der Funktion aus Aufgabe b) kann das auch als Zwischenergebnis heraus kommen, also sollte die a)-Aufgabe da wirklich mit klar kommen können.
Re: Brauche nur den Ansatz um die Aufgabe zu lösen
Verfasst: Donnerstag 17. November 2016, 10:41
von DeaD_EyE
Die Ausgabe war gleich.
Der Ansatz mit itertools gefällt mir persönlich besser. Wieder etwas dazugelernt.