Nächste: , Vorige:   [Inhalt][Index]

9 Vereinfachung


9.1 Einführung in die Vereinfachung

Nach der Auswertung einer Eingabe, die in Auswertung beschrieben ist, schließt sich die Vereinfachung eines Ausdrucks an. Mathematische Funktionen mit denen symbolisch gerechnet werden kann, werden nicht ausgewertet, sondern vereinfacht. Mathematische Funktionen werden intern von Maxima in einer Substantivform dargestellt. Auch Ausdrücke mit den arithmetischen Operatoren werden vereinfacht. Numerische Rechnungen wie die Addition oder Multiplikation sind daher keine Auswertung, sondern eine Vereinfachung. Die Auswertung eines Ausdrucks kann mit dem Quote-Operator ' unterdrückt werden. Entsprechend kann die Vereinfachung eines Ausdrucks mit der Optionsvariablen simp kontrolliert werden.

Beispiele:

Im ersten Beispiel wird die Auswertung mit dem Quote-Operator unterdrückt. Das Ergebnis ist eine Substantivform für die Ableitung. Im zweiten Beispiel ist die Vereinfachung unterdrückt. Die Ableitung wird ausgeführt, da es sich um eine Auswertung handelt. Das Ergebnis wird jedoch nicht zu 2*x vereinfacht.

(%i1) 'diff(x*x,x);
                             d    2
(%o1)                        -- (x )
                             dx
(%i2) simp:false;
(%o2)                         false
(%i3) diff(x*x,x);
(%o3)                       1 x + 1 x

Für jede mathematischen Funktion oder Operator hat Maxima intern eine eigene Routine, die für die Vereinfachung aufgerufen wird, sobald die Funktion oder der Operator in einem Ausdruck auftritt. Diese Routinen implementieren Symmetrieeigenschaften, spezielle Funktionswerte oder andere Eigenschaften und Regeln. Mit einer Vielzahl von Optionsvariablen kann Einfluss auf die Vereinfachung der Funktionen und Operatoren genommen werden.

Beispiel:

Die Vereinfachung der Exponentialfunktion exp wird von den folgenden Optionsvariablen kontrolliert: %enumer, %emode, %e_to_numlog, radexpand, logsimp, und demoivre. Im ersten Beispiel wird der Ausdruck mit der Exponentialfunktion nicht vereinfacht. Im zweiten Beispiel vereinfacht Maxima ein Argument %i*%pi/2.

(%i1) exp(x+%i*%pi/2), %emode:false;
                                %i %pi
                            x + ------
                                  2
(%o1)                     %e
(%i2) exp(x+%i*%pi/2), %emode:true;
                                  x
(%o2)                        %i %e

Zusätzlich zu der Vereinfachung von einzelnen mathematischen Funktionen und Operatoren, die automatisch von Maxima ausgeführt werden, kennt Maxima Funktionen wie expand oder radcan, die auf Ausdrücke angewendet werden, um spezielle Vereinfachungen vorzunehmen.

Beispiel:

(%i1) (log(x+x^2)-log(x))^a/log(1+x)^(a/2);
                           2               a
                     (log(x  + x) - log(x))
(%o1)                -----------------------
                                    a/2
                          log(x + 1)
(%i2) radcan(%);
                                    a/2
(%o2)                     log(x + 1)

Einem Operator oder einer Funktion können Eigenschaften wie linear oder symmetrisch gegeben werden. Maxima berücksichtigt diese Eigenschaften bei der Vereinfachung eines Ausdrucks. Zum Beispiel wird mit dem Kommando declare(f, oddfun) eine Funktion als ungerade definiert. Maxima vereinfacht dann jedes Auftreten eines Ausdrucks f(-x) zu -f(x). Entsprechend vereinfacht Maxima f(-x) zu f(x), wenn die Funktion als gerade definiert wurde.

Die folgenden Eigenschaften sind in der Liste opproperties enthalten und kontrollieren die Vereinfachung von Funktionen und Operatoren:

   additive        lassociative     oddfun
   antisymmetric   linear           outative
   commutative     multiplicative   rassociative
   evenfun         nary             symmetric

Darüber hinaus haben auch die Fakten und die Eigenschaften des aktuellen Kontextes Einfluss auf die Vereinfachung von Ausdrücken. Siehe dazu die Ausführungen in Maximas Datenbank.

Beispiel:

