27
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Utilidades Diversas• Habitualmente os comandos que compõem um dado programa
desenvolvido em matlab não são introduzidos usando a janela de comando mas sim escritos e gravados num ficheiro .m
• Para criar um ficheiro .m invoque o editor de texto com o comando editou edit ficheiro. Neste último caso o ficheiro é imediatamente gravado
• Com o editor pode correr o ficheiro .m todo de uma vez ou colocar breakpoints (absolutos ou condicionais), executar o ficheiro instrução a instrução, etc.
• Uma vez gravado o ficheiro .m, pode executá-lo também a partir da janela de comando do matlab escrevendo o respectivo nome (desde que o caminho para o mesmo seja a directoria corrente ou esteja na lista de caminhos especificados no path
• Pode também executar programas do sistema operativo ou outros usando ! antes do nome do programa. Por exemplo:>> !Notepad % Invoca o editor de texto notepad
28
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Números Complexos• O matlab trabalha também com números complexos• Neste caso, 2+3i ou 5-2j representam exemplos de números complexos
que o matlab interpreta• Pode-se extrair a parte real, a parte imaginária, o módulo e o argumento
de um número complexo, bem como obter o seu conjugado, com os comandos real, imag, abs, angle e conj>> a=2+3i;>> abs(a)ans =
3.6056>> angle(a)ans =
0.9828
• Pode-se também definir matrizes cujos elementos são números complexos
29
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Números Complexos• Nesse caso, há que atender que a transposta da matriz será conseguida
à custa de .’ e não de ‘, que neste caso permite obter a matriz hermetiana daquela dada (a matriz hermetiana consiste em transpor a matriz após obter o complexo conjugado dos seus elementos):
>> C = [1+i 1-i; 2-3i 4i; 3 -1+2i];>> C’ans =
1.0000 - 1.0000i 2.0000 + 3.0000i 3.0000 1.0000 + 1.0000i 0 - 4.0000i -1.0000 - 2.0000i
>> C.'ans =
1.0000 + 1.0000i 2.0000 - 3.0000i 3.0000 1.0000 - 1.0000i 0 + 4.0000i -1.0000 + 2.0000i
30
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 2D em Matlab• Existem diversos comandos que podem ser usados para
construir gráficos (2D e 3D) no matlab
O mesmo que plot mas com a possibilidade de se definirem dois eixos y com diferentes escalasplotyy
Gráfico em coordenadas polarespolarGráfico com escala semi-logarítmica (eixo y)semilogy
Representa gráficamente uma funçãofplot
Gráfico com escala semi-logarítmica (eixo x)semilogx
Cria um gráfico com eixos linearesplotO mesmo que plot mas com eixos em escala logarítmicaloglog
FuncionalidadeComando
31
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 2D em Matlab
Gráfico em forma de penafeather
Histograma em ângulorose
Gráfico em forma de bússolacompass
Histogramahist
Gráfico em escadastairs
Gráfico em forma de trajectória de cometacomet
Gráfico de sequências discretasstem
Permite desenhar polígonos 2DfillGráfico de barrasbar
FuncionalidadeComando
32
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 2D em Matlab - Exemplos>> t = 1:0.1:2*pi;>> y = sin(t);>> plot(y);
• Neste formato, plot(y)representa os valores do vector y em função do seu índice (1, 2, 3,...)
33
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 2D em Matlab - Exemplos>> t = 1:0.1:2*pi;>> y = sin(t);>> plot(t,y);
• Neste formato, o comando plot permite obter um gráfico xy
34
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 2D em Matlab - Exemplos>> t = 1:0.1:2*pi;>> y1=sin(t);>> y2=sin(t-2*pi/3);>> y3=sin(t+2*pi/3);>> plot(t,y1,t,y2,t,y3);
• Deste modo, o comando plot permite representar mais do que uma função no mesmo gráfico
35
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 2D em Matlab - Exemplos• Outra forma de obter o gráfico do slide anterior seria colocar os vectores
y1, y2 e y3 numa matriz:>>A=[y1;y2;y3];>>plot(t,A);
• Mais informação: help plot• Para criar uma nova janela onde o gráfico vai ser criado, usa-se o
comando figure• O matlab oferece a possibilidade de se representar mais do que um
gráfico na mesma janela (figure), criando uma grelha virtual de sistema de eixos. Para tal, usa-se o comando subplot
• subplot(m,n,p) cria uma matriz com m×n sistemas de eixos, e selecciona o sistema de eixos número p para a representação do próximo gráfico. A contagem é feita da esquerda para a direita, e de cima para baixo. Um exemplo:
36
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 2D em Matlab - Exemplos
>> subplot(2,3,1) >> plot(t,y1)>> subplot(2,3,2)>> plot(t,y2)>> subplot(2,3,3)>> plot(t,y3)>> subplot(2,3,4)>> plot(t,t.^2)>> subplot(2,3,5)>> plot(t,t)
37
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 2D em Matlab• Ao fazer plot(x), onde x
representa um número complexo, o matlab representa a parte imaginária do número em função da parte real. Um exemplo:>> Z=[1+2i 2+3i 10+30i];>> plot(Z)
38
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 2D em Matlab• Para além dos comandos destinados à traçagem do gráfico, existem
outros destinados a embelezá-lo e a completá-lo. Alguns dos mais usuais são apresentados de seguida
Adiciona uma legenda ao gráficolegendAdiciona texto de modo interactivo (rato)gtext
Permite ajustar os limites dos eixosaxis
Adiciona texto na posição especificadatextAdiciona uma grelha ao gráficogridColoca uma etiqueta no eixo yylabel
Coloca um título no gráficotitleColoca uma etiqueta no eixo xxlabel
FuncionalidadeComando
39
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 2D em Matlab - Exemplos• Para representar funções de
uma variável, pode-se usar a função fplot. Um exemplo:
>> figure % abre uma janela de gráfico>> fplot(‘0.1*exp(x)+sin(x)-5-x’,[0 5]);
% gráfico 2D de f(x)>> xlabel(‘x’); % nome do eixo do x>> ylabel(‘f(x)’); % nome do eixo do y>> title(‘Gráfico 2D’); % título do gráfico>> grid on; % activa grelha
40
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos em Matlab• Quando se executa o comando plot, o matlab desenha o novo gráfico na
janela já aberta, eliminando qualquer gráfico anterior que lá esteja
• Caso pretenda “adicionar” o novo gráfico àquele já existente, pode usar o comando hold. Ao activar a função hold (hold on) o matlab não só retém o gráfico anterior como também as suas propriedades (eixos, etiquetas, etc, excepto a funcionalidade de escala automática)
• Para desactivar a função hold faz-se hold off
• O comando shg coloca a janela que contém o gráfico na frente do ecrã
41
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 3D em Matlab• O matlab permite também traçar gráficos 3D de diferentes
tipos. Alguns dos comandos para esse efeito são os seguintes:• plot3• surf• mesh• contour3• comet3• fill3
• A maioria dos comandos apresentados para gráficos 2D (colocação de etiquetas, títulos, legendas, etc.) pode ser usada igualmente com os gráficos 3D
42
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Gráficos 3D em Matlab - Exemplos• Exemplo: representar
gráficamente a função f(x,y)=x*exp(-x^2-y^2)
>> figure % abre uma janela de gráfico>> [x,y]=meshgrid(-2:.1:2,-2:.1:2);>> z=x.*exp(-x.^2-y.^2);>> plot3(x,y,z); % gráfico 3D>> figure % abre uma outra janela de gráfico>> surf(x,y,z); % gráfico 3D de superfície>> figure % abre uma outra janela de gráfico>> mesh(x,y,z); % gráfico 3D de malha>> figure % abre uma outra janela de gráfico>> [c,h]=contour(x,y,z); % gráfico de
contornos>> clabel(c,h); % apresenta os valores dos
contornos
43
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Introdução e Visualização de Dados• Para que o utilizador possa introduzir dados num dado programa, existe o
comando input:>> a=input('Introduza o nº de alunos: ')
• O matlab responde com a seguinte mensagem, ficando a aguardar a introdução do número:Introduza o nº de alunos: 34
• No final, atribui o valor introduzido pelo utilizador à variável a• Para visualizar resultados usa-se o comando disp. Alguns exemplos:
>> disp(a)>> disp(A)>> disp(‘Os alunos estudam muito ... pouco’)
• Pode-se também afixar mensagens de erro com o comando error:>> error(‘Houve um erro na execução do programa’)
NOTA: dentro de um ficheiro .m, esta instrução pára a execução e sai do ficheiro .m
44
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Introdução e Visualização de Dados• Teste os seguintes exemplos para observar o uso de input e disp:>> clc;>> A=rand(4);>> [m,n]=size(A);>> disp([‘A é uma matriz ‘ num2str(m) ‘x’ num2str(n)])>> disp(A);
>> idade=input(‘Qual a sua idade?’);>> nome=input(‘Qual é o seu nome?\n’, ‘s’); %neste caso note o uso de
‘s’ para indicar que se trata de uma string
45
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Controlo do Fluxo de Programa• À semelhança de outras linguagens de programação, existem instruções
de controlo do fluxo de programa. No matlab são as seguintes:• Instrução if• Ciclo for• Ciclo while• Estrutura switch
• A instrução if é usada da seguinte forma:if condição
% faz alguma coisaelse
% faz uma coisa diferenteend
• De seguida é apresentado um exemplo do uso da instrução if num ficheiro .m
46
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Controlo do Fluxo de Programax=‘aula2’;y=‘aula1’;if strcmp(x,y)
disp(‘As aulas são iguais’)else
disp(‘As aulas são diferentes’)end
• Nota: repare que a comparação de strings é efectuada com o comando strcmp e não com ==! Experimente fazer x==y e observe os resultados
• Também se pode usar o comando elseif numa estrutura if da seguinte forma:if condição
% faz uma coisaelseif segundacondição
% faz outra coisaelse
% faz ainda uma coisa diferente (caso as duas condições sejam falsas)end % (este end encerra o ciclo if já que elseif dispensa o uso de end)
47
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Controlo do Fluxo de Programa• Um ciclo for é criado da seguinte forma:
for variavel=valorinicial:passo:valorfinal% faz alguma coisa
end
• Um exemplo:A=[1 23 34;3 4 5][m,n]=size(A);soma=0;for coluna=1:n
for linha=1:msoma=soma+A(linha,coluna);
endenddisp([‘A soma de todos os elementos é: ‘ num2str(soma)])
48
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Controlo do Fluxo de Programa• O ciclo while é criado da seguinte forma:
while condicao% faz alguma coisa
end
• Um exemplo:x=1:10soma=0;k=1;while k<7
soma=soma+x(k);k=k+1;
enddisp([‘A soma dos primeiros seis elementos é: ‘ num2str(soma)])
49
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Controlo do Fluxo de Programa• O comando for é usado quando se sabe à partida quantas vezes é que o
ciclo deverá ser executado. Caso contrário usa-se o comando while• Pode-se usar o comando break para abandonar um ciclo for ou while e
continuar a execução do programa na linha imediatamente a seguir ao mesmo
• Corra o seguinte exemplo e verifique o efeito da instrução break:A=[1 23 34;3 4 5][m,n]=size(A);soma=0;for coluna=1:n
for linha=1:msoma=soma+A(linha,coluna);break
endenddisp([‘A soma de alguns elementos é:’ num2str(soma)])
50
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Controlo do Fluxo de Programa• De forma análoga, o comando continue instrui o matlab a
iniciar a iteração seguinte do ciclo for ou while onde está colocado, desprezando quaisquer instruções que apareçam a seguir. No exemplo seguinte, a resposta do matlab é 0:A=[1 23 34;3 4 5][m,n]=size(A);soma=0;for coluna=1:n
for linha=1:mcontinuesoma=soma+A(linha,coluna);
endenddisp([‘A soma de alguns elementos é:’ num2str(soma)])
51
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Controlo do Fluxo de Programa• A sintaxe da estrutura switch é a seguinte
switch expressão % (expressão pode ser escalar ou string)case valor1
% executa código 1case valor2
% executa código 2case {valor1, valor2}
% executa código 3otherwise
% executa código alternativoend
52
Apl
icaç
ões
Info
rmát
icas
par
a En
genh
aria
© Sérgio Cruz
Controlo do Fluxo de Programa• Estrutura switch: um exemplo
a=input('Introduza um número:');switch a
case 2disp('Introduziu o número 2');
case 3disp('Introduziu o número 3');
case {4,5}disp('Introduziu o número 4 ou 5');
otherwisedisp('Introduziu um número grande demais');
end