Seite 1 von 1

(mathematische) Funktionen definieren und verknüpfen

Verfasst: Montag 16. April 2007, 15:46
von kommando_pimperlepim
Hallo.

In Python lassen sich Funktionen definieren, was ich recht schick finde.

Code: Alles auswählen

from numpy import *
f=cos
print f(0)
Folgendes Funktioniert aber nicht:

Code: Alles auswählen

from numpy import *
f=cos
g=sin
h=f+g
print h(0)
Kennt jemand Möglichkeiten, Funktionen derart algebraisch zu verknüpfen?

Verfasst: Montag 16. April 2007, 15:49
von mq
Wie waer's, wenn du einfach 'ne neue Funktion definierst?

Code: Alles auswählen

def h(n):
    return cos(n) + sin(n)

# oder kuerzer, als inline-Funktion:
h = lambda n: cos(n) + sin(n)

Re: (mathematische) Funktionen definieren und verknüpfen

Verfasst: Montag 16. April 2007, 15:51
von gerold
kommando_pimperlepim hat geschrieben:Kennt jemand Möglichkeiten, Funktionen derart algebraisch zu verknüpfen?
Hi!

Nicht so wirklich...

Code: Alles auswählen

>>> import numpy
>>> f = numpy.cos
>>> g = numpy.sin
>>> h = lambda val: f(val) + g(val)
>>> print h(0)
1.0
>>> 
mfg
Gerold
:-)

Verfasst: Montag 16. April 2007, 16:05
von kommando_pimperlepim
Danke für eure Hilfe.

Dieses lambda hab ich als Anfänger noch nicht so durchschaut, aber wenn ich dieses Rezept verwende, gewöhne ich mich vielleicht langsam daran.

Verfasst: Montag 16. April 2007, 16:08
von BlackJack
Nur für den Fall das eigentlich Funktionskomposition gemeint war:

Code: Alles auswählen

from math import sin, cos

def compose(fun_a, fun_b):
    def composed(*args, **kwargs):
        return fun_a(fun_b(*args, **kwargs))
    return composed

sin_cos = compose(sin, cos)
print sin_cos(0)    # == sin(cos(0))
Edit: ``lambda`` ist nichts besonderes:

Code: Alles auswählen

def h(n):
    return sin(n) + cos(n)

# äquivalent zu

h = lambda n: sin(n) + cos(n)
Insbesondere in diesem Fall würde ich ``def`` bevorzugen weil ``lamda`` eigentlich für kleine Funktionen gedacht ist, die man nicht extra an einen Namen binden will.