Die Sinusfunktion vereinfacht für ein ganzzahliges Vielfaches von %pi zum Wert 0. Erhält das Symbol n die Eigenschaft integer, wird die Sinusfunktion entsprechend vereinfacht.

(%i1) sin(n*%pi);
(%o1)                      sin(%pi n)
(%i2) declare(n, integer);
(%o2)                         done
(%i3) sin(n*%pi);
(%o3)                           0

Führen alle oben genannten Möglichkeiten nicht zu dem gewünschten Ergebnis, kann der Nutzer Maxima um weitere Regeln für die Vereinfachung erweitern. Diese Möglichkeiten werden in Muster und Regeln erläutert.


9.2 Funktionen und Variablen für die Vereinfachung

Eigenschaft: additive

declare(f, additive) deklariert eine Funktion f als additiv. Hat die Funktion f ein Argument, dann wird f(x + y) zu f(x) + f(y) vereinfacht.

Ist f eine Funktion mit zwei oder mehr Argumenten, ist die Additivität für das erste Argument definiert. Zum Beispiel wird f(x + y,a + b) zu f(y, b + a) + f(x, b + a) vereinfacht.

Siehe die Funktion declare.

Beispiel:

(%i1) F3 (a + b + c);
(%o1)                     F3(c + b + a)
(%i2) declare (F3, additive);
(%o2)                         done
(%i3) F3 (a + b + c);
(%o3)                 F3(c) + F3(b) + F3(a)
Eigenschaft: antisymmetric

declare(f, antisymmetric) deklariert die Funktion f als antisymmetrisch. Zum Beispiel wird f(y, x) zu - f(x, y) vereinfacht.

Siehe auch die Eigenschaft symmetric und die Funktion declare.

Beispiel:

(%i1) S (b, a);
(%o1)                        S(b, a)
(%i2) declare (T, antisymmetric);
(%o2)                         done
(%i3) T (b, a);
(%o3)                       - T(a, b)
(%i4) T (a, c, e, d, b);
(%o4)                   T(a, b, c, d, e)
Funktion: combine (expr)

Terme einer rationalen Funktion, die denselben Nenner haben, werden zusammengefasst.

Beispiel:

(%i1) x^2/(1+x)+2*x/(1+x);
                            2
                           x       2 x
(%o1)                     ----- + -----
                          x + 1   x + 1
(%i2) combine(%);
                             2
                            x  + 2 x
(%o2)                       --------
                             x + 1
Eigenschaft: commutative

declare(f, commutative) deklariert die Funktion f als kommutativ. Zum Beispiel wird f(x, z, y) zu f(x, y, z) vereinfacht. Dies hat denselben Effekt wie die Deklaration symmetric.

Siehe auch die Funktion declare.

Funktion: demoivre (expr)
Optionsvariable: demoivre

Die Funktion demoivre(expr) konvertiert den Ausdruck expr, ohne die Optionsvariable demoivre zu setzen.

Hat die Optionsvariable demoivre den Wert true, werden komplexe Exponentialfunktionen in äquivalente Kreisfunktionen umgewandelt. exp(a + b*%i) wird zu %e^a*(cos(b)+%i*sin(b)) vereinfacht, wenn b frei von der imaginären Einheit %i ist. a und b werden nicht expandiert.

Der Standardwert von demoivre ist false.

Siehe auch die Funktion exponentialize, um trigonometrische und hyperbolische Funktionen in eine Exponentialform zu konvertieren. demoivre und exponentialize können nicht gleichzeitig den Wert true haben.

Funktion: distrib (expr)

Summen werden ausmultipliziert. Im Unterschied zu der Funktion expand wird distrib nur auf der obersten Ebene eines Ausdruckes angewendet und ist daher schneller als expand. Im Unterschied zu der Funktion multthru werden die Summen der obersten Ebenen vollständig ausmultipliziert.

Beispiele:

(%i1) distrib ((a+b) * (c+d));
(%o1)                 b d + a d + b c + a c
(%i2) multthru ((a+b) * (c+d));
(%o2)                 (b + a) d + (b + a) c
(%i3) distrib (1/((a+b) * (c+d)));
                                1
(%o3)                    ---------------
                         (b + a) (d + c)
(%i4) expand (1/((a+b) * (c+d)), 1, 0);
                                1
(%o4)                 ---------------------
                      b d + a d + b c + a c
Optionsvariable: distribute_over

Standardwert: true

