Baixe o app para aproveitar ainda mais
Prévia do material em texto
Instituto Federal do Sudeste de Minas Gerais – Campus Juiz de Fora Apostila Mini Curso de MatLab Autores: Felipe Souza Amaral Hoberty Martins Pedrosa Luís Gustavo Duarte de Paula Introdução ao MatLab O Matlab é um software criado pela Mathworks em 1984 destinado à análise e modelagem de sistemas e algoritmos. Devido à sua praticidade, essa poderosa ferramenta computacional vem sendo utilizada tanto em universidades quanto em empresas do mundo todo. Em relação a uma linguagem de programação tradicional (como C/C++), o desenvolvimento de algoritmos no ambiente Matlab é sem dúvida mais simples e rápida. Mas apresenta uma linguagem de programação menos eficiente que as tradicionais. Temos por objetivo deste mini curso, fornecer um contato inicial, ou aprimoramento, necessária para desenvolver programas no ambiente Matlab. O aluno será capaz de entender como o Matlab funciona e descobrir quais funções são úteis para as suas aplicações. O Matlab (Matrix Laboratory) pode ser definido como um ambiente de computação numérica baseado em matrizes. Dentre as suas principais características, destacam-se: • gráficos e visualização de dados; • linguagem de programação de alto nível; • toolboxes, que oferecem funcionalidades específicas por área de aplicação. Interface do software • Command Window: área na qual os dados e instruções são digitados e os resultados são apresentados; • Workspace: área de memória de trabalho do Matlab, na qual todas as variáveis são armazenadas; • Current Folder: É o diretório do software, onde é mostrado as pastas que estão sendo utilizadas no MatLab; • Command History: histórico das instruções já executadas. Erros no MatLab No MATLAB os comandos e operações são avaliados e o resultado é posto na área de trabalho, caso o usuário digite um comando que não exista, ou uma expressão que não faça sentido para o software, o mesmo envia para área de trabalho uma mensagem de erro referente à operação que o usuário executou. Esta mensagem de erro é um comentário especificando o erro cometido e, normalmente, seguido da expressão digitada erroneamente pelo usuário. Exemplo: ??? a+b*(2+5)-(3+5*(5-9) A closing right parenthesis is missing. Check for a missing ")" or a missing operator. Este erro significa que algum parêntese está aberto errado ou está faltando na expressão como um todo. Help Todos os comandos do MATLAB estão presentes no help. Todos estes comandos possuem uma sintaxe que deve ser obedecida, e um número de parâmetros que deve ser utilizado. O comando “help comando” mostra na área de trabalho um resumo de como se deve operar com o comando especificado. O help é muito útil para obtenção de informações sobre comandos que venham a ser utilizados durante um trabalho. Variáveis e Operadores Aritméticos Para criar uma variável na Janela de Comando, digite no prompt o nome da variável e atribua um valor: >> num = 7 num = 7 Quando uma expressão não é atribuída a uma variável, o valor calculado é atribuído à variável padrão ans. >> num + 1 ans = 8 No exemplo acima, como num contém o valor 7, a variável padrão ans recebe o valor 7. É possível incrementar ou decrementar uma variável. >> num = num - 2 num = 5 Exercício 1: Crie uma variável peso para armazenar o peso de um objeto em quilogramas. Converta o peso para libras e coloque o resultado em outra variável. O fator de conversão entre as duas unidades é: 1 kg = 2, 2 libras. - Operadores Aritméticos Exercício 2:Crie uma variável ftemp para armazenar a temperatura em graus Fahrenheit. Faça a conversão para graus Celsius e armazene o resultado em uma variável ctemp. A fórmula de conversão é dada por: C = (F - 32) x 5/9. - Funções Elementares sqrt(x) Calcula a raiz quadrada de x. exp(x) Esta função retorna ao valor de e, onde e é a base para logaritmo natural ou aproximadamente 2.718282. log(x) Retorna ln(x), o logaritmo natural de x para a base e. log10(x) Retorna logx10, ou seja, o logaritmo de x na base 10. roots(x) Comando para calcular raízes de polinômios de graus infinitos. pi Adota o valor do número irracional π (3.1416). - Funções Trigonométricas As funções trigonométricas supõem que os ângulos estejam representados em radianos. A seguir uma lista de funções trigonométricas com uma breve descrição: sin(x) Calcula o seno de x, em radianos. cos(x) Calcula o cosseno de x, em radianos. tan(x) Calcula a tangente de x, em radianos. asin(x) Calcula o arco seno de x, onde x deve estar entre –1 e 1. A função apresenta um ângulo em radianos entre - pi/2 e pi/2. acos(x) Calcula o arco cosseno de x, onde x deve estar entre –1 e 1. A função apresenta um ângulo em radianos entre 0 e pi. atan(x) Calcula o arco tangente de x, onde x deve estar entre –1 e 1. A função apresenta um ângulo em radianos entre - pi/2 e pi/2. Exercício 3: Calcule as seguintes expressões matemáticas: • x2=19 • 31.2 • tan π Exercício 4: Calcule as raízes da função f(x) = 2x4+14x3+7x2-34x-9. Exercício 5: Um avião levanta voo sob um ângulo constante de 20º. Após percorrer 2 000 metros em linha reta, qual será a altura atingida pelo avião, aproximadamente? Matrizes Matriz é uma espécie de tabela que apresenta linhas que são definidas como i e colunas que são definidas como j, uma matriz pode representar um sistema de equações e facilitando sua solução. - Representando uma matriz no matlab Para representar uma matriz no matlab utilizamos uma variável para guardá-la e o sinal de igual (=) guarda esse valor na varável. Para representar de fato uma matriz utilizamos o colchetes ([ ]) e os números são escritos e o espaço entre os números representam as colunas e o ponto virgula representa as linhas. - Matriz de zeros: A matriz de zeros pode ser gerada com o comando zeros(i,j), onde i é o número de linhas que o usuário deseja e j o de colunas. - Matriz de Uns: Para gerar a matriz de uns basta utilizar o comando ones(i,j). - Matriz identidade: Para gerar a matriz identidade basta utilizar o comando eye(i,j). - Criando uma matriz diagonal principal: Para gerar uma matriz diagonal a partir de uma matriz podemos usar o comando diag(C), este comando retira a diagonal principal da matriz e o transforma em um vetor, mas se aplicarmos o comando duas vezes sobre a matriz C criaremos uma matriz diagonal principal. - Matriz triangular superior: Com o comando triu(C) podemos zerar todos os elementos abaixo da diagonal principal da matriz C. - Matriz triangular inferior: Com o comando tril(C) podemos zerar todos os elementos acima da diagonal principal da matriz C. - Descobrindo a dimensão da matriz: Podemos descobrir a dimensão de uma matriz utilizando o comando size(C). Também podemos guardar os valores da dimensão da matriz em duas variáveis. Faça o comando [n,m]=size(C) e observe o que ocorre. - Operações com matrizes: Podemos retirar de uma matriz linhas ou colunas para esta operação basta fazercom que esta linha ou coluna receba vazio ( A(i,j)=[ ]; ) Note que os dois pontos (:) representa todas as colunas, então se retira os elementos da linha 3 da coluna 1 à coluna 4. Exercício: retire a coluna um e três da matriz A. Matriz transposta é uma operação onde as linhas de uma matriz viram colunas, e as colunas viram linhas, este comando é representado por aspas simples („). Para a multiplicação de matrizes utilizamos o sinal de multiplicação entre as variáveis que representam a matriz. Obs.: Lembre-se, o produto de matrizes não é o mesmo produto usual entre números. Por exemplo, se multiplicamos a matriz A por ela própria, ocorrerá um erro, pois na multiplicação de matrizes é realizada linha que multiplica coluna, assim o número de linhas tem que ser o mesmo que o número de colunas. A3x4 * A3x4=impossível. A3x4 * A’4x3=possível. Potenciação é utilizada para elevar uma a uma potência, mas estamos apenas multiplicando ela por ela mesma. No caso da matriz A ocorreria o erro, pois ela não é uma matriz quadrada, para esse exemplo utilizaremos a matriz B. A matriz B será introduzida através de um comando que seleciona uma coluna como ponto inicial até outra coluna final, ele é representado por dois pontos (:), ou seja, construiremos a matriz B a partir da matriz A. Para realizar a potenciação basta colocarmos B^n, onde n é um número real. Neste caso utilizamos n=2, onde B^2=B*B. Podemos também elevar cada termo da matriz ao quadrado, basta colocar antes do sinal de potenciação (^), um ponto (.). - Determinante de uma matriz: Podemos determinar também o determinante de uma matriz quadrada com um simples comando det(B). - Matriz inversa. A matriz inversa pode ser determinada pelo comando inv(B) ou pelo comando B^-1. - Aplicação de matrizes para resolução de sistema de equações: Aplicaremos o conceito da regra de Kramer se utiliza o cálculo da matriz inversa para obter a solução do sistema. A -1 (AX) = A-1 B (A-1 A)X = A-1 B X = A-1 B % Resolucao de sistema de equacoes lineares: % % 2x -y+3z = 11 % 4x -3y+ 2z =0 % x + y+z=6 % 3x + y +z=10 clc clear A=[ 3 5 0 2 0 1 5 1 -1 ] B=[ 1 3 10] x= A\B A regra de Kramer só se aplica para sistemas com uma única solução. Por exemplo, se tentarmos utilizar o mesmo algoritmo para a solução de um problema de balanceamento de equações químicas que é um sistema possível, mas com infinitas soluções, ele encontrará a solução trivial (0,0,0,0), para a solução deste problema usaremos a definição da decomposição em LU. (NH4 )2CO3→NH3+H2O+CO2 X(NH4 )2CO3→ YNH3+ZH2O+WCO2 { Fixando x=1 X Y Z W | 1 0 0 0 |1 2 -1 0 0 |0 8 -3 -2 0 |0 1 0 0 -1 |0 3 0 -1 -2 |0 Como o sistema possui várias soluções, fixaremos um das variáveis para encontrarmos uma única solução, após isso usaremos o comando [L U] = lu(A), este comando divide a matriz em duas e armazena uma matriz triangular superior em U e um "matriz triangular psicologicamente inferior", onde A = L * U. % para a solução do balanceamento da equação: %Matriz ampliada. % X Y Z W | % 2 -1 0 0 |0 % 8 -3 -2 0 |0 % 1 0 0 -1 |0 % 3 0 -1 -2 |0 Clc clear A=[ 1 0 0 0 2 -1 0 0 8 -3 -2 0 1 0 0 -1 3 0 -1 -2 ] B=[1;0;0;0;0; ] [L U] = lu(A) y=L\B x=U\y F=L*U - Comando randi: O comando randi(numero), gera números inteiros positivos de 1 a número. Exercício: crie uma matriz de dimensões aleatórias e termos aleatórios. - Comando sum: O comando sum(C(1,:))soma um vetor da matriz. Exercício: faça a soma te todos os termos da primeira coluna. - Comando mean: O comando mean() é utilizado para calcular a média. Exercício: faça a média dos números da segunda coluna. - Comando sortrows : O comando sortrows() é utilizado para ordenar em ordem crescente ou decrescente. Observe que a matriz foi reordenada em ordem decrescente em relação a coluna 3. Exercício: faça em ordem crescente em relação a coluna 2. Desafios: 1) Crie um algoritmo onde gere uma matriz com dimensões aleatórias e com valores aleatórios positivos e inteiros, diga qual é o maior número e sua posição. Se ele aparece mais de uma vez mostrar quantas vezes ele aparece e a posição de cada um na matriz. 2) Crie um algoritmo que gere a matriz com valores aleatórios positivos e inteiros que represente as notas dos alunos no decorrer dos bimestres e a partir desta matriz calcule a média, coloque as notas em ordem decrescente e diga qual aluno tem a maior nota, qual tem a menor nota e mostre a média da turma. Gráficos Engenheiros usam gráficos para analisar, e resolver, problemas e situações. Por isso é muito importante aprendermos a interpretar, e gerar, gráficos e suas formas. Neste tópico vamos aprender como o MATLAB pode nos ajudar a gerar gráficos. Suponhamos que queremos plotar os valores de uma matriz em vez de imprimi-los. Podemos usar o MATLAB para plotar gráficos. Nesta seção, mostraremos como gerar um simples gráfico x-y de dados armazenados em dois vetores. Então, sem conhecer alguns comandos, você pode imediatamente começar usando o MATLAB para gerar gráficos. - Comando plot Suponha que queira plotar os dados de temperatura a seguir coletados em uma experiência de física: Tempo(s) Temperatura(°C) 0 54.2 1 58.5 2 63.8 3 64.2 4 67.3 5 71.5 6 88.5 7 90.1 8 90.6 9 89.5 10 90.4 Suponha também que os dados relativos ao tempo estejam armazenados em um vetor denominado x, e que os relativos à temperatura estejam armazenados em um vetor denominado y. Para plotar estes pontos, simplesmente usamos o comando plot, onde x e y são vetores-linha ou vetores- coluna. plot (x, y) O gráfico é gerado automaticamente. A prática mostra que um bom gráfico deve incluir unidades, título e uma breve descrição. Logo, podemos aperfeiçoá-lo como os seguintes comandos: Title(‘texto’) Adiciona um título ao gráfico. Xlabel(‘texto’) Inclui uma descrição na direção do eixo-x Ylabel(‘texto’) Inclui uma descrição na direção do eixo-y Grid Adiciona linhas de grade ao gráfico Text(x, y, ‘text’) Este comando escreve um texto na tela do gráfico no ponto específico das coordenadas (x, y) usando os eixos dos gráficos. Se x e y são vetores, o texto é escrito a cada ponto. gtext(‘text’) Este comando escreve um texto nas posições indicadas na tela do gráfico pelo mouse. plot (x,y); title („Mini curso MatLab‟); xlabel („Tempo(s)); ylabel („Temperatura(°C)); grid; - Gráficos de Barras e Degraus bar(x,y) Este comando gera gráficos de barras com elementos do vetor y localizados no vetor x, contém o mesmo espaço entre os valores. stairs(x,y) Este comando gera um gráfico de degraus com os elementos do vetor y. - Gráficos múltiplos Para plotar curvas múltiplas no mesmo gráfico deve se usar vários argumentos no comando plotar. plot(x, y, w, z); Quando se executa este comando a curva correspondente a x, y e a curva correspondente a w, z são plotadas no mesmo gráfico. O MATLAB seleciona linhas diferentes para ascurvas plotadas. Outro comando bastante utilizado quando se deseja plotar mais de uma curva em um mesmo gráfico é o comando hold. Exemplo: plot(x,y) hold on plot(w,z) hold off - Estilo de linha e marcação O comando plot(x, y) nos mostra uma linha plotada representando os vetores y e x, mas podemos selecionar outros tipos de linha. Também podemos selecionar plotar pontos ao invés de linhas. A seguir as diferentes opções de linhas e marcações: Tipos de Linha Indicador Tipo de Ponto Indicador Solid - Point . Dashed -- Plus + Dotted : Star * Dashdot -. Circle o x-mark x O comando a seguir representa linha sólida com tipo de ponto x-mark. plot(x, y, x, y, „x‟) Podemos também escolher as cores que serão usadas: Cor Indicadores Vermelho r Verde g Azul b Branco w O comando seguinte representa linha sólida azul para os vetores x, y e pontos vermelhos do tipo x-mark: plot(x, y, „b‟, x, y, „xr‟); - Subplot O comando subplot é usado quando se quer visualizar dois ou mais gráficos ao mesmo tempo. Subplot(211), plot(x,y); Subplot(212), plot(y,x); Esse comando significa que teremos 2 gráficos sendo o primeiro (plot(x,y)) colocado no canto superior esquerdo da tela e o segundo colocado no canto superior direito da tela. Exercício 1: Gerar um gráfico linear das funções, abrangendo 12 pontos de uma função para os valores de x começando de x=0 e incrementando de 0.5. Implemente pontos, linhas e cores indicadores. Gere também gráfico em barras e degraus. a) y = 5x2 b) y = logx c) y = ex Estrutura de seleção Até agora fizemos programas que seguem uma sequencia de comandos da primeira a última linha de programação. Mas o MatLab, também usa ferramentas de estrutura de seleções bastantes conhecidas, como no caso o if e o switch. A instrução if usa expressões que são avaliadas como logicamente verdadeiras ou falsas. O comando if permite o uso das cláusulas opcionais else e elseif. - Instrução if A instrução if permite selecionar qual instrução ou grupo de instruções deve ser executado. A forma geral da instrução if é dada pela sintaxe que se segue. if condição ação end Uma condição é uma expressão logica que prova como verdadeira ou falsa. A ação é uma declaração ou um grupo de declarações que será executada se a condição for verdadeira. Quando a instrução if é executada, primeiramente a condição é avaliada. Se o valor da condição for logicamente verdadeiro, a ação será executada, caso contrário, a ação não será executada. A ação pode conter qualquer número de instruções até a palavra reservada end. Por exemplo, a instrução if a seguir verifica se o valor de uma variável é negativo. Se for, o valor é alterado para um número positivo usando a função valor absoluto (abs), do contrário nada será alterado. Exercício: Solicite ao usuário a digitação de um número e calcula a raiz quadrada. Exercício: Escreva um programa que receba como argumento um número inteiro correspondente a hora atual. A função deve retornar a hora seguinte. Lembre-se que se o usuário digitar 23, a hora seguinte e 0. Instrução if-else A instrução if escolhe se uma ação é executada ou não. Para escolhas mais complexas, envolvendo duas ou mais ações, torna-se necessário utilizar uma instrução if com a cláusula else, ou if‟s aninhados ou ainda uma instrução switch. A instrução if-else é usado para escolher entre duas instruções ou conjuntos de instruções. A forma geral é: if condição ação1 else end ação2 A condição associada à instrução if é avaliada. Se verdadeira, o conjunto de instruções denominado ação1 é executado. Caso contrário, ou seja, se a condição for falsa, o conjunto de instruções denominado ação2 é executado. Observe que somente um desses conjuntos de instruções será executado a cada vez que a instrução if for executada. Por exemplo, para determinar se um valor, maior que zero, para o cálculo do raio é válido podemos usar as condições if e else, como demostra o exemplo abaixo. Exercício 1: Escreva um script que solicite ao usuário a digitação do numerador e do denominador para uma fração. Se o denominador for 0, uma mensagem de erro deve ser exibida, informando tratar-se de divisão por zero. Em caso contrario, exiba a fração na forma decimal. - Instrução switch A instrução switch é uma alternativa ao uso de instruções if-else aninhadas ou if com cláusulas elseif. A sintaxe do comando é apresentada a seguir. switch expressão case caso1 ação1 case caso2 ação2 case caso3 ação3 otherwise açãon end A cláusula otherwise não é obrigatória. Ao contrário da linguagem C, no comando switch do Matlab apenas um case é executado. Assim, não existe um break entre as cláusulas case. Outra diferença é que a expressão a ser avaliada pelo comando switch pode ser um string, além de números inteiros e caracteres. Considere o Exemplo abaixo que verifica se a variável que retorna maior ou menor que 0.5. Exercício: Faça um programa onde o usuário entre com valor se o valor for maior que 100 deverá mostrar ALTO, se valor estiver entre 100 e 50 deverá mostrar MEDIANO se for menor que 50 deverá mostrar BAIXO. - Estruturas de Repetição Vamos estudar agora as instruções do Matlab que permitem a repetição de trechos de código. As declarações que fazem isso são chamadas de estruturas de repetição ou de laço. Existem dois tipos básicos de programação usando comandos de tipo: laços contados e laços condicionais. Um laço contado é aquele em que as declarações se repetem um número previamente definido de vezes. Um laço condicional também executa uma ou mais declarações, mas sem especificar a priori quantas vezes as instruções terão de ser repetidas. Com um laço condicional, por exemplo, você poderia dizer “repita esses comandos até que essa condição se torne falsa”. A instrução ou conjunto de instruções que se repetem em um laço é chamado corpo do laço. Há duas instruções de laço no Matlab: for e while. Na prática, a instrução for é geralmente usada para laços contados e while é usada em laços condicionais. Vale ressaltar que embora laços sejam extremamente úteis na maioria das linguagens de programação, no Matlab muitas vezes não são necessários, especialmente quando se trata de manipulação de matrizes. - A Estrutura de Repetição for A instrução for é utilizada quando é necessária a repetição de uma instrução ou um conjunto de instruções em um script ou em função do usuário, sabendo-se de antemão quantas vezes o corpo do laço será repetido. A variável que é usada para percorrer os valores em um comando for é chamada de variável de controle do laço ou iterador. A forma geral do comando for é: for variável_de_controle = faixa corpo_do_laço end Onde variável_de_controle é a variável de controle do laço for, faixa é o intervalo de valores através do qual a variável de controle do laço deve percorrer e corpo_do_laço consiste no conjunto de instruções a serem executadas. O intervalo pode ser especificado utilizando-se um vetor, mas normalmente a forma mais fácil para especificar o intervalo de valores é através do operador dois pontos. Exemplo: Exibe números inteiros em uma linha. - Entrada de Dados em Laços for Muitos problemas exigem a entrada de vários valores pelo usuário em tempo de execução. O script abaixo explica melhor esse conceito. Exemplo: Múltiplas entradas de dados pelo usuário.for i = 1:3 num = input('Digite um número inteiro: '); fprintf('Você digitou %d\n',num) end Exercício: Crie um programa onde o usuário entre com o primeiro e ultimo valor de um vetor com passo 3, e calcule o quadrado de todos os elementos desse vetor. - Estrutura de repetição While O script do exemplo abaixo utiliza uma instrução while para solicitar diversas vezes ao usuário um número positivo. Quando o usuário digitar um valor não-positivo, o laço termina a execução e exibe a expressão Fim!. Exemplo: O script leNumeros.m lê números enquanto forem positivos. numero = input('Digite um número positivo: '); while numero >= 0 fprintf('Número digitado: %d\n\n',numero) numero = input('Digite um número positivo: '); end fprintf('Fim!\n') Exercício: Faça um programa onde o usuário entre com o número maior que zero e calcula o fatorial desse número. (N! = N*(N-1)*(N-2)*(N-3)........) - Funções definidas Pelo Usuário Veremos agora como o usuário pode criar as suas próprias funções no ambiente do Matlab. Inicialmente, serão definidas funções que atuam de forma semelhante às funções embutidas, ou seja, recebem um argumento de entrada e retornam um valor de saída. Definição de uma Função Toda função do usuário deve iniciar por um cabeçalho, identificado pela palavra reservada function. Em seguida, deve ser fornecido o argumento de saída (ou de retorno), o caractere '=' e o nome da função que está sendo criada. Por fim, devem ser indicados os argumentos de entrada entre parênteses. As linhas seguintes devem conter o corpo da função. Por exemplo, a função calculaArea.m apresentada no Exemplo 2.28 calcula e retorna a área de um círculo cujo raio é fornecido como argumento de entrada. Recomenda-se que o nome usado para a função seja igual ao nome adotado para salvar o arquivo M-File, nesse exemplo, calculaArea. Esse requisito é importante para o correto funcionamento das funções definidas pelo usuário. Exemplo: Função para o cálculo da área de um círculo. Argumento de entrada: raio do círculo. function area = calculaArea(raio) area = pi * raio ^ 2; - Passagem de Múltiplos Argumentos Em muitos casos, uma função do usuário deve ser definida com mais de um argumento de entrada. Por exemplo, o volume de um cone é dado por onde r é o raio e h é a altura do cone. Nesse caso, uma função do usuário para calcular o volume do cone, chamada volumeCone, deve receber dois argumentos de entrada. Exemplo function volume = volumeCone(raio, altura) % Calcula o volume de um cone volume = pi / 3 * raio ^ 2 * altura; Uma vez que a função do usuário volumeCone possui dois argumentos de entrada, ao ser chamada, devem ser fornecidos dois parâmetros, um para cada argumento e na ordem correspondente. Exercício: sc e a a f n o pa a calc la e e o na a ea de e ng lo. Passe o comprimento e largura para a f n o co o a g en os de en ada. Exercício 2 sc e a a f n o cha ada tempck.m pa a con e e a e pe a a de g a s elsi s pa a g a s el in. f n o ecebe a g en o de en ada co esponden e a e pe a a e g a s elsi s e e o na a temperatura em Kelvin. K = C + 273, 15. xe plo de so da f n o
Compartilhar