Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila MATLAB
Apostila MATLAB
Alex Jenaro Becker Daiane Medianeira Ilha da Silva Francisco Helmuth Soares Dias Luclia Kowalski Pinheiro
APRESENTAO
Este trabalho trata-se da Apostila do Minicurso Noes Bsicas de Programao em MATLAB, elaborado e ministrado pelos bolsistas do PET Matemtica da UFSM: Daiane Medianeira Ilha da Silva e Francisco Helmuth Soares Dias, e pelos colaboradores Alex Jenaro Becker e Luclia Kowalski Pinheiro. A Apostila traz noes bsicas do software matemtico MATLAB : Ambiente de trabalho, comandos bsicos, funes bsicas, manipulao de matrizes; comandos para clculo de limites, derivadas e integrais, clculo de zeros de funes; comandos para tridimensionais, plotagem de grficos bidimensionais e
Nossa inteno com a proposta do Minicurso, no cobrir todos os tpicos do MATLAB, at por que isso seria praticamente impossvel, pois nossos conhecimentos so restritos se comparados amplitude e s abrangentes possibilidades de utilizao do mesmo. Alm do mais a carga horria seria insuficiente. Pretende-se, com o Minicurso e a Apostila incentivar e motivar o estudo da ferramenta MATLAB, a partir das noes bsicas que apresentaremos.
Boa aprendizagem!
SUMRIO
1. INTRODUO.............................................................................................................................4 1.1 O ambiente MATLAB............................................................................................................5 2. COMANDOS BSICOS.................................................................................................................6 2.1 Operaes Bsicas...............................................................................................................6 2.1.1 Comandos para utilizao de Funes:...............................................................7 2.2 Comandos de ajuda...8 2.2.1 O comando help.................................................................................................8 2.2.2 O comando lookfor.............................................................................................9 3. MANIPULAO DE MATRIZES...................................................................................................10 3.1 Matrizes elementares........................................................................................................10 3.2 Operaes com matrizes................................................................................................... .10 4. ZEROS DE FUNES...................................................................................................................12 5. MXIMOS E MNIMOS DE FUNES.................................................................................................12 6. CLCULO ............................................................................................................................................13 6.1 Construindo funes com variveis simblicas.................................................................13 6.2 Limites ..............................................................................................................................13 6.2.1 Limite lateral esquerda...................................................................................14 6.2.2 Limite lateral direita.......................................................................................14 6.3 Derivadas............................................................................................................................14 6.4 Integrao.........................................................................................................................14 6.4.1 Integrais Indefinidas..........................................................................................14 6.4.2 Integrais Definidas.............................................................................................15 7. PLOTANDO GRFICOS NO MATLAB..........................................................................................15 7.1 O comando plot ...............................................................................................................16 7.1.1 Comando subplot.............................................................................................22 7.2 Comando fplot...................................................................................................................23 7.3 Coordenadas Polares.........................................................................................................24 7.4 Curvas Paramtricas..........................................................................................................25 7.5 Diagramas Bidimensionais.................................................................................................26 8. ALGORITMOS...........................................................................................................................31 8.1 Representao de Algoritmos..........................................................................................32 8.1.1 Linguagem Natural..........................................................................................33 8.1.2 Fluxograma Convencional...............................................................................33 8.1.3 Pseudo-Cdigo.................................................................................................35 9. M-FILES: CRIANDO SEUS PRPRIOS PROGRAMAS E FUNES..................................................36 9.1 Sada de dados - Comando format....................................................................................39 9.2 Sada de dados - Funo Disp............................................................................................40 9.3 Sada de dados - Sada fprintf............................................................................................40 9.4 Sada de dados - Interao com o usurio atravs do comando input..............................42 9.5 Sada de dados - Operadores lgicos................................................................................43 10. CONDICIONAIS E LAOS.........................................................................................................44 10.1 A estrutura condicional if-end.........................................................................................44 10.2 A estrutura condicional if-else-end..................................................................................45 10.3 A estrutura condicional if-elseif-else-end........................................................................45 10.4 O lao for.........................................................................................................................47 10.5 O lao while.....................................................................................................................51 10.6 O comando break............................................................................................................54 10.7 O comando switch...........................................................................................................56 11. VETORIZAO........................................................................................................................57 12. RESERVA DE ESPAO PARA VARIVEIS................................................................................... 58 13. CAIXAS DE DILOGOS.............................................................................................................58 14.MTODOS NUMRICOS...........................................................................................................61 14.1 Bisseo............................................................................................................................61 14.2 Newton.............................................................................................................................63 14.3 Secante.............................................................................................................................65
1. INTRODUO
O MATLAB (do ingls Matrix Laboratory) um software de computao numrica de anlise e visualizao de dados. Embora seu nome signifique Laboratrio de Matrizes, seus propsitos atualmente so bem mais amplos. Ele nasceu como um programa para operaes matemticas sobre matrizes, mas ao longo dos anos transformou-se em um sistema computacional bastante til e flexvel. Seu ambiente de trabalho fcil de ser utilizado, pois os problemas e solues so escritos em linguagem matemtica e no na linguagem de programao tradicional, como muitos outros softwares utilizam. Assim o MATLAB uma ferramenta e uma linguagem de programao de alto nvel, e tem como principais funes: construo de grficos e compilao de funes, manipulao de funes especficas de clculo e variveis simblicas. Alm disso, o MATLAB possui uma grande quantidade de bibliotecas auxiliares (Toolboxes) que otimizam o tempo gasto para realizar tarefas, uma vez que, o usurio poder utilizar muitas funes j definidas, poupando o tempo de cri-las. Por outro lado, infelizmente, os programas feitos so difceis de serem executados num ambiente fora do MATLAB.
1.1
O ambiente MATLAB
O primeiro passo para iniciarmos nosso estudo do MATLAB nos familiarizarmos com a interface do programa.
a) Command Window: Local onde as operaes podem ser diretamente feitas. b) Workspace: espao destinado s variveis que esto salvas na memria, onde possvel visualizar o nome, valor e classe da mesma. c) Command History: Lista de comandos realizados, organizados por data de execuo, permitindo o comando ser realizado novamente com duplo clique. Podemos tambm utilizar M-files, na barra de Menus acessando a guia File>New>M-file, caso se deseje criar procedimentos de forma que estes fiquem salvos em arquivo. O MATLAB gera a seguinte janela:
Os arquivos salvos so gerados na extenso nomedoarquivo.m. que so compilados utilizando-se a Command Window como espao de comunicao de dados, de entrada e sada, entre o programa e o usurio. Pode-se tambm chamar um M-file, escolhendo-se em Current Directory a pasta em que o mesmo est localizado. Depois de escolhido o diretrio, digite na Command Window o nome do arquivo, e ento a programao salva ser compilada.
2. COMANDOS BSICOS
Smbolo + *
Diviso Potenciao
/ ou \ ^
56/8=8\56 5^2=25
As operaes so realizadas da esquerda para a direita calculando-as conforme a ordem: 1 Potenciao; 2 Multiplicao e diviso; 3 Adio e subtrao.
Comando abs(x) acos(x) acosh(x) angle(x) asin(x) asinh(x) atan(x) atan2(x,y) atanh(x) ceil(x) conj(x) cos(x) cosh(x)
Descrio Valor absoluto ou mdulo de um nmero complexo Arco cosseno Arco cosseno hiperblico ngulo de um nmero complexo Arco seno Arco seno hiperblico Arco tangent Arco tangente em quatro quadrantes Arco tangente hiperblica Arredondar para inteiro na direo de mais infinito Conjugado complex Cosseno Cosseno hiperblico
exp(x) fix(x) floor(x) imag(x) log(x) log10(x) real(x) rem(x,y) round(x) sign(x) sin(x) sinh(x) sqrt(x) tan(x) tanh(x)
Exponencial Arredonda para inteiro na direo de zero Arredondar para inteiro na direo de menos infinito Parte imaginria de um nmero complexo Logaritmo natural Logaritmo na base 10 Parte real de um nmero complexo Resto da diviso de x por y Arredondar para o prximo nmero inteiro Funo sinal: retorna o sinal de um argumento. EX: sign(1.2)=1 e sign(-1.2)=-1, sign(0)=0 Seno Seno hiperblico Raiz quadrada Tangente Tangente hiperblica
O comando help funciona muito bem se voc sabe exatamente o tpico sobre o qual necessita de ajuda. J que isso no sempre o caso, o help pode tambm lev-lo ao tpico exato que deseja digitando help, sem especificao do tpico.
Embora o comando help permita-lhe conseguir ajuda, ele pode no ser a maneira mais conveniente, a menos que voc saiba o tpico exato sobre o qual necessita de informaes. Para isso, o comando lookfor fornece ajuda fazendo uma busca em toda primeira linha dos tpicos de ajuda e retornando aqueles que contm as palavraschave que voc especificou. O mais importante que a palavra-chave no precisa ser um comando MATLAB. Por exemplo:
3. MANIPULAO DE MATRIZES
O MATLAB trabalha essencialmente com um tipo de objeto: uma matriz numrica retangular podendo conter elementos complexos. Observa-se que um escalar uma matriz de dimenso 1x1 e que um vetor uma matriz que possui somente uma linha ou uma coluna. O mtodo mais fcil de introduzir pequenas matrizes no MATLAB utilizando uma lista explcita. Os elementos de cada linha da matriz so separados por espaos em branco ou vrgulas e as colunas separadas por ponto e vrgula, colocando-se colchetes em volta do grupo de elementos que formam a matriz com o objetivo de limit-la.
Tipo de Matriz Matriz Identidade Matriz Nula Matriz com todos os elementos iguais a 1 Matriz Aleatria
rand(m,n)
Comando At
10
Multiplicao por um escalar k Multiplicao de duas matrizes A e B Quadrado e uma Matriz A Soma de duas matrizes A e B
Uma boa aplicao do MATLAB suas funes matriciais. Dentre as mais usadas podemos citar: COMANDO eig chol svd inv lu qr hess schur expm sqrtm poly det size norm cond rank triu(A) tril(A) diag(A) DESCRIO Autovalores e Autovetores; Fatorizao de Cholesky; Decomposio em fator singular; Inversa; Fatorizao triangular LU; Fatorizao ortogonal QR; Forma de Hessenberg; Decomposio de Schur; Matriz Exponencial; Matriz de raiz quadrada; Polinmio caracterstico; Determinante; Tamanho; Norma 1, Norma 2, Norma F, Norma Infinita; Nmero de condio na norma 2; Nmero de linhas linearmente independentes; Gera uma matriz com os elementos acima da diagonal principal de A e zera os elementos que esto abaixo; Gera uma matriz com os elementos abaixo da diagonal principal de A e zera os elementos que esto acima; Fornece os elementos da diagonal;
11
Gera uma matriz com os elementos da diagonal principal de A e com zeros nas outras posies; Coloca a matriz A de cabea para baixo; Coloca a matriz da esquerda para a direita; Roda a matriz em sentido anti-horrio; Retorna uma matriz m por n, cujos elementos so tomados coluna por coluna de A.
4. ZEROS DE FUNES
O MATLAB encontra zeros de funes usando o comando fzero. A funo, da qual deseja-se encontrar os zeros, deve ser ento escrita:
com
chute inicial.
( )
( ):
12
6. CLCULO
6.2 Limites
Para calcularmos
( ) utilizamos o comando ( ( ) ).
13
6.3 Derivadas
Para calcularmos derivadas utiliza-se o comando indica a ordem da derivao.
( ( ) ), onde
utiliza-se o comando
( ( ) ).
14
( )
utiliza-se o comando
( ( )
).
Descrio Plotar linear Grfico em escala logartmica Grfico em escala semi-logartmica (eixo x). Grfico em escala semi-logartmica (eixo y). Desenhar polgono 2D. Grfico em coordenadas polar Grfico de barras Grfico de seqncia discreta
15
Grfico em degrau Histograma. Histograma em ngulo Grfico em forma de bssola. Grfico em forma de pena. Grfico da funo Grfico com trajetria de cometa.
Podemos utilizar alguns comandos para melhorar a aparncia de nosso grfico: title (inclui um ttulo ao grfico), xlabel (permite que o eixo das abscissas do grfico seja identificado), ylabel (permite que o eixo das abscissas do grfico seja identificado).
16
Como resultado o MATLAB nos retorna a uma janela denominada Figure No. 1 com o seguinte grfico:
possvel desenhar mais que uma funo no mesmo grfico. Existem dois modos: um atravs do comando plot, e outro atravs do comando hold Por exemplo, podemos gerar no mesmo grfico as funes sen(x), cos(x) e sen(2x).
x= 0:PI/100:6*pi; y1=sin(x); y2=cos(x); y3=sin(2*x); plot(x,y1,x,y2,x,y3); title(Grafico das funes sem(x),cos(x),sem(2x)) xlabel(x) ylabel(x) 17
Com o comando hold, para plotar as funes sen(x) e cos(x), utiliza-se a seguinte sntese:
x= 0:PI/100:6*pi; y1=sin(x); y2=cos(x); hold on plot(x,y1); plot(x,y2); hold off
Alm de ttulos e designao dos eixos (funes title, xlabel e ylabel) podemos definir outras propriedades grficas como legendas, cores e estilos de linhas, estilos de marcadores, incluir grade.
18
A cor e o estilo da linha e o tipo de marcador para pontos de dados na linha podem ser selecionado pelo uso de uma cadeia de caracteres de atributos aps os vetores x e y na funo plot. Na tabela a seguir vemos os principais valores para os atributos cores, marcadores e estilos de linha.
Cor y m c r g b w k amarelo rosa(magenta) azul (ciano) vermelho verde azul branco preto
Marcadores . o x + * s v ^ P Ponto Crculo X Mais Asterisco Quadrado Tringulo para baixo Tringulo para cima Pentgono
Com o comando grid podemos adicionar linhas de grade no desenho do grfico: grid on (para incluir) e grid off ( para remover).
Legendas podem ser criadas por meio da funo legend, utilizando a seguinte estrutura: legend('texto1', 'texto2,...,posio)
Valor 0 1 2 3 4 -1
Significado Escolha automtica da melhor posio (mnimo conflito com os dados) Canto superior direito Canto superior esquerdo Canto inferior esquerdo Canto superior direito direita do desenho
Alm do ttulo, possvel adicionar qualquer outro texto em algum lugar especfico do grfico plotado atravs do comando text, com a seguinte sntese: text (x,y, 'texto desejado')
Onde x, y so as coordenadas nas quais desejamos que o texto aparea. Com a mesma finalidade pode ser utilizado o comando gtext, com a diferena de com este a posio do texto escolhida atravs do mouse. Tem a sntese:
O Comando axis possvel controlar as propores e a aparncia dos eixos horizontal e vertical dos grficos gerados pelo MATLAB atravs do comando axis. Alguns modos principais de configurao desse comando seguem na tabela a seguir:
20
Descrio Define os valores mximos e mnimos dos eixos usando os valores dados no vetor de linha.
Torna quadrado o quadro dos eixos. Ajusta os incrementos de eixos para que sejam iguais nos dois eixos.
Cancela o efeito dos dois comandos anteriores Desliga todos os nomes de eixos, grades e marcadores. No altera o ttulo nem os nomes colocados pelos comandos text e gtext.
axis on
So propriedades do comando plot, atravs das quais podemos ajustar a cor, o estilo e o tipo de marcador para uma linha. LineWidth: Especifica em pontos a espessura de cada linha. MarkerSize: Especifica em pontos o tamanho do marcador. MarkerEdgeColor: Especifica a cor do marcador ou da borda de marcadores preenchidos. MarkerFaceColor: Especifica a cor interna dos marcadores preenchidos.
21
subplot(m,n,p)
Onde m denota o nmero linhas e n o nmero de colunas que se deseja dividir a janela grfica; p indica qual das subdivises vai receber o grfico desejado. Exemplo: Plotar as funes sen(x) e cos(x), com x= -pi: pi/20 : pi, na mesma janela mas em grficos separados, utilizando o comando subplot para dividir a janela em dois subgrficos.
subplot(2,1,1) x=-pi:pi/20:pi; y= sin(x); plot(x,y) title('Subdiagrama 1'); subplot(2,1,2); x=-pi:pi/20:pi; y= cos(x); plot(x,y) title('Subdiagrama 2');
22
23
r 2(1 cos )
Utilizando o comando polar, plote a Cardiide.
24
A forma paramtrica de uma curva plana pode ser descrita atravs do seguinte par de funes: x = f(t) y =g (t)
a,ya
cu
b,yb
Exemplo: Crculo
25
Funo bar(x,y)
Descrio Cria um diagrama de barras verticais, sendo x o rtulo de cada barra e y a altura da barra. Cria um diagrama de barras horizontais, sendo x o rtulo de cada barra e y o comprimento horizontal da barra. Cria um diagrama polar, com uma seta saindo da origem em direo a cada ponto (x,y).
barh(x,y)
compass(x,y)
26
pie(x,y) pie(x,explode)
Cria um diagrama de pizza. Determina a porcentagem da pizza inteira que corresponde a cada valor de x, e representa pedaos de pizza desse tamanho. A matriz opcional explode controla se os pedaos individuais so separados ou no do restante da pizza.
stairs
Cria um diagrama de pares, com cada degrau da escada centralizado em um ponto (x,y) Cria um histograma de um conjunto de dados.
hist
Grficos de Barras um grfico no qual cada ponto representado por uma barra vertical ou horizontal. Tem a seguinte sntese: bar(x,y), para barras verticais barh(x,y) para barras horizontais. O vetor x representa o rtulo ou posio da barra, e o vetor y representa a altura ou comprimento da barra. Exemplo: Barras verticais x = [1 2 3 4 5 6]; y = [5 4 6 7 2 5]; barh(x,y); axis([0 10 0 7]); title(Grafico de barras horizontais);
27
Da mesma forma podemos utilizar os comando barh, compass e stairs para gerar outras formas de diagramas. Grfico Pizza
um grfico representado por fatias de pizza de tamanhos variados. Cria -se um vetor x com os dados a serem representados. Por exemplo, x=[1 2 3 4], ento x(1) 10% da pizza, x(2) 20%, e assim por diante. Podemos ainda acrescentar o vetor explode, que um vetor lgico que recebe 1 ou 0, e cada elemento associado a um elemento do vetor x. Sendo que 1 significa que a fatia da pizza correspondente desenhada um pouco separada da pizza, e 0 a fatia permanece em sua posio normal.
Exemplo: Construir um grfico do tipo Pizza, onde as fatias representam 32%, 20%, 20%, 12%, 16%. Separe a fatia maior das demais fatias. Utilize tambm o comando legend. x = [32 16 12 20 20]; explode= [1 0 0 0 0]; pie(x,explode); title('Exemplo de grafico de Pizza'); legend('Um','Dois','Tres','Quatro','Cinco',4);
28
Histogramas Um histograma um diagrama que mostra a distribuio de valores em um conjunto de dados. Para criar um histograma, a faixa de valores em um conjunto de dados dividida em grupos regularmente espaados, e o nmero de valores de dados que caem em cada grupo determinado. A contagem resultante pode ser representada em um diagrama como funo do nmero do grupo. Algumas das snteses para gerar histogramas so: hist(y), cria um histograma com 10 grupos igualmente espaados. hist(y,n), cria um histograma com n grupos igualmente espaados.
29
Exemplo: Esse exemplo cria um conjunto de dados com 10.000 valores aleatrios gaussianos e gera um histograma dos dados usando 15 grupos igualmente espaados.
30
8. ALGORITMOS
O significado da palavra ALGORITMO muito similar ao de uma receita, procedimento, tcnica, rotina. Um algoritmo um conjunto finito de regras que fornece uma seqncia de operaes para resolver um problema especfico . Segundo o dicionrio do prof. Aurlio um algoritmo um: "Processo de clculo, ou de resoluo de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restries, regras formais para a obteno de resultado ou de soluo de problema." Um algoritmo tem cinco caractersticas importantes:
Finitude:
Um algoritmo deve sempre terminar aps um nmero finito de passos.
Definio:
Cada passo de um algoritmo deve ser precisamente definido. As aes devem ser definidas rigorosamente e sem ambiguidades.
Entradas:
Um algoritmo deve ter zero ou mais entradas, isto quantidades que so lhe so fornecidas antes do algoritmo iniciar.
Sadas:
Um algoritmo deve ter uma ou mais sadas, isto quantidades que tem uma relao especfica com as entradas.
Efetividade:
Um algoritmo deve ser efetivo. Isto significa que todas as operaes devem ser suficientemente bsicas de modo que possam ser em princpio executadas com preciso em um tempo finito por um humano usando papel e lpis. Para mostrar um exemplo de algoritmo considere o seguinte problema:
31
Dispomos de duas vasilhas com capacidades de 9 e 4 litros respectivamente. As vasilhas no tem nenhum tipo de marcao, de modo que no possvel ter medidas como metade ou um tero. Mostre uma seqncia de passos, que usando as vasilhas de 9 e 4 litros encha uma terceira vasilha de medida desconhecida com seis litros de gua.
1. Encha a vasilha de 9 litros; 2. Usando a vasilha de 9 litros, encha a vasilha de 4 litros; 3. Despeje o que sobrou na vasilha de 9 litros (5 litros) na terceira vasilha. Observe que falta um litro para completar os seis litros; 4. Esvazie a vasilha de 4 litros; 5. Torne a encher a vasilha de 9 litros; 6. Usando a vasilha de 9 litros encha a vasilha de 4 litros; 7. Esvazie a de 4 litros; 8. Usando o que restou na vasilha de 9 litros (5 litros), encha novamente a vasilha de quatro litros; 9. Despeje o que sobrou na vasilha de 9 litros (1 litro) na terceira vasilha, que agora tem 6 litros.
32
Os algoritmos so expressos diretamente em linguagem natural, como no exemplo anterior. Para considerar um algoritmo que inclua decises vamos estudar um algoritmo que nos ajude a decidir o que fazer em um domingo. Um possvel algoritmo poderia ser o seguinte:
Algoritmo de domingo. o Acordar. o Tomar o caf. o Se estiver sol vou praia seno leio o jornal. o Almoar. o Ir ao cinema. o Fazer uma refeio. o Ir dormir. Final do domingo.
33
34
8.1.3 Pseudo-Cdigo
Criar programas de computador , em geral, um trabalho difcil e cansativo, pois envolve muito a arte de pensar logicamente. Por haver muitas linguagens distintas de programao (tais como C, Pascal, Fortran, dentre outras), h uma linguagem Universal, adotada por muitos programadores para que seus cdigos sejam entendidos por programadores que conheam qualquer linguagem.. Os cdigos assim escritos so chamados de pseudo-cdigos. O pseudo-cdigo escrito mo livre, ou seja, em linguagem comum, como no exemplo a seguir: Fazer um algoritmo que pergunte que horas so e escreva uma frase de cumprimento segundo a hora inserida pelo usurio.
Algoritmo: Cumprimento Variveis: hora: Numrico Incio algoritmo Escreva Que horas so? Ler hora Se 6<=hora<12 Escreva Bom Dia Fim Se Se 12<=hora<18 Escreva Boa Tarde Fim Se Se 18<=hora<6 Escreva Boa Noite. Fim Se
Fim algoritmo
35
Esse arquivo pode ser criado com qualquer editor de texto e deve ter extenso .m (M-Files). Por exemplo, o script acima poderia estar no arquivo distancia_p_q.m. Para cham-lo basta entrar com o nome do arquivo na janela de comandos (Command Window):
Os arquivos script so teis quando se deseja efetuar uma sequncia de comandos com muita freqncia. Como no exemplo anterior, os scripts se utilizam dos dados presentes na memria (workspace) para efetuar os comandos. Uma alternativa aos arquivos script so os arquivos tipo function, que admitem parmetros de entrada, retornam valores e possuem variveis locais (no afetam o workspace). Essas caractersticas fazem com que programas escritos nesse formato atuem exatamente como os comandos nativos do MATLAB. So, portanto, uma forma de ampliar a linguagem e um dos pontos chaves do MATLAB. A palavra funo no MATLAB tem um significado diferente daquele que tem na Matemtica. Aqui funo um comando, que pode ter alguns argumentos de entrada e alguns de sada.
36
EXEMPLO:
function distancia=calcula_distancia(x,y) % Calcula a distancia euclidiana entre os pontos x e y (vetores do Rn) diferena=x-y; distancia=sqrt (diferena*transpose (diferenca)); Exemplo 1: Exemplo 2: >> p=[1 0 0]; distancia=calcula_distancia([3 4], [0 0]) >> q=[0 1 0]; distancia= >> d=calcula_distancia(p,q) 5 Ou: >> d=calcula_distancia([1 0 0], [0 1 0]) d= 1.4142
Salienta-se que essa funo determina a distncia entre dois vetores quaisquer, independentemente do nmero de componentes dos mesmos (desde que ambos vetores sejam de mesma dimenso). O arquivo tipo function tambm tem que ter extenso .m e deve ter o mesmo nome usado na definio da funo, no exemplo anterior o nome do arquivo deve ser calcula_distancia.m. Usamos o Command Window para executar essa funo. A seguir, tem-se uma lista com alguns comandos de programao para o controle de fluxo, bem como comandos de programao geral e interfaces com o usurio. Break Interrompe a execuo de laos FOR e WHILE equivalente ao BREAK do C Limpa a tela (janela de comandos) Limpa as variveis da memria do MATLAB Interrompe o fluxo do programa e recomea um loop FOR ou WHILE, j na iterao seguinte. S faz sentido dentro de um FOR ou WHILE Exibe o nome do contedo de uma varivel Exibe o contedo de uma varivel, sem mostrar o seu nome Condiciona execuo de comandos
Display Disp IF
37
Else Elseif End Error errordlg Eval Feval For Fprintf Fscanf function Global Helpdlg Input keyboard
Usado com o comando IF Usado com o comando IF Usado para terminar a execuo dos comandos IF, FOR, WHILE mostra mensagem e aborta a execuo da funo Criar uma caixa de dilogo sem erro Excuta uma expresso MATLAB definida atravs de uma string Executa uma funo especificada por uma string Repete comandos por um nmero de vezes especificado Grava dados em arquivo formatado L dados de arquivo formatado Define m-file tipo FUNCTION (funo) Define variveis globais Mostra uma caixa de dilogo de ajuda (HELP) Permite requisitar (com prompt) fornecimento de dados pelo teclado Suspende a execuo de uma rotina e permite que o usurio entre e execute novos comandos pelo teclado; a rotina continuada aps o usurio digitar return ltima mensagem de erro emitida pelo MATLAB Gera um menu de escolhas para entrada do usurio Verifica nmero de argumento da entrada Pausa na execuo de um programa at ser pressionada uma tecla Pausa na execuo de um programa de n segundos Cria uma caixa de dilogo de perguntas Caixa para seleo de regio em grfico Causa a sada imediata de uma funo Grava dados formatados em uma nica string
38
Caixa de dilogo para obter o nome de um arquivo existente Caixa de dilogo para especificar o nome de um novo arquivo Cria uma caixa de dilogo para advertncias Repete comandos enquanto condio especificada for verdadeira
Format long
23.21340435736339
Format short e
2.321e+001
Format long e
2.321340435736330e+001
Format short g
23.213
Format long g
15 dgitos totais
23.2134043573634
Format hex
Formato hexadecimal
4037361aaffb31c
39
Format bank
Valores bancrios
23.21
Format rat
3807/164
Format +
O comando fprintf um dos mtodos mais simples de sada de dados. Com ele possvel combinar frases com variveis numricas de dimenso 1, ou seja, um escalar ou um elemento da matriz. Vejamos como ele funciona com o seguinte exmplo:
40
EXEMPLO: Atribuir dois valores s variveis x e y e mostr-las junto com uma frase qualquer:
Acima, o que est entre aspas aparecer para o usurio, os itens onde aparece %d sero substitudos pelas variveis, respeitando-se a ordem em que aparecem. Ainda, %d significa que s aparecer a parte inteira de x e y. Existem, ainda, os seguintes comandos:
%d %e %f %g
Exibe o valor como inteiro Exibe o valor no formato exponencial Exibe o valor em ponto flutuante Escolhe o mais curto entre ponto flutuante e exponencial
Ainda, se colocarmos \n dentro das aspas temos uma mudana de linha. EXEMPLO: Escrever uma saudao ao usurio:
fprintf( Ol.\n Obrigado por freqentar o minicurso do MATLAB.\n Esperamos que seja bastante til.)
41
Falamos bastante at aqui em variveis e sadas de dados, porm necessrio que dados possam ser inserido por usurios (que no seja o programador) e que possamos trocar nossas variveis sem alterar o cdigo do programa. Por exemplo, para calcular as razes de um polinmio necessrio que o programa conhea o polinmio. Mas, para cada polinmio diferente teremos que mudar o cdigo-fonte do programa? Esse problema resolvido pelo comando input. A cada vez que o programa for rodado ele mesmo pedir as variveis, logo no ser necessrio mudar o cdigo original do programa e haver uma maior interao entre o programa e o usurio (no necessariamente um programador). Ainda dentro do comando input podemos colocar uma frase identificando que varivel deve ser inserida. Vejamos como funciona atravs do seguinte exemplo:
EXEMPLO: Pedir que o usurio entre com os coeficientes de um polinmio do segundo grau ax2+bx+c:
disp(Este programa ler valores para os coeficientes a, b e c de um polinmio do segundo grau. ) a=input(Insira o valor de a: ); b=input(Insira o valor de b: ); c=input(Insira o valor de c: ); fprintf(O polinmio definido pelo usurio %dx^2 + %dx + %d,a,b,c)
42
EXEMPLO: Fazer com que o usurio calcule as razes de um polinmio de segundo grau:
disp(Este programa ir calculara as razes de um polinmio de segundo grau. ) a=input(Entre com o primeiro coeficiente :); b=input(Entre com o segundo coeficiente :); c=input(Entre com o terceiro coeficiente :); delta = b^2 - 4*a*c; x1=(-b + sqrt(delta))/(2*a); x2=(-b - sqrt(delta))/(2*a); fprintf('As razes so: %d e %d',x1,x2)
s vezes necessrio colocar mais de um comando ao mesmo parmetro (principalmente no lao if que ser visto posteriormente), para isso existem os comando lgicos dados na seguinte tabela: & | xor ~ E lgico OU lgico OU exclusivo lgico NO lgico
43
Se o resultado da expresso lgica <condio> for verdadeiro ento a lista de <comandos> ser executada. Se o resultado for falso, os <comandos > no sero executados. EXEMPLO: Fazer um programa que pea um nmero ao usurio e retorne o valor da raiz quadrada desse nmero.
a=input('Digite um valor para o qual se queira saber a raiz quadrada:'); if (a>=0) Raizquadrada=sqrt(a) end
44
Se a expresso lgica <condio > for verdadeira ento a lista <comandos 1> ser executada. Se <condio> for falsa ento ser executada a lista <comandos 2>.
EXEMPLO: Faa um programa que leia o ano de nascimento de uma pessoa e o ano atual e diga a idade da pessoa. O programa deve verificar se o ano de nascimento vlido ou no.
an=input('Digite o ano de nascimento da pessoa:'); aa=input('Digite o ano atual:'); if ((an<0)|(an>2010)) fprintf('Ano de nascimento invalido.'); else I=aa-an; fprintf('A idade da pessoa eh %d anos.',I); end
45
if <condio 1> <comandos 1> elseif<condio 2> <comandos 2> elseif <condio 3> <comandos 3> . . . else <comandos 0> end
A lista <comandos 1> ser executada se a <condio 1> for verdadeira, j a lista <comandos 2> ser executada se a <condio 2> for verdadeira e assim para as outras condies. Se nenhuma das condies for verdadeira ento <comandos 0> ser executada. Quando a primeira <condio> for satisfeita e os <comandos> executados, a estrutura if-elseif-else-end ser abandonada, ou seja, o controle do processamento ser transferido para o comando imediatamente aps o end.
EXEMPLO: Faa um programa tal que o usurio insira um valor para a varivel x e em seguida mostre se x maior, menor ou igual a zero.
x=input('Digite um valor para x:'); if x<0 fprintf('x<0'); elseif x==0 fprintf('x=0'); else fprintf('x>0'); end
46
f(x) = {
function a=program1(x) x=input('Digite um valor x para o qual se deseja avaliar a funao:'); if x<-1 a=1; elseif (x>=-1)&(x<=1) a=x^2; else a=-x+2; end
EXEMPLO: Faa um programa que verifique se um nmero dado pelo usurio positivo, se sim determinar se o mesmo par ou mpar:
n=input('Insira um numero qualquer:'); if n<0 fprintf('O numero dado eh negativo.'); elseif rem(n,2)==0 fprintf('O numero dado eh positivo e par.'); else fprintf('O numero dado eh positivo e impar.'); end
47
Acima, varivel a varivel-de-controle que recebe o valor de cada coluna do vetor <arranjo> e, para cada contedo que receba, executa o corpo do for. Assim, o nmero de repeties da lista <comandos > igual ao nmero de elementos no vetor <arranjo>. A varivel-de-controle no pode ser redefinida dentro da estrutura for. O lao for o controlador de fluxo mais simples e usado na programao MATLAB. Analisando o seguinte exemplo:
for i=1:5 X(i)=i^2; end disp(X)
pode-se notar que o lao for dividido em trs partes: A primeira parte (i=1) realizada uma vez, antes de o lao ser inicializado. A segunda parte o teste ou condio que controla o lao, ( i<=5). Esta condio avaliada; se verdadeira, o corpo do lao (X(i)=i^2) executado. A terceira parte acontece quando a condio se torna falsa e o lao termina.
O comando end usado como limite inferior do corpo do lao. EXEMPLO: Faa um programa que crie uma matriz A1x15 pedindo que o usurio insira cada um dos 15 valores.
A=zeros(1,15); for i=1:15 fprintf('Insira um elemento (1,%d):',i); A(1,i)=input(''); end disp(A)
48
Observao: Veja que aqui ocupa muito espao se usarmos o comando input 15 vezes. EXEMPLO: Faa um programa que pergunte ao usurio quantas linhas e quantas colunas ele quer que uma matriz A tenha. Em seguida, pedir que ele insira cada valor da matriz. Alm disto, verificar quantos elementos menores que zero tem nesta matriz.
l=input('Digite um valor para o numero de linhas da matriz A:'); c=input('Digite um valor para o numero de colunas da matriz A:'); A=zeros(l,c); b=0; for i=1:l for j=1:c fprintf('Insira o numero (%d,%d):',i,j); A(i,j)=input(''); if A(i,j)<0 b=b+1; end end end disp(A); fprintf('A matriz A possui %d numeros(s) menor(es) que zero.',b);
EXEMPLO: Faa um programa que diga todas as possibilidades de que, no lanamento de dois dados, a soma dos valores de cada dado seja igual a 7.
for d1=0:6 for d2=0:6 if (d1+d2==7) fprintf('\n O valor do 1 dado pode ser %d e o valor do 2 dado pode ser %d pois, %d+%d eh 7',d1,d2,d1,d2); end end end
49
EXEMPLO: Faa um programa que plote uma funo retangular f(n) tal que 0<n<2 e f(n)=1, se 0<n< e f(n)=-1, se <n<2.
x=linspace(0,2*pi,100); % Criou-se 100 amostras entre 0 e 2*pi for n=1:100 if x(n)<=pi f(n)=1; %Faz f(t)=1 para 0<t<=pi,i.e., as primeiras 50 amostras de f(t) so iguais a 1 else f(n)= -1; % Faz f(t)=-1 para pi<t<=2*pi, i.e., as ltimas 50 amostras de f(t) so iguais a 1 end end plot(x,f,'r.'); % plota o grafico, r=cor:vermelha e .:estilo do ponto: ponto grid on; % adiciona linhas de grade no desenho do grafico title('Funo retangular'); % Coloca um titulo ao grfico xlabel('t em radianos'); % nomeia o eixo x ylabel('f(t)'); % nomeia o eixo y
EXEMPLO: Faa um programa que plote 360 pontos de um perodo da funo y=sen( ).
50
EXEMPLO: Faa um programa que construa duas matrizes A e B dadas pela lei A ij=i+j e Bij=i-j e calcule a soma das duas.
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
Enquanto a expresso lgica <condio> for verdadeira a lista <comandos> ser repetida. No lao while apenas a condio testada. Por exemplo, na expresso:
a = 1; b = 15; while a<b, clc a = a+1 b = b-1 pause(2) end disp('fim do loop')
51
A condio a<b testada. Se ela for verdadeira o corpo do lao, ser executado. Ento a condio testada novamente, e se verdadeira o corpo ser executado novamente. Quando o teste se tornar falso o lao terminar, e a execuo continuar no comando que segue o lao aps o end. Ao contrrio do lao for, que executa um conjunto de comandos um nmero fixo de vezes, o lao while executa um conjunto de comandos um nmero indefinido de vezes. Os comandos entre as instrues while e end so executadas enquanto todos os elementos na expresso forem verdadeiras. EXEMPLO: Faa um programa que faa um cadastro da idade e do peso de um cidado. Ao final pergunte ao usurio se quer continuar (1) ou parar (0) o programa.
i=1; a=1; while a==1 fprintf('Insira a idade do cidadao %d:',i); M(1,i)=input(''); fprintf('Insira o peso do cidadao %d:',i); M(2,i)=input(''); i=i+1; a=input('Continuar? (1) para sim ou (0) para nao.'); end disp(M)
52
EXEMPLO: Faa um programa que leia um nmero e calcule o seu fatorial. O programa deve exibir um erro caso o nmero seja negativo.
i=1; prod=1; n=input('Digite um valor n para o qual se deseja saber o fatorial:'); if n<0 error('n deve ser nao negativo.') else while i<=n prod=prod*i; i=i+1; end disp(prod) end
53
EXEMPLO: Faa um programa que plote o grfico da funo y=a*x2+b*x+c, no intervalo xv - 5< x <xv + 5.
clear % limpa variveis e funes da memria (RAM) clc % limpa a tela aux=1; while aux==1; clc % limpa a janela de comandos, posiciona o cursor no incio da tela a=input('a='); b=input('b='); c=input('c='); xv=-b/2*a; x=(xv-5):0.01:(xv+5); % definio do domnio y=a*x.^2+b*x+c; plot(x,y); figure(1) % Mostra a janela grafica numero 1 pause clc % limpa a tela close % fecha a figura aux=input('Plotar outro grfico? (1 para sim, 0 para no)==>'); % Pergunta se quer plotar um outro grfico. Apenas quando for digitado "0" o programa termina, caso contrrio continua indefinidamente o loop. end if aux==0 fprintf('fim do loop') end
transfere a execuo para o comando imediatamente seguinte ao end . Em repeties aninhadas, o break interrompe a execuo apenas da estrutura mais interna. Uma repetio com condio de interrupo no interior pode ter a forma:
while 1 <comandos 1> if <condio> break end <comandos 2> end
A estrutura while executada indefinidamente a princpio, pois a condio do while sempre verdadeira. Contudo, quando a <condio> do if for satisfeita o comando break ser executado causando a interrupo da repetio while.
EXEMPLO: Faa um programa que calcule a mdia de no mximo 5 nmeros usando o comando break.
acumulador = 0; n = 0; while n<5, numero = input('Digite um numero: '); n = n+1; acumulador = acumulador + numero; x = input('\n Continua? (1) para sim e (0) para nao: '); if x == 0 break end end; media = acumulador/n; disp('A mdia dos nmeros : '); disp(media);
55
Apenas um CASE executado e a seqncia de execuo do programa prossegue aps o END. Se nenhum dos CASEs concordar com a expresso do switch, ento o caso OTHERWISE executado (se existir). Apenas as instrues entre o CASE concordante e o prximo CASE, OTHERWISE ou END so executadas. Por exemplo, se o primeiro caso for verdadeiro os outros casos no so executados.
EXEMPLO: Faa um programa que leia um dos nmeros -1, 0 ou 1 e diga se negativo, positivo, zero ou nenhum dos outros casos.
var=input('Entre com um dos valores:-1, 0 ou 1 ==> '); switch var case 1 disp('Nmero um negativo') case 0 disp('Zero') case 1 disp('Nmero um positivo') otherwise disp('outro valor') end
56
EXEMPLO:
var=input('Entre com um valor ==> '); switch var case 1 disp('1') case {2,3,4} disp('2 ou 3 ou 4') case 5 disp('5') otherwise disp('outro valor') end
11. Vetorizao
O MATLAB um software desenvolvido para trabalhar com matrizes. Quando se est construindo uma rotina de clculo e se deseja utilizar uma ferramenta de loop, onde o objetivo calcular uma expresso diversas vezes, muito mais eficiente trabalhar utilizando o conceito de operaes matriciais ou vetoriais. Para demonstrar o que queremos dizer, vamos apresentar uma rotina simples, implementada de dois modos, onde se evidencia a diferena de eficincia entre uma implementao utilizando loops sua verso vetorial.
x=1; for k=1:100 clc y(k)=log10(x); x=x+0.01; y(k); pause(1); end TEMPO COMPUTACIONAL 0.1900 x:1:0.01:100; y=log10(x);
0.0600
57
Utilizando a forma vetorizada, para este exemplo, tem-se uma reduo de 70% no tempo computacional.
58
i=1; prod=1; b={'Digite o nmero o qual deseja calcular seu fatorial'}; Numero=inputdlg(b) n=str2num(char(Numero(1))); if n<0 disp('ERRO: O nmero deve ser no negativo'); else while i<=n prod=prod*i; i=i+1; end fprintf('O fatorial de %d %d',n,prod); end
OBS: Neste programa aparecer uma janela onde o usurio ir informar o nmero o qual
deseja calcular o fatorial.
59
EXEMPLO 2: Faa um programa tal que o usurio insira a largura e o comprimento de um retngulo e logo aps calcule e escreva sua rea.
aviso={'Entre com a largura:' ,'Entre com o comprimento:'} titulo='REA DE UM RETNGULO'; resposta=inputdlg(aviso,titulo); larg=str2num(char(resposta(1))); comp=str2num(char(resposta(2))); disp(' **************') disp(' * REA *') disp(' **************') area=larg*comp; disp(area)
60
Descrio: Seja f(x) contnua no intervalo [a, b] e f(a) . f(b) < 0. Dividindo o intervalo [a, b] ao meio, obtm-se x, havendo dois subintervalos, [a, xo] *xo, b+, a ser considerados. Se f(xo) = 0, ento = xo (raiz encontrada), caso contrrio, a raiz estar no subintervalo onde a funo tem sinais opostos nos pontos extremos, ou seja, se f(a). f(xo) < 0 , ento, (a, xo); seno f(a) . f(xo) > 0 e (xo, b). O novo intervalo [a1, b1 + que contm dividido ao meio e obtm-se o ponto x1. O processo se repete at que obtenha uma aproximao para a raiz exata , com a tolerncia desejada.
61
Algortmo:
ao=input('Digite o 1 valor do intervalo: bo=input('Digite o 2 valor do intervalo: Ep=input('Insira o valor para o erro: if f(bo)*f(ao) > 0, disp('No tem raiz nesse intervalo') else while (bo-ao) > Ep, x=(ao+bo)/2; if f(x)*f(ao) > 0, ao=x; else bo=x; end; end; y =(ao+bo)/2; disp('A raiz disp(y); end ') ');
'); ');
com 0,00001.
>> f = inline('x^2-5'); >> bissec Digite o 1 valor do intervalo: Digite o 2 valor do intervalo: Insira o valor para o erro: A raiz 2.2361 0 3
0.00001
62
>> f = inline('x*log(x)'); >> bissec Digite o 1 valor do intervalo: Digite o 2 valor do intervalo: Insira o valor para o erro: A raiz 0.0029 0.01 0 3
63
Algortmo:
'); ');
E=input('Insira o valor para o erro: x1=xo-f(xo)/g(xo); while (x1-xo)>E xo=x1; x1=xo-f(xo)/g(xo); end disp('A raiz disp(x1) ');
64
>> f = inline('2*x^3+log(x)-5'); >> g = inline('6*x^2+(1/x)'); >> newton Digite o valor de xo: 2 0.001
DESCRIO: muito semelhante ao Mtodo de Newton, mas substitui o clculo das derivadas pelo clculo de uma razo incremental. Geometricamente, corresponde a substituir o papel da tangente, no mtodo de Newton, por uma secante (de onde vem o nome). Isto significa que vamos precisar sempre de dois pontos para determinar, o que implica que tenhamos que considerar duas iteradas iniciais, que designamos por x0 e x1. condio suficiente para a convergncia do Mtodo da Secante que: f(x) e f(x) sejam no nulas e preservem o sinal em (a, b), e f(x0 ) .f ''(x0) > 0 e tambm f(x1) .f ''(x1) > 0 para qualquer x0 e x1 em (a, b).
65
Algortmo:
E=input('Insira o valor para o erro: while (x1-xo)>E x2=x1-((f(x1)*(x1-xo))/(f(x1)-f(xo))); xo=x1; x1=x2; end disp('A raiz : disp(x2); ');
; x0 = 1 e x1 = 2. Encontre a raiz da ( )
>> f = inline('x^2+x-6'); >> secante Digite o valor de xo: Digite o valor de x1: 1 2 0.001
66
; x0 = 0 e x1 = 1. Encontre a raiz da
>> f = inline('x^3-9*x+3'); >> secante Digite o valor de xo: Digite o valor de x1: 0 1 0.0005
67
REFERNCIAS BIBLIOGRFICAS PET MATEMTICA UFSM; Noes Bsicas de Utilizao e Programao em MATLAB. Santa Maria, 2008. CHAPMAN, S.J.; Programao em MATLAB para engenheiros. Traduo tcnica: Flvio Soares Correa da Silva, So Paulo, Thomson Learning, 2006. FALCO, M. I; Iniciao ao MATLAB. Universidade do Minho, 2001, Disponvel em: https://repositorium.sdum.uminho.pt/handle/1822/1480 HANSELMAN, D; LITTLEFIELD, B; MATLAB Verso Estudante Guia do Usurio Verso 4. MAKRON Books do Brasil. So Paulo, 1997. PET ENGENHARIA ELTRICA UFSM; Introduo ao MATLAB. Santa Maria, 2007. Disponvel em: http://w3.ufsm.br/petee/ PORTUGAL, R.; MATLAB para leigos e desinteressados: uma introduo simples com exemplos banais. Disponvel em: www.ime.unicamp.br/~cheti/intmatlab.pdf
68