Die Optionsvariable distribute_over kontrolliert die Anwendung von Funktionen auf Listen, Matrizen oder Gleichungen. Diese Eigenschaft wird nicht angewendet, wenn distribute_over den Wert false hat.

Beispiele:

Die Funktion sin wird auf eine Liste angewendet.

(%i1) sin([x,1,1.0]);
(%o1)                 [sin(x), sin(1), .8414709848078965]

Die Funktion mod hat zwei Argumente, die auf Listen angewendet werden kann. Die Funktion kann auch auf verschachtelte Listen angewendet werden.

(%i2) mod([x,11,2*a],10);
(%o2)                    [mod(x, 10), 1, 2 mod(a, 5)]
(%i3) mod([[x,y,z],11,2*a],10);
(%o3)       [[mod(x, 10), mod(y, 10), mod(z, 10)], 1, 2 mod(a, 5)]

Anwendung der Funktion floor auf eine Matrix und eine Gleichung.

(%i4) floor(matrix([a,b],[c,d]));
                            [ floor(a)  floor(b) ]
(%o4)                       [                    ]
                            [ floor(c)  floor(d) ]
(%i5) floor(a=b);
(%o5)                         floor(a) = floor(b)

Funktionen mit mehreren Argumenten können auf Listen für eines der Argumente oder alle Argumente angewendet werden.

(%i6) expintegral_e([1,2],[x,y]);
(%o6) [[expintegral_e(1, x), expintegral_e(1, y)], 
       [expintegral_e(2, x), expintegral_e(2, y)]]
Optionsvariable: domain

Standardwert: real

Hat domain den Wert complex, wird sqrt(x^2) nicht zu abs(x) vereinfacht.

Eigenschaft: evenfun
Eigenschaft: oddfun

Erhält eine Funktion oder ein Operator mit der Funktion declare die Eigenschaft evenfun oder oddfun wird die Funktion oder der Operator von Maxima als gerade und ungerade interpretiert. Diese Eigenschaft wird bei der Vereinfachung von Ausdrücken von Maxima angewendet.

Beispiele:

(%i1) o (- x) + o (x);
(%o1)                     o(x) + o(- x)
(%i2) declare (o, oddfun);
(%o2)                         done
(%i3) o (- x) + o (x);
(%o3)                           0
(%i4) e (- x) - e (x);
(%o4)                     e(- x) - e(x)
(%i5) declare (e, evenfun);
(%o5)                         done
(%i6) e (- x) - e (x);
(%o6)                           0
Funktion: expand (expr)
Funktion: expand (expr, p, n)

Expandiert den Ausdruck expr. Produkte von Summen und Potenzen von Summen werden ausmultipliziert. Die Nenner von rationalen Ausdrücken, die Summen sind, werden in ihre Terme aufgespalten. Produkte (kommutative und nicht-kommutative) werden in Summen herein multipliziert.

Für Polynome ist es besser, die Funktion ratexpand zu verwenden, welche für diesen Fall einen effizienteren Algorithmus hat.

maxnegex und maxposex kontrollieren den maximalen negativen und positiven Exponenten, für die ein Ausdruck expandiert wird.

expand(expr, p, n) expandiert expr, wobei maxposex den Wert p und maxnegex den Wert n erhalten.

expon ist der größte negative Exponent, für den ein Ausdruck automatisch expandiert wird. Hat zum Beispiel expon den Wert 4, wird (x+1)^(-5) nicht automatisch expandiert.

expop ist der größte positive Exponent, für den ein Ausdruck automatisch expandiert wird. So wird (x+1)^3 dann automatisch expandiert, wenn expop größer oder gleich 3 ist. Soll (x+1)^n mit der Funktion expand expandiert werden, weil n größer als expop ist, dann ist dies nur möglich, wenn n kleiner als maxposex ist.

expand(expr,0,0) bewirkt eine erneuerte vollständige Vereinfachung des Ausdrucks expr. Der Ausdruck wird nicht erneuert ausgewertet. Im Unterschied zum Kommando ev(expr, noeval) wird eine spezielle Darstellung (zum Beispiel eine CRE-Form) nicht entfernt. Siehe auch ev.

Das expand-Flag wird mit ev verwendet, um einen Ausdruck zu expandieren.

