Introdução ao Ambiente Matlab
José Demisio Simões da Silva
Novembro de 1997
 

Objetivo:

Observação:

                                                                                 Vá o Índice


Este trabalho baseia-se em um documento público disponível na Internet, nas experiências pessoais do autor, nos manuais do Matlab, no livro Matlab Versão do Estudante  e nas informações disponíveis na página da internet da companhia Mathworks.
 


 
1. Acessando o Matlab
2. Utilizando o MATLAB.
3. Operações com matrizes e vetores
4. Declarações, expressões e variáveis; Salvando uma sessão.
5. Funções de Construção de Matrizes
6. Loops for, while e blocos if
7. Funções Escalares.
8. Funções Vetoriais.
9. Funções Matriciais.
10. Edição de Linha de Comando e Chamada
11. Sub matrizes e notação em dois pontos (:)
12 – Arquivos M
13. Strings, Mensagens de Erro, Entrada.
14. Manipulação de Arquivos M
15. Formato de Saída
16. Cópia
17. Gráficos
Bibliografia


1. Acessando o Matlab
  c:\ > matlab
  >> quit

Em sistemas operacionais pode-se ter o MATLAB em uma janela e o editor em outra.
 
 Índice


2. Utilizando o MATLAB.
Entrando com matrizes  
Introduzindo uma matriz no MATLAB.
 
  • Lista explícita de elementos

  •  

     A = [ 1 2 3; 3 4 5; 6 7 8]   que é a mesma coisa que entrar como a seguir:
     A = [ 1 2 3
           3 4 5
           6 7 8]
     

      Exemplos de funções utilizadas para gerar matrizes: rand, magic, hilb.

    rand(n) gera matriz quadrática de dimensões n x n, aleatória com distribuição uniforme, no intervalo [0,1].
    Ex.:  x=rand(3)

    rand(m,n) gera uma matriz de dimensões m x n.
    Ex:  x=rand(3,4)

    magic(n) cria uma matriz integral de dimensões n x n que é  matriz quadrada (linhas e colunas têm a mesma soma).
    Ex:  x=magic(4)
     

    Ex: x(2,3)
    Esta notação denota um valor na segunda linha e terceira coluna.

    Tente: x(3,5)
     

      Índice
    3. Operações com matrizes e vetores
                                            +  Adição
                                           -  Subtração
                                          *  Multiplicação
                                          ^  Potência
                                           '  Transposição (por exemplo, se A é uma matriz, então A'  é  sua transposta)
                                           \  Divisão à esquerda
                                           /  Divisão à direita
     
        x = A\b é  a solução de A * x = b e, respectivamente,
      x = b/A é  a solução de x * A = b.  
     
        Ex.:   [1,2,3,4] .*[1,2,3,4]  como   [1,2,3,4].^2
     
      Índice
    4. Declarações, expressões e variáveis; Salvando uma sessão.
            variável = expressão, ou simplesmente
          expressão
     
            Ex.: initFF é diferente de initff.  clear var1 var2 var3                     pi                razão entre o perímetro da circunferência e seu diâmetro.
                        inf               infinito, por exemplo, 1/0
                        NaN           Não-numérico, por exemplo, 0/0
                        i e j             i=j=sqrt(-1) (raiz quadrada de –1)
                        realmin      menor número real positivo utilizável
                        realmax      maior número real positivo utilizável
       
     
        Ex.:
    a=rand(3);
    b=rand(5);
    c=rand(20);
    who
    save
    clear
      Ex.:
    who
    load
    who
             >> save dados a b

    dados é o nome do arquivo e as variáveis são : a e b .
     

     Índice

    5. Funções de Construção de Matrizes
                                            eye  matriz identidade
    Ex.: eye(2)

                                          zeros  matriz de zeros
    Ex:   zeros(2,2)

                                          ones  matriz de 1's
    Ex:  ones(2,2)

     x=[1 2 3 1 -1 4];
    diag(x)
      A=[3 11 5; 4 1 -3; 6 2 1]

    diag(A)

    Tente diag(diag(A))
     

    B = [A, zeros(3,2); zeros(2,3), eye(2)]
    Matriz 5 x 5.

      triu  parte triangular superior de uma matriz
    triu(A)

      tril  parte triangular inferior de uma matriz
    tril(A)
     

      rand  matriz gerada aleatoriamente
    rand(5,4)
      hilb  matriz de Hilbert
    hilb(3)

      magic quadrado mágico
    magic(3)

      toeplitz digite help toeplitz
     
    Para ver toeplitz, digite help toeplitz no Matlab.

     Índice


    6. Loops for, while e blocos if
       x=[];n=5;
     for i=1:n, x=[x,i^2], end

    ou
     x=[];n=5;
     for i=1:n
      x=[x,i^2]
     end
     

    Outro exemplo:
    m=3; n=4;
    for i=1:m
      for j=1:n
       H(i,j)=1/(i+j-1);
      end
    end
    H
         while relações
      declarações
     end
    Declarações (grupo de comando) são executadas repetidamente enquanto as relações forem satisfeitas.

    Ex.: Tomando-se um certo a, o seguinte código computa e exibe o menor inteiro não negativo n tal que 2^n >= a:
    n=0;a=3;
    while(2^n<a)
     n=n+1;
    end
    n
     

     if relações
          declarações
     elseif relações
          declarações
     else
         declarações
     end
    Declarações são executadas se a relação for verdadeira.

    if n<0
         parity=0;
    elseif rem(n,2)==0
         parity=2;
    else
         parity=1;
    end
    parity
     
     

              <  menor
              >    maior
              <=  menor ou igual
              >=  maior ou igual
              ==  igual
              ~=  diferente           &     and
              |        or
              ~       not
      Ex.:

    3>5
    ans =
         0
    3<5
    ans =
         1
    3==5
    ans =
         0
    3==3
    ans =
         1
     
     

    a=rand(5)

    a =
        0.9103    0.3282    0.2470    0.0727    0.7665
        0.7622    0.6326    0.9826    0.6316    0.4777
        0.2625    0.7564    0.7227    0.8847    0.2378
        0.0475    0.9910    0.7534    0.2727    0.2749
        0.7361    0.3653    0.6515    0.4364    0.3593

    b=triu(a)

    b =
        0.9103    0.3282    0.2470    0.0727    0.7665
             0        0.6326    0.9826    0.6316    0.4777
             0             0        0.7227    0.8847    0.2378
             0             0             0        0.2727    0.2749
             0             0             0             0        0.3593

    a==b

    ans =
         1     1     1     1     1
         0     1     1     1     1
         0     0     1     1     1
         0     0     0     1     1
         0     0     0     0     1
     
     
     

     if A==B
          comandos
     end
       if any(any(A~=B))
            comandos
     end
    any – retorna "1" se um elemento da matriz for igual a 1.

    ou de forma mais simples,

     if A~=B else
      comandos
     end
     

    all – retorna  1 se todos os elementos da matriz forem diferente de zero.

     Índice


    7. Funções Escalares.
      sin  seno                     asin arcoseno                    exp exponencial      abs valor absoluto
    round arredonda         cos cosseno                      acos arco cosseno   log (log natural)
    sqrt  raíz quadrada      floor arredonda na direção de menos infinito
    tan  tangente               atan arco tangente             rem resto da divisão
    sign  função sinal         ceil arredonda na direção de mais infinito
     
     Índice

     8. Funções Vetoriais.
      a =[ 0.9103    0.3282    0.2470    0.0727    0.7665
           0.7622    0.6326    0.9826    0.6316    0.4777
           0.2625    0.7564    0.7227    0.8847    0.2378
           0.0475    0.9910    0.7534    0.2727    0.2749
           0.7361    0.3653    0.6515    0.4364    0.3593]

    a =
        0.9103    0.3282    0.2470    0.0727    0.7665
        0.7622    0.6326    0.9826    0.6316    0.4777
        0.2625    0.7564    0.7227    0.8847    0.2378
        0.0475    0.9910    0.7534    0.2727    0.2749
        0.7361    0.3653    0.6515    0.4364    0.3593

    mean(a)

    ans =     0.5437    0.6147    0.6714    0.4596    0.4232

    mean(a')'

    ans =
        0.4649
        0.6973
        0.5728
        0.4679
        0.5097
     

    max(a) sum(a) median(a) any(a) min(a) prod(a) all(a)  sort(a) std(a)
    prod – produto dos elementos
    sort – ordena em ordem crescente
    median – mediana

    Tentar:
     max(max(A)) e max(A)
     
      Índice


    9. Funções Matriciais.
      eig  autovalores e autovetores                   chol  fatorização de Cholesky
    svd   decomposição em valor singular        inv  inversa
    lu   fatorização LU                                    qr   fatorização QR
    hess  forma de Hessenberg                       schur decomposição de Schur
    expm  matriz exponencial                          sqrtm matriz de raiz quadrada
    poly   característica polinomial                   det   determinante
    size  tamanho                                            norm  norma 1, norma 2, norma F, norma infinita
    cond  número de condição na norma 2      rank   ranque
      y = eig(a) ou eig(a) produzem um vetor coluna contendo os autovalores da matriz "a".

     y = eig(a)
    y =
       2.7594
       0.9232
      -0.3618 + 0.1449i
      -0.3618 - 0.1449i
      -0.0613

    [U,D] = eig (a) produz uma matriz U cujas colunas são os autovetores de "a" e a matriz diagonal D com os autovalores de "a" na sua diagonal.

     [U,D] = eig (a)

    U =
      Columns 1 through 4
      -0.3454            -0.7798             0.1164 - 0.1629i   0.1164 + 0.1629i
      -0.5604             0.0010             0.0766 + 0.2393i   0.0766 - 0.2393i
      -0.4815             0.4525            -0.5920 - 0.0723i  -0.5920 + 0.0723i
      -0.4198             0.3858             0.6555 - 0.2277i   0.6555 + 0.2277i
      -0.3983            -0.1960            -0.0666 + 0.2348i  -0.0666 - 0.2348i
      Column 5
      -0.4895
      -0.4205
       0.3115
       0.0416
       0.6963
    D =
      Columns 1 through 4
       2.7594                  0                  0                  0
            0             0.9232                  0                  0
            0                  0            -0.3618 + 0.1449i        0
            0                  0                  0            -0.3618 - 0.1449i
            0                  0                  0                  0
      Column 5
            0
            0
            0
            0
      -0.0613
     
      Índice


    10. Edição de Linha de Comando e Chamada
        a=rand(8); flops(0), inv(a); flops

    ans =
            1320

    Se você queria comparar desenhos (plots) das funções y=sin(mx) e y=sin(nx) no intervalo [0,2*pi] para vários m e n, é possível fazer os mesmo com a linha de comando:

    m=2; n=3; x=0:0.01:2*pi; y=sin(m*x); z=sin(n*x); plot(x,y,x,z)
     
     Índice


    11. Sub matrizes e notação em dois pontos (:)
        0.2:0.2:1.2
     5:-1:1
     

    Exemplo: Uma tabela de senos.
    x=[0.0:0.1:2.0]';
    y=sin(x);
    [x y]

    Note que a função sin opera para cada valor de x, assim o seno (coluna da direita) é função do valor de x (coluna da esquerda).
     

    Ex.:
    a=[10 20 30 40; 50 60 70 80; 90 100 110 120; 130 140 150 160]

    a(1:4,3)   corresponde aos 4 valores da coluna 3 da matriz a .
     

    a(:,3)
    a(1:4,:)
      a(:,[2 4])
    que resulta na submatriz com as colunas 2 e 4 da matriz a .
      b=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]

    a(:,[2 4 5])=b(:,1:3)

    As colunas 2, 4 e 5 da matriz a foram substituídas pelas colunas 1, 2 e 3 da matriz b . Note que com este comando a matriz a é apresentada por completo com as modificações ocorridas.
     

    a(:,[2 4])= a(:,[2 4]) * [1 2; 3 4]
    Novamente a matriz é apresentada por completo junto com as modificações. x= [ 1 2 3 4 5 6]
    x=x(6:-1:1)

    Observação:

      Índice
    12 – Arquivos M
        Arquivos Scripts.
        Exemplo: Arquivo M chamado dados.m com as linhas abaixo:

    a= [
    1 2 3 4
    5 6 7 8
    ]

    Executar o arquivo dados.

    Arquivos funções   Exemplo de uma função simples:
    function a = randint1(m,n)
    % RANDINT1 gera uma matriz de números aleatórios
    %   randint1(m,n) retorna uma matriz m x n com valores entre 0 e 9.
    a = floor(10*rand(m,n));

    Uma versão mais generalizada:
    function a = randint2(m,n,a,b)
    % RANDINT2 gera uma matriz de números aleatórios
    %   randint2(m,n) retorna uma matriz m x n com valores entre 0 e 9.
    %   randint(m,n,a,b) retorna entradas entre os inteiros a e b
    if nargin < 3, a=0; b=9; end
    a = floor((b-a+1)*rand(m,n))+a;
    (Digite no editor do Matlab e experimente).
     

    Explicação da função:   function [mean, stdev]= stat(x)
    % STAT Média e Desvio Padrão
    %   Para um vetor x, stat(x) retorna a média e o desvio padrão de x.
    %   Para uma matriz x, stat(x)  retorna dois vetores linha contendo
    %   respectivamente, a média e o desvio padrão de cada coluna.
    [m,n]=size(x);
    if m == 1
     m=n;  % caso de um vetor linha
    end
    mean = sum(x)/m;
    stdev= sqrt(sum(x.^2)/m - mean.^2);
    (Crie um arquivo M e tente este comando para um vetor qualquer.)
            Observação:  function a = mdc(a,b)
    % MDC Máximo Divisor Comum
    %   mdc(a,b) é o máximo divisor comum dos inteiros a e b,
    %   com a e b diferentes de zero.
    a=round(abs(a)); b=round(abs(b))
    if a==0 & b==0
     error('O mdc não é definido quando ambos os número são zero')
    else
     while( b~=0)
      r = rem(a,b);
      a = b; b = r;
     end
    end
        function [b, steps] = bisect(fun, x, tol)
    % BISECT Calcula a raiz de uma função de uma variável pelo método da bisseção.
    %   bisect(fun, x) retorna  uma raiz da função. fun é uma string contendo o nome
    %   nome de uma função de valor real, de uma variável real; funções ordinárias
    %   são definidas em arquivos M.
    %   x é um valor inicial (chute). O valor retornado está perto de um ponto
    %   onde a fun muda de sinal. Por exemplo,
    %   bisect('sin', 3) é PI. Note as aspas em torno de sin.
    %
    %   Um terceiro argumento opcional especifica uma tolerância para a precisão
    %   relativa do resultado. O padrão é eps (valor padrão do Matlab para precisão
    %   em ponto flutuante).
    %   Um segundo argumento de saída opcional dá um matriz contendo a observação
    %   dos passos de execução; as linhas são da forma [c f(c)].

    % Inicialização
    if nargin < 3 , tol = eps; end
    trace = (nargout == 2)
    if x ~=0, dx = x/20; else, dx = 1/20; end
    a = x – dx; fa = feval(fun,a);
    b = x + dx; fb= feval(fun,b);

    % Ache a mudança de sinal
    while (fa > 0) == (fb > 0)
     dx = 2.0*dx;
     a = x – dx; fa = feval(fun,a);
     if (fa > 0) ~= (fb > 0), break; end
     b=x+dx; fb=feval(fun,b);
    end
    if trace, stpes=[a fa; b fb]; end

    % Loop Principal
    while abs(b –a) > 2.0 * tol * max(abs(b),1.0)
     c = a + 0.5*(b-a); fc = feval(fun,c);
     if trace, steps = [steps; [c fc]]; end
     if (fb > 0) == (fc > 0)
      b =c; fb = fc;
     else
      a =c; fa =fc;
     end
    end
     

    type eig
    eig is a built-in function.

    type randint1
    function a = randint1(m,n)
    % RANDINT gera uma matriz de números aleatórios
    % randint(m,n) retorna uma matriz m x n com valores entre 0 e 9.
    a = floor(10*rand(m,n));
     
     Índice


    13. Strings, Mensagens de Erro, Entrada.
      Exemplo: s = 'Este e um teste.'
      disp('Esta mensagem esta sendo apresentada')
      error('A matriz deve ser simetrica')

    Observação:
    Dentro de um arquivo M esta mensagem pára a execução e sai do arquivo M.
     
     

    Exemplo:
    iter = input("Entre o numero de interacoes : ')

    Observação: O comando input não funciona com o Notebook (ambiente vinculado ao Microsoft Word).
     
     Índice


    14. Manipulação de Arquivos M
        Ex.: !dir, !rename, etc.
           

    Observação:

    Os arquivos M devem estar acessíveis ao Matlab. Nas instalações em mainframe e em rede de workstations, os arquivos M pessoais que são armazenados em um subdiretório da área do usuário nomeado <matlab>, por exemplo, serão acessíveis ao Matlab a partir de um diretório no qual o usuário está.

     Índice


    15. Formato de Saída
      format short      ponto fixo com 4 casas decimais (o padrão)   35.8333
    format long       ponto fixo com 14 casas decimais                     35.83333333333334
    format short e   notação científica com 4 casas decimais         3.5833e+01
    format long e    notação científica com 15 casas decimais       35.83333333333334e+01
    format hex         hexadecimal                                                         4041eaaaaaaaaaab
    format bank      duas casa decimais                                              35.83
    format rat          aproximação racional                                          215/6
    format +            positivo, negativo ou zero                                +
     
       
     Índice
    16. Cópia
         diary  <nome do arquivo> diary off - que desabilita a opção de cópia. Para continuar com a cópia, é suficiente digitar:
    diary on - que o Matlab volta a escrever no arquivo.
        Índice
    17. Gráficos
      Gráficos em Planos:
      Exemplo:

    x=-4:.01:4;
    y=sin(x);
    plot(x,y)

    x é uma partição do domínio com tamanho de grade de 0.01; y é um vetor que dá os valores do seno nos nós da partição (relembre que o seno opera em função do ponto).
     

    Ex.: Desenhar o gráfico de y=exp(-x.^2) no intervalo –1.5 a 1.5.
    x = -1.5:0.01:1.5;
    y= exp(-x.^2);
    plot(x,y)
     

    Note o comando .^ significando operação ponto do vetor x.
     

    Ex.:
    t=0:0.001:2*pi;
    x=cos(3*t);
    y=sin(2*t);
    plot(x,y)
         title   título do gráfico
     xlabel  rótulo do eixo x
     ylabel  rótulo do eixo y
     gtext   texto posicionado interativamente
     text   posiciona texto na posição especificada
     

    Exemplos:
    title ('Funcao y = sin(2*x)') gera o título do gráfico.
    gtext('A Funcao') permite o posicionamento do texto pelo o mouse ou as teclas de seta. (Pressionando qualquer tecla posiciona-se o texto no local escolhido.)
     
     

    axis(c) ajusta o escalonamento dos eixos para os limites definidos no vetor c.

    Por padrão o comando axis congela o escalonamento atual para os gráficos subsequentes; axis('auto') - retorna-se ao auto escalonamento.

    axis('square') - garante que a mesma escala é usada para ambos os eixos.
    axis(image) - apresenta imagem com a mesma relação de aspecto da imagem.
    axis off  - desativa os eixos
    axis on - ativa os eixos.

    Para outras características do comando axis veja help axis.
     

    Ex.:
    x=0:0.01:2*pi;
    y1=sin(x);
    y2=sin(2*x);
    y3=sin(4*x);
    plot(x,y1,x,y2,x,y3)
    Ex: É possível também formar um vetor Y contendo os valores funcionais como colunas:

    x=0:0.01:2*pi;
    Y=[sin(x)', sin(2*x)', sin(4*x)'];
    plot(x,Y)
     
     

    hold - congela a tela do gráfico atual de forma que gráficos subsequentes são superimpostos sobre o atual
    hold novamente desabilita-se a opção.
    hold on – habilita superposição de gráficos
    hold off – desabilita superposição de gráficos
      x=0:0.01:2*pi;
    y1=sin(x);
    y2=sin(2*x);
    y3=sin(4*x);
    plot(x,y1,'--',x,y2,'*',x,y3,'+')
      Tipos de linha:  sólido (-), tracejado (--), pontilhado (:), traço e ponto (-.)
    Tipos de Marcas:   ponto (.), sinal de adição (+), asterisco (*), circulo (o), letra x (x)
      x=0:0.01:2*pi;
    y1=sin(x);
    y2=sin(2*x);
    y3=sin(3*x);
    y4=sin(4*x)+cos(x);
    y5=cos(2*x)+sin(3*x);
    subplot(2,2,1), plot(y1)
    subplot(2,2,2), plot(y2)
    subplot(2,2,3), plot(y3)
    subplot(2,2,4), plot(y4)
      Impressão de Gráficos.

     O comando print permite que se faça uma impressão de uma figura na impressora ou para um arquivo, em algum formato. Digite help print para maiores detalhes do comando print.

    Gráficos em Malhas 3D

        [x,y]=meshgrid(xx,yy);  Por exemplo, digite e execute o código abaixo, com avaliação da função
    z=exp(-x.^2-y.^2) sobre o quadrado definido por [-2,2] x [-2,2].
    xx=-2:.1:2;
    yy=xx;
    [x,y]=meshgrid(xx,yy);
    z=exp(-x.^2-y.^2);
    mesh(z)
      [x,y]=meshgrid(-2:.1:2, -2:.1:2);
      Ex.
    x=rand(3,20);
    plot3(x(1,:),x(2,:),x(3,:))
     
      Índice
    Bibliografia

    Sigmon, K. Matlab Primer. University of Florida. 1992

    Hanselman, D.; Littlefield, B. Matlab Versão do Estudante: Guia do Usuário. Makron Books, São Paulo, 1997.

    Leonard, N.E.; Levine, W.S.  Using Matlab to Analyze and Design Control Systems. The Mathworks, Addison Wesley, 1995.

    Site na internet.
    http://www.mathworks.com
    http://www.mathworks.com/education/