Apresentação do PowerPoint

Propaganda
Tópicos Especiais: Programação
Visual em Matlab para
Engenheiros
1.MATLAB básico
1.4. Operadores Relacionais e Lógicos
1.5. Ramificações
1.6. Laços
Operadores relacionais e lógicos
• Operadores relacionais e lógicos no MATLAB são usados para testes
de hipóteses, em que as respostas são “verdadeiro” ou “falso”, ou
melhor, “0” ou “1”.
• Importante porque podem ser usados em estruturas de ramificação,
como será visto
30/03/2017
Prof. Márcio F. S. Barroso
2
Estrutura básica
30/03/2017
Prof. Márcio F. S. Barroso
3
30/03/2017
Prof. Márcio F. S. Barroso
4
Tipos especiais de funções lógicas
• ischar()  testa se a variável é uma cadeia de caracteres
• isempty()  testa se a variável está vazia
• isinf()  testa se o resultado é infinito
• isnan()  testa se o resultado é Não um Número (Not a Number)
• isnumeric()  testa se uma variável é numérica
30/03/2017
Prof. Márcio F. S. Barroso
5
30/03/2017
Prof. Márcio F. S. Barroso
6
Ramificações
• São estruturas que permitem avaliar opções de tomada de decisão,
quando há mais de uma possibilidade disponível.
• As estruturas são do tipo Top Down, ou seja, a inferência é feita até
que se chegue à conclusão ou se retome um valor esperado de uma
variável ou expressão (função, etc.)
30/03/2017
Prof. Márcio F. S. Barroso
7
A estrutura SE, SENÃO
IF expression
statements
ELSEIF expression
statements
ELSE
statements
END
30/03/2017
Prof. Márcio F. S. Barroso
8
Exemplo
•
•
•
•
•
•
•
•
•
•
•
%Função de um variável do tipo ax^2 + bx + c
%O zero da função é dado pela solução do problema
%ax^2 + bx + c = 0
%
%As soluções são conhecidas e são dadas por:
%x = (-b ± sqrt(b^2 - 4ac))/2a
%
%Ou seja, o valor b^2 - 4ac determinará as soluções reais possíveis
%Se b^2 - 4ac > 0, então x assumirá dois valores reais diferentes
%Se b^2 - 4ac = 0, então x assumirá dois valores reais iguais
%Se b^2 - 4ac = 0, então x assumirá valores não reais (complexos)
30/03/2017
Prof. Márcio F. S. Barroso
9
Exemplo
P = [1 1 1]; %Parâmetros a, b e c da função
if (P(2)^2 - 4*P(1)*P(3)) > 0
disp('Existem duas soluções reais e ...
diferentes');
elseif (P(2)^2 - 4*P(1)*P(3)) == 0
disp('Existem duas soluções reais iguais');
else
disp('Não existem soluções reais');
end
30/03/2017
Prof. Márcio F. S. Barroso
10
30/03/2017
Prof. Márcio F. S. Barroso
11
Estrutura “Selecionar – Caso”
• Esta estrutura difere da “Se, Senão” porque ela não é uma inferência
lógica.
• Ela apenas seleciona “estados” pré-definidos de acordo com valores
pré-determinados para os “casos” estabelecidos
30/03/2017
Prof. Márcio F. S. Barroso
12
Estrutura “Selecionar – Caso”
SWITCH switch_expr
CASE case_expr,
statement, ..., statement
CASE {case_expr1, case_expr2, case_expr3,...}
statement, ..., statement
...
OTHERWISE,
statement, ..., statement
END
30/03/2017
Prof. Márcio F. S. Barroso
13
Estrutura “Selecionar – Caso”
method = 'Bilinear';
switch lower(method)
case {'linear','bilinear'}
disp('Method is linear')
case 'cubic'
disp('Method is cubic')
case 'nearest'
disp('Method is nearest')
otherwise
disp('Unknown method.')
end
30/03/2017
Prof. Márcio F. S. Barroso
14
A estrutura “Tente – Capture”
• É um tipo de ramificação importante, pois permite a verificação de
erro, evitando o aborto do programa em caso do mesmo acontecer.
• É típico para tratamento de erro
30/03/2017
Prof. Márcio F. S. Barroso
15
A estrutura “Tente – Capture”
TRY
statement, ..., statement,
CATCH ME
statement, ..., statement
END
30/03/2017
Prof. Márcio F. S. Barroso
16
A estrutura “Tente – Capture”
a= [1 -3 2 5];
try
i = input('Entre com o índice do elemento a ser
exibido: ');
disp(['a(' int2str(i) ')' ' = ' num2str(a(i))]);
catch
disp(['O índice escolhido ' '(' int2str(i) ')' ' não
existe']);
disp(['Escolha um índice menor ou igual a '
num2str(length(a))]);
end
30/03/2017
Prof. Márcio F. S. Barroso
17
30/03/2017
Prof. Márcio F. S. Barroso
18
Mensagens de “erro” e “cuidado”
• É possível, no caso de se usar a estrutura “try”, exibir mensagens de
erro com as funções “error” e “warning”
• error('msgString')  Quando se gera um erro, aborta-se o programa
• warning('MESSAGE')  Indica-se que há um erro, mas que não
aborta o programa
30/03/2017
Prof. Márcio F. S. Barroso
19
Mensagens de “erro” e “cuidado”
• É possível gerar mensagens de erro com interface gráfica, usando as
esturturas
• errordlg
• warningdlg
30/03/2017
Prof. Márcio F. S. Barroso
20
Mensagens de “erro” e “cuidado”
• É possível gerar mensagens de erro com interface gráfica, usando as
esturturas
• errordlg
• warndlg
30/03/2017
Prof. Márcio F. S. Barroso
21
Mensagens de “erro” e “cuidado”
try
i = input('Entre com o índice do elemento a ser exibido: ');
disp(['a(' int2str(i) ')' ' = ' num2str(a(i))]);
catch
H = warndlg(['O índice escolhido ' '(' int2str(i) ')' ' não existe'], 'ERRO...');
waitfor(H)
msgbox(['Escolha um índice menor ou igual a
'num2str(length(a))],'ATENÇÃO!!!','warn');
end
30/03/2017
Prof. Márcio F. S. Barroso
22
30/03/2017
Prof. Márcio F. S. Barroso
23
Onde estamos?
• Já sabemos como introduzir variáveis, sejam vetores ou matrizes;
• Já sabemos manipular essas variáveis numericamente;
• Já sabemos salvar e carregar variáveis em arquivos;
• Já sabemos mostrar um vetor na forma de gráfico;
• Já sabemos usar estruturas de ramificação
• Já sabemos tratar erros de execução
30/03/2017
Prof. Márcio F. S. Barroso
24
Laços
• São estruturas usadas quando se deseja executar um conjunto de
ações repetidas vezes, ou por um número finito de interações, ou até
quando se satisfizer uma condição pré-estabelecida
30/03/2017
Prof. Márcio F. S. Barroso
25
Laços
• Duas estruturas de repetição são possíveis no MATLAB:
• “FOR”  quando se deseja repetir um conjunto de ações n vezes, ou
seja, finitas vezes.
• “While”  quando se deseja repetir um conjunto de ações até que se
atinja uma condição pré-estabelecida. Neste caso, é muito importante
verificar se a condição pode ser atingida, senão, o laço pode se repetir
infinitamente.
30/03/2017
Prof. Márcio F. S. Barroso
26
FOR
FOR variable = expr
statement,
...,
statement
END
30/03/2017
Prof. Márcio F. S. Barroso
27
FOR
for R = 1:N
for C = 1:N
A(R,C) = 1/(R+C-1);
end
end
30/03/2017
Prof. Márcio F. S. Barroso
28
30/03/2017
Prof. Márcio F. S. Barroso
29
WHILE
WHILE expression
statements
END
30/03/2017
Prof. Márcio F. S. Barroso
30
WHILE
E = 0*A; F = E + eye(size(E)); N = 1;
while norm(E+F-E,1) > 0,
E = E + F;
F = A*F/N;
N = N + 1;
end
30/03/2017
Prof. Márcio F. S. Barroso
31
30/03/2017
Prof. Márcio F. S. Barroso
32
Download