Die Datei simplification/facexp.mac enthält weitere Funktionen wie facsum, factorfacsum und collectterms und Variablen wie nextlayerfactor und facsum_combine, um Ausdrücke zu vereinfachen. Diese Funktionen werden automatisch geladen und erlauben spezielle Expansionen von Ausdrücken. Eine kurze Beschreibung ist in der Datei simplification/facexp.usg enthalten. Eine Demo kann mit demo(facexp) ausgeführt werden.

Beispiele:

(%i1) expr:(x+1)^2*(y+1)^3;
                               2        3
(%o1)                   (x + 1)  (y + 1)
(%i2) expand(expr);
       2  3        3    3      2  2        2      2      2
(%o2) x  y  + 2 x y  + y  + 3 x  y  + 6 x y  + 3 y  + 3 x  y
                                                      2
                                     + 6 x y + 3 y + x  + 2 x + 1
(%i3) expand(expr,2);
               2        3              3          3
(%o3)         x  (y + 1)  + 2 x (y + 1)  + (y + 1)
(%i4) expr:(x+1)^-2*(y+1)^3;
                                   3
                            (y + 1)
(%o4)                       --------
                                   2
                            (x + 1)
(%i5) expand(expr);
            3               2
           y             3 y            3 y             1
(%o5) ------------ + ------------ + ------------ + ------------
       2              2              2              2
      x  + 2 x + 1   x  + 2 x + 1   x  + 2 x + 1   x  + 2 x + 1
(%i6) expand(expr, 2, 2);
                                   3
                            (y + 1)
(%o6)                     ------------
                           2
                          x  + 2 x + 1

Vereinfache einen Ausdruck erneut:

(%i7) expr:(1+x)^2*sin(x);
                                2
(%o7)                    (x + 1)  sin(x)
(%i8) exponentialize:true;
(%o8)                         true
(%i9) expand(expr, 0, 0);
                            2    %i x     - %i x
                  %i (x + 1)  (%e     - %e      )
(%o9)           - -------------------------------
                                 2
Funktion: expandwrt (expr, x_1, …, x_n)

Expandiert den Ausdruck expr in Bezug auf die Variablen x_1, …, x_n. Alle Produkte, die die Variablen enthalten, werden ausmultipliziert. Das Ergebnis ist frei von Produkten von Summen, die nicht frei von den Variablen sind. x_1, …, x_n können Variable, Operatoren oder Ausdrücke sein.

Standardmäßig wird der Nenner eines rationalen Ausdrucks nicht expandiert. Dies kann mit der Optionsvariablen expandwrt_denom kontrolliert werden.

Die Funktion wird automatisch aus der Datei simplification/stopex.mac geladen.

Optionsvariable: expandwrt_denom

Standardwert: false

expandwrt_denom kontrolliert die Behandlung von rationalen Ausdrücken durch die Funktion expandwrt. Ist der Wert true, werden der Zähler und der Nenner eines rationalen Ausdrucks expandiert. Ist der Wert false, wird allein der Zähler expandiert.

Funktion: expandwrt_factored (expr, x_1, …, x_n)

Ist vergleichbar mit der Funktion expandwrt, behandelt aber Ausdrücke verschieden, die Produkte enthalten. expandwrt_factored expandiert nur die Faktoren im Ausdruck expr, die die Variablen x_1, …, x_n enthalten.

Optionsvariable: expon

Standardwert: 0

expon ist der größte negative Exponent für den ein Ausdruck automatisch expandiert wird. Hat zum Beispiel expon den Wert 4, wird (x+1)^(-5) nicht automatisch expandiert. Siehe auch expop.

Funktion: exponentialize (expr)
Optionsvariable: exponentialize

Die Funktion exponentialize konvertiert trigonometrische und hyperbolische Funktion die in dem Ausdruck expr auftreten in Exponentialfunktionen, ohne dass die Optionsvariable exponentialize gesetzt wird.

Hat die Optionsvariable exponentialize den Wert true, werden trigonometrische und hyperbolischen Funktionen in eine Exponentialform konvertiert. Der Standardwert ist false.

demoivre konvertiert komplexe Exponentialfunktionen in trigonometrische und hyperbolische Funktionen. exponentialize und demoivre können nicht gleichzeitig den Wert true haben.

Optionsvariable: expop

Standardwert: 0

expop ist der größte positive Exponent, für den ein Ausdruck automatisch expandiert wird. So wird (x+1)^3 dann automatisch expandiert, wenn expop größer oder gleich 3 ist. Soll (x+1)^n mit der Funktion expand expandiert werden, weil n größer als expop ist, dann ist dies nur möglich, wenn n kleiner als maxposex ist. Siehe auch expon.

