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 );
endO loop acima é executado 10 vezes, com a variável i 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 :
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.
Next:Recursos
GráficosUp:Tutorial
Previous:M-Files:
criando seus próprios programas e funções