Sistemas e Sinais (LEE & LETI) 2º semestre 213/214 Laboratório nº Introdução ao Matlab Isabel Lourtie Dezembro 213 pfpfpf Este trabalho de laboratório não é obrigatório destinando-se apenas aos alunos que não estejam familiarizados com os fundamentos do Matlab. Não dará lugar à apresentação de qualquer relatório e não fará parte dos trabalhos para avaliação. 1. Introdução pfpfpf O Matlab (matrix laboratory) é um programa interactivo para cálculo científico e de engenharia. Desenvolvido pela MathWorks, o Matlab permite a manipulação de matrizes, a representação gráfica de funções e dados, a implementação de algoritmos, a criação de interfaces com o utilizador e a interface com programas escritos noutras linguagens. Quando se inicia o Matlab aparece a janela representada na Figura seguinte: 1
Esta janela inclui os seguintes painéis: Current Folder -- directoria com os ficheiros do utilizador. Command Window -- entrada de comandos na linha de comandos, indicada pelo prompt ">>". Workspace - explora os dados creados pelo utilizador ou importados a partir de ficheiros. Command History - mostra e permite voltar a correr os comandos inseridos na linha de comandos. O Matlab oferece um sistema de ajuda on-line acessível usando o comando help. Por exemplo, para obter informação sobre a função size, introduza a seguir ao prompt o seguinte: >> help size 2. Matrizes e vectores 2.1 Geração de matrizes e vectores Enquanto outras linguagens de programação trabalham essencialmente com escalares, o Matlab foi desenhado para operar sobre matrizes e vectores. Todas as variáveis em Matlab são multi-dimensionais. Para gerar um vector linha com 4 elementos, separe os elementos por um espaço ou uma vírgula. Por exemplo, >> A=[1 2 3 4] retorna A = 1 2 3 4 Para gerar uma matriz com múltiplas linhas, separe as linhas por ponto e vírgula. Por exemplo, >> A=[1 2 3; 4 5 6; 7 8 1] retorna A = 1 2 3 4 5 6 7 8 1 2
Ex 1. Gere as seguintes matrizes e verifique as suas dimensões. Compare o que obtém com os comandos size e length do Matlab para determinar o comprimento das matrizes. 1) M=[1 2 3 4 5] 2) M=[1:5] 3) M=[1:1:5] 4) M=[1:-1:-5] 5) M=[1 2; 3 4] 6) M=[1; 2; 3; 4] Outra forma de gerar uma matriz consiste em usar uma função, tal como ones, zeros, eye ou rand. Por exemplo, o comando z = zeros(5,1) retorna o vector coluna nulo de dimensão 5 z= Ex 2. Gere as seguintes matrizes e compare as diferenças. 1) M=zeros(2,3) 2) M=ones(2,3) 3) M=eye(2,3) 4) M=rand(2,3) 5) M=[ones(2,1) eye(2,2)] 6) M=[zeros(1,3); ones(1,3)] 2.2 Operações com matrizes e vectores O Matlab permite o processamento de todos os valores numa matriz com um simples operador aritmético ou função. Por exemplo, >> A+1 11 12 13 14 15 16 17 18 2 3
soma 1 a todos os elementos da matriz A. >> sin(a).8415.993.1411 -.7568 -.9589 -.2794.657.9894 -.544 determina o seno de cada elemento de A, em que os A ij representam ângulos em radianos. >> A*inv(A) 1. -. 1.. 1. determina o produto da matriz A pela sua inversa. Ex 3. Gere as matrizes M1=[1 2; 3] e M2=[-1 1; -1]. Compare o que obtém com os seguintes pares de comandos. 1) transpose(m1) e M1.' 2) M1*M2 e M1.*M2 3) M1/M2, M1*inv(M2) e M1./M2 4) M1^2 e M1.^2 2.3 Números complexos Os números complexos têm partes real e imaginária, em que a unidade imaginário é 1. >> sqrt(-1) + 1.i Para representar a parte imaginária dos números complexos pode usar-se i ou j. >> c = [3+4i, 4+3j, -i] c = 3. + 4.i 4. + 3.i - 1.i 4
Ex 4. Gere o vector linha M=[1+j 2-3j 4]. Compare o que obtém com os seguintes comandos. 1) transpose(m) 2) ctranspose(m) 3) M.' 4) M' 3. Gráficos 2D Utilizam-se as funções plot e stem para fazer a representação grafica de, respectivamente, sinais contínuos e sinais discretos. Por exemplo, o sinal discreto = 1 para 2 pode ser representado graficamente através da seguinte sequência de comandos. >> n = :2; >> x = (-1).^n; >> stem(n,x) >> xlabel('n') >> ylabel('x(n)') >> title('gráfico do sinal x(n)') 5
Ex 5. Gere o sinal contínuo = 1 sin 2 para 2 com um intervalo de tempo de =.1 e represente-o graficamente. Pode gerar o vector com os instantes de tempo necessários para a determinção de usando o seguinte comando: >> t = :.1:2; Podem-se representar múltiplos gráficos numa única figura usando o comando subplot(m,n,p). Este comando divide a janela da figura numa matriz de dimensão mxn e selecciona a posição p para fazer a representação gráfica. Ex 6. Introduza a seguinte sequência de comandos e observe a figura resultante. >> t = :.1:1; >> figure >> subplot(2,2,1), plot(t,cos(2*pi*t)), grid on >> subplot(2,2,2), plot(t,cos(2*pi*5*t)), grid on >> subplot(2,2,3), plot(t,cos(2*pi*1*t)), grid on >> subplot(2,2,4), plot(t,cos(2*pi*2*t)), grid on 4. Programas e scripts O tipo mais simples de programa em Matlab é designado de script. Um script é um ficheiro de extensão.m que contém sequências de linhas de comandos de Matlab e chamadas de funções. Para executar um script basta introduzir o nome do ficheiro na linha de comandos do Matlab. Para criar um script usa-se o comando edit. Por exemplo, >> edit grafico abre, na directoria de trabalho, um ficheiro em branco designado grafico.m. Insira o seguinte código: t = [:.1:1]; x = cos(2*pi*t); y = exp(-t); figure(1), plot(t,x,t,y); legend('x = cos(2*pi*t)', 'y = exp(-t)'); figure(2), plot(t,x.*y); legend('cos(2*pi*t).*exp(-t)'); Salve o ficheiro na directoria de trabalho. Para executar o script escreva o seu nome na linha de comandos do Matlab. 6
>> grafico Existem várias instruções para controlo de fluxo de um programa, nomeadamente: for - repete um grupo de instruções um número determinado de vezes. A palavra end determina o fim das instruções a realizar. while - repete um grupo de instruções um número indefinido de vezes, sob controlo de uma condição lógica. A palavra end determina o fim das instruções a realizar. if - avalia uma expressão lógica e executa um grupo de instruções se a expressão lógica for verdadeira. Os comandos opcionais elseif e else permitem a execução de outros grupos de instruções. Uma expressão if termina sempre com a palavra end. Por exemplo, = pode ser calculado através do seguinte ciclo for: x = ; for k=:25 x = x + k; end Ex 7. Escreva um script para, sem usar os operadores transpose, ctranspose, ' ou.', determinar a transposta de uma matriz A, em que as dimensões da matriz deverão ser determinadas pelo programa. Teste o script com as seguintes matrizes: 1) M = [1; 2; 3; 4] 2) M = [1 2 3 4] 3) M = [1 2; 3 4] 4) M = [:1; 11:21; 22:32] Referências: Getting Started with MATLAB R213a. Introdução ao MATLAB, disciplina de Sistemas e Sinais (Alameda), 27. L1: Matrizes, Sons e Imagens, disciplina de Sistemas e Sinais (Taguspark), 29. 7