Seite 1 von 1

funktion in funktion ?

Verfasst: Mittwoch 21. November 2018, 16:57
von david.schienha
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

Re: funktion in funktion ?

Verfasst: Mittwoch 21. November 2018, 17:03
von __deets__
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?

Re: funktion in funktion ?

Verfasst: Mittwoch 21. November 2018, 17:17
von __deets__
Nachtrag: was natuerlich geht ist ein Closure:

Code: Alles auswählen

def create_polynom_function(coefficients):
       def evaluate_polynom_at(x):
              ... # hier auf coefficients zu greifen
       return evaluate_polynom_at
Zwei Variablen sind das IMHO immer noch, aber pro Funktion halt nur eine.

Re: funktion in funktion ?

Verfasst: Mittwoch 21. November 2018, 17:45
von __blackjack__
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.

Re: funktion in funktion ?

Verfasst: Mittwoch 21. November 2018, 20:27
von Sirius3
Man braucht a, x und eine Variable für das Ergebnis; also 3 ist das Minimum.

Re: funktion in funktion ?

Verfasst: Mittwoch 21. November 2018, 22:27
von __blackjack__
Da Funktionen ja auch Werte sind, kann man bei passender Definition des Begriffs „Variable“ das Minimum noch ein bisschen erhöhen. ;-)

Re: funktion in funktion ?

Verfasst: Donnerstag 6. Dezember 2018, 09:14
von david.schienha
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

Re: funktion in funktion ?

Verfasst: Donnerstag 6. Dezember 2018, 10:01
von Sirius3
@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:

Code: Alles auswählen

def Hornerschema(a, x0):
    b = [0]
    for v in a:
        z = b[-1] * x0 + v
        b.append(z)
    return b
und das ganze ohne die unnötige Liste:

Code: Alles auswählen

def Hornerschema(coefficients, x):
    z = 0
    for v in coefficients:
        z = z * x + v
    return z
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.