Eigenschaft: lassociative

declare(f, lassociative) deklariert f als eine links-assoziative Funktion. Zum Beispiel wird f (f (a,b), f (c, d)) zu f (f (f (a, b), c), d) vereinfacht.

Siehe auch die Eigenschaft rassociative und die Funktion declare.

Eigenschaft: linear

declare(f, linear) deklariert die Funktion f als linear.

Hat die Funktion f ein Argument, dann wird f(x + y) zu f(x) + f(y) und f(a*x) zu a*f(x) vereinfacht.

Ist f eine Funktion mit zwei oder mehr Argumenten, ist die Linearität für das erste Argument definiert. Zum Beispiel wird f(a*x + b, x) zu a f(x, x) + f(1, x) b vereinfacht.

linear ist äquivalent zu additive und outative. Siehe auch opproperties und die Funktion declare.

Beispiel:

(%i1) 'sum (F(k) + G(k), k, 1, inf);
                       inf
                       ====
                       \
(%o1)                   >    (G(k) + F(k))
                       /
                       ====
                       k = 1
(%i2) declare (nounify (sum), linear);
(%o2)                         done
(%i3) 'sum (F(k) + G(k), k, 1, inf);
                     inf          inf
                     ====         ====
                     \            \
(%o3)                 >    G(k) +  >    F(k)
                     /            /
                     ====         ====
                     k = 1        k = 1
Optionsvariable: maxnegex

Standardwert: 1000

maxnegex ist der größte negative Exponent, der von der Funktion expand exandieren wird. Siehe auch maxposex.

Optionsvariable: maxposex

Standardwert: 1000

maxposex ist der größte positive Exponent, der von der Funktion expand expandiert wird. Siehe auch maxnegex.

Eigenschaft: multiplicative

declare(f, multiplicative) deklariert die Funktion f als multiplikativ.

Hat die Funktion f ein Argument, dann wird f(x*y) zu f(x)*f(y) vereinfacht.

Ist f eine Funktion mit zwei oder mehr Argumenten, ist die Multiplikativität für das erste Argument definiert. Zum Beispiel wird f(a*x + b, x) zu f(g(x), x)*f(h(x), x) vereinfacht.

Diese Vereinfachung werden nicht für Ausdrücke der Form product(x[i], i, m, n) ausgeführt.

Siehe auch die Funktion declare.

Beispiel:

(%i1) F2 (a * b * c);
(%o1)                       F2(a b c)
(%i2) declare (F2, multiplicative);
(%o2)                         done
(%i3) F2 (a * b * c);
(%o3)                   F2(a) F2(b) F2(c)
Funktion: multthru (expr)
Funktion: multthru (expr_1, expr_2)

Multipliziert einen oder mehrere Faktoren in eine Summe herein. multthru expandiert keine Potenzen von Summen. multthru ist die effizienteste Methode, um Produkte von Summen auszumultiplizieren. Da Maxima intern die Division als ein Produkt darstellt, kann multthru auch angewendet werden, um einen Nenner in eine Summe hereinzumultiplizieren.

multthru(expr_1, expr_2) multipliziert jeden Term des Ausdrucks expr_2 mit expr_1. Der Ausdruck expr_2 kann dabei eine Summe oder eine Gleichung sein.

Siehe auch die Funktionen expand und function_distrib.

(%i1) x/(x-y)^2 - 1/(x-y) - f(x)/(x-y)^3;
                      1        x         f(x)
(%o1)             - ----- + -------- - --------
                    x - y          2          3
                            (x - y)    (x - y)
(%i2) multthru ((x-y)^3, %);
                           2
(%o2)             - (x - y)  + x (x - y) - f(x)
(%i3) ratexpand (%);
                           2
(%o3)                   - y  + x y - f(x)
(%i4) ((a+b)^10*s^2 + 2*a*b*s + (a*b)^2)/(a*b*s^2);
                        10  2              2  2
                 (b + a)   s  + 2 a b s + a  b
(%o4)            ------------------------------
                                  2
                             a b s
(%i5) multthru (%);  /* note that this does not expand (b+a)^10 */
                                        10
                       2   a b   (b + a)
(%o5)                  - + --- + ---------
                       s    2       a b
                           s
(%i6) multthru (a.(b+c.(d+e)+f));
(%o6)            a . f + a . c . (e + d) + a . b
(%i7) expand (a.(b+c.(d+e)+f));
(%o7)         a . f + a . c . e + a . c . d + a . b
Eigenschaft: nary

