Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Software MATLAB para Engenharia, Manuais, Projetos, Pesquisas de Matlab

Apostila do curso de extensão do Centro Universitário de Belo Horizonte (UniBH).

Tipologia: Manuais, Projetos, Pesquisas

Antes de 2010

Compartilhado em 28/11/2008

maximiliano-couto-12
maximiliano-couto-12 🇧🇷

1 documento

1 / 50

Documentos relacionados


Pré-visualização parcial do texto

Baixe Software MATLAB para Engenharia e outras Manuais, Projetos, Pesquisas em PDF para Matlab, somente na Docsity! Curso de Engenharia de Telecomunicações Curso de Extensão MATLAB para Engenharia Adriana Maria Tonini Daniela Naufel Schettino 1ª edição – Agosto de 2002 Belo Horizonte – Minas Gerais 1 Apostila de MATLAB 1) Introdução Esta apostila surgiu da necessidade de capacitar rapidamente alunos de graduação a utilizarem o MATLAB como suporte computacional em estudos nas áreas da engenharia, e, principalmente para os alunos do Curso de Engenharia de Telecomunicações, cuja necessidade de conhecer e saber trabalhar com o MATLAB é extremamente importante nas disciplinas que compõem a grade curricular do curso. O MATLAB é um "software" de alto desempenho destinado a fazer cálculos com matrizes (MATrix LABoratory), podendo funcionar como uma calculadora ou como uma linguagem de programação científica (FORTRAN, Pascal, C, etc.). Entretanto, os comandos do MATLAB são mais próximos da forma como escrevemos expressões algébricas, tornando mais simples o seu uso. Atualmente, o MATLAB é definido como um sistema interativo e uma linguagem de programação para computação técnica e científica em geral, integrando a capacidade de fazer cálculos, visualização gráfica e programação (Tonini e Couto, 1999). • Uso típico do MATLAB: - cálculos matemáticos; - desenvolvimento de algoritmos; - modelagem, simulação e confecção de protótipos; - análise, simulação e confecção de dados; - gráficos científicos e de engenharia; - desenvolvimento de aplicações, incluindo a elaboração de interfaces gráficas com o usuário. 4 Operador lógico Descrição Uso & E Conjunção | ou Disjunção ~ Não Negação Tabela 4 – Operações lógicas 2.3- Constantes e Variáveis O MATLAB faz cálculos simples e científicos como uma calculadora. Para tal, os comandos devem ser digitados diretamente no prompt (>>) do MATLAB, já que este se trata de um software interativo. Por exemplo: >> 3*25 + 5*12 ans = 135 Observe que no MATLAB a multiplicação tem precedência sobre a adição. Uma constante numérica no MATLAB é formada por uma sequência de dígitos que pode estar ou não precedida de um sinal positivo (+) ou negativo (-) e pode conter um ponto decimal (.). Esta sequência pode terminar ou não por uma das letras e, E, d ou D, seguida de outra sequência de dígitos precedida ou não de um sinal de (+) ou de (-). Esta segunda sequência é a potência de 10 pela qual a primeira sequência deve ser multiplicada. Por exemplo, » 1.23e-1 significa 0,123. O formato em que uma constante numérica é mostrada no MATLAB segue, como opção default, os seguintes critérios: se um resultado é inteiro, o MATLAB mostra o número como inteiro; quando o resultado é real, o MATLAB mostra o número com 4 dígitos à direita do ponto decimal; se os dígitos do resultado estiverem fora desta faixa, o MATLAB mostra o resultado usando a notação científica. Este default pode, entretanto, ser modificado utilizando-se o Numeric Format do item Options na barra de menus. Usando-se a constante numérica (33,5), considere a tabela 5 a título de exemplo dos formatos numéricos do MATLAB: Comando Formato Comentário format short 33.5000 4 dígitos decimais (formato default) format long 33.50000000000000 16 dígitos format short e 3.3500e+001 5 dígitos mais expoente format long e 3.350000000000000e+001 16 dígitos mais expoente format hex 4040c00000000000 Hexadecimal format bank 33.50 2 dígitos decimais format + + positivo, negativo ou zero format rat 67/2 Racional Tabela 5 – Formatos Numéricos 5 Alternativamente, você pode usar variáveis para armazenar informação. Por exemplo: >> q1=3, p1=25, q2=5, p2=12 q1 = 3 p1 = 25 q2 = 5 p2 = 12 >> total=q1*p1+q2*p2 total = 135 Primeiro, criamos quatro variáveis, q1, p1, q2 e p2, atribuindo a elas os seus valores respectivos. Observe que o sinal de igual (=) aqui significa atribuição. O que estiver à direita do sinal de igual é “colocado” na variável que estiver à esquerda. Finalmente, criamos uma variável chamada total que recebeu o total da compra. Os nomes das variáveis devem consistir de uma única palavra, conforme as regras expressas na tabela 6: Regras de construção das variáveis Comentários/Exemplos Variáveis com letras minúsculas e maiúsculas são diferentes, mesmo que consistam das mesmas letras. Total, total, TOTAL e ToTaL são variáveis diferentes. As variáveis podem consistir de até 19 caracteres Sdtf65erkjh3448bafg As variáveis devem começar com uma letra e pode ser seguida de letras, números ou subscrito (_). Var_2 X34 a_b_c Tabela 6 – Regras para construção de variáveis As variáveis podem ser redefinidas a qualquer momento, bastando para isso atribuir- lhes um novo valor. Alguns nomes são usados para variáveis predefinidas, ou seja, são variáveis especiais do MATLAB. Estas são: Variáveis especiais Significado ans Variável usada para exibir os resultados pi Número 3,14159 eps Menor número tal que, quando adicionado a 1, cria um número maior que 1 no computador. flops Armazena o número de operações em ponto flutuante realizadas. inf Significa infinito NAN ou nan Significa não é um número, por exemplo, 0/0. i e j Unidade imaginária [ 1− ]. 6 nargin Número de argumentos de entrada de uma função nargout Número de argumentos de saída de uma função realmin Menor número que o computador pode armazenar realmax Maior número que o computador pode armazenar Tabela 7 – Variáveis do Matlab Comentário e pontuações Símbolo Função , Separar comandos dados em uma mesma linha. ; Separar comandos dados em uma mesma linha. Se o último caractere da declaração é um ponto e vírgula, a impressão na tela é suprimida, mas a tarefa é realizada. % Todo e qualquer caracter depois do símbolo de porcentagem é tomado como comentário. ... Pode-se continuar uma certa expressão na próxima linha usando um espaço em branco e três pontos,"...", ao final das linhas incompletas. Tabela 8 – Comentário e pontuações Exemplo: » q1=3, p1=25, ... q2=5; p2=12; %Exemplo de uso da vírgula, ponto e vírgula e três pontos q1 = 3 p1 = 25 Os espaços em branco entre os operadores (aritméticos, lógicos, relacionais) e as variáveis (ou constantes) são opcionais. O mesmo para vale para a vírgula, o ponto e vírgula e o símbolo de porcentagem. No entanto, o espaço em branco entre a última variável (ou constante) de uma linha e os três pontos é obrigatório (veja exemplo anterior). Variáveis literais Uma variável pode conter uma cadeia de caracteres ao invés de um número. Estes caracteres são manipulados como vetores linha (assunto que será tratado mais adiante). A cadeia de caracteres deve estar limitada por apóstrofos (‘cadeia de caracteres’) para ser atribuída a uma variável literal. Por exemplo: » a='MATLAB' a = MATLAB 9 gcd(x,y) máximo divisor comum de x e y. lcm(x,y) mínimo múltiplo comum de x e y. log(x) logaritmo de x na base e. log10(x) logaritmo de x na base 10. rem(x,y) resto da divisão de x por y. round(x) arredondamento para o inteiro mais próximo sign(x) função signum sin(x) seno de x. sinh(x) seno hiperbólico de x. sqrt(x) raiz quadrada de x. tan(x) tangente de x. tanh(x) tangente hiperbólica de x. Tabela 9 – Algumas funções matemáticas Comandos de auxílio No MATLAB, pode-se obter ajuda sobre qualquer comando ou função. Isto pode ser feito basicamente de três formas: interativamente através do menu de barras, através do comando help ou do comando lookfor. Digitando-se simplesmente o comando help, >> help o MATLAB mostra uma listagem de todos os pacotes disponíveis. Ajuda sobre um pacote específico ou sobre um comando ou função específica é obtida com o comando help <tópico>, onde tópico pode ser o nome de um pacote, de um comando ou função. Por exemplo: » help sign SIGN Signum function. For each element of X, SIGN(X) returns 1 if the element is greater than zero, 0 if it equals zero and -1 if it is less than zero. For complex X, SIGN(X) = X ./ ABS(X). O comando help é a maneira mais simples de se obter auxílio no caso do usuário conhecer o tópico em que ele quer assistência. Note que no exemplo mostrado a função SIGN está escrita em letras maiúsculas somente para destacar. Deve-se lembrar que todos os comandos do MATLAB devem ser escritos em letras minúsculas. Portanto, para utilizar esta função deve-se digitar: » sign (x) O Comando lookfor provê assistência pela procura através de todas as primeiras linhas dos tópicos de auxílio do MATLAB e retornando aquelas que contenham a palavra-chave especificada. O interessante deste comando é que a palavra chave não precisa ser um comando do MATLAB. Sua sintaxe é lookfor <palavra-chave>, onde palavra-chave é a cadeia de caracteres que será procurada 10 nos comandos do MATLAB. Por exemplo, para se obter informações sobre funções para se resolver integral: » lookfor integral ELLIPKE Complete elliptic integral. EXPINT Exponential integral function. DBLQUAD Numerically evaluate double integral. INNERLP Used with DBLQUAD to evaluate inner loop of integral. QUAD Numerically evaluate integral, low order method. QUAD8 Numerically evaluate integral, higher order method. COSINT Cosine integral function. SININT Sine integral function. ASSEMA Assembles area integral contributions in a PDE problem. COSINT Cosine integral function. FOURIER Fourier integral transform. IFOURIER Inverse Fourier integral transform. SININT Sine integral function. BLKPIDCON The output of the block is the sum of proportional, integral and Apesar da palavra integral não ser um comando do MATLAB, ela foi encontrada na descrição de 14 comandos. Tendo esta informação, o comando help pode ser usado para exibir informações a respeito de um comando específico, como por exemplo: » help quad 2.6- Números Complexos Algumas linguagens de programação requerem um tratamento especial para números complexos, o que não é o caso do MATLAB. Números complexos são permitidos em todas as operações e funções no MATLAB. Os números complexos são introduzidos usando-se as funções especiais i e j. Eles podem ser representados de várias maneiras. Por exemplo: » z1=3+4*i z1 = 3.0000 + 4.0000i » z2=3+4j z2 = 3.0000 + 4.0000i » z1+z2 ans = 6.0000 + 8.0000i 11 • Identidade de Euler: relaciona a forma polar de um número complexo com a sua forma retangular. M∠θ≡M.ejθ=a+bj , onde: M= 22 ba + θ=tan-1(b/a) a=M.cosθ b=M.senθ No MATLAB, a conversão entre as formas polar e retangular de um número complexo utiliza as seguintes funções: • real: parte real de um número complexo • imag: parte imaginária de um número complexo • abs: calcula o valor absoluto ou módulo de um número complexo • angle: calcula o ângulo de um número complexo Exemplo: » x=1-4i x = 1.0000 - 4.0000i » a=real(x) a = 1 » b=imag(x) b = -4 » M=abs(x) M = 4.1231 » theta=angle(x)*180/pi theta = -75.9638 2.7- Expressões Simbólicas No MATLAB, é possível manipularmos expressões que além de números e variáveis numéricas, contêm também variáveis simbólicas. Por exemplo: >> syms x >> simplify((sin(x))^2+(cos(x))^2) ans = 1 Estes comandos mandam o MATLAB simplificar a expressão sen2x+cos2x. Primeiro precisamos dizer ao MATLAB que x é uma variável simbólica, depois pedimos para simplificar a expressão que envolve x. Neste caso usamos uma função chamada simplify. Neste caso, a função simplify tem como argumento de entrada uma expressão simbólica e de saída também. 14 3) VETORES E MATRIZES O MATLAB permite a manipulação de linhas, colunas, elementos individuais e partes de matrizes. Na tabela 10, tem-se um resumo das diversas formas de se construir um vetor no MATLAB. X=primero : último Cria um vetor x começando com o valor primeiro, incrementando-se de 1(um) em 1(um) até atingir o valor último ou o valor mais próximo possível de último X=primeiro:incremento:último Cria um vetor x começando com o valor primeiro, incrementando-se do valor incremento até atingir o valor último ou o valor mais próximo possível de último X=linspace(primeiro, último, n) Cria um vetor x começando com o valor primeiro e terminado no valor último, contendo n elementos linearmente espaçados. X=logspace(primeiro, último, n) Cria um vetor x começando com o valor 10primeiro e terminando no valor 10último, contendo n elementos logaritmicamente espaçados X=[2 2*pi sqrt(2) 2-3j] Cria um vetor x contendo os elementos especificados Tabela 10 – Construção de Vetores Exemplo 1: >> x = 1 : 5 gera um vetor linha contendo os números de 1 a 5 com incremento unitário. Produzindo X = 1 2 3 4 5 >> x=1:10.5 x= 1 2 3 4 5 6 7 8 9 10 Exemplo 2: >> z = 6 : -l : l Z = 6 5 4 3 2 1 Exemplo 3: Pode-se, também, gerar vetores usando a função linspace. Por exemplo, >> k = linspace (0, l, 6) K = 0 0.2000 0.4000 0.6000 0.8000 1.0000 15 gera um vetor linearmente espaçado de 0 a 1, contendo 6 elementos. >> x=linspace(1,10.5,5) x= 1.0000 3.3750 5.7500 8.1250 10.5000 Exemplo 4: >> x=logspace(0,2,5) x= 1.0000 3.1623 10.0000 31.6228 100.00 Exemplo 5: >> x=[8 6 8.10 5-6j] x= 8.0000 6.0000 8.1000 5.0000-6.0000i Nos exemplos acima os vetores possuem uma linha e várias colunas (vetores linha). Da mesma forma podem existir vetores coluna (uma coluna e várias linhas). Para se criar um vetor coluna elemento por elemento estes devem estar separados por ( ; ). Por exemplo: >> v=[1.5;-3.2;9] v = 1.5000 -3.2000 9.0000 Esses vetores coluna podem também ser criados a partir dos comandos utilizados anteriormente para criar os vetores linha, acompanhados do símbolo ( ' ), que é o operador de transposição. Exemplo: >> y=(1:0.5:3)' y = 1.0000 1.5000 2.0000 2.5000 3.0000 >> z=[0 -2.3 4 sqrt(33)]' z = 0 -2.3000 4.0000 5.7446 16 ENDEREÇAMENTO DE VETORES No MatLab, cada um dos elementos de um vetor podem ser acessados através de seu índice que identifica cada uma das colunas. Por exemplo : >> x=1:10 x= 1 2 3 4 5 6 7 8 9 10 >> x(3) % Acessa o terceiro elemento de x ans = 3 >> x(5) % Acessa o quinto elemento de x ans = 5 Esses elementos de um vetor também podem ser acessados em blocos. Por exemplo: >> c=linspace(10,40,7) c = 10 15 20 25 30 35 40 >> c(3:5) % terceiro a quinto elemento de c ans = 20 25 30 >>c(5:-2:1) % quinto, terceiro e primeiro elementos de c ans = 30 20 10 O endereçamento indireto também é possível, permitindo referenciar os elementos em qualquer ordem: >> c([4 1]) %quarto e primeiro elementos ans = 25 10 No caso de vetores coluna, os comandos acima funcionam de maneira similar. Por exemplo: >> d=c' d = 10 15 20 25 30 35 40 19 3.2 Adição e Subtração A adição e subtração de matrizes são indicadas, respectivamente, por "+" e "-". As operações são definidas somente se as matrizes tiverem as mesmas dimensões. Por exemplo, a soma com as matrizes mostradas acima, A + x, não é correta porque A é 3x3 e x é 3x1. Porém, >> C = A + B é aceitável, e o resultado da soma é C = 2 6 10 6 10 14 10 14 0 A adição e subtração também são definidas se um dos operadores é um escalar, ou seja, uma matriz l x l. Neste caso, o escalar é adicionado ou subtraído de todos os elementos do outro operador. Por exemplo: >> y = x - 1 resulta em Y = -2 -1 1 3.3 Multiplicação A multiplicação de matrizes é indicada por "*". A multiplicação x*y é definida somente se a segunda dimensão de x for igual à primeira dimensão de y. A multiplicação >> x'* y é aceitável, e resulta em Ans = 4 É evidente que o resultado da multiplicação y'*x será o mesmo. Existem dois outros produtos que são transpostos um do outro. >> x*y' Ans = 2 l -l 0 0 0 -4 -2 2 >> y*x' Ans = 2 0 -4 1 0 -2 -1 0 2 20 O produto de uma matriz por um vetor é um caso especial do produto entre matrizes. Por exemplo A e X, >> b = A*x que resulta em B = 5 8 -7 Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz. >> pi*x Ans = -3.1416 0 6.2832 Além da multiplicação matricial e escalar, podemos ter a multiplicação por elemento de matrizes de mesma dimensão. Esse tipo de operação é feita utilizando-se um ponto ( . ) antes do operador de multiplicação ( * ). Ou seja, se A e B são matrizes definidas por A=[ a11 a12 ... a1n ; a21 a22 ... a2n ; ... ; am1 am2 ... amn] e B=[ b11 b12 ... b1n ; b21 b22 ... b2n ; ... ; bm1 bm2 ... bmn ], então A.*B =aij*bij. Por exemplo: >> A.*B ans = 1 8 21 8 25 48 21 48 0 3.4 Divisão Existem dois símbolos para divisão de matrizes no MATLAB "\" e "/". Se A é uma matriz quadrada não singular, então A\B e B/A correspondem respectivamente à multiplicação à esquerda e à direita da matriz B pela inversa da matriz A, ou inv(A)*B e B*inv(A), mas o resultado é obtido diretamente. Em geral, • X = A\B é a solução de A*X = B • X = B/A é a solução de X*A = B Por exemplo, como o vetor b foi definido como A*x, a declaração >> z = A\b resulta em Z = -1 0 2 A divisão por elemento entre matrizes é definida de maneira similar à multiplicação por elemento, ou seja, A./B= aij/bij e A.\B= aij\bij , onde A e B têm mesma dimensão. 21 3.5 Exponenciação A expressão A^p eleva A à p-ésima potência e é definida se A é matriz quadrada e p um escalar. Se p é um inteiro maior do que um, a exponenciação é computada como múltiplas multiplicações. Por exemplo, >> A^3 Ans = 279 360 306 684 873 684 738 900 441 A exponenciação por elemento entre matrizes é definida de maneira similar à multiplicação por elemento, ou seja, A.^B= aijbij , onde A e B têm mesma dimensão. De maneira similar, a potenciação por elemento entre uma matriz e um escalar apresenta as seguintes formas: A.^c=aijc e c.^A=caij Elementos das Matrizes Um elemento individual da matriz pode ser indicado incluindo os seus subscritos entre parênteses. Por exemplo, dada a matriz A: A = 1 2 3 4 5 6 7 8 9 a declaração >> A(3,3) = A(1,3) + A(3,l) resulta em A = 1 2 3 4 5 6 7 8 10 >> A(1:3,2) Ans = 2 5 8 >> A(1:3,2:3) é uma submatriz 3x2, que consiste das três linhas e das últimas duas colunas de A. Ans = 2 3 5 6 8 10 24 4) GRÁFICOS NO MATLAB A construção de gráficos no MATLAB é mais uma das facilidades do sistema. Através de comandos simples pode-se obter gráficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenada. 4.1 Gráficos Bidimensionais Estes são os comandos para plotar gráficos bidimensionais: plot Plotar linear. loglog Plotar em escala loglog. semilogx Plotar em semilog. semilogy Plotar em semilog. fill Desenhar polígono 2D. polar Plotar em coordenada polar. bar Gráfico de barras. stem Seqüência discreta. stairs Plotar em degrau. errorbar Plotar erro. hist Plotar histograma. rose Plotar histograma em ângulo. compass Plotar em forma de bússola. feather Plotar em forma de pena. fplot Plotar função. comet Plotar com trajetória de cometa. Tabela 11 – comandos para gráficos bidimensionais Se Y é um vetor, plot(Y) produz um gráfico linear dos elementos de Y versos o índice dos elementos de Y. Por exemplo, para plotar os números [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0,14], entre com o vetor e execute o comando plot: >> Y = [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0,14]; >> plot(Y) 25 Se X e Y são vetores com dimensões iguais, o comando plot(X,Y) produz um gráfico bidimensional dos elementos de X versos os elementos de Y, por exemplo >> t = 0:0.05:4*pi; >> y = sin(t); >> plot(t,y) O MATLAB pode também plotar múltiplas linhas e apenas um gráfico. Existem duas maneiras, a primeira é usado apenas dois argumentos, como em plot(X,Y), onde X e/ou Y são matrizes. Então: • Se Y é uma matriz e X um vetor, plot(X,Y) plota sucessivamente as linhas ou colunas de Y versos o vetor X. 26 • Se X é uma matriz e Y é um vetor, plot(X,Y) plota sucessivamente as linhas ou colunas de X versos o vetor Y. • Se X e Y são matrizes com mesma dimensão, plot(X,Y) plota sucessivamente as colunas de X versos as colunas de Y. • Se Y é uma matriz, plot(Y) plota sucessivamente as colunas de Y versos o índice de cada elemento da linha de Y. A segunda, e mais fácil, maneira de plotar gráficos com múltiplas linhas é usando o comando plot com múltiplos argumentos. Por exemplo: >> plot(t, sin(t), t, cos(t), t, sin(t + pi), t, cos(t + pi)) 4.2 Estilos de Linha e Símbolo Os tipos de linhas, símbolos e cores usados para plotar gráficos podem ser controlados se os padrões não são satisfatórios. Por exemplo, >> X = 0:0.05:1; >> subplot(l2l), plot(X,X.^2,’k*’) >> subplot(l22), plot(X,X.^2,’k --‘) 29 >> [X,Y] = meshdom(-2:.2:2, -2:.2:2); >> Z = X.* exp(-X..^2 - Y.^2); >> mesh(X,Y,Z) e o comando contour(Z,10) mostra a projeção da superfície acima no plano xy com 10 iso-linhas: 30 4.6 Anotações no Gráfico O MATLAB possui comandos de fácil utilização para adicionar informações em um gráfico: title Título do gráfico. xlabel Título do eixo-X. ylabel Título do eixo-Y. zlabel Título do eixo-Z. text Inserir anotação no gráfico. gtext Inserir anotação com o "mouse". grid Linhas de grade. Tabela 13 – Anotações em gráficos >> fplot(‘sin’, [-pi pi]) >> title(‘Gráfico da função f(x)=seno(x), -pi<x<pi’) >> xlabel(‘x’) >> ylabel(‘f(x)’) >> grid 31 5) Programação 5.1- Arquivos .m Para resolver problemas simples, é cômodo e eficiente utilizar o MATLAB como se fosse uma calculadora, entrando-se com os comandos diretamente no prompt. Ou seja, cada linha de comando é introduzida na Janela de Comandos e processada imediatamente. Entretanto, à medida que o número de comandos aumenta, ou quando se deseja mudar o valor de uma ou mais variáveis e executar novamente os comandos, o melhor é utilizar o MATLAB como uma linguagem de programação, ou seja, utilizar o MATLAB para executar seqüências de comandos armazenadas em arquivos de roteiro (script). Esses arquivos que contêm as declarações do MATLAB são chamados arquivos ".m" ( ou M-files ), como, por exemplo, exemplo1.m. Esses M-files são os programas fontes do MATLAB e consistem de seqüências de comandos normais do MATLAB, possibilitando incluir outros arquivos ".m" escritos no formato texto (ASCII). Para escrever um programa ( ou arquivo .m ) no MATLAB, escolha File na barra de menu. Dentro do menu File escolha New e selecione M-file. Abre-se, então, um editor de textos, onde pode-se escrever os comandos do MATLAB. Para editar um arquivo já existente, selecione a opção Open M-File, a partir do menu File. Os arquivos podem, também, ser editados fora do MATLAB utilizando qualquer editor de texto. Escreva, por exemplo, o programa abaixo : %===================================================== % Exemplo de programação no MATLAB % Este exemplo plota uma função seno nas sequintes % condições: % sen(x) % 2*sen(x) % 2*sen(x+45) % 2*sen(x-90) % 2*sen(2*x) %============================================== % x=0:360; % % Seno com amplitude A=1 e defasagem phi=0 graus A=1; phi=0; y=A*sin(2*pi*x/360+2*pi*phi/360); % Seno com amplitude A=2 e defasagem phi=0 graus A=2; z=A*sin(2*pi*x/360+2*pi*phi/360); % Seno com amplitude A=2 e defasagem phi=45 graus phi=45; v=A*sin(2*pi*x/360+2*pi*phi/360); % Seno com amplitude A= 2 e defasagem phi=-90 graus phi=-90; 34 % Exemplo 2 de utilização da função M-file “input” %========================================= % Programa para traçar a curva : % % y=A.sin(x+phi), % %sendo que os valores de x[rad], A e phi[graus] devem ser %entrados via teclado durante a execução do programa % x=input(‘Entre com o vetor x [rad]> ’); A=input(‘Entre com o valor de A> ’); phi=input(‘Entre com o valor de phi [graus]> ’); % y=A*sin(x+pi*phi/180); plot(x,y,‘r’); grid on title(‘Exemplo de utilização da função “input”’) xlabel(‘x em rad/s’) ylabel(‘y=A.sin(x+phi)’) % Exemplo 3 de utilização da função M-file “input” % Programa decsomat.m %========================================= % Programa para gerar uma matriz com elementos aleatórios % entre -10 e 10 e decompô-la na soma de três matrizes : % uma triangular inferior, uma diagonal e outra triangular % superior %------------------------------------------------------- n = input('Ordem da matriz : '); A = fix(20*(rand(n) -0.5 * ones(n))); D = diag(diag(A)); L = tril(A) - D; U = triu(A) - D; A, L, D, U % Fim do programa %---------------------------------------------------------- >> decsomat Ordem da matriz : 3 A = -5 3 0 -9 8 6 35 3 -2 -9 L = 0 0 0 -9 0 0 3 -2 0 D = -5 0 0 0 8 0 0 0 -9 U = 0 3 0 0 0 6 0 0 0 5.3- Gerenciamento de arquivos O MATLAB possui uma série de comandos para gerenciamento de arquivos, tais como listar os nomes de arquivos, vizualizar, deletar, etc. Na tabela abaixo tem-se um resumo dos principais comandos : cd Mostra o diretório de trabalho atual ou corrente p=cd Retorna para a variável p o diretório de trabalho corrente cd temp Muda para o diretório temp cd .. Muda para o diretório um nível acima chdir O mesmo que cd chdir path O mesmo que cd temp delete test deleta o arquivo test.m dir Lista todos os arquivos do diretório de trabalho presente ls Faz o mesmo que o comando dir matlabroot Retorna o caminho do diretório onde se encontra o programa MATLAB executável path Visualiza todos os caminhos de diretório do MATLAB pwd O mesmo que o comando cd type test Visualiza o arquivo M-file test.m na janela de comandos what Retorna uma lista de todos os M-files do diretório corrente which test Visualiza o caminho do diretório do arquivo test.m Tabela 15 : Comandos para Gerenciamento de Arquivos 36 5.4- Controles de Fluxo 5.4.1- Estruturas Condicionais Uma estrutura condicional permite a escolha do grupo de comandos a serem executados quando uma dada condição for satisfeita ou não, possibilitando desta forma alterar o fluxo natural de comandos. Esta condição é representada por uma expressão lógica. 5.4.1.1 Estrutura if-end A estrutura condicional mais simples do MA TLAB é: if <condição> <comandos> end Se o resultado da expressão lógica <condição> for 1 ( verdadeiro ) en tão a lista de <comandos> será executada. Se o resultado for 0 ( falso ) os <comandos > não serão executados. Por exemplo, considere o arquivo estcond1.m cujo conteúdo é: a = input('Entre com o valor de a : '); if a >= 0 b = sqrt(a) end Para executá-lo basta fornecer o seu nome na área de trabalho >> estcond1 Entre com o valor de a : 2 b = 1.4142 Neste exemplo, a raiz quadrada de a será atribuída a b somente se o valor de a for maior ou igual a 0 . Considere o arquivo banana.m: custo=5; bananas=10; if bananas>5 custo=0.1*custo; end custo >>banana custo = 0.5000 No exemplo acima, a expressão bananas > 5 é verdadeira, assim o comando : custo=0.1* custo Exemplo 2 : custo=5; bananas=5; 39 quando executado resultará >> estcond3 Entre com o valor de a : 4 b = 16 Deste modo foi executado o primeiro comando para o qual a condição a<=10 foi satisfeita, ou seja, apesar da condição a<100 ser também verdadeiro, o comando referente a ela não foi executado. Assim, na estrutura if-elseif-end é executada somente uma única lista de comandos. 5.4.2- Estruturas de repetição A estrutura de repetição faz com que uma sequência de comandos seja executada repetidamente até que uma dada condição de interrupção seja satisfeita. O MATLAB possui duas estruturas de repetição: as estruturas for-end e a while-end 5.4.2.1. Estrutura for-end A estrutura for-end permite que um grupo de comandos seja repetido um número específico de vezes. Sua sintaxe é: for <variável>=<arranjo> <comandos> end onde <variável> é a variável-de-controle que assume todos os valores contidos no vetor linha <arranjo> . Assim, o número de repetições da lista <comandos > é igual ao número de elementos no vetor <arranjo>. A variável-de-controle não pode ser redefinida dentro da estrutura for-end . O laço for é o controlador de fluxo mais simples e usado na programação MATLAB. Analisando a expressão: for i=1:5 X(i)=i^2 end pode-se notar que o laço for é dividido em três partes: • A primeira parte (i=1) é realizada uma vez, antes do laço ser inicializado. • A segunda parte é o teste ou condição que controla o laço, (i<=5). • Esta condição é avaliada; se verdadeira, o corpo do laço (X(i)=i^2) é executado. A terceira parte acontece quando a condição se torna falsa e o laço termina. O comando end é usado como limite inferior do corpo do laço. Vamos considerar um exemplo, executando o programa estrep1.m abaixo: n = input('Valor de n : '); s = 0; n2 = n^2; 40 for i = 1:2:2*n-1 s = s + i; end, n2, s >> estrep1 Valor de n : 5 n2 = 25 s = 25 Este exemplo mostra que a soma dos n primeiros números ímpares é igual ao quadrado de n, pois para n=5 a variável-de-controle i assume os valores 1 3 5 7 9. Deve ser observado o uso do ( ; ) para suprimir a exibição de resultados intermediários no cálculo de s . Exercícios : 1) Crie o vetor x=[0 36 72 108 144 180 216 252 288 324] através do comando for (exercicio1.m). Solução: x(1)=0; for n=2:10 x(n)=x(n-1)+36; end x >>exercicio1 x = 0 36 72 108 144 180 216 252 288 324 2) Plote 360 pontos de um período da função y=sen(2*pi*x/360), usando o loop for (exercicio2.m). Solução: for x=1:360 y(x)=sin(2*pi*x/360); end plot(y) Isto é, a primeira instrução diz : para n igual a 2 até 10, execute todas os comandos até a instrução de end. No primeiro ciclo do for, n=2, no segundo n=3 e assim por diante, até n=10. Depois do ciclo para n=10, o loop for termina e os comandos após a instrução end são executados, como é o caso da apresentação dos resultados em x. OBS: no Matlab, é mais eficiente construir vetores como feito no capítulo 3 do que com a utilização do comando for. Para mostrar que as estruturas for-end podem estar encadeadas, considere, por exemplo, os programas abaixo: %estrep2.m n = input('Ordem do quadrado magico : '); A = magic(n); Soma_Linhas = zeros(n,1) ; 41 Soma_Colunas = zeros(1,n); for i = 1:n for j = 1:n Soma_Linhas(i) = Soma_Linhas(i) + A(i,j); Soma_Colunas(j) = Soma_Colunas(j) + A(i,j); end end A, Soma_Linhas , Soma_Colunas >> estrep2 Ordem do quadrado magico : 4 A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 Soma_Linhas = 34 34 34 34 Soma_Colunas = 34 34 34 34 Cumpre observar que o MA TLAB possui comandos para determinar estes somatórios de um modo mais simples, através do comando sum que fornece a soma das colunas de uma matriz. É comum construções em que conjuntos de laços for são usados principalmente com matrizes: %estrep3.m for i=1:8 for j=1:8 A(i,j)=i+j; B(i,j)=i-j; end end C=A+B; A, B, C >>estrep3 A = 2 3 4 5 6 7 8 9 3 4 5 6 7 8 9 10 4 5 6 7 8 9 10 11 5 6 7 8 9 10 11 12 6 7 8 9 10 11 12 13 7 8 9 10 11 12 13 14 8 9 10 11 12 13 14 15 9 10 11 12 13 14 15 16 B = 0 -1 -2 -3 -4 -5 -6 -7 1 0 -1 -2 -3 -4 -5 -6 2 1 0 -1 -2 -3 -4 -5 3 2 1 0 -1 -2 -3 -4 4 3 2 1 0 -1 -2 -3 44 A estrutura while-end é executada indefinidamente a princípio pois a condição do while é sempre verdadeira. Contudo, quando a <condição> do if for satisfeita o comando break será executado causando a interrupção da repetição while-end. Por exemplo, o programa no arquivo estrep3.m while 1 a=input('Entre com a, a>0 : '); if a <= 0 break end disp(rats(a )) end lista continuamente a representação racional de um número fornecido enquanto este for positivo. Deste modo, >> estrep3 Entre com a, a>0 : pi 355/113 Entre com a, a>0 : sqrt(2) 1393/985 Entre com a, a>0 : -8 Considere mais um programa para exemplificar o uso do comando break: %Programa para criar e modificar uma matriz A for i = l:5, for j = l:5, if i == j A(i,j) = 2; elseif abs(i-j) == 1 A(i,j) = -1; else A(i,j) = 0; end end end clc x = ’s’; for i = l:5, if x == ‘q’, break end j = l; while j<=5, [‘A(‘num2str(i) ‘,’ num2str(j)’) = ‘num2str(A(i,j))] x = input(‘Modifica? (s-sim, n-não, p-próxima linha, q- sair) =>’); if x == ’s’, A(i,j) = input(‘Entre com o novo valor de A(i,j) ’); j=j+l; clc end 45 if x == ‘n’, j=j+l; clc end if x == ‘p’, clc break end if x == ‘q’, clc break end end end 5.3- Subprograma function Um outro tipo de arquivo de roteiro é usado para o próprio usuário criar novas funções para o MatLab. Na realidade, várias funções do MatLab são arquivos .m. Uma função é criada no MatLab como um arquivo .m, porém começando sempre com o seguinte cabeçalho: function [variáveis de saída] = Nome_da_Função (variáveis de entrada) Todas as variáveis temporárias usadas na função são variáveis locais e, com isso, após a execução da função, elas são removidas do espaço de trabalho. Como exemplo, veja como o MatLab implementa a função trace: function t = trace(a) %TRACE Sum of diagonal elements. % TRACE(A) is the sum of the diagonal elements of A, which is % also the sum of the eigenvalues of A. % Copyright (c) 1984-98 by The MathWorks, Inc. t = sum(diag(a)); As linhas de comentário (prefixadas por %) de uma função, quando introduzidas imediatamente após o cabeçalho da função, definem o help on-line da própria função. Veja agora um exemplo de uma função escrita pelo usuário e como ela é utilizada por um programa do Matlab: function azr=rmz(a) %a1=rmz(a) removes the leading zero elements of a vector %until a possible scalar variable remains azr=a; while (azr(1)==0)&(length(azr)>1), azr(1)=[]; end 46 %Programa que utiliza uma função criada pelo usuário a=[0 0 0 1 0 3 6 0]; a1=rmz(a); a a1 Considere também a seguinte exemplo: • Abra um arquivo, salvando-o com nome de prog_funcao.m • Digite os seguintes comandos neste arquivo % prog_funcao.m % CRIANDO UMA SUBROTINA v = 1:1:10; m = media(v); s = sprintf(‘\n A média é: %4.2f’, m); disp(s); % final do programa prog_funcao.m • Agora crie o seguinte arquivo, com o nome de media.m function x = media(u) % function x = media(u) calcula a média do vetor u, colocando o resultado em x x = sum(u)/length(u); % final da subrotina media.m • Na linha de comando do Matlab, digite: >> prog_funcao >> echo on >> prog_funcao >> echo off
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved