File: Simplification.de.texi

package info (click to toggle)
maxima 5.49.0%2Bdsfg-3
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 128,992 kB
  • sloc: lisp: 437,845; fortran: 14,665; tcl: 10,143; sh: 4,598; makefile: 2,206; ansic: 447; java: 374; python: 262; perl: 201; xml: 60; awk: 28; sed: 15; javascript: 2
file content (1020 lines) | stat: -rw-r--r-- 38,034 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
@c -----------------------------------------------------------------------------
@c File        : Simplification.de.texi
@c License     : GNU General Public License (GPL)
@c Language    : German
@c Original    : Simplification.texi revision 1.27
@c Translation : Dr. Dieter Kaiser
@c Date        : 17.10.2010
@c Revision    : 11.05.2011
@c 
@c This file is part of Maxima -- GPL CAS based on DOE-MACSYMA
@c -----------------------------------------------------------------------------

@menu
* Einf@"uhrung in die Vereinfachung::
* Funktionen und Variablen f@"ur die Vereinfachung::
@end menu

@c -----------------------------------------------------------------------------
@node Einf@"uhrung in die Vereinfachung, Funktionen und Variablen f@"ur die Vereinfachung, Vereinfachung, Vereinfachung
@section Einf@"uhrung in die Vereinfachung
@c -----------------------------------------------------------------------------

Nach der Auswertung einer Eingabe, die in @ref{Auswertung} beschrieben ist,
schlie@ss{}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@"ucke 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 @mxref{', Quote-Operator} @code{'} unterdr@"uckt werden.
Entsprechend kann die Vereinfachung eines Ausdrucks mit der Optionsvariablen
@mref{simp} kontrolliert werden.

Beispiele:

Im ersten Beispiel wird die Auswertung mit dem Quote-Operator unterdr@"uckt.
Das Ergebnis ist eine Substantivform f@"ur die Ableitung.  Im zweiten Beispiel
ist die Vereinfachung unterdr@"uckt.  Die Ableitung wird ausgef@"uhrt, da es
sich um eine Auswertung handelt.  Das Ergebnis wird jedoch nicht zu @code{2*x} 
vereinfacht.

