hallo
ich habe ein Problem mit meinem Programm und währe sehr dankbar wenn mir jemand auf die sprünge helfen kann.
es geht darum ein polynom aus einer liste zu erstellen
mein problem dabei ist ich darf nur eine variable benutzen und diese variable ist meine liste
als beispiel
a=[1, -2, 10**20] daraus soll f(x) = x**2 -2x +10**20 werden
def Polynom_Funktion(a):
r=0
for i in range (len(a)):
variable=a[ i ]*x**(len(a)-i)
r = variable + r
return r
habe natürlich das Problem das x nicht definiert ist
habe es schon mit einer Definition in der Definition probiert aber das funktioniert auch nicht
bin für jede Hilfe dankbar
funktion in funktion ?
Das geht nicht mit nur einer Variablen. Ausser man macht die kuenstlich zum Tupel oder sowas. Du brauchst neben deiner Polynomdefinition als Liste nunmal eine Stelle x, an der das Polynom ausgewertet werden soll. Was sagt denn dein Dozent dazu?
Nachtrag: was natuerlich geht ist ein Closure:
Zwei Variablen sind das IMHO immer noch, aber pro Funktion halt nur eine.
Code: Alles auswählen
def create_polynom_function(coefficients):
def evaluate_polynom_at(x):
... # hier auf coefficients zu greifen
return evaluate_polynom_at
- __blackjack__
- User
- Beiträge: 13006
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Und wenn man das sowieso als ”getrickst” ansieht, kann man auch `functools.partial()` verwenden und damit auch die innere Funktion als äussere und damit testbare Funktion.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
- __blackjack__
- User
- Beiträge: 13006
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Da Funktionen ja auch Werte sind, kann man bei passender Definition des Begriffs „Variable“ das Minimum noch ein bisschen erhöhen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
-
- User
- Beiträge: 2
- Registriert: Mittwoch 21. November 2018, 16:27
Lösung
a ist eine liste und diese liste enthält die Koeffizienten des Polynoms
die stelle der Koeffizienten gibt den Exponenten an
[1 2 3]
1x**2+2*x**1+3*x**0=y
def Hornerschema(a, x0):
b=[0]
for i in range (1, len(a)):
b[0]=a[0]
z=b[i-1]*x0+a
b.append(z)
return b
def Polynom_Funktion(a):
def p(x):
return Hornerschema(a, x)[-1]
return np.vectorize(p)
print(Polynom_Funktion(a),"polynomfunktion")
durch das Horner Schema braucht man kein Polynom erzeugen
das Horner Schema rechnet das Polynom aus und gibt es als liste wieder zurück
wobei das letzte Glied der liste das Ergebnis ist
a ist eine liste und diese liste enthält die Koeffizienten des Polynoms
die stelle der Koeffizienten gibt den Exponenten an
[1 2 3]
1x**2+2*x**1+3*x**0=y
def Hornerschema(a, x0):
b=[0]
for i in range (1, len(a)):
b[0]=a[0]
z=b[i-1]*x0+a
b.append(z)
return b
def Polynom_Funktion(a):
def p(x):
return Hornerschema(a, x)[-1]
return np.vectorize(p)
print(Polynom_Funktion(a),"polynomfunktion")
durch das Horner Schema braucht man kein Polynom erzeugen
das Horner Schema rechnet das Polynom aus und gibt es als liste wieder zurück
wobei das letzte Glied der liste das Ergebnis ist
@david.schienha: die Funktion `Hornerschema` macht seltsame Dinge. Erst wird die Liste `b` mit einem Eintrag vorbelegt, der innerhalb einer for-Schleife jedes mal wieder mit dem selben Wert überschrieben wird. Was soll der Unsinn?
Dann speichert die Liste `b` jeden Wert, der bei der Auswertung ensteht, obwohl nur der letzte gebraucht wird.
Unpythonisch ist, über den Index der Liste `a` zu gehen, statt direkt die Werte in a zu nehmen.
Hier mal ein Zwischenschritt mit Liste:
und das ganze ohne die unnötige Liste:
Funktionen benennt man nach Tätigkeiten, also statt Hornerschema besser evaluate_polynomial, oder abgekürzt polyval, damit sie so heißt, wie die identischen Funktion von numpy, die ihren schrecklichen Namen aber von Matlab geerbt hat.
Dann speichert die Liste `b` jeden Wert, der bei der Auswertung ensteht, obwohl nur der letzte gebraucht wird.
Unpythonisch ist, über den Index der Liste `a` zu gehen, statt direkt die Werte in a zu nehmen.
Hier mal ein Zwischenschritt mit Liste:
Code: Alles auswählen
def Hornerschema(a, x0):
b = [0]
for v in a:
z = b[-1] * x0 + v
b.append(z)
return b
Code: Alles auswählen
def Hornerschema(coefficients, x):
z = 0
for v in coefficients:
z = z * x + v
return z