Erhält eine Funktion oder ein Operator mit der Funktion declare die Eigenschaft nary, werden verschachtelte Anwendungen der Funktion oder des Operators wie zum Beispiel foo(x, foo(y, z)) zu foo(x, y, z) vereinfacht. Die Deklaration als nary unterscheidet sich von der Funktion nary. Während der Funktionsaufruf einen neuen Operator definiert, wirkt sich die Deklaration nur auf die Vereinfachung aus.

Beispiel:

(%i1) H (H (a, b), H (c, H (d, e)));
(%o1)               H(H(a, b), H(c, H(d, e)))
(%i2) declare (H, nary);
(%o2)                         done
(%i3) H (H (a, b), H (c, H (d, e)));
(%o3)                   H(a, b, c, d, e)
Optionsvariable: negdistrib

Standardwert: true

Hat negdistrib den Wert true, wird die Zahl -1 in eine Summe hereinmultipliziert. Zum Beispiel wird -(x + y) zu - y - x vereinfacht. true ist der Standardwert von negdistrib.

Erhält negdistrib den Wert false wird -(x + y) nicht vereinfacht. negdistrib sollte sehr umsichtig und nur in speziellen Fällen für lokale Vereinfachungen genutzt werden.

Systemvariable: opproperties

opproperties ist eine Liste mit den Eigenschaften, die eine Funktion oder ein Operator erhalten kann und die die Vereinfachung der Funktionen und Operatoren kontrollieren. Diese Eigenschaften erhalten die Funktionen und Operatoren mit der Funktion declare. Es gibt weitere Eigenschaften, die Funktionen, Operatoren und Variablen erhalten können. Die Systemvariable features enthält eine vollständige Liste der Eigenschaften, die in Maximas Datenbank eingetragen werden. Darüberhinaus können mit der Funktion declare noch Eigenschaften definiert werden, die in der Lisp-Eigenschaftsliste eingetragen werden.

Die folgenden Eigenschaften sind in der Liste opproperties enthalten und kontrollieren die Vereinfachung von Funktionen und Operatoren:

   linear          additive        multiplicative
   outative        commutative     symmetric      
   antisymmetric   nary            lassociativ
   rassociative    evenfun         oddfun
Eigenschaft: outative

declare(f, outative) deklariert eine Funktion f als outative. Hat der Operator oder die Funktion Argumente mit konstanten Faktoren, so werden diese konstanten Faktoren herausgezogen.

Hat die Funktion f ein Argument, dann wird f(a*x) zu a*f(x) vereinfacht, wenn a ein konstanter Faktor ist.

Ist f eine Funktion mit zwei oder mehr Argumenten, ist die Outativität für das erste Argument definiert. Zum Beispiel wird f(a*g(x), x) zu a*f(g(x),x) vereinfacht, wenn a ein konstanter Faktor ist.

Die Funktionen sum, integrate und limit haben die Eigenschaft outative. Siehe auch die Funktion declare.

Beispiel:

(%i1) F1 (100 * x);
(%o1)                       F1(100 x)
(%i2) declare (F1, outative);
(%o2)                         done
(%i3) F1 (100 * x);
(%o3)                       100 F1(x)
(%i4) declare (zz, constant);
(%o4)                         done
(%i5) F1 (zz * y);
(%o5)                       zz F1(y)
Funktion: radcan (expr)

Die Funktion radcan vereinfacht Ausdrücke, die die Logarithmusfunktion, Exponentialfunktionen und Wurzeln enthalten.

Beispiele:

(%i1) radcan((log(x+x^2)-log(x))^a/log(1+x)^(a/2));
                                           a/2
(%o1)                            log(x + 1)

(%i2) radcan((log(1+2*a^x+a^(2*x))/log(1+a^x)));
(%o2)                                  2

(%i3) radcan((%e^x-1)/(1+%e^(x/2)));
                                     x/2
(%o3)                              %e    - 1
Optionsvariable: radexpand

Standardwert: true

radexpand kontrolliert die Vereinfachung von Wurzeln.

