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