quinta-feira, 19 de fevereiro de 2009

Tutorial Scilab - 4 [Vetores e Matrizes - 3]

[English version here.]

Vamos agora abordar funções mais específicas para manipulação de matrizes.

As funções que mais uso são as seguintes:

  • eye(m,n) - matriz identidade;
  • zeros(m,n) - matriz de zeros (0's);
  • ones(m,n) - matriz de uns (1's);
  • det(X) - determinante;
  • inv(X) - matriz inversa;
  • pinv(A,[tol]) - pseudoinversa;
  • sum(x,[key]) - soma de vetor/matriz (todos os elementos ou sobre um eixo);
  • prod(x,[key]) - produto de vetor/matriz (todos os elementos ou sobre um eixo);
  • mean(x,[key]) - média de vetor/matriz (todos os elementos ou sobre um eixo);
  • stdev(x,[key]) - desvio padrãode vetor/matriz (todos os elementos ou sobre um eixo);
  • geomean(x,[key]) - média geometrica de vetor/matriz (todos os elementos ou sobre um eixo);
  • harmean(x,[key]) - média harmonica de vetor/matriz (todos os elementos ou sobre um eixo);
  • msd(x,[key]) - desvio médio quadrático de vetor/matriz (todos os elementos ou sobre um eixo);
  • rand(m1,m2,.. [,key]) - gerador de números aleatórios;
  • grand(m, n, dist_type [,p1,...,pk]) - gerador de números e sequências aleatórios;
  • find(X) - localiza os índices de valores não-nulos ou verdadeiros (para variáveis booleanas).

  • Como é de se esperar, "cada função é uma função".

    Agora, aos exemplos:

    -->eye(3,3) // matriz identidade 3 x 3*
    ans =

    1. 0. 0.
    0. 1. 0.
    0. 0. 1.

    -->rand(5,2) // matriz (5 linhas e 2 colunas) de números aleatórios com distribuição de probabilidade uniforme entre [0, 1]
    ans =

    0.0683740 0.5442573
    0.5608486 0.2320748
    0.6623569 0.2312237
    0.7263507 0.2164633
    0.1985144 0.8833888

    -->rand(2,5,'normal') // matriz (2 linhas e 5 colunas) de números aleatórios com distribuição normal (Gaussiana) de média = 0 e variância = 1
    ans =

    1.0478272 - 1.4061926 - 1.7350313 - 0.2143931 2.5891773
    - 1.3218008 - 1.0384734 0.5546874 - 2.0735088 0.0424792

    -->det(eye(4,4)) // determinante da matriz identidade 4 x 4
    ans =

    1.

    -->X = rand(5,5) // X é uma matriz (5 x 5) com valores aleatórios entre [0, 1]
    X =

    0.4368588 0.0437334 0.1280058 0.1531217 0.8784126
    0.2693125 0.4818509 0.7783129 0.6970851 0.1138360
    0.6325745 0.2639556 0.2119030 0.8415518 0.1998338
    0.4051954 0.4148104 0.1121355 0.4062025 0.5618661
    0.9184708 0.2806498 0.6856896 0.4094825 0.5896177

    -->det_X = det(X) // det_X é o determinante de X
    det_X =

    - 0.0799884

    -->[py px] = find(eye(3,3)) // px corresponde as posições (eixo - x) dos números não-nulos (diferentes de zero) e py corresponde as posições (eixo - y) destes números
    px =

    1. 2. 3.
    py =

    1. 2. 3.

    -->[py px] = find(~eye(3,3)) // o til '~' é a operação de negação lógica, então (~0) = 1 e (~1) = 0**
    px =

    1. 1. 2. 2. 3. 3.
    py =

    2. 3. 1. 3. 1. 2.


    -->X // a variável X (X = rand(5,5)) definida antes
    X =

    0.4368588 0.0437334 0.1280058 0.1531217 0.8784126
    0.2693125 0.4818509 0.7783129 0.6970851 0.1138360
    0.6325745 0.2639556 0.2119030 0.8415518 0.1998338
    0.4051954 0.4148104 0.1121355 0.4062025 0.5618661
    0.9184708 0.2806498 0.6856896 0.4094825 0.5896177

    -->sum(X,'r') // soma sobre as colunas de X (linha de valores)
    ans =

    2.6624119 1.4850001 1.9160468 2.5074436 2.3435661

    -->sum(X,'c') // soma sobre as linhas de X (coluna de valores)
    ans =

    1.6401323
    2.3403973
    2.1498187
    1.9002098
    2.8839105

    -->sum(X) // soma de todos os elementos de X
    ans =

    10.914469


    Ok, caso os leitores se manifestem, posso fazer novos posts aprofundando mais cada função.

    ------------------
    * Se o comando é dado sem o ponto-e-vírgula ';' então o resultado da comando é apresentado no prompt e armazenado na variável ans.

    ** Operações lógicas são cenas futuras que veremos aqui no MultiSign.

    Um comentário:

    Anônimo disse...

    Parabéns pela iniciativa gostei.