Hat radexpand den Wert all, werden die nten-Wurzeln der Faktoren eines Produktes, die eine n-te Potenz sind, aus der Wurzel herausgezogen. Zum Beispiel vereinfacht sqrt(16*x^2 zu 4*x.

Inbesondere vereinfacht der Ausdruck sqrt(x^2) folgendermaßen:

  • Hat radexpand den Wert all oder wurde assume(x>0) ausgeführt, dann vereinfacht sqrt(x^2) zu x.
  • Hat radexpand den Wert true und domain ist real, dann vereinfacht sqrt(x^2) zu abs(x).
  • Hat radexpand den Wert false oder hat radexpand den Wert true und domain ist complex, dann wird sqrt(x^2) nicht vereinfacht.
Eigenschaft: rassociative

declare(f, rassociative) deklariert die Funktion f als rechts-assioziativ. Zum Beispiel wird f(f(a, b), f(c, d)) zu f(a, f(b, f(c, d))) vereinfacht.

Siehe auch die Eigenschaft lassociative und die Funktion declare.

Funktion: scsimp (expr, rule_1, …, rule_n)

Sequential Comparative Simplification (Methode nach Stoute).

scsimp versucht den Ausdruck expr mit Hilfe der Regeln rule_1, …, rule_n zu vereinfachen. Die Regeln werden nacheinander solange angewendet, bis sich der Ausdruck nicht weiter vereinfacht. Führt keine der Regeln zu einem Erfolg, wird der ursprüngliche Ausdruck zurückgegeben.

example(scsimp) zeigt einige Beispiele.

Optionsvariable: simp

Standardwert: true

simp kontrolliert die Vereinfachung von Ausdrücken. Der Standardwert von simp ist true und Ausdrücke werden vereinfacht. simp ist auch ein Auswertungsschalter für die Funktion ev.

Wird simp als ein Auswertungschalter mit dem Wert false genutzt, dann wird die Vereinfachung nur während der Auswertungsphase unterdrückt. simp kann nicht die Vereinfachung unterdrücken, die sich der Auswertung anschließt.

Beispiele:

Die Vereinfachung wird ausgeschaltet. Der Ausdruck sin(1.0) wird nicht zu einem numerischen Wert vereinfacht. Der Auswertungsschalter simp schaltet die Vereinfachung ein.

(%i1) simp:false;
(%o1)                                false
(%i2) sin(1.0);
(%o2)                              sin(1.0)
(%i3) sin(1.0),simp;
(%o3)                          .8414709848078965

Die Vereinfachung wird wieder eingeschaltet. Der Auswertungsschalter simp kann die Vereinfachung nicht vollständig unterdrücken. In der Ausgabe ist der Ausdruck vereinfacht, aber die Variable x enthält einen nicht vereinfachten Ausdruck, da die Zuweisung noch während der Auswertungsphase des Ausdrucks vorgenommen wurde.

(%i4) simp:true;
(%o4)                                true
(%i5) x:sin(1.0),simp:false;
(%o5)                          .8414709848078965
(%i6) :lisp $X
((%SIN) 1.0)
Eigenschaft: symmetric

declare(f, symmetric) deklariert die Funktion f als symmetrisch. Zum Beispiel wird f(x, z, y) zu f(x, y, z) vereinfacht.

commutative entspricht symmetric Siehe auch die Funktion declare.

Beispiel:

(%i1) S (b, a);
(%o1)                        S(b, a)
(%i2) declare (S, symmetric);
(%o2)                         done
(%i3) S (b, a);
(%o3)                        S(a, b)
(%i4) S (a, c, e, d, b);
(%o4)                   S(a, b, c, d, e)
Funktion: xthru (expr)

Die Terme einer Summe des Ausdrucks expr werden so zusammengefasst, dass sie einen gemeinsamen Nenner haben. Produkte und Potenzen von Summen werden dabei nicht expandiert. Gemeinsame Faktoren im Zähler und Nenner werden gekürzt.

Es kann vorteilhaft sein, vor dem Ausführen von ratsimp zunächst mit xthru die gemeinsamen Faktoren eines rationalen Ausdrucks zu kürzen.

Siehe auch die Funktion combine.

Beispiele:

(%i1) ((x+2)^20 - 2*y)/(x+y)^20 + (x+y)^(-19) - x/(x+y)^20;
                                20
                 1       (x + 2)   - 2 y       x
(%o1)        --------- + --------------- - ---------
                    19             20             20
             (y + x)        (y + x)        (y + x)
(%i2) xthru (%);
                                 20
                          (x + 2)   - y
(%o2)                     -------------
                                   20
                            (y + x)

Nächste: , Vorige:   [Inhalt][Index]