(mathematische) Funktionen definieren und verknüpfen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kommando_pimperlepim
User
Beiträge: 23
Registriert: Dienstag 3. April 2007, 05:32

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?
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

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)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
kommando_pimperlepim
User
Beiträge: 23
Registriert: Dienstag 3. April 2007, 05:32

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.
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.
Antworten