DMUG-Archiv 1998

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

Re: rationale komplexe Ausdruecke

Lieber Albert Faessler,
 ich habe ein notebook angehaengt ("comcon.ma", mit Mma 2.2 fuer
RISC6000 erstellt), in dem Sie Funktionen fuer komplexe Konjugation
u.ae. finden. Die Funktion ReImDecompose sollte Ihren Zweck erfuellen.
Der Unterschied zum ReIm Package ist, dass nur komplexe Variablen
speziell als solche erklaert werden muessen, zum Beispiel als Paar 
{z,zbar}, alle Symbole ansonsten als reell behandelt werden.

Mit freundlichem Gruss,
Ludger Hannibal

Fachbereich Physik der Carl von Ossietzky Universitaet Oldenburg

mailto://hannibal@XXXXXXX.de
http://www.physik.uni-oldenburg.de/Docs/theo2/hannibal.html
(*^

::[     Information =

        "This is a Mathematica Notebook file.  It contains ASCII text, and can be
        transferred by email, ftp, or other text-file transfer utility.  It should
        be read or edited using a copy of Mathematica or MathReader.  If you 
        received this as email, use your mail application or copy/paste to save 
        everything from the line containing (*^ down to the line containing ^*)
        into a plain text file.  On some systems you may have to give the file a 
        name ending with ".ma" to allow Mathematica to recognize it as a Notebook.
        The line below identifies what version of Mathematica created this file,
        but it can be opened using any other version as well.";

        FrontEndVersion = "X Window System Mathematica Notebook Front End Version 2.2";

        X11StandardFontEncoding; 
        
        fontset = title, inactive, noPageBreakBelow, noPageBreakInGroup, nohscroll, preserveAspect, groupLikeTitle, 
center, M7, bold, e8,  48, fontName, "times";
        fontset = subtitle, inactive, noPageBreakBelow, noPageBreakInGroup, nohscroll, preserveAspect, groupLikeTitle, 
center, M7, bold, e6,  36, fontName, "times";
        fontset = subsubtitle, inactive, noPageBreakBelow, noPageBreakInGroup, nohscroll, preserveAspect, 
groupLikeTitle, center, M7, italic, e6,  24, fontName, "times";
        fontset = section, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, grayBox, M31, bold, 
a20,  36, fontName, "times";
        fontset = subsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, blackBox, M24, 
bold, a15,  24, fontName, "times";
        fontset = subsubsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, whiteBox, 
M21, bold, a12,  18, fontName, "times";
        fontset = text, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7,  24, fontName, "times";
        fontset = smalltext, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7,  18, fontName, "times";
        fontset = input, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeInput, M42, N23, bold,  24, fontName, 
"courier";
        fontset = output, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, 
L-5,  24, fontName, "courier";
        fontset = message, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23,  24, 
fontName, "courier";
        fontset = print, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23,  24, 
fontName, "courier";
        fontset = info, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23,  24, 
fontName, "courier";
        fontset = postscript, PostScript, formatAsPostScript, output, inactive, noPageBreakInGroup, nowordwrap, 
preserveAspect, groupLikeGraphics, M7, l34, w282, h287,  24, fontName, "courier";
        fontset = name, inactive, noPageBreakInGroup, nohscroll, preserveAspect, M7, italic, B65535,  18, fontName, 
"times";
        fontset = header, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, italic,  12, fontName, "times";
        fontset = leftheader,  12, fontName, "times";
        fontset = footer, inactive, nohscroll, noKeepOnOnePage, preserveAspect, center, M7, italic,  12, fontName, 
"times";
        fontset = leftfooter,  12, fontName, "times";
        fontset = help, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7,  18, fontName, "times";
        fontset = clipboard, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7,  18, fontName, "times";
        fontset = completions, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7,  18, fontName, "courier";
        fontset = special1, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7,  12, fontName, "times";
        fontset = special2, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7,  12, fontName, "times";
        fontset = special3, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7,  12, fontName, "times";
        fontset = special4, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7,  12, fontName, "times";
        fontset = special5, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7,  12, fontName, 
"times";paletteColors = 128; automaticGrouping; currentKernel; 
]
:[font = input; initialization; preserveAspect]
*)
ComplexPair[a_]:=(
        If[MatchQ[Head[a],List] && Length[a]==2 
                && MatchQ[Head[a[[1]]],Symbol]
                && MatchQ[Head[a[[2]]],Symbol]
                && !MatchQ[a[[1]],a[[2]]],
       If[MatchQ[Head[ComplexSymbols],List],
                        AppendTo[ComplexSymbols,a],
                        ComplexSymbols={a}],
           Print[a," is not a pair of type {symbol1, symbol2} "]
          ];ComplexSymbols)

