Introdução ao Matlab 3 de março de 2015 Docente Responsável : Prof. Dr. Antônio C. Roque Monitores : Rodrigo F. O. Pena e Renan Shimoura MATLAB (MATrix LABoratory) é um programa de alta performance e de alto nível criado para auxílio no campo cientíco. Utiliza de linguagem própria, mas também interpreta várias outras linguagens como C. Foi escrito em C e em Java mas, por ser de alto nível, é de fácil uso pois utiliza de linguagem interpretada que é facilitada ao usuário. Como sua linguagem é interpretada e não é compilada, em geral é mais lento que linguagens de baixo nível como C e Fortran. É multiplataforma, ou seja, não é restrito a um sistema operacional único e é muito utilizado no meio acadêmico e cientíco. Não é um software livre, sua licença é paga e deve ser adquirida através da MathWorks. A USP possui convênio e disponibiliza licenças para alunos e professores em www.cce.usp.br. Além disso, também pode-se adquirir toolboxes que já possuem diversas funções pré-denidas para engenharias, processamento paralelo, processamento de imagens, bioinformática, entre outras. Assita um overview em www.mathworks.com/products/matlab/?s_cid=wiki_matlab_2. 1 Algumas regras e comandos do Matlab O ambiente Matlab é divido em várias janelas que podem ser customizadas de acordo com a necessidade do usuário. Algumas dessas janelas: Editor, Command, Workspace, History, etc. 1. Command: Este é o "prompt" que interpreta os comandos do Matlab. O que for digitado aqui é executado imediatamente. Para facilitar a escrita de programas mais extensos, em geral, utiliza-se o editor e não o command. Basta digitar o comando edit que o editor abrirá. 2. Editor: Aqui é possível escrever os programas e salvá-los em arquivos para depois executá-los. 1
3. History: Aqui cam armazenados os comandos recentes utilizados pelo usuário. 4. Workspace: Variáveis armazenadas durante a execução dos programas são exibidas aqui. A declaração de variáveis não é sujeita a tipicação como é feita em outras linguagens (int, oat, double, char, etc). Em Matlab basta igualar a variável ao valor desejado que o próprio programa interpretará e atribuirá o tipo. Antes de mostrar alguns exemplos, algumas regras e comandos básicos são: Matlab é feito para que os cálculos sejam matriciais, evite usar rotinas de loop como for para implementar seus programas. Os mesmos funcionarão mas não serão otimizados. Na eventual declaração de variáveis, utilizar ponto e vírgula ao m evita que as variáveis sejam exibidas na tela. Tente declarar A=1 no command e A=1; para ver a diferença. Diversas funções matemáticas já estão implementadas no Matlab, procure comandos para seno, cosseno, exponencial e logaritmo por exemplo. O comando help é extremamente útil para programar em Matlab. Basta digitar help + nome_do_comando que o próprio Matlab dará todas as explicações sobre o comando que se queira saber com exemplos incluídos. Tente digitar por exemplo help dot no command para entender como se utiliza o produto de vetores em Matlab. Para procurar comandos utilize também o comando lookfor (exemplo: lookfor 'square root' ). Atenção, em Matlab os índices para vetores e matrizes começam em 1 e não em 0 como em C. Comentário em Matlab são feitos com o símbolo de porcentagem %. Abaixo, veja a diferença de alguns programas implementados em C e em Matlab: Código 1 em C : Multiplicação de vetores //Multiplicação de Vetores Início #include <stdio.h> int main(){ int A[3], B[3], C[3]; //Declaração dos vetores for(int i = 0; i < 3; i++){ //preenchendo os vetores A[i] = i+1; B[i] = A[i]*A[i]; 2
} for(int i=0; i < 3; i++) //multiplicando } C[i] = A[i]*B[i]; for(int i=0; i < 3; i++) return 0; printf("c[%d] = %d \n",i, C[i]); //imprimindo o resultado //Fim de Código Código 1 em Matlab : Multiplicação de vetores % Multiplicação de Vetores Início A = [1 2 3]; B = A.*A; C = A.*B % Fim de Código Observações: O código em Matlab utiliza ponto + operação para indicar que a multiplicação é feita "ponto a ponto", ou seja, cada elemento i será multiplicado pelo seu correspondente i no outro vetor. Observe também que para imprimir o resultado basta tirar o ";" da variável. Aliás, nem seria necessário o uso de uma variável C, o usuário poderia simplesmente escrever A.*B que o resultado seria exibido. Código 2 em C : Multiplicação de matrizes //Multiplicação Matrizes Início #include <stdio.h> int main(){ int linhas = 3, colunas = 3; int aux_soma; //auxiliar para somar os produtos int matriz1[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int matriz2[3][3]={{9,8,7},{6,5,4},{3,2,1}}; int resultado[linhas][colunas]; for(int i = 0; i < linhas; i++) for(int j = 0; j < colunas; j++){ aux_soma=0; for(int k = 0; k<linhas; k++) aux_soma+=matriz1[i][k]*matriz2[k][j]; //soma os produtos 3
} //imprimindo o resultado for(int i = 0; i < linhas; i++) resultado[i][j]= aux_soma; //coloca o resultado da soma na matriz resultado for(int j = 0; j < colunas; j++){ printf("%d ", resultado[i][j]); //printf("\n"); } return 0; } //Fim de Código Código 2 em Matlab : Multiplicação de matrizes %Multiplicação Matrizes Início matriz1 = [1 2 3; 4 5 6; 7 8 9]; matriz2 = [9 8 7; 6 5 4; 3 2 1]; matriz1*matriz2 %Fim de código Estes exemplos tem como objetivo mostrar como o Matlab possui uma linguagem facilitada para a realização de tarefas geralmente complexas em linguagens usuais como C, Java, etc. 2 Alguns Problemas Os seguintes problemas são comuns em cursos de programação básicos e te ajudarão a ganhar uma noção melhor de como o Matlab funciona, selecionamos alguns para que você tente resolvê-los. 1. Dado x = [1 2 3 4 5 6], escreva esse vetor em Matlab e entenda o signicado dos comandos abaixo: (a) x(5) (b) x(2:5) (c) x(1:end) (d) x(1:end-1) (e) x(6:-2:1) (f) x([1 5 2 1 1]) 4
(g) sum(x); mean(x); var(x); std(x) 2. Considere os vetores A = [1 2 3], B = [3 2 1] e a matriz M = [4 5 6 ; 6 5 3], digite os próximos comandos e verique se sua execução está correta, explique o porquê. Dica: utilize o comando size ou whos. (a) A + B (b) A + M (c) A' + B (d) M - [A ; B] (e) [A ; B'] (f) [A ; B] (g) M - 3 (h) A*B (i) A'*B ou A*B' (j) A.*B (k) A./B (l) inv([m ; A]) (m) det([m; A]) 3. Crie um vetor com o comando randi(100,1,10) (procure no help randi). Encontre qual é o maior valor neste vetor e seu índice. Substitua pelo seu quadrado. 4. Considere a matriz M = [10 2 10 5; 2 5 1 6; 2 4 8 10; 4 10 3 5]. Substitua os valores da primeira coluna e da última linha por 1. Utilize o comando nd para encontrar na terceira linha desta matriz os índices dos valores que são maiores que 5. Troque estes valores por 5. 5. A função de Fibonacci pode ser denida como F (0) = 0,F (1) = 1, F (n) = F (n 1) + F (n 2) para n > 1. Escreva em Matlab um programa que calcule de maneira recursiva até n = 20. 6. Chamando o harmônico de um número n de n 1 k, k=1 encontrar em Matlab o harmônico de 255. 7. Calcule uma boa aproximação de cosseno de um número n dada por cosx = 1 x2 2! + x4 4! x6 x2k +... + ( 1)k 6! (2k)! e compare ao resultado do Matlab. 5
8. Crie grácos das funções x, x 3, e x : (a) Em coordenadas rectangulares. (b) Em coordenadas logaritmicas no eixo y (semilog). (c) Em coordenadas logaritmicas nos dois eixos. 9. A expressão que modela o crescimento da população brasileria pode ser escrita como P (t) = 157, 273, 000/(1 + e 0.0313(t 1913.25) ) onde t é dado em anos. Faça um gráco que mostre o crescimento populacional de 1900 a 2100 e encontre neste gráco a população em 2050. 10. Considere o seguinte polinômio de segundo grau: f(x) = x 2 + x 6, encontre as raízes deste polinômio utilizando Matlab. Dica: utilize help para entender a função roots. 11. Escreva uma função que retorne 1 se um número for primo e 0 se não for primo. Para isto, crie um arquivo externo que contém o mesmo nome da função e utilize help function para entender como escrever funções em Matlab. Crie um arquivo separado para executar esta função. 12. Crie uma função que calcule y de uma equação genérica ax 2 + bx + c = y. Desta vez, crie a função no mesmo arquivo de execução. Dica: podese escrever uma função em Matlab utilizando a seguinte declaração f = @(x)(x^2-2); 13. Utilize a função polyval para avaliar o valor de 5x 7 + 3x 3 2 no ponto x = 87. Caso necessite, utilize help para entender como polyval funciona. 6