nextupprevious
Next:Recursos GráficosUp:Tutorial Previous:M-Files: criando seus próprios programas e funções 

IF, FOR e WHILE

     Como qualquer linguagem de programação, o MATLAB tem comandos específicos para o controle do fluxo do algoritmo: IF, FOR e WHILE.  Esses comandos são similares aos encontrados em outras linguagens como C ou Pascal, e sua sintaxe é bastante simples.
      A sintaxe do IF é
    if  teste
        ..........
    elseif
        ..........
    else
        ..........
    end

    O elseif e o else  não são obrigatórios,  mas o end é.  O if (assim como o for e o while)  pode ser usado tanto em linhas de comando quanto em textos de programas - onde serão mais úteis de fato !

  A sintaxe do FOR é
    for  variavel = vetor ,
        ..........
    end

    O valor de variavel  recebe o conteúdo de cada coluna de vetor sequencialmente e, para cada conteúdo que receba, executa o corpo do FOR.  Tipicamente o FOR tem o seguinte formato :

    for i = 1:10,
        disp(  i*i );
    end
    O loop acima é executado 10 vezes,  com a variável assumindo o valor 1 no primeiro loop, 2 no segundo loop, 3 no terceiro, etc.   O comando disp executa um display do argumento,  i2 no caso.  Portanto esse loop simples imprime os 10 primeiros quadrados perfeitos na janela Command Window.

    A sintaxe do WHILE  é simples;
    while teste,
        ..........
    end

    O MATLAB também possui outros recursos para facilitar o controle do fluxo do algoritmo.  São :




 

Exemplo:  cálculo da MEDIANA

    Vamos a um exemplo :  o cálculo da mediana de um conjunto de números.   A mediana, assim como a média, é uma medida de tendência central mas é menos sensível a valores espúrios,  como por exemplo vindo de alguma medida mal sucedida.  O cálculo da mediana é simples :  ordena-se os números por ordem ascendente e a mediana é o valor "do meio"  do conjunto ordenado.  Ou seja a mediana de v = [1 2 3 4 5]  é 3.    A mediana de v = [1  2  3  4  5  6]  é  4  (como v tem um número par de elementos,  temos que "chutar" qual é o elemento "do meio".  Tomaremos como a o mais a esquerda dos dois elementos centrais).
    Uma algoritmo para se calcular a mediana do vetor v é
    ________________   mediana 1   _______________________
    function mediana = Mediana(v)

     v_ordenado = sort(v);      % ordena v em ordem ascendente
     n = length(v);                      % comprimento do vetor v
     meio = n / 2;
     if  floor(meio) == meio;    % indice é um numero inteiro - floor(x)  retorna o maior inteiro contido em x
            mediana =  v_ordenado(meio + 1);   % v tem numero par de elementos
     else
           mediana = v_ordenado(floor(meio) + 1 );  % v tem numero impar de elementos
     end;
    _________________________________________________
 

    Um outro algoritmo para o cálculo da mediana,  mais complexo mas que dispensa o passo muitas vezes caro de ordenação é listado abaixo :  (isso é só um exemplo da sintaxe do while, for, if, elseif e break. Não é pretendido que sejam entendidos os detalhes do algoritmo).
    ________________ mediana 2 _________________________
function mediana = Mediana(v)

 n = length(v);                    %  tamanho do vetor v
 menor = min(v);               %  menor elemento do vetor v
 maior = max(v);                % maior elemento do vetor v

 while (1)                          % loop eterno...  bem, até encontrar um break !
    chute = (menor+maior)/2;
    cont_menores = 0; cont_maiores = 0; cont_iguais = 0;
    max_menor_que_chute = menor ;
    min_maior_que_chute = maior ;
    for k=1:n,
        if v(k)<chute
            cont_menores = cont_menores +1;
            if v(k)>max_menor_que_chute
                max_menor_que_chute = v(k);
            end
        elseif v(k)>chute
            cont_maiores = cont_maiores+1;
            if v(k)<min_maior_que_chute
                min_maior_que_chute = v(k);
            end
        else
             cont_iguais = cont_iguais + 1;
         end
    end
    if (cont_menores <= (n+1)/2 & cont_maiores <= (n+1)/2)
        break ;
    elseif cont_menores > cont_maiores
        maior = max_menor_que_chute ;
    else
        menor = min_maior_que_chute;
    end
end

if cont_menores >= (n+1)/2
    mediana = max_menor_que_chute;
else
    if (cont_menores+cont_iguais) >= ((n+1)/2)
        mediana = chute;
    else
        mediana = min_maior_que_chute;
    end
end
    ____________________________________________________

Obs :  O MATLAB já possui uma função nativa median para efetuar o cálculo da mediana.  No entanto, o algoritmo implementado nessa função efetua ordenação,  sendo computacionalmente mais caro  para um conjunto de números muito grande.


nextupprevious
Next:Recursos GráficosUp:Tutorial Previous:M-Files: criando seus próprios programas e funções