Computação e Programação 2006/07 Aula Prática 1 (Laboratório 1) Introdução ao sistema MATLAB Esta aula prática tem como objectivo a apresentação do sistema MATLAB e algumas das suas capacidades. Começamos por ver o MATLAB como uma máquina de calcular gráfica com inúmeras funcionalidades. Para começar a utilizar o sistema MATLAB em ambiente Windows basta invocar o programa a partir do seu ícone. (no Desktop ou em StartPrograms) O espaço de trabalho do MATLAB divide-se em várias janelas. Para já concentramo-nos na janela de comandos. Nesta janela introduzimos as expressões a avaliar (input) e visualizamos os resultados (output). As expressões são introduzidas na janela de comandos na linha assinalada por >> e avaliados premindo enter. Comece por invocar o MATLAB Avalie a expressão 1+1 1+1 Começamos por utilizar o MATLAB como uma simples calculadora. Avalie as expressões 123+456*789 (123-456)*789 8/4 8\4 2^2*2 2^(2*2) O MATLAB possui também funções trigonométricas e reconhece números complexos. Avalie as expressões pi pi/4 Nota: As funções trigonométricas do MATLAB aceitam apenas valores em radianos. sin(pi/6)+cos(pi/3) tan(pi/4) cos(pi/4)\sin(4\pi) atan(1) cosh(0) asinh(0) Ao lidar com números complexos o MATLAB aceita indistintamente i e j como unidade imaginária. i j 1+3i + 3+ j i*i 3+4i * 1+2i (3+4i) * (1+2i) abs(3+4i) conj(1+2j) real(5+7i) imag(5+7i) 2*angle(i) Estão também disponíveis as funções exp, log e log10. exp(1) log(exp(3)) log10(10) Vamos ver agora como podemos utilizar o MATLAB para desenhar o gráfico de uma função. Para desenhar o gráfico precisamos de dois vectores, uma para as abcissas e outro para as ordenadas. No final invocamos o comando plot. O vector das abcissas é construido com a função linspace. Esta função gera um vector com 100 pontos igualmente espaçados entre os dois valores dados. A informação relativa a uma função pode ser obtida escrevendo help seguido do nome da função. Obtenha informação acerca da função linspace help linspace Desenhe o gráfico da função seno no intervalo [-10,10] x1=linspace(-10,10); y1=sin(x1); plot(x1,y1) Desenhe o gráfico da função arco tangente no intervalo [-10,10] x2=linspace(-10,10); y2=atan(x2); plot(x2,y2) Sobreponha os dois gráficos plot(x1,y1,x2,y2) É importante reparar que em alguns dos comandos anteriores usámos ";" no final. O ponto e vírgula no final de uma expressão diz ao MATLAB para avaliar a expressão e não apresentar o resultado. Vejamos o que acontecia se não usássemos o ponto e vírgula. linspace(-10,10) O MATLAB também desenha gráficos 3D. Experimente introduzir no MATLAB os seguintes exemplos x3=-10:.5:10; y3=x3; [u,v]=meshgrid(x3,y3); r=sqrt(u.^2+v.^2)+eps; z3=sin(r)./r; mesh(x3,y3,z3) surf(x3,y3,z3) Programar em MATLAB Agora vamos criar, editar e avaliar ficheiros MATLAB (M-Files ou guiões). Estes ficheiros permitem a submissão de uma sequência de comandos de uma só vez. O MATLAB avalia sequencialmente os comandos de um ficheiro como se tivessem sido introduzidos directamente na janela de comandos. À esquerda da janela de comandos encontra-se a janela Current Directory (caso não esteja, torne-a visível indo na barra de ferramentas a View Current Directory). A partir desta janela temos acesso a ficheiros .m que estejam na directoria indicada. O MATLAB só procura ficheiros em directorias que tenham sido previamente adicionadas à lista path. Por isso, é importante começar por acrescentar a directoria onde vamos trabalhar a esta lista. Tal é possível seleccionando File Set Path na barra de ferramentas. Para criar um ficheiro basta seleccionar na barra de ferramentas do MATLAB a opção FileNewM-file; em alternativa, carregar em Ctrl-N produz o mesmo efeito. Crie um novo ficheiro com os comandos que se seguem. % %Programa que soma os 50 primeiros naturais % I=1; R=0; while (I<=50) R=R+I; I=I+1; end R Grave o código acima com o nome soma.m e de seguida avalie-o escrevendo soma na janela de comandos. Qual o resultado? O que aconteceu? Adicione a pasta onde guardou o ficheiro ao path do MATLAB. Tente avaliar de novo o ficheiro soma.m. Nota: Para facilitar a leitura, o código deverá estar bem dividido e correctamente identado. É importante que consigamos ler o nosso código e que os outros também o consigam. É igualmente importante comentar o código. Modifique o programa de modo a somar os primeiros 25 naturais e avalie novamente. Experimente retirar o ";" do final do comando que incrementa a variável I (I=I+1;), grave e volte a avaliar, agora somando até 7. O que é que acontece? Não é cómodo estar sempre a alterar o ficheiro quando queremos alterar o valor de N; podemos tornar o programa interactivo. Recorra agora às funções input e fprintf e modifique o programa que soma os N primeiros naturais de modo a pedir interactivamente N e a devolver o resultado. Nota: O novo programa é de certo modo mais geral; uma vez que o comentário deve reflectir a funcionalidade do programa, altere-o. Desenvolva um programa que resolva equações de segundo grau. O programa deverá pedir ao utilizador os coeficientes do polinómio e devolver as soluções, caso existam, ou um aviso, caso não haja soluções. Expressões Booleanas Uma expressão booleana é uma expressão que quando avaliada retorna um valor lógico. Em MATLAB os valores lógicos true e false são representados por 1 e 0, respectivamente. Experimente os seguintes exemplos, tentando prever antecipadamente qual o resultado da avaliação de cada expressão. 2 < 3 (8+5) ~= 13 a= (1==1) & (2==2) & (3==4) b= (0 <= -10) | (sin(pi/2)==1) ~b ~b & ~a Os resultados obtidos estão de acordo com o esperado? Matrizes Crie duas matrizes M e N com dimensão 3x3. Por exemplo: M=[1 -1 0;1 1 0;0 0 1] N=[1 2 3;4 5 6;7 8 9] Calcule M+N, M-N e M*N M+N M-N Crie a matriz identidade ID de dimensão 3. Calcule ID*N e ID.*N. ID=[1 0 0;0 1 0;0 0 1] ID*N ID.*N Qual a diferença entre * e .* ? Por analogia, como deve proceder para dividir matrizes elemento a elemento? Como multiplicar uma matriz por um escalar? Experimente com as matrizes M e N e com outras matrizes à sua escolha. Tente multiplicar duas matrizes não compatíveis e observe o que acontece. O MATLAB também disponibiliza funções para resolver sistemas lineares. A solução do sistema linear Ax=b é dada por x=A-1b. Vejamos um exemplo: O sistema linear x + 2 y + 3 z = 366 4 x + 5 y + 6 z = 804 7 x + 8 y = 351 é representado através de uma matriz e um vector. A=[1 2 3;4 5 6;7 8 0] b=[366;804;351] Logo a solução do sistema é x=inv(A)*b Podemos verificar que x é realmente a solução: A*x Tente resolver os sistemas Mx=u e Ny=u onde u é o vector [1; 2; 3]. Verifique e comente os resultados que obteve. u=[1; 2; 3] x=inv(M)*u M*x y=inv(N)*u N*y Crie um ficheiro que quando avaliado gera uma matriz com n linhas e m colunas em que todos os elementos são x. Os parâmetros n, m e x devem ser pedidos interactivamente. Sugestão: use a função ones.