Hallo Udo,
vielen vielen Dank, sehr flott und recht elegant...
Dankende Grüße
Winfried
On 21.12.2003, at 14:31, Udo und Susanne Krause wrote:
Hallo Winfried,
diese Aufgabe ist fuer Funktionen von 0 < n < \infty Veraenderlichen
nicht sehr kompliziert.
Man kann dazu die Funktion bilgicTaylor (:-)) verwenden:
Remove[bilgicTaylor];
bilgicTaylor[f_, varL_List?VectorQ, zeroL_List?VectorQ,
degree_Integer?NonNegative] :=
Module[{X, tPD},
(* total preDifferential *)
X /: X[o_List]^n_Integer := Product[X[o], {i0, n}];
X /: X[o_List] X[p_List] := Multinomial[Sequence @@ (o + p)] X[o
+ p];
tPD = Plus @@ (zeroL×Thread[X[Sort[
Permutations[Join[{1}, Table[0, {Length[zeroL] - 1}]]],
Flatten[Position[#, 1] &]]]]);
(* result *)
f[Sequence @@ zeroL] +
Sum[Expand[tPD^
d]/d!, {d, 1, degree}] //. X[oo_List] \[RuleDelayed]
Derivative[Sequence @@ \
oo][f][Sequence @@ varL]
] /; Length[varL] == Length[zeroL]
Die Mathekladden des ersten Semesters sagen, dass (x und x0 als
Vektoren zu verstehen, das totale Differential d ebenso)
f[x + x0] = exp(x0 d) f = f[x0] + df /1! + d^2f/2! + ... + d^mf/m! +
R,
wobei R das Restglied ist.
Damit man nicht zu Anfang mühsam mit Sequences in Derivative rechnen
muss, bildet man zuerst einen nahrhaften untaetigen Operator X mit
einem Listenargument, sammelt dann alle Ausdruecke fuer das totale
preDifferential tPD, bildet die gewuenschten Summanden des
Exponentials und ersetzt X bei der Ausgabe durch den richtigen
Ausdruck. Beispiele sind in dem beiliegenden Notebook. Sie muessten
darueberhinaus dafuer sorgen, dass Ihre Funktion f an der Stelle zeroL
abgeleitet wird.
Mit den besten Gruessen
Udo.
<taylorBilgic.nb>