2ª Aula Prática de TFCOMP-II

Comecem por criar e guardar em disco um Notebook com o nome TFC2_grupo.nb, onde 'grupo' é o nome do vosso grupo de trabalho. Neste Notebook criem uma célula de título identificando os elementos constituintes do grupo (nome, número e contactos).

Use a função nativa Date[] para gerar uma função data que imprima no Notebook a data de cada dia em que for avaliada, no formato compatível com, por exemplo: \(TraditionalForm\`Quinta, \ 22\ de\ Mar, \ 2001\ às\ 17 : 19\). Guarde essa definição num documento "data.m" donde possa carregar a definição em qualquer altura que o deseje.

\(\(data := 
        Block[
{DL = 
              Date[]\ , 
Ds = {Domingo, Segunda, 
                Terça, Quarta, Quinta, Sexta, Sábado}, 
            Ms = {Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, 
                Dez}, 
NDMs = {31, 28, 31, 30, 31, 30, 31, 
                31, 30, 31, 30, 31}, TDs}, 
TDs = 
            Plus @@ NDMs[[
                  Range[DL[[2]] - 
                      1]]] + 
DL[[3]] + 
\((Quotient[# - 2000, 4] - \ Quotient[Mod[#, 4, 1], 4]\ If[
                          DL[[2]] < 3, 
                          1, 0] + 
365*\((# - 2001)\) &)\)[
                DL[[1]]]; 
Print[
            StringForm["`3` de `2`, `1` às `4`:`5`", 
              Sequence @@ \(({
DL[[1]], 
                    Ms[[
                      DL[[2]]]], 
                    SequenceForm[
                      Ds[[Mod[TDs + 1, 7, 
                          1]]], ", ", 
                      DL[[3]]], 
                    PaddedForm[DL[[4]], 
                      2, NumberPadding -> "0", 
                      NumberSigns -> {"", ""}], 
PaddedForm[DL[[5]], 
                      2, NumberPadding -> "0", 
                      NumberSigns -> {"", ""}]})\)]]];\)\)
data

Save["TFCOMP/data.m", data]

Redefina a função nativa Log[x] de forma que, quando avaliada, execute as regras usuais, por exemplo  Log[((a  b)/(c^n))]->Log[a]+Log[b]-n Log[c]. Como faria para implementar a transformação inversa agora?

Unprotect[Log];
Log[x_ y_] := Log[x] +  Log[y]
\(Log[y_\^\(s_. \ n_. \)] := s\ n\ Log[y]\)
Protect[Log];

log /:  log[x_] + log[y_] := log[x y]
log /:  s_.  n_.  log[x_] := log[(x^(s n))]

Log[x (y^3)/(Sqrt[(z^5)])]

% /. Log -> log

Crie versores  (Subscript[e, r]),  (Subscript[e, ϕ]),  (Subscript[e, θ]) formando uma base ortogonal para o sistema de coordenadas polares esféricas em (ℝ^3). A partir destes defina a matriz A que transforma os versores (Subscript[e, x]), (Subscript[e, y]) e  (Subscript[e, z])do sistema cartesiano de coordenadas nos versores das coordenadas polares esféricas. Mostre que esta matriz A é ortogonal, i.e. (A^(-1)) = (A^T)(matriz transposta). Verifique que o determinante de A é unidade e que as linhas e colunas formam vectores ortogonais entre si.

<< 
      Utilities`Notation`
Sp = Simplify;
TF = 
      TableForm; 
HF = HoldForm;
$Post := 
      If[Head[#] === List, TF[#], #] &
Symbolize[\(z_\& ⇀ \)]

(Overscript[r, ⇀]) = 
          r {Cos[ϕ] Sin[θ], Sin[ϕ] Sin[θ], 
              Cos[θ]};

({{(Subscript[(Overscript[u, ⇀]), r]) = (∂_r) (Overscript[r, ⇀]), \(e\&⇀\_r = \((\(#\/\@\(# . #\) &\)@\ u\&⇀\_r // 
                Sp)\)\)}})
({{(Subscript[(Overscript[u, ⇀]), ϕ]) = (∂_ϕ) (Overscript[r, ⇀]), \(e\&⇀\_ϕ = \((\(\(#\/\@\(# . #\) &\)@\ u\&⇀\_ϕ // Sp\) // PowerExpand)\)\)}})
({{(Subscript[(Overscript[u, ⇀]), θ]) = (∂_θ) (Overscript[r, ⇀]), \(e\&⇀\_θ = \((\(\(#\/\@\(# . #\) &\)@\ 
                    u\&⇀\_θ // Sp\) // PowerExpand)\)\)}})

(Subscript[(Overscript[e, ⇀]), x]) = {1, 0, 0};  (Subscript[(Overscript[e, ⇀]), y]) = {0, 1, 0};  
    (Subscript[(Overscript[e, ⇀]), z]) = {0, 0, 1};

A=({{(Subscript[(Overscript[e, ⇀]), r]) . 
                (Subscript[(Overscript[e, ⇀]), x]), (Subscript[(Overscript[e, ⇀]), ϕ]) . 
                (Subscript[(Overscript[e, ⇀]), x]), (Subscript[(Overscript[e, ⇀]), θ]) . 
                (Subscript[(Overscript[e, ⇀]), x])}, {(Subscript[(Overscript[e, ⇀]), r]) . 
                (Subscript[(Overscript[e, ⇀]), y]), (Subscript[(Overscript[e, ⇀]), ϕ]) . 
                (Subscript[(Overscript[e, ⇀]), y]), (Subscript[(Overscript[e, ⇀]), θ]) . 
                (Subscript[(Overscript[e, ⇀]), y])}, {(Subscript[(Overscript[e, ⇀]), r]) . 
                (Subscript[(Overscript[e, ⇀]), z]), (Subscript[(Overscript[e, ⇀]), ϕ]) . 
                (Subscript[(Overscript[e, ⇀]), z]), (Subscript[(Overscript[e, ⇀]), θ]) . 
                (Subscript[(Overscript[e, ⇀]), z])}})

(Sp[A . Transpose[A]] === Sp[Transpose[A] . A])

Mostre explícitamente que o ângulo formado por dois vectores ae b em (ℝ^3), bem como a magnitude de cada, é invariante para a transformação A definida no problema anterior (de facto isso é uma propriedade de todas as transformações ortogonais!)

({a, b, c} . {x, y, 
              z}) == (A . {a, b, c}) . (A . {x, y, z}) // 
      Sp

Portanto:

(Sqrt[{a, b, c} . {a, b, c}]) == (Sqrt[(A . {a, b, c}) . (A . {a, b, c}) // Sp])

Use as funções matriciais nativas do Mathematica para determinar, dada qualquer matriz Mnão singular, a matriz de transformação S que diagonaliza M, i.e. D = S . M . (S^(-1)) é diagonal. Crie uma função  exp[M] para calcular a exponencial duma matriz a partir desta transformação (note que no referencial emque M é diagonal a exponenciação é trivial). Confirme o resultado obtido com a função nativa MatrixExp[M].

<< Utilities`Notation`
MF = MatrixForm;
HF = HoldForm;
$Post := If[Head[#] === List, MF[#], #] &

Notation[\(z_\^†\) ⟺ Transpose[z_]]

Notation[\(z_\^\(-1\)\) ⟺ Inverse[z_]]

Symbolize[\(M\&~\)]

M=(({{-1, 0, 0}, {0, 2, 1}, {0, 1, 1}}))

A matriz Mé não-singular

Det[M]

Eigensystem[M] representa o conjunto {Val .  próprio,  
        Vector próprio} para M

Eigensystem[M]^†

A matriz S cujas colunas são os vectores próprios de M transforma uma base (Subscript[(OverVector[e]), x]), (Subscript[(OverVector[e]), y]), (Subscript[(OverVector[e]), z])numa em que os vectores  (Subscript[(OverVector[u]), 1]), (Subscript[(OverVector[u]), 2]), (Subscript[(OverVector[u]), 3])são esses vectores próprios de M.

S = (((#[[2]] & /@ Eigensystem[M]^†))^†)

Os  valores próprios de M também são dados por Eigensystem[M]

Egv = #[[1]] & /@ Eigensystem[M]^†

A matriz diagonal \(TraditionalForm\`\(M\&~\)\) cujas entradas são os valores próprios Egv obtém-se simplesmente de

\(\(M\&~\) = S\^\(-1\) . M . S\ \  // Sp\)

Invertendo esta relação obtém-se que

\(M == \((S . \(M\&~\) . S\^\(-1\) // Sp)\)\)

Note agora que \(TraditionalForm\`M\^n == \ S . \ \(M\&~\)\^n . \ S\^\(-1\)\), por exemplo

\(M\^2 == \ \((S . \(M\&~\) . S\^\(-1\))\) . \((S . \(M\&~\) . 
            S\^\(-1\))\) == \ S . \(M\&~\)\^2 . S\^\(-1\)\)

A função (e^x) tem um desenvolvimento em série muito familiar

Series[(E^x), {x, 0, 6}] /. 
      Thread[(Rational[1, #!] & /@ 
              Rg[2, 6]) -> ((1/HF)[#!] & /@ 
              Rg[2, 6])]

Se x for substituído por M, então é fácil de ver que

(1+x+(((x^2))/(2!))+(((x^3))/(3!))+(((x^4))/(4!))+(((x^5))/(5!))+(((x^6))/(6!))+O[x]^7//Normal)/.\(\((x\^k_. )\) :> \((HF[S] . HF[\(M\&~\)]\^k . 
              HF[S\^\(-1\)])\)\)/.(1) -> HF[S] . HF[(S^(-1))]

ou seja, factorizando S e (S^(-1))

\(E\^M == 
      S . E\^\(M\&~\) . S\^\(-1\)\)

Assim (e^M) reduz-se a calcular \(TraditionalForm\`e\^\(M\&~\)\) para a matriz diagonal \(TraditionalForm\`\(M\&~\)\), o que é ainda uma matriz diagonal com entradas iguais à exponencial das de \(TraditionalForm\`\(M\&~\)\), e multplicar tudo à direita e à esquerda por (S^(-1))e S.

\(exp[\(M\&~\)] = DiagonalMatrix[E\^Egv]\)

\(exp[M] = \((S . exp[\(M\&~\)] . S\^\(-1\) // FullSimplify)\)\)

MatrixExp[M] // FullSimplify