@example
(%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
@end example

F@"ur jede mathematischen Funktion oder Operator hat Maxima intern eine eigene
Routine, die f@"ur 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 @mref{exp} wird von den folgenden
Optionsvariablen kontrolliert: @mrefcomma{%enumer} @mrefcomma{%emode}@w{}
@mrefcomma{%e_to_numlog} @mrefcomma{radexpand} @mrefcomma{logsimp} und
@mrefdot{demoivre}  Im ersten Beispiel wird der Ausdruck mit der 
Exponentialfunktion nicht vereinfacht.  Im zweiten Beispiel vereinfacht
Maxima ein Argument @code{%i*%pi/2}.

@example
(%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
@end example

Zus@"atzlich zu der Vereinfachung von einzelnen mathematischen Funktionen und
Operatoren, die automatisch von Maxima ausgef@"uhrt werden, kennt Maxima
Funktionen wie @mref{expand} oder @mrefcomma{radcan} die auf Ausdr@"ucke
angewendet werden, um spezielle Vereinfachungen vorzunehmen.

Beispiel:

@example
(%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)
@end example

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

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

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

Dar@"uber hinaus haben auch die Fakten und die Eigenschaften des aktuellen
Kontextes Einfluss auf die Vereinfachung von Ausdr@"ucken.  Siehe dazu die
Ausf@"uhrungen in @ref{Maximas Datenbank}.

Beispiel:

Die Sinusfunktion vereinfacht f@"ur ein ganzzahliges Vielfaches von @code{%pi}
zum Wert @code{0}.  Erh@"alt das Symbol @code{n} die Eigenschaft @code{integer},
wird die Sinusfunktion entsprechend vereinfacht.

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

F@"uhren alle oben genannten M@"oglichkeiten nicht zu dem gew@"unschten
Ergebnis, kann der Nutzer Maxima um weitere Regeln f@"ur die Vereinfachung
erweitern.  Diese M@"oglichkeiten werden in @ref{Muster und Regeln} erl@"autert.

@c -----------------------------------------------------------------------------
@node Funktionen und Variablen f@"ur die Vereinfachung, , Einf@"uhrung in die Vereinfachung, Vereinfachung
@section Funktionen und Variablen f@"ur die Vereinfachung
@c -----------------------------------------------------------------------------

@c --- 09.10.2010 DK -----------------------------------------------------------
@anchor{additive}
@defvr {Eigenschaft} additive

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

Ist @code{f} eine Funktion mit zwei oder mehr Argumenten, ist die
Additivit@"at f@"ur das erste Argument definiert.  Zum Beispiel wird
@code{f(x + y,a + b)} zu @code{f(y, b + a) + f(x, b + a)} vereinfacht.

Siehe die Funktion @mrefdot{declare}

Beispiel:

@example
(%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)
@end example
@end defvr

@c --- 09.10.2010 DK -----------------------------------------------------------
@anchor{antisymmetric}
@defvr {Eigenschaft} antisymmetric

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

Siehe auch die Eigenschaft @mref{symmetric} und die Funktion @mrefdot{declare}

Beispiel:

@example
(%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)
@end example
@end defvr

@c --- 11.12.2010 DK -----------------------------------------------------------
@anchor{combine}
@deffn {Funktion} combine (@var{expr})

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

Beispiel:

@example
(%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
@end example
@end deffn

@c --- 09.10.2010 DK -----------------------------------------------------------
@anchor{commutative}
@defvr {Eigenschaft} commutative

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

Siehe auch die Funktion @mrefdot{declare}
@end defvr

@c --- 09.10.2010 DK -----------------------------------------------------------
@anchor{demoivre}
@deffn  {Funktion} demoivre (@var{expr})
@deffnx {Optionsvariable} demoivre

Die Funktion @code{demoivre(expr)} konvertiert den Ausdruck @var{expr}, ohne
die Optionsvariable @code{demoivre} zu setzen.

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

Der Standardwert von @code{demoivre} ist @code{false}.

Siehe auch die Funktion @mrefcomma{exponentialize} um trigonometrische und
hyperbolische Funktionen in eine Exponentialform zu konvertieren.
@code{demoivre} und @code{exponentialize} k@"onnen nicht gleichzeitig den Wert
@code{true} haben.
@end deffn

@c --- 09.10.2010 DK -----------------------------------------------------------
@anchor{function_distrib}
@deffn {Funktion} distrib (@var{expr})

Summen werden ausmultipliziert.  Im Unterschied zu der Funktion
@mref{expand} wird @code{distrib} nur auf der obersten Ebene eines Ausdruckes
angewendet und ist daher schneller als @code{expand}.  Im Unterschied zu der
Funktion @mref{multthru} werden die Summen der obersten Ebenen vollst@"andig
ausmultipliziert.

Beispiele:

@example
(%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
@end example
@end deffn

@c --- 17.10.2010 DK -----------------------------------------------------------
@anchor{distribute_over}
@defvr {Optionsvariable} distribute_over
Standardwert: @code{true}

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

Beispiele:

Die Funktion @mref{sin} wird auf eine Liste angewendet.

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

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

@example
(%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)]
@end example

Anwendung der Funktion @mref{floor} auf eine Matrix und eine Gleichung.

@example
(%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)
@end example

Funktionen mit mehreren Argumenten k@"onnen auf Listen f@"ur eines der Argumente
oder alle Argumente angewendet werden.

@example
(%i6) expintegral_e([1,2],[x,y]);
(%o6) [[expintegral_e(1, x), expintegral_e(1, y)], 
       [expintegral_e(2, x), expintegral_e(2, y)]]
@end example
@end defvr

@c --- 17.10.2010 DK -----------------------------------------------------------
@anchor{domain}
@defvr {Optionsvariable} domain
Standardwert: @code{real}

Hat @code{domain} den Wert @code{complex}, wird @code{sqrt(x^2)} nicht zu
@code{abs(x)} vereinfacht.
@end defvr

@c --- 06.02.2011 DK -----------------------------------------------------------
@anchor{evenfun}
@anchor{oddfun} 
@defvr  {Eigenschaft} evenfun
@defvrx {Eigenschaft} oddfun

Erh@"alt eine Funktion oder ein Operator mit der Funktion @mref{declare} die
Eigenschaft @code{evenfun} oder @code{oddfun} wird die Funktion oder der
Operator von Maxima als gerade und ungerade interpretiert.  Diese Eigenschaft
wird bei der Vereinfachung von Ausdr@"ucken von Maxima angewendet.

Beispiele:

@example
(%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
@end example
@end defvr

@c --- 17.10.2010 DK -----------------------------------------------------------
@anchor{expand}
@deffn  {Funktion} expand (@var{expr})
@deffnx {Funktion} expand (@var{expr}, @var{p}, @var{n})

Expandiert den Ausdruck @var{expr}.  Produkte von Summen und Potenzen von Summen
werden ausmultipliziert.  Die Nenner von rationalen Ausdr@"ucken, die Summen 
sind, werden in ihre Terme aufgespalten.  Produkte (kommutative und 
nicht-kommutative) werden in Summen herein multipliziert.

F@"ur Polynome ist es besser, die Funktion @mref{ratexpand} zu verwenden, welche
f@"ur diesen Fall einen effizienteren Algorithmus hat.

@mref{maxnegex} und @mref{maxposex} kontrollieren den maximalen negativen und
positiven Exponenten, f@"ur die ein Ausdruck expandiert wird.

@code{expand(@var{expr}, @var{p}, @var{n})} expandiert @var{expr}, wobei 
@code{maxposex} den Wert @var{p} und @code{maxnegex} den Wert @var{n} erhalten.

@mref{expon} ist der gr@"o@ss{}te negative Exponent, f@"ur den ein Ausdruck
automatisch expandiert wird.  Hat zum Beispiel @code{expon} den Wert 4, wird 
@code{(x+1)^(-5)} nicht automatisch expandiert.

@mref{expop} ist der gr@"o@ss{}te positive Exponent, f@"ur den ein Ausdruck
automatisch expandiert wird.  So wird @code{(x+1)^3} dann automatisch
expandiert, wenn @code{expop} gr@"o@ss{}er oder gleich 3 ist.  Soll 
@code{(x+1)^n} mit der Funktion @code{expand} expandiert werden, weil @code{n}
gr@"o@ss{}er als @code{expop} ist, dann ist dies nur m@"oglich, wenn @code{n}
kleiner als @code{maxposex} ist.

@code{expand(expr,0,0)} bewirkt eine erneuerte vollst@"andige Vereinfachung 
des Ausdrucks @var{expr}.  Der Ausdruck wird nicht erneuert ausgewertet.  Im 
Unterschied zum Kommando @code{ev(expr, noeval)} wird eine spezielle Darstellung
(zum Beispiel eine CRE-Form) nicht entfernt.  Siehe auch @mref{resimplify} und
@mrefdot{ev}

Das @code{expand}-Flag wird mit @code{ev} verwendet, um einen Ausdruck zu 
expandieren.

Die Datei @file{simplification/facexp.mac} enth@"alt weitere Funktionen wie 
@mrefcomma{facsum} @mref{factorfacsum} und @mref{collectterms} und Variablen wie
@mref{nextlayerfactor} und @mref{facsum_combine}, um Ausdr@"ucke zu
vereinfachen.  Diese Funktionen werden automatisch geladen und erlauben
spezielle Expansionen von Ausdr@"ucken.  Eine kurze Beschreibung ist in der 
Datei @file{simplification/facexp.usg} enthalten.  Eine Demo kann mit
@code{demo(facexp)} ausgef@"uhrt werden.

Beispiele:

@example
(%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;
@group
                                   3
                            (y + 1)
(%o4)                       --------
                                   2
                            (x + 1)
@end group
(%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
@end example

Vereinfache einen Ausdruck erneut:

@example
(%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
@end example
@end deffn

@c --- 17.10.2010 DK -----------------------------------------------------------
@anchor{expandwrt}
@deffn {Funktion} expandwrt (@var{expr}, @var{x_1}, @dots{}, @var{x_n})

Expandiert den Ausdruck @code{expr} in Bezug auf die Variablen @var{x_1}, 
@dots{}, @var{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.  @var{x_1}, @dots{}, @var{x_n} k@"onnen Variable, 
Operatoren oder Ausdr@"ucke sein.

Standardm@"a@ss{}ig wird der Nenner eines rationalen Ausdrucks nicht expandiert.
Dies kann mit der Optionsvariablen @mref{expandwrt_denom} kontrolliert werden.

Die Funktion wird automatisch aus der Datei @file{simplification/stopex.mac}
geladen.
@end deffn

@c --- 17.10.2010 DK -----------------------------------------------------------
@anchor{expandwrt_denom}
@defvr {Optionsvariable} expandwrt_denom
Standardwert: @code{false}

@code{expandwrt_denom} kontrolliert die Behandlung von rationalen Ausdr@"ucken 
durch die Funktion @code{expandwrt}.  Ist der Wert @code{true}, werden der
Z@"ahler und der Nenner eines rationalen Ausdrucks expandiert.  Ist der Wert
@code{false}, wird allein der Z@"ahler expandiert.
@end defvr

@c --- 17.10.2010 DK -----------------------------------------------------------
@anchor{expandwrt_factored}
@deffn {Funktion} expandwrt_factored (@var{expr}, @var{x_1}, @dots{}, @var{x_n})

Ist vergleichbar mit der Funktion @mref{expandwrt}, behandelt aber Ausdr@"ucke 
verschieden, die Produkte enthalten.  @code{expandwrt_factored} expandiert nur
die Faktoren im Ausdruck @code{expr}, die die Variablen @var{x_1}, @dots{},
@var{x_n} enthalten.
@end deffn

@c --- 17.10.2010 DK -----------------------------------------------------------
@anchor{expon}
@defvr {Optionsvariable} expon
Standardwert: 0

@code{expon} ist der gr@"o@ss{}te negative Exponent f@"ur den ein Ausdruck 
automatisch expandiert wird.  Hat zum Beispiel @code{expon} den Wert 4, wird
@code{(x+1)^(-5)} nicht automatisch expandiert.  Siehe auch @mrefdot{expop}
@end defvr

@c --- 17.10.2010 DK -----------------------------------------------------------
@anchor{exponentialize}
@deffn  {Funktion} exponentialize (@var{expr})
@deffnx {Optionsvariable} exponentialize

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

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

@mref{demoivre} konvertiert komplexe Exponentialfunktionen in trigonometrische
und hyperbolische Funktionen.  @code{exponentialize} und @code{demoivre} 
k@"onnen nicht gleichzeitig den Wert @code{true} haben.
@end deffn

@c --- 17.10.2010 DK -----------------------------------------------------------
@anchor{expop}
@defvr {Optionsvariable} expop
Standardwert: 0

@code{expop} ist der gr@"o@ss{}te positive Exponent, f@"ur den ein Ausdruck 
automatisch expandiert wird.  So wird @code{(x+1)^3} dann automatisch
expandiert, wenn @code{expop} gr@"o@ss{}er oder gleich 3 ist.  Soll
@code{(x+1)^n} mit der Funktion @mref{expand} expandiert werden, weil @code{n}
gr@"o@ss{}er als @code{expop} ist, dann ist dies nur m@"oglich, wenn @code{n}
kleiner als @mref{maxposex} ist.  Siehe auch @mrefdot{expon}
@end defvr

@c --- 09.10.2010 DK -----------------------------------------------------------
@anchor{lassociative}
@defvr {Eigenschaft} lassociative

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

Siehe auch die Eigenschaft @mref{rassociative} und die Funktion
@mrefdot{declare}
@end defvr

@c --- 09.10.2010 DK -----------------------------------------------------------
@anchor{linear}
@defvr {Eigenschaft} linear

@code{declare(f, linear)} deklariert die Funktion @code{f} als linear.

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

Ist @code{f} eine Funktion mit zwei oder mehr Argumenten, ist die
Linearit@"at f@"ur das erste Argument definiert.  Zum Beispiel wird
@code{f(a*x + b, x)} zu @code{a f(x, x) + f(1, x) b} vereinfacht.

@code{linear} ist @"aquivalent zu @mref{additive} und @mrefdot{outative}  Siehe
auch @mref{opproperties} und die Funktion @mrefdot{declare}

@need 800
Beispiel:

@example
(%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
@end example
@end defvr

@c --- 18.10.2010 DK -----------------------------------------------------------
@anchor{maxnegex}
@defvr {Optionsvariable} maxnegex
Standardwert: 1000

@code{maxnegex} ist der gr@"o@ss{}te negative Exponent, der von der Funktion 
@mref{expand} exandieren wird.  Siehe auch @mrefdot{maxposex}
@end defvr

@c --- 18.10.2010 DK -----------------------------------------------------------
@anchor{maxposex}
@defvr {Optionsvariable} maxposex
Standardwert: 1000

@code{maxposex} ist der gr@"o@ss{}te positive Exponent, der von der Funktion 
@mref{expand} expandiert wird.  Siehe auch @mrefdot{maxnegex}
@end defvr

@c --- 09.10.2010 DK -----------------------------------------------------------
@anchor{multiplicative}
@defvr {Eigenschaft} multiplicative

@code{declare(f, multiplicative)} deklariert die Funktion @code{f} als 
multiplikativ.

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

Ist @code{f} eine Funktion mit zwei oder mehr Argumenten, ist die
Multiplikativit@"at f@"ur das erste Argument definiert.  Zum Beispiel wird
@code{f(a*x + b, x)} zu @code{f(g(x), x)*f(h(x), x)} vereinfacht.

Diese Vereinfachung werden nicht f@"ur Ausdr@"ucke der Form
@code{product(x[i], i, m, n)} ausgef@"uhrt.

Siehe auch die Funktion @mrefdot{declare}

Beispiel:

@example
(%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)
@end example
@end defvr

@c -----------------------------------------------------------------------------
@anchor{multthru}
@deffn  {Funktion} multthru (@var{expr})
@deffnx {Funktion} multthru (@var{expr_1}, @var{expr_2})

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

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

Siehe auch die Funktionen @mref{expand} und @mrefdot{function_distrib}

@example
(%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
@end example
@end deffn

@c --- 06.02.2011 DK -----------------------------------------------------------
@anchor{property_nary}
@defvr {Eigenschaft} nary

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

Beispiel:

@example
(%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)
@end example
@end defvr

@c --- 18.10.2010 DK -----------------------------------------------------------
@anchor{negdistrib}
@defvr {Optionsvariable} negdistrib
Standardwert: @code{true}

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

Erh@"alt @code{negdistrib} den Wert @code{false} wird @code{-(x + y)}
nicht vereinfacht.  @code{negdistrib} sollte sehr umsichtig und nur in 
speziellen F@"allen f@"ur lokale Vereinfachungen genutzt werden.
@end defvr

@c --- 18.10.2010 DK -----------------------------------------------------------
@anchor{opproperties}
@defvr {Systemvariable} opproperties

@code{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 @mrefdot{declare}  Es gibt weitere Eigenschaften,
die Funktionen, Operatoren und Variablen erhalten k@"onnen.  Die Systemvariable
@mref{features} enth@"alt eine vollst@"andige Liste der Eigenschaften, die in 
Maximas Datenbank eingetragen werden.  Dar@"uberhinaus k@"onnen mit der Funktion
@code{declare} noch Eigenschaften definiert werden, die in der
Lisp-Eigenschaftsliste eingetragen werden.

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

@verbatim
   linear          additive        multiplicative
   outative        commutative     symmetric      
   antisymmetric   nary            lassociativ
   rassociative    evenfun         oddfun
@end verbatim
@end defvr

@c --- 18.10.2010 DK -----------------------------------------------------------
@anchor{outative}
@defvr {Eigenschaft} outative

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

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

Ist @code{f} eine Funktion mit zwei oder mehr Argumenten, ist die
Outativit@"at f@"ur das erste Argument definiert.  Zum Beispiel wird
@code{f(a*g(x), x)} zu @code{a*f(g(x),x)} vereinfacht, wenn @code{a} ein
konstanter Faktor ist.

Die Funktionen @mrefcomma{sum} @mref{integrate} und @mref{limit} haben die
Eigenschaft @code{outative}.  Siehe auch die Funktion @mrefdot{declare}

Beispiel:

@example
(%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)
@end example
@end defvr

@c --- 18.02.2011 DK -----------------------------------------------------------
@anchor{radcan}
@deffn {Funktion} radcan (@var{expr})

@c Simplifies @var{expr}, which can contain logs, exponentials, and radicals, by 
@c converting it into a form which is canonical over a large class of
@c expressions and a given ordering of variables; that is, all functionally
@c equivalent forms are mapped into a unique form.  For a somewhat larger class
@c of expressions, @code{radcan} produces a regular form.  Two equivalent
@c expressions in this class do not necessarily have the same appearance, but
@c their difference can be simplified by @code{radcan} to zero.

@c For some expressions @code{radcan} is quite time consuming.  This is the cost 
@c of exploring certain relationships among the components of the expression for 
@c simplifications based on factoring and partial-fraction expansions of
@c exponents.

@c TODO: AUSFUEHRLICHER FORMULIEREN.

Die Funktion @code{radcan} vereinfacht Ausdr@"ucke, die die Logarithmusfunktion,
Exponentialfunktionen und Wurzeln enthalten.

Beispiele:

@example
(%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
@end example
@end deffn

@c --- 12.11.2010 DK -----------------------------------------------------------
@anchor{radexpand}
@defvr {Optionsvariable} radexpand
Standardwert: @code{true}

@c TODO: DIE DOKUMENTATION IST SO NICHT ZUTREFFEND.

@code{radexpand} kontrolliert die Vereinfachung von Wurzeln.

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

Inbesondere vereinfacht der Ausdruck @code{sqrt(x^2)} folgenderma@ss{}en:

@itemize @bullet
@item
Hat @code{radexpand} den Wert @code{all} oder wurde @code{assume(x>0)} 
ausgef@"uhrt, dann vereinfacht @code{sqrt(x^2)} zu @code{x}.

@item
Hat @code{radexpand} den Wert @code{true} und @mref{domain} ist @code{real},
dann vereinfacht @code{sqrt(x^2)} zu @code{abs(x)}.

@item
Hat @code{radexpand} den Wert @code{false} oder hat @code{radexpand} den Wert
@code{true} und @mref{domain} ist @code{complex}, dann wird @code{sqrt(x^2)}
nicht vereinfacht.
@end itemize
@end defvr

@c --- 18.10.2010 DK -----------------------------------------------------------
@anchor{rassociative}
@defvr {Eigenschaft} rassociative

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

Siehe auch die Eigenschaft @mref{lassociative} und die Funktion
@mrefdot{declare}
@end defvr

@c -----------------------------------------------------------------------------
@anchor{resimplify}
@deffn {Function} resimplify (@var{expr})

Vereinfacht den Ausdruck @var{expr} erneut basierend auf der aktuellen Umgebung.
Diese Funktion ist n@"utzlich, wenn die Faktendatenbank, Optionsvariablen oder
tellsimp-Regeln ge@"andert wurden, seitdem der Ausdruck zuletzt vereinfacht
wurde.

Beispiel:

@example
(%i1) expr : sin(x)^2 + cos(x)^2;
                                  2         2
(%o1)                          sin (x) + cos (x)
(%i2) exponentialize : true;
(%o2)                                true
(%i3) expr;
                                  2         2
(%o3)                          sin (x) + cos (x)
(%i4) resimplify(%);
                     %i x     - %i x 2      %i x     - %i x 2
                  (%e     + %e      )    (%e     - %e      )
(%o4)             -------------------- - --------------------
                           4                      4
(%i5) ratsimp(%);
(%o5)                                  1
@end example
@end deffn

@c --- 12.11.2010 DK -----------------------------------------------------------
@anchor{scsimp}
@deffn {Funktion} scsimp (@var{expr}, @var{rule_1}, @dots{}, @var{rule_n})

Sequential Comparative Simplification (Methode nach Stoute).

@code{scsimp} versucht den Ausdruck @var{expr} mit Hilfe der Regeln 
@var{rule_1}, @dots{}, @var{rule_n} zu vereinfachen.  Die Regeln werden 
nacheinander solange angewendet, bis sich der Ausdruck nicht weiter vereinfacht.
F@"uhrt keine der Regeln zu einem Erfolg, wird der urspr@"ungliche Ausdruck
zur@"uckgegeben.

@code{example(scsimp)} zeigt einige Beispiele.
@end deffn

@c --- 07.03.2011 DK -----------------------------------------------------------
@anchor{simp}
@defvr {Optionsvariable} simp
Standardwert: @code{true}

@code{simp} kontrolliert die Vereinfachung von Ausdr@"ucken.  Der Standardwert 
von @code{simp} ist @code{true} und Ausdr@"ucke werden vereinfacht.  @code{simp}
ist auch ein Auswertungsschalter f@"ur die Funktion @mrefdot{ev}

Wird @code{simp} als ein Auswertungschalter mit dem Wert @code{false} genutzt,
dann wird die Vereinfachung nur w@"ahrend der Auswertungsphase unterdr@"uckt.
@code{simp} kann nicht die Vereinfachung unterdr@"ucken, die sich der Auswertung
anschlie@ss{}t.

Beispiele:

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

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

Die Vereinfachung wird wieder eingeschaltet.  Der Auswertungsschalter 
@code{simp} kann die Vereinfachung nicht vollst@"andig unterdr@"ucken.  In der 
Ausgabe ist der Ausdruck vereinfacht, aber die Variable @code{x} enth@"alt einen
nicht vereinfachten Ausdruck, da die Zuweisung noch w@"ahrend der 
Auswertungsphase des Ausdrucks vorgenommen wurde.

@example
(%i4) simp:true;
(%o4)                                true
(%i5) x:sin(1.0),simp:false;
(%o5)                          .8414709848078965
(%i6) :lisp $X
((%SIN) 1.0)
@end example
@end defvr

@c --- 09.10.2010 DK -----------------------------------------------------------
@anchor{symmetric}
@defvr {Eigenschaft} symmetric

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

@mref{commutative} entspricht @code{symmetric}  Siehe auch die Funktion
@mrefdot{declare}

Beispiel:

@example
(%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)
@end example
@end defvr

@c --- 18.10.2010 DK -----------------------------------------------------------
@anchor{xthru}
@deffn {Funktion} xthru (@var{expr})

Die Terme einer Summe des Ausdrucks @var{expr} werden so zusammengefasst, dass
sie einen gemeinsamen Nenner haben.  Produkte und Potenzen von Summen werden
dabei nicht expandiert.  Gemeinsame Faktoren im Z@"ahler und Nenner werden
gek@"urzt.

Es kann vorteilhaft sein, vor dem Ausf@"uhren von @mref{ratsimp} zun@"achst mit
@code{xthru} die gemeinsamen Faktoren eines rationalen Ausdrucks zu k@"urzen.

Siehe auch die Funktion @mrefdot{combine}

Beispiele:

@example
(%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)
@end example
@end deffn

@c --- End of file Simplifications.de.texi -------------------------------------