(*
:[font = input; initialization; preserveAspect]
*)
ComplexPair[a_,b__]:=(ComplexPair[a];ComplexPair[b];
        ComplexSymbols)
        
(*
:[font = input; initialization; preserveAspect; startGroup]
*)
ComplexPair::usage="ComplexPair[{s1,s2},{t1,t2},...]
        adds pairs of symbols to the list ComplexSymbols
        of symbols which are recognized as complex by
        ComplexConjugate. "
(*
:[font = output; output; inactive; preserveAspect; endGroup]
"ComplexPair[{s1,s2},{t1,t2},...] adds pairs of symbols\
 
  to the list ComplexSymbols of symbols which are\
 
  recognized as complex by ComplexConjugate. "
;[o]
ComplexPair[{s1,s2},{t1,t2},...] adds pairs of symbols to\
 
  the list ComplexSymbols of symbols which are recognized\
 
  as complex by ComplexConjugate.
:[font = input; preserveAspect; startGroup]
ComplexPair[{a,b},{c,d}]
:[font = output; output; inactive; preserveAspect; endGroup]
{{a, b}, {c, d}}
;[o]
{{a, b}, {c, d}}
:[font = input; preserveAspect; startGroup]
ComplexPair[x,{v},{i,i}]
:[font = print; inactive; preserveAspect]
x is not a pair of type {symbol1, symbol2} 
{v} is not a pair of type {symbol1, symbol2} 
{i, i} is not a pair of type {symbol1, symbol2} 
:[font = output; output; inactive; preserveAspect; endGroup]
{{a, b}, {c, d}}
;[o]
{{a, b}, {c, d}}
:[font = input; preserveAspect]

:[font = input; initialization; preserveAspect]
*)
ComplexConjugate[expr_]:=
If[MatchQ[Head[ComplexSymbols],List],
        expr/. Join[{Complex[u_,v_]->Complex[u,-v]},
                        Map[# /. List->Rule &,ComplexSymbols],
                        Map[# /. List->Rule &,Map[Reverse,ComplexSymbols]]
                        ],
        expr/. Complex[u_,v_]->Complex[u,-v]    
        ]       
(*
:[font = input; initialization; preserveAspect]
*)
RealPart[x_]:=Simplify[
1/2 x +1/2 ComplexConjugate[x]]
(*
:[font = input; initialization; preserveAspect]
*)
ImaginaryPart[x_]:=Simplify[1/2/I x - 1/2/I ComplexConjugate[x]]
(*
:[font = input; preserveAspect; startGroup]
f=a/(1+2 I b/(1+2 I a))
:[font = output; output; inactive; preserveAspect; endGroup]
a/(1 + (2*I*b)/(1 + 2*I*a))
;[o]
      a
-------------
      2 I b
1 + ---------
    1 + 2 I a
:[font = input; preserveAspect; startGroup]
ComplexConjugate[f]
:[font = output; output; inactive; preserveAspect; endGroup]
a/(1 - (2*I*b)/(1 - 2*I*a))
;[o]
      a
-------------
      2 I b
1 - ---------
    1 - 2 I a
:[font = input; preserveAspect; startGroup]
RealPart[f]
:[font = output; output; inactive; preserveAspect; endGroup]
(a*(1 + 4*a^2 + 4*a*b))/(1 + 4*a^2 + 8*a*b + 4*b^2)
;[o]
           2
 a (1 + 4 a  + 4 a b)
-----------------------
       2              2
1 + 4 a  + 8 a b + 4 b
:[font = input; preserveAspect; startGroup]
ImaginaryPart[f]
:[font = output; output; inactive; preserveAspect; endGroup]
(-2*a*b)/(1 + 4*a^2 + 8*a*b + 4*b^2)
;[o]
        -2 a b
-----------------------
       2              2
1 + 4 a  + 8 a b + 4 b
:[font = input; initialization; preserveAspect]
*)
ReImDecompose[x_]:=RealPart[x]+I ImaginaryPart[x]
(*
:[font = input; preserveAspect; startGroup]
ReImDecompose[f]
:[font = output; output; inactive; preserveAspect; endGroup]
(-2*I*a*b)/(1 + 4*a^2 + 8*a*b + 4*b^2) + 
 
  (a*(1 + 4*a^2 + 4*a*b))/(1 + 4*a^2 + 8*a*b + 4*b^2)
;[o]
                                     2
       -2 I a b            a (1 + 4 a  + 4 a b)
----------------------- + -----------------------
       2              2          2              2
1 + 4 a  + 8 a b + 4 b    1 + 4 a  + 8 a b + 4 b
^*)
Verweise:
rationale komplexe Ausdruecke
Faessler Albert, 12.03.1997

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

DMUG-Archiv, http://www.mathematica.ch/dmug-liste.html; Letzte Änderung: 08.09.2003 20:44