Sei sulla pagina 1di 42

CENTRO FEDERAL DE EDUCAO TECNOLGICA DE SANTA CATARINA CEFET-SC DEPARTAMENTO ACADMICO DE ELETRNICA

Apostila Bsica do Software Matlab

Andr Lus Dalcastagn


Florianpolis, agosto de 2008

APRESENTAO

O Matlab um software criado pela Mathworks em 1984 destinado anlise 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 relao a uma linguagem de programao tradicional (como C/C++ ou Fortran), o desenvolvimento de algoritmos no ambiente Matlab sem dvida mais fcil e rpido. A desvantagem que utilizando uma linguagem de programao tradicional possvel desenvolver algoritmos mais eficientes. O objetivo deste curso fornecer a base necessria para desenvolver programas no ambiente Matlab. Devido grande quantidade de funes disponibilizadas pelo Matlab, impossvel aprender todo o seu contedo em um nico curso. Entretanto, o aluno ser capaz de entender como o Matlab funciona e descobrir quais funes so teis para as suas aplicaes.

1 Introduo ao Matlab
O Matlab (Matrix Laboratory) pode ser definido como um ambiente de computao numrica baseado em matrizes. Dentre as suas principais caractersticas, destacam-se: grficos e visualizao de dados; linguagem de programao de alto nvel; toolboxes, que oferecem funcionalidades especficas por rea de aplicao.

Como exemplos de toolboxes, podem-se citar: Optimization, Statistics, Financial; Fuzzy Logic, Neural Networks, Control System; Signal Processing, System Identification.

A estrutura de diretrios do Matlab a seguinte: diretrio base: c:\matlab; executveis: c:\matlab\bin; diretrio de trabalho: c:\Matlab\work.

1.1 Ambiente Matlab


a) rea de trabalho A rea de trabalho do Matlab apresenta duas partes principais: Command Window: rea na qual os dados e instrues so digitados e os resultados so apresentados; Workspace: rea de memria de trabalho do Matlab, na qual todas as variveis so armazenadas. Como exemplo, digite no Command Window a instruo ver. Como resultado, o usurio recebe as informaes acerca das verses do Matlab, do Simulink e de todos os toolboxes instalados no computador. O sinal de prompt >> dessa janela indica que o sistema est apto a receber comandos.

>> ver -------------------------------------------------MATLAB Version 6.0.0.88 (R12) on PCWIN MATLAB License Number: 0 -------------------------------------------------MATLAB Toolbox Simulink Stateflow Stateflow Coder Communications Blockset Communications Toolbox Control System Toolbox DSP Blockset Filter Design Toolbox Fixed-Point Blockset Image Processing Toolbox MATLAB Compiler Model Predictive Control Toolbox Nonlinear Control Design Blockset Optimization Toolbox Partial Differential Equation Toolbox Robust Control Toolbox Signal Processing Toolbox Simulink Accelerator Model Differencing for Simulink and... Simulink Model Coverage Tool Simulink Report Generator Statistics Toolbox Symbolic Math Toolbox System Identification Toolbox Wavelet Toolbox b) Janelas A verso Matlab para ambiente Windows apresenta as seguintes janelas: Version 6.0 (R12) Version 4.0 (R12) Version 4.0 (R12) Version 4.0 (R12) Version 2.0 (R12) Version 2.0 (R12) Version 5.0 (R12) Version 4.0 (R12) Version 2.0 (R12) Version 3.0 (R12) Version 2.2.2 (R12) Version 2.1 (R12) Version 1.0.5 (R12) Version 1.1.4 (R12) Version 2.1 (R12) Version 1.0.3 (R12) Version 2.0.7 (R12) Version 5.0 (R12) Version 1.0 (R12) Version 1.0 (R12) Version 1.0 (R12) Version 1.1 (R12) Version 3.0 (R12) Version 2.1.2 (R12) Version 5.0 (R12) Version 2.0 (R12) 06-Oct-2000 16-Jun-2000 04-Oct-2000 04-Oct-2000 01-Sep-2000 01-Sep-2000 01-Sep-2000 01-Sep-2000 01-Aug-2000 26-May-2000 10-Mar-2000 26-Jul-2000 10-May-2000 12-Jun-2000 07-Jun-2000 31-Dec-1999 10-May-2000 16-Jun-2000 01-Jun-2000 01-Mar-2000 19-Jul-2000 02-Jun-2000 01-Apr-2000 01-Sep-2000 11-Sep-2000 27-Aug-2000 16-Jun-2000

SB2SL (converts SystemBuild to Simu... Version 2.1 (R12)

Command Window: ambiente de trabalho; Launch Pad: apresenta informaes, textos explicativos e exemplos dos produtos instalados;

Workspace: apresenta as variveis do ambiente de trabalho; Command History: histrico das instrues j executadas.

c) Menus O Matlab tambm possui uma srie de menus: File, Edit, View, Web, Window e Help. Os mais importantes sero vistos ao longo do curso. Alguns menus so bastante utilizados: File: manipulao de arquivos; o File/Set Path: configura a lista de diretrios de busca (equivalente ao comando pathtool); o File/Preferences: configura parmetros do ambiente Matlab (equivalente ao comando preferences); Edit: recursos de edio; View: configurao de visualizao da tela do Matlab; Web: aciona web browser; Window: fecha janelas de figuras (grficos); Help: aciona textos de ajuda.

d) Barra de ferramentas A primeira parte da barra de ferramentas do Matlab segue o padro Windows. As demais opes so prprias do Matlab: New M-File, Open, Cut, Copy, Paste, Undo e Redo; Simulink: abre um modelo do Simulink; Current Directory: apresenta o diretrio de trabalho corrente; Browse for folder: busca um novo diretrio de trabalho.

1.2 Configurao de Parmetros do Ambiente Matlab


Os parmetros do Matlab so configurveis pelo comando preferences ou pelo menu File/Preferences. As principais opes desse menu so: General: parmetros gerais. o Habilita/desabilita textos explicativos de cones; o Tipo de impresso desejado. Command Window: configura a janela Command Window. o Formato de exibio de nmeros; o Formato de exibio de matrizes; o Cor e tipo de fonte. Editor/Debugger: configura o editor de textos do Matlab (edit). Help: configuraes da ajuda do Matlab. Current Directory: configura a opo Current Directory da barra de ferramentas. Workspace: configura parmetros da janela Workspace. Array Editor: configura parmetros da janela Array Editor. Guide: configura parmetros do ambiente de desenvolvimento de interfaces grficas guide (Graphical User Interface). Figure Copy Template: configura parmetros para cpia de figuras. Simulink: configura parmetros do Simulink.

1.3 Configurao de Diretrios do Matlab


Para que uma funo possa ser utilizada por qualquer programa Matlab, o diretrio no qual ela est salva deve estar includo na lista de diretrios de busca do Matlab (arquivo pathdef.m). Para realizar tal tarefa, pode-se utilizar a instruo pathtoll ou o menu File/Set Path (mais prtico). Se isso no for feito, a funo criada s poder ser utilizada por programas Matlab (.m) que estiverem gravados no mesmo diretrio da funo.

O Matlab possui algumas funes do sistema operacional, apresentados na tabela abaixo. Tabela 1.1: Comandos do sistema operacional Comando cd ou pwd dir ou ls what which ! Funo Informa ou altera diretrio Lista contedo do diretrio exibe arquivos Matlab salvos no diretrio Identifica e localiza arquivo Chama comando do sistema operacional Exemplo cd dir what which cos !del arquivo.m

2 Elementos Bsicos do Matlab


2.1 Notaes
O Matlab utiliza as seguintes notaes para representar um nmero: Tabela 2.1: Notaes adotadas no Matlab nmero negativo casa decimal notao cientfica 1 Exemplos: >> -2.5e-3 ans = -0.0025 >> 1+2j ans = 1.0000 + 2.0000i Note que o Matlab atribui o resultado de cada operao a uma varivel denominada ans (de answer). Ela utilizada pelo Matlab para armazenar o ltimo valor calculado pelo Matlab, a no ser nos casos em que o usurio explicita o nome de uma varivel juntamente com o comando. Veja o exemplo abaixo. >> a=-2.5e-3 a= -0.0025 >> b=1+2j b= 1.0000 + 2.0000i sinal - ponto final . e j ou i

2.2 Matrizes
Para o Matlab, qualquer valor numrico interpretado como uma matriz. Uma matriz definida da seguinte forma:

valores numricos so definidos entre colchetes ([...]); elementos de uma linha so separados por , ou por espao em branco; final de uma linha informado por ;.

Alguns exemplos Tabela 2.2: Tipos de matrizes tipo de matriz >> 2 escalar ans = 2 >> [1 2 3] vetor linha ( 1 n ) ans = 1 ans = vetor coluna ( n 1) 1 2 3 >> [1 2 3;4 5 6;7 8 9] ans = matriz bidimensional ( m n ) 1 4 7 matriz de dimenso n1 n2 " nm 2 5 8 3 6 9 2 3 >> [1;2;3] exemplo

mostrado adiante

2.3 Variveis
Para criar uma varivel no Matlab deve-se seguir algumas regras. Assim, o nome de uma varivel Matlab deve ser alfanumrico e iniciado por uma letra. case-sensitive; pode conter o caractere _;

pode possuir no mximo 32 caracteres; no pode ser uma palavra reservada, como for ou while.

As variveis criadas no Matlab ficam registradas na regio Workspace (ver Captulo 1). A Tabela 2.3 apresenta alguns comandos para manipular essas variveis. Tabela 2.3: Comandos para manipulao de variveis comando who whos clear descrio lista nomes das variveis do Workspace lista os nomes e tipos das variveis do Workspace elimina variveis do Workspace

>> a = 1; >> b = [1 2; 3 4]; >> texto = 'matlab'; >> who Your variables are: a b Name a b texto >> clear b; >> whos Name a texto >> who Your variables are: a texto Size 1x1 1x6 Bytes Class 8 double array 12 char array texto Size 1x1 2x2 1x6 Bytes Class 8 double array 32 double array 12 char array >> whos

Grand total is 11 elements using 52 bytes

Grand total is 7 elements using 20 bytes

2.4 Funes Matemticas


O Matlab possui uma srie de funes matemticas (built-in functions). Alm dessas funes previamente programadas, o usurio tambm pode criar funes para atender as suas necessidades. Uma funo no Matlab apresenta a seguinte sintaxe: [sada1, sada2, ... , sadaN] = NomeFuno [entrada1, entrada2, ... ,entradaM], onde sada1 a sadaN so os N parmetros de sada da funo; entrada1 a entradaM so os M parmetros de entrada da funo; NomeFuno o nome da funo. Para obter ajuda em alguma funo, pode-se utilizar o comando help NomedaFuno Exemplo >> help sin SIN Sine. SIN(X) is the sine of the elements of X. Overloaded methods help sym/sin.m >> x = pi/2; >> a = sin(x) a= 1.0000 interessante notar a funo do ; no Matlab. Na definio da varivel x, o seu valor no foi apresentado na tela devido insero do ;. J quando se definiu a varivel a, o seu valor foi apresentado na tela porque no se colocou o ; no final da instruo. Em termos numricos, no h diferena alguma; o sinal ; serve apenas para informar ao Matlab que no se deseja ver o resultado de uma operao na tela.

3. Manipulao de Matrizes
Como mencionado no Captulo 2, uma matriz definida da seguinte forma: valores numricos so definidos entre colchetes ([...]); elementos de uma linha so separados por , ou por espao em branco; final de uma linha informado por ;.

3.1 Criao de Matrizes


a) Matrizes numricas: formadas por qualquer nmero ou operao numrica: >> m = [-2.8 sqrt(2) (5+4)/8 1; sin(0.4) exp(0.7) fix(4.5) 100] m= -2.8000 0.3894 1.4142 2.0138 1.1250 1.0000 4.0000 100.0000

b) Acrescendo valores em uma matriz: possvel acrescentar apenas um valor em uma matriz; os demais novos componentes so considerados iguais a zero: >> m(1,6) = 666 m= -2.8000 0.3894 1.4142 2.0138 1.1250 1.0000 0 666.0000 0 0 4.0000 100.0000

c) Criao de vetores linearmente espaados: atravs do smbolo :. Veja o exemplo abaixo, no qual x um vetor que varia entre 1 e 5 com incremento 1 (valor padro). >> x = 1:5 x= 1 2 3 4 5 Se o incremento for diferente de 1, o seu valor deve ser includo na instruo. Veja o exemplo a seguir, no qual o incremento do vetor x 0,5 e o do vetor y 0,5 . > x = 1:0.5:5 x= 1.0000 y= 5.0000 4.5000 4.0000 3.5000 3.0000 2.5000 2.0000 1.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 >> y = 5:-0.5:1

10

d) Principais instrues relacionadas com matrizes. Tabela 3.1: Comandos para criao de matrizes elementares funo descrio >> eye(3) eye cria matriz identidade ans = 1 0 0 cria matriz com todos os zeros elementos nulos ans = 0 0 cria matriz com todos os elementos iguais a um ans = 1 1 cria matriz com nmeros pseudorand randmicos com distribuio uniforme entre 0 e 1 ans = 0.9501 0.2311 0.6068 0.4860 0.8913 0.7621 1 1 1 1 0 0 0 0 0 1 0 0 0 1 Exemplo

>> zeros(2,3)

>> ones(2,3) ones

>> rand(2,3)

e) Concatenao de matrizes: criao de matrizes a partir de outras matrizes: >> A = [1 2 3]; >> B = [4 5 6]; >> C = [A B] C= 1 2 3 4 >> D = [A ; B] D= 1 2 3 4 5 6 >> E = [A' B'] E= 1 4 2 5 3 6

11

3.2 Operaes com Matrizes


muito importante notar que o Matlab pode realizar uma operao matricial (em uma ou entre duas matrizes) como tambm uma operao elemento a elemento (em uma ou entre matrizes). Para exemplificar, considere as matrizes 1 2 5 6 A= e B= . 3 4 7 8 A Tabela 3.2 apresenta as principais operaes realizveis com essas duas matrizes. Tabela 3.2: Operaes com matrizes Operao soma subtrao multiplicao vetorial multiplicao escalar diviso matricial (equivale a A B-1 ) diviso escalar diviso esquerda (equivale a A -1 B ) potncia matricial potncia escalar Operador + * .* / ./ \ ^ .^ Exemplo 1+ 5 2 + 6 6 8 A + B= = 3 + 7 4 + 8 10 12 1 5 2 6 4 4 A B= = 3 7 4 8 4 4 19 22 A * B= 43 50 1 5 2 6 5 12 A .* B= = 3 7 4 8 21 32 3 2 A / B= 2 1 1/ 5 2 / 6 0, 2 0, 333 A ./ B= = 3 / 7 4 / 8 0, 428 0, 5 3 4 A \ B= 4 5 7 10 A^2=A*A= 15 22 12 A .^2= 2 3 22 1 4 = 42 9 16

transposta

1 3 A'= 2 4

12

Exemplo 1: Considere o seguinte sistema de equaes lineares y1 = x1 + x2 + 2 x3 y1 1 1 2 x1 y2 = 3 x1 x2 + x3 y2 = 3 1 1 x2 ou Y = AX y3 = x1 + 3 x2 + 4 x3 y3 1 3 4 x3 a) Qual o valor de Y se X = [1 1 2] ?


T

Nesse caso, utiliza-se diretamente a operao matricial Y = A * X : >> A = [-1 1 2 ; 3 -1 1; -1 3 4] A= -1 3 -1 Y= 2 6 4 b) Qual o valor de X se Y = [ 0 2 1] ?
T

1 -1 3

2 1 4

>> Y = A*[1 ; -1 ; 2]

Nesse caso, pode-se deduzir que X=A -1Y . No Matlab, esse operao equivalente a X=A\Y (diviso esquerda, ver tabela 3.2). >> Y = [0 ; 2 ; 1]; >> X = A\Y X= 0.7000 0.3000 0.2000 Exemplo 2: Utilizando o Matlab, plote a funo y = x 2 + 2 x 3 , para 5 x 5 . Note que nesse caso deve-se utilizar a operao de potncia escalar, e no a matricial, pois para cada elemento de x deve-se calcular um valor de y. Veja como fica o cdigo Matlab: >> x=[-5:0.1:5]; >> y = x.^2 + 2*x -3; >> plot(x,y)
13

35

30

25

20

15

10

-5 -5

-4

-3

-2

-1

Figura 3.1: Grfico de y = x 2 + 2 x 3 .

3.3 Tratamento de Matrizes por Funes


Uma caracterstica muito importante do Matlab a forma como uma funo manipula matrizes. Uma funo no Matlab trata uma matriz como um todo, e no elemento a elemento. Tal caracterstica conhecida na literatura como bulk processing. Para entender tal caracterstica, veja o seguinte exemplo. No primeiro caso, x um escalar de valor 2. A varivel a simplesmente e 2 = 7,3891 . No segundo caso, considera-se uma matriz m de dimenso 2 3 . Nesse caso, B tambm uma matriz 2 3 , no qual cada elemento Bij dado por e ij . >> x = 2; >> a = exp(2) a= 7.3891 >> M = rand(2,3) M= 0.9501 0.2311 0.6068 0.4860 0.8913 0.7621
a

>> B = exp(m) B= 2.5860 1.2600 1.8346 1.6258 2.4383 2.1428

14

Tal propriedade facilita bastante o desenvolvimento de programas. Por exemplo, se for desejado plotar o seno de x, para x variando entre 0 e 2 . No Matlab, o cdigo seria o seguinte: >> x = 0:0.1:2*pi; >> plot(x,sin(x)); Em uma linguagem de programao sem bulk processing, o cdigo seria algo desse tipo: inc = 0.1 xi = 0 i=1 while xi <= 6.28 x(i) = xi yi = sin(xi) xi = xi + inc end plot(x,y) O grfico fornecido pelo Matlab mostrado na figura abaixo.
1 0.8 0.6 0.4 0.2

0 -0.2 -0.4 -0.6 -0.8 -1

Figura 3.2: Grfico de sen(x) para 0 x 2 .

3.4 Indexao de Matrizes


Uma tarefa que aparece com freqncia em programas a necessidade de utilizar apenas determinados elementos de uma matriz, e no a matriz como um todo. Para isso, realiza-se uma indexao matricial. Considere a matriz M definida abaixo:

15

>> M = [1 2 3 4 ; 5 6 7 8 ; 9 10 11 12] M= 1 5 9 2 6 10 3 7 11 4 8 12

a) Indexao de apenas um elemento. Se apenas um elemento for desejado, deve-se informar a posio que tal elemento ocupa na matriz (linha e coluna). >> a = M(3,2) a= 10 No Matlab, os elementos tambm so indexados seqencialmente. Essa indexao segue por linha e depois por coluna. Assim, a matriz anterior indexada da seguinte forma: 1( elem. 1) 2( elem. 4) 3( elem. 7 ) 4( elem. 10) elem. 2) elem. 5 ) elem. 8) elem. 11) M = 5( 6( 7( 8( . ( elem. 3) ( elem. 6 ) ( elem. 9 ) ( elem. 12 ) 9 10 11 12 >> b = M(6) b= 10 >> c = M(10) c= 4 b) Indexao de mais de um elemento. Se for desejado indexar uma faixa de elementos de uma matriz, pode-se utilizar o smbolo :. Dessa forma, cria-se submatrizes. Por exemplo, considere que se deseja criar uma matriz Z = [ 6 7 8] . Nesse caso, a matriz Z deve receber os elementos da 2a linha de M, comeando da coluna 2 at a coluna 4. Veja o exemplo: >> Z = M(2,2:4) Z= 6 7 8

16

A mesma operao pode ser realizada com a ajuda de um end, que representa o final de um intervalo. Por exemplo: >> Z = M(2,2:end) Z= 6 7 8

c) Indexao de uma linha ou coluna completa. Outra ferramenta til consiste em utilizar : sem nmeros. Nesse caso, : representa todos os nmeros de uma linha ou coluna. Por exemplo, se for desejado criar uma matriz Y formada pela primeira coluna de M. Nesse caso, define-se: >> Y = M(:,1) Y= 1 5 9

3.5 Matrizes Multidimensionais


O Matlab permite a criao de matrizes com mais de duas dimenses. A forma de criao idntica a de matrizes bidimensionais. Exemplo: Criao de uma matriz de dimenso 2 2 2 . >> A = [1 2 ; 3 4] A= 1 2 3 4 >> B = [5 6 ; 7 8] B= 5 6 7 8 >> C(:,:,1) = A; >> C(:,:,2) = B C(:,:,1) = 1 2 3 4 C(:,:,2) = 5 6 7 8

17

3.5 Funes Matriciais Bsicas


Tabela 3.3: Funes matriciais bsicas
funo descrio Exemplo >> X = [1 2 ; 4 5]; det (X) determinante da matriz quadrada X >> det(X) ans = -3 >> inv(X) inv (X) matriz inversa da matriz ans = -1.6667 >> diag(X) diag (X) retorna a diagonal principal de X ans = 1 5 >>>> v = [1 2 3]; >> diag(v) diag (v) se v um vetor, cria matriz diagonal utilizando elementos de v ans = 1 0 0 0 2 0 0 0 3 0.6667 1.3333 -0.3333

>> x = [1 2 3 4 5 6 7 8 9 0]; reshape(x,n,m) cria matriz de dimenso n m a partir da matriz x >> reshape(x,2,5) ans = 1 2 3 4 5 6 7 8 9 0

3.6 Outros Tipos de Dados


Alm de matrizes, o Matlab trabalha com outros trs tipos de dados: cadeias de caracteres (strings); clulas (cell arrays); estruturas (structus).

a) Cadeias de caracteres (strings)

18

Cadeias de caracteres so dados tipo texto, formados por cadeias de caracteres ASCII (American Standard Code for Information Interchange). Cada caractere ocupa dois bytes de memria. No Matlab, uma string definida entre . Veja o exemplo. >> texto1 = 'Curso' texto1 = Curso Atravs do comando whos pode-se verificar as informaes acerca da varivel texto1. Ela um vetor de dimenso 1 5 , do tipo char array, que ocupa 10 bytes de memria. >> whos texto1 Name texto1 Size 1x5 Bytes Class 10 char array

Grand total is 5 elements using 10 bytes Internamente, os caracteres so armazenados atravs dos respectivos cdigos ASCII. Para obter a string em formato numrico, pode-se utilizar a funo double: >> double(texto1) ans = 67 117 114 115 111 A operao inversa que transforma um cdigo ASCII em uma string efetuada pela funo char: >> a = [84 101 120 116 111]; >> char(a) ans = Texto A indexao de uma string idntica a de uma matriz. Veja o exemplo. >> a = texto1(1:3) a= Cur Da mesma forma, pode-se realizar a concatenao de strings: >> texto2 = ' de Matlab'; >> textototal = [texto1 texto2] textototal = Curso de Matlab

19

b) Clulas (cell arrays) Uma clula um tipo de varivel que permite armazenar matrizes de naturezas diferentes (escalares, vetores, matrizes, strings) em uma nica estrutura. Para criar uma clula, utiliza-se a funo cell. Clulas utilizam {} ao invs de []. Veja o exemplo abaixo, de uma clula de dimenso 2 2 . >> celula = cell(2) celula = [] [] [] []

>> celula{1,1} = eye(2); >> celula{1,2} = 'matriz identidade 2x2'; >> celula{2,1} = 2; >> celula{2,2} = [1 2 3] celula = [2x2 double] [1x21 char ] [ Name celula 2] [1x3 double] Size 2x2 Bytes Class 474 cell array >> whos celula

Grand total is 33 elements using 474 bytes Costuma-se utilizar clulas em bancos de dados que mesclam elementos numricos e alfanumricos. Por exemplo, uma lista de alunos e suas respectivas matrculas. c) Estruturas (structs) um tipo de dado que permite o armazenamento de matrizes de naturezas diferentes (escalares, vetores, matrizes, strings) identificveis por nomes de campos. Para criar uma estrutura, utiliza-se a funo struct. Como exemplo, considere que se deseja criar uma estrutura para armazenar a Tabela 3.4. Tabela 3.4: Exemplo de tabela para ser utilizada em uma estrutura Aluno Joo Maria Jos Matrcula 001 002 003 Nota 1,0 10,0 7,0

20

>> s = struct('Aluno',{'Joao'},'Matricula',{001},'Nota',{1.0}) s= Aluno: 'Joao' Matricula: 1 Nota: 1 >> s(2).Aluno = 'Maria'; >> s(2).Matricula = 002; >> s(2).Nota = 10; >> s(3).Aluno = 'Jose'; >> s(3).Matricula = 003; >> s(3).Nota = 7; >> whos s Name s Size 1x3 Bytes Class 998 struct array

Grand total is 28 elements using 998 bytes Os contedos de uma estrutura so acessados da seguinte forma: >> s s= 1x3 struct array with fields: Aluno Matricula Nota >> s(1) ans = Aluno: 'Joao' Matricula: 1 Nota: 1 >> s(2) ans = Aluno: 'Maria' Matricula: 2 Nota: 10

21

4. Programao no Matlab
4.1 Editor de programas
Existe um ambiente prprio do Matlab para edio de programas. Para abri-lo, digita-se o comando edit. Tal editor apresenta algumas caractersticas interessantes: linhas numeradas, o que til principalmente para a localizao de erros de programao; o caractere % indica comentrio; o caractere ... indica que o comando continua na prxima linha. Tal recurso permite deixar o texto mais organizado; a cor atribuda pelo editor a um texto indica a sua classe. O padro de cores varia de acordo com a verso do Matlab.

4.1 Tipos de arquivos Matlab


Um programa em Matlab possui a extenso .m e chamado de m-file. Existem dois tipos de arquivos Matlab: script e funo. a) Script Um script simplesmente uma seqncia de comandos Matlab. Qualquer seqncia de comandos pode ser implementada diretamente na janela de comando do Matlab. Entretanto, se for desejado alterar algum parmetro ou simplesmente repetir a operao, os comandos devem ser digitados novamente. Tal situao no prtica. Para solucionar esse tipo de problema existe o script. Se a seqncia de comandos for salva em um script, basta digitar o seu nome na janela de comando para repetir o processo. Exemplo: script denominado scriptEq2Grau.m, que plota uma equao do segundo grau do tipo y = ax 2 + bx + c , com a = 1 , b = 2 e c = 3 : x = [-10:0.1:10]; a = 1; b = 2; c = -3; y = x.^ 2 + b*x + c; plot(x,y);

22

Note que o script no apresenta parmetros de entrada nem de sada. Ele apenas realiza as operaes desejadas e utiliza variveis do workspace. Isso significa que todas as variveis de um script so salvas no workspace (digite comando whos). b) Funo Uma funo tambm realiza uma seqncia de comandos. Diferentemente de um script, uma funo possui parmetros de entrada e pode retornar parmetros de sada. Por exemplo, considere que se deseje criar um arquivo Matlab que calcule uma funo do segundo grau para valores variveis de a, b e c. Nesse caso, um script no serve; deve-se criar uma funo. Veja o exemplo. Exemplo: Funo denominada FuncaoEq2Grau.m. % Apresenta o grfico de uma equao do segundo grau function y = FuncaoEq2Grau(a,b,c) x = [-10:0.1:10]; y = x.^ 2 + b*x + c; plot(x,y); Para que a funo tenha os mesmos parmetros do script anterior, digita-se z = FuncaoEq2Grau(1,2,-3); Note que a nica varivel criada no workspace (digite comando whos) z. Todas as variveis utilizadas por uma funo so internas, o que significa que no so salvas no workspace (diferentemente do caso de um script0). Uma caracterstica interessante a possibilidade de criar um texto explicativo para uma funo, que apresentado ao se utilizar a funo help do Matlab. Esse texto deve ser escrito como comentrio (atravs de %) no incio do m-file.

4.2 Tipos de funes


O Matlab reconhece trs tipos de funo: built-in functions: so funes internas do Matlab, cujo cdigo no acessvel ao usurio (por exemplo, digite which cos); Matlab m-files: funes escritas em arquivos m-file. O cdigo acessvel ao usurio, podendo inclusive ser modificado (por exemplo, digite which roots); User m-files: funes escritas em arquivos m-file pelo prprio usurio, como a FuncaoEq2Grau.m descrita anteriormente.

23

4.3 Operadores lgicos


O Matlab possui operadores utilizveis em expresses lgicas (Booleanas), que so utilizadas em tomadas de decises. Para o Matlab, considera-se que 0 (zero) ou nil indica condio falsa; 1 (um) ou diferente de zero indica condio verdadeira. A Tabela 4.1 apresenta os smbolos adotados para os operadores lgicos. Tabela 4.1: Operadores lgicos
Operador = = ou eq ~= ou ne < ou lt > ou gt <= ou le >= ou ge ~ ou not & ou and Verdadeiro se A igual a B A diferente de B A menor do que B A maior do que B A menor ou igual a B A maior ou igual a B lgica not lgica and Exemplo A = = B ou eq(A,B) A ~= B ou ne(A,B) A < B ou lt(A,B) A > B ou gt(A,B) A <= B ou le(A,B) A >= B ou ge(A,B) ~A ou not(A)

>> A = 2; >> B = 4; >> A == B ans = 0 >> A < B ans = 1 >> A > B & A ~= B ans = 0 O Matlab tambm possui funes para teste de matrizes

24

Tabela 4.2: Funes matriciais


Funo isempty(M) isequal(M,M2) isnumeric(M) ischar(M) issparse(M) verdadeiro se matriz M for vazia igual a matriz M2 numrica alfanumrica esparsa

Existem tambm as funes any e all. Veja o seu funcionamento no exemplo. >> A = [0 2 4 6 8]; >> isempty(A) ans = 0 >> any(A) ans = 1 >> all(A) ans = 0 >> all(A>=0) ans = 1

4.4 Controladores de fluxo


O Matlab possui estruturas para tomada de decises, iguais s existentes em linguagens de programao estruturadas. As principais so as estruturas for, if e while. A tomada de deciso se baseia no resultado de uma expresso booleana. Se uma expresso retorna 0, o Matlab interpreta condio falsa. Se uma expresso retorna um valor diferente de zero, o Matlab considera como condio verdadeira. a) For for varivel = <valor inicial> : <incremento> : <valor final> comandos end

25

Exemplo: Criao de um vetor formado por 10 mltiplos de 3. for i = 1:10 v(i) = 3*i; end b) While O lao while permite que uma seqncia de comandos seja repetida enquanto uma certa condio for verdadeira. Apresenta a seguinte estrutura: while <expressao> comandos end Por exemplo, considere que se deseja determinar o maior valor de n tal que n ! < 10100 . Pode-se utilizar o seguinte cdigo. n = 1; while prod(1:n) < 1e100 n = n + 1; end c) If, elseif, else. O lao if, elseif, else estabelece diversos caminhos para a fluncia de um programa. A sua estrutura mostrada abaixo. if <expressao1> comandos elseif <expressao2> comandos . elseif <expressaon> comandos else comandos end Veja um exemplo de utilizao da estrutura. O valor da varivel b depende do valor da varivel a, que varia entre 0 e 10.

26

a = round(10*rand(1)); % a eh uma variavel com valor entre 0 e 10 if a > 5 b = 3*a; elseif a < 5 b = a/3; else b = a; end

4.5 Implementao do algoritmo de Gauss


O algoritmo de Gauss til para resolver um sistema de equaes lineares de ordem n , do tipo AX = Y , com A singular ( det(A) 0 ). O mtodo possui duas etapas: 1 2 Triangularizao: consiste em transformar A numa matriz triangular superior, mediante permutaes e combinaes lineares de linhas; Retrossubstituio: clculo de X, soluo de AX = Y , a partir da soluo do ltimo componente de X, e ento substituindo regressivamente nas equaes anteriores. 1a etapa: triangularizao da matriz A 1. Entrada { n , aij , yi | i = 1(1)n , j = 1(1)n } 2. Para k = 1(1)n 1 2.1. Para i = k + 1(1)n 2.1.1. mik = aik / akk 2.1.2. Para j = k + 1(1)n 2.1.2.1. aij = aij + mik * akj 2.1.3. yi = yi + mik * yk 3. Sada { n , aij , yi | i = 1| n , j = 1| n } 2a etapa: Retrossubstituio 1. Entrada {{ n , aij , yi | i = 1(1)n , j = 1(1)n , aij so coefic. de uma matriz triang. sup.} 2. xn = yn / ann 3. Para k = n 1(1)1 3.1. xk yk 3.2. Para i = k + 1(1)n 3.2.1. xk xk aki * xi 3.3. xk xk / akk 4. Sada { xi | i = 1(1)n }
27

O algoritmo implementado em Matlab pode ser o seguinte: % Triangularizacao % Passo 1. A=[3 2 0 1 ; 9 8 -3 4 ; -6 4 -8 0 ; 3 -8 3 -4]; Y=[3 ; 6 ; -16 ; 18]; n=length(A); for k=1:n-1 for i = k+1:n mik = -A(i,k)/A(k,k); A(i,:) = A(i,:) + mik*A(k,:); Y(i) = Y(i) + mik*Y(k); end end % Retrossubstituicao x(n)=Y(n)/A(n,n); for k = n-1:-1:1 x(k)=Y(k); for i = k+1:n x(k) = x(k) - A(k,i)*x(i); end x(k)=x(k)/A(k,k); end disp('Vetor x='); disp(x'); % Passo 4 % Passo 3.3 % Passo 2 % Passo 3 % Passo 3.1 % Passo 3.2 % Passo 3.2.1 % Passo 2 % Passo 2.1 % Passo 2.1.1 % Passos 2.1.2 e 2.1.2.1. % Passo 2.1.3

28

5. Grficos no Matlab
O Matlab possui sofisticados recursos para a visualizao de dados na forma grfica. Ele trabalha com objetos grficos, tais como linhas e superfcies. As propriedades de tais objetos podem ser controladas atravs das propriedades dos objetos. Entretanto, o Matlab disponibiliza diversas funes que facilitam a configuraes das propriedades de objetos. As principais funes com esse fim so vistas neste captulo.

5.1 Cor, linha e marcador de uma curva (clm)


Antes de apresentar as funes de plotagem, interessante apresentar as propriedades de cor, tipo de linha e tipo de marcador de uma curva. A Tabela 5.1 apresenta as diferentes possibilidades. Tabela 5.1: Cores, tipos de linha e marcadores
Cor y (amarela) m (magenta) c (azul-claro) r (vermelha) g (verde) b (azul) w (branca) k (preta) Tipo de linha - (slida) : (pontilhada) -. (ponto-trao) -- (tracejada) Marcador . (ponto) o (crculo) x (marcador x) + (cruz) * (estrela) s (quadrado) d (losango) h (hexagrama) p (pentagrama) v ou ^ (tringulo p/ baixo ou cima) < ou > (tringulo p/ esquerda ou direita)

5.2 Principais funes relacionadas com grficos


A Tabela 5.2 apresenta algumas das principais funes relacionas com grficos Matlab.

29

Tabela 5.2: Funes relacionadas com grficos title text gtext xlabel ttulo texto em local especificado texto usando mouse nome do eixo x ylabel grid axis legend nome do eixo y desenha linhas de grade intervalo dos eixos legendas no grfico

5.3 Funes utilizadas para plotagem


A Tabela 5.3 apresenta as principais funes utilizadas para gerar grficos 2D. Tabela 5.3: Funes para plotagem 2D Funo plot(x1,y1,clm1,...,xN,yN,clmN) semilogx(x1,y1,clm1,...,xN,yN,clmN) semilogy(x1,y1,clm1,...,xN,yN,clmN) loglogy(x1,y1,clm1,...,xN,yN,clmN) plotyy(x1,y1,clm1,x2,y2,clm2) stem(x,y) Descrio eixos X e Y em escala linear eixo X logartmico e eixo Y linear eixo X linear e eixo Y logartmico eixos X e Y logartmicos duas curvas com escalas em Y diferentes plota seqncias discretas

5.4 Propriedades de textos


Textos em grficos possuem propriedades que podem ser alteradas, tais como tipo e tamanho da fonte. A Tabela 5.4 apresenta comandos que realizam essas tarefas. Tabela 5.4: Propriedades de textos em grficos Matlab Propriedade Tipo de fonte Tamanho da fonte Texto em negrito Texto em itlico Subscrito Sobrescrito Letras gregas Comando \fontename \fontesize \bf \it _ ^ '\nomeletra' Exemplo \fontname{Arial} \fontsize{14} \bfTexto \itTexto X_n X^n '\pi'

30

5.5 Exemplos
a) Plotar a funo y = e x sen( x) , para 0 < x < 10 . % Exemplo a clear close all x = 0:0.1:10; y = exp(-x).*sin(x); plot(x,y,'r'); xlabel('Eixo X'); ylabel('Eixo Y'); axis([0 10 -0.1 0.4]); % insere texto em fonte times 16 gtext('\fontname{timesnewroman}\fontsize{16}ponto de maximo local'); b) Plotar as funes f1 ( x) = e x sen( x) e f 2 ( x) = sen( x) , para 0 < x < 10 , no mesmo grfico. % Exemplo b clear close all x = 0:0.1:10; y1 = exp(-x).*sin(x); y2 = exp(-x); y3 = sin(x); plot(x,y1,'r',x,y2,'b',x,y3,'k'); title('\fontsize{18}f(x)=e^x*sen(x)'); xlabel('Eixo X'); ylabel('Eixo Y'); axis([0 10 -1 1]); % escala de x varia entre 0 e 10 e a de y entre -1 e 1 % Titulo em fonte 18 legend('f_1(x)=e^{-x}*sen(x)','f_2(x)=e^{-x}','f_3(x)=sen(x)'); % escala de x varia entre 0 e 10; de y entre -0.1 e 0.4 % Plota curva em vermelho % Titulo em fonte 18 title('\fontsize{18}f(x)=e^{-x}*sen(x)');

31

c) Funo semilogx e comando figure: Diagramas de Bode de H ( j) = j /(10 + j) . % Exemplo c clear close all w = logspace(-2,3,1000); % w vetor logaritmicamente espacado entre 10^-1 e 10^2, com 1000 pontos H = j*w./(j*w+10); magH = 20*log10(abs(H)); % Magnitude em dB fasH = angle(H)*180/pi; % Fase em graus figure(1) % Grafico de magnitude semilogx(w,magH); title('Magnitude'); xlabel('\omega (rad/s)'); ylabel('dB'); grid figure(2) % Grafico de fase semilogx(w,fasH); title('Fase'); xlabel('\omega (rad/s)'); ylabel('graus'); grid d) Funo subplot: Diagramas de Bode de H ( j) = j /(10 + j) na mesma figura. % Exemplo d clear close all w = logspace(-2,3,1000); % w vetor logaritmicamente espacado entre 10^-1 e 10^2, com 1000 pontos H = j*w./(j*w+10); magH = 20*log10(abs(H)); % Magnitude em dB fasH = angle(H)*180/pi; % Fase em graus subplot(1,2,1) % Figura com 1 linha, 2 colunas, grafico 1 % Eixo X em escala logaritmica % Eixo X em escala logaritmica

32

semilogx(w,magH); title('Magnitude'); xlabel('\omega (rad/s)'); ylabel('dB'); grid

% Eixo X em escala logaritmica

subplot(1,2,2) % Figura com 1 linha, 2 colunas, grafico 2 semilogx(w,fasH); title('Fase'); xlabel('\omega (rad/s)'); ylabel('graus'); grid e) Funo stem: plotar y (k ) = a k * u (k ) em funo de k. % Exemplo e k = -10:10; % Criacao do degrau unitario u(k) for i = 1:length(k) if k(i) >= 0 u(i) = 1; else u(i) = 0; end end % alternativa ao for: % u = (k >= 0) % Criacao de y(k) = a^k*u(k) a = 0.5; y = (a).^k.*u; stem(k,y); % Eixo X em escala logaritmica

Grficos 3D
O Matlab possui diversas funes destinadas criao de grficos em 3D. A Figura 5.1 apresenta apenas algumas delas. Quem desejar se aprofundar no assunto deve ler a documentao do prprio Matlab.

33

Grfico 3D

Curvas

Superfcies

plot3 contour

curvas em 3D curvas de nvel

surf mesh

superfcies 3D malhas 3D

Figura 5.1: Tipos de grficos e funes 3D. a) Exemplo de uma curva em 3D (funo plot3) t = 0:pi/50:10*pi; x = sin(t); y = cos(t); z = t; plot3(x,y,z); xlabel('sin(t)'); ylabel('cos(t)'); zlabel('t'); Se for desejado plotar uma funo de duas variveis z = f ( x, y ) necessrio gerar matrizes X e Y contendo linhas repetidas, que definem o domnio da funo. A funo Malab que define X e Y a partir de vetores x e y a meshgrid. Feito isso, pode-se utilizar a funo desejada para plotar a funo z. Veja o exemplo abaixo, no qual se deseja obter as curvas de superfcie (funo surf) e de malha (funo mesh) de z = f ( x, y ) = clear close all x = -8:0.5:8; y = -8:0.5:8; [X,Y] = meshgrid(x,y); % Geracao de matrizes X e Y a partir de x e y r = sqrt(X.^2 + Y.^2); Z = sin(r)./r; figure(1) surf(X,Y,Z); figure(2) % Grafico de malha mesh(X,Y,Z); % Grafico de superficie sen

x2 + y 2 x2 + y 2

34

6. Funes relacionadas com arquivos de dados


O Matlab possui diversas funes para leitura e gravao de arquivos de dados (texto, imagem e som). Algumas das principais so apresentadas neste captulo.

6.1 Leitura e gravao de arquivos de dados


a) Funes dlmread e dlmwrite Para ler ou gravar um arquivo ASCII delimitado utiliza-se as funes dlmread e dlmwrite, respectivamente. O arquivo possui um caractere delimitador, que separa os dados uns dos outros. Veja os exemplos. A funo dlmread(NomeArquivo,delimitador) l um arquivo ASCII com determinado delimitador. Por exemplo, considere um arquivo dados.txt, cujo delimitador um espao em branco. O exemplo abaixo mostra como ler este arquivo e salvar o seu contedo em uma varivel denominada a. >> type dados.txt 1234 5678 9 10 11 12 >> a = dlmread('dados.txt',' ') a= 1 5 9 2 6 10 3 7 11 4 8 12

A funo dlmwrite(NomeArquivo,matriz,delimitador) permite gravar os dados de uma matriz em um arquivo ASCII com determinado delimitador. O exemplo abaixo mostra salva a matriz M no arquivo gravar.txt, cujo delimitador a ,. >> M = [1 3 5 7;2 4 6 8] M= 1 2 3 4 5 6 7 8

>> dlmwrite('gravar.txt',M,','); >> type gravar.txt 1,3,5,7 2,4,6,8


35

b) Funes load e save As funes load e save servem para ler/gravar variveis armazenadas em arquivos com extenso .mat, que um formato binrio proprietrio do Matlab. A sintaxe a seguinte: load(NomeArquivo) save(NomeArquivo,var1,var2,...,varN) save(NomeArquivo,var1,var2,...,varN,-ASCII) No comando save, se nenhuma varivel for especificada, o Matlab salva todas as variveis do worspace no arquivo especificado. A opo -ASCII salva o arquivo no formato ASCII. Veja alguns exemplos. >> a = [1 2]; >> b = 3; >> texto = 'teste'; >> save('arquivo1','a','texto'); >> clear >> whos >> load('arquivo1') >> whos Name a texto Size 1x2 1x5 Bytes Class 16 double array 10 char array

Grand total is 7 elements using 26 bytes Existem diversas outras funes para carregar arquivos de dados. Elas podem ser acessadas pelo comando importdata (help importdata).

6.2 Leitura e gravao de arquivos de imagem


Para ler ou gravar um arquivo de imagem, utiliza-se as funes imread e imwrite, respectivamente. A sintaxe a seguinte: A = imread(NomeArquivo) imwrite(Matriz,NomeArquivo) As extenses permitidas so: bmp, cur, gif, hdf, io, jpg, jpeg, pcx, png, tif, tiff e xwd

36

6.3 Leitura e gravao de arquivos de imagem


Para ler arquivo de som, utilizam-se as funes auread (som NeXT/SUN) e wavread (som Microsoft wave). Para gravar um arquivo de som, utilizam-se as funes auwrite (som NeXT/SUN) e wavwrite (som Microsoft wave).

37

7. Polinmios
a) Razes de um polinmio: funo roots Dado um vetor p com n elementos, a funo roots retorna as razes do polinmio P definido por P = p(1) x n + p(2) x n 1 + " + p(n 1) x + p(n) . Veja o exemplo, onde se considera um polinmio P = 6 x 5 15 x 4 + 3 x 2 + 4 x + 1 . >> p = [6 -15 0 3 4 1]; >> roots(p) ans = 2.3531 0.9461 -0.2579 + 0.4447i -0.2579 - 0.4447i -0.2833 b) Coeficiente de um polinmio a partir de suas razes: funo poly Dado um vetor r contendo as razes de um polinmio, a funo poly retorna um vetor contendo os coeficientes do polinmio. Veja o exemplo, no qual se deseja um polinmio com razes 1 e 2. O resultado P = x 2 x 2 . > >> r = [-1 2]; >> P = poly(r) P= 1 -1 -2

c) Valor de um polinmio: fuo polyval A funo polyval calcula o valor de um polinmio P(X) para cada valor de um vetor X. Por exemplo, considere que se deseja calcula o valor de P = x 2 x 2 para 3 < x < 3 . Veja o exemplo. >> p = [1 -1 -2]; >> x = -3:0.1:3; >> resultado = polyval(p,x); >> plot(x,resultado); d) Ajuste de curvas por polinmio de grau n: fuo polyfit

38

Dados vetores x e y, a funo polyfit retorna os coeficientes de um polinmio de grau n que melhor aproxima os pontos definidos por (x,y). Veja o exemplo, no qual a curva aproximada por um polinmio de grau 3, dado por P = 0, 0046 x 3 0, 7995 x 2 + 3,5478 x + 99,8667 . >> x = 1:10; >> y = [100 110 105 98 102 107 103 100 99 103]; >> p = polyfit(x,y,3); >> p = polyfit(x,y,3) p= 0.0466 -0.7995 3.5478 99.8667 >> aprox = polyval(p,x); >> plot(x,y,x,aprox,'r'); e) Multiplicao/diviso de polinmios: fues conv/deconv Dados dois vetores p1 e p2, contendo os coeficientes de dois polinmios, as funes conv e deconv retornam os coeficientes de um vetor dado pela multiplicao e diviso entre p1 e p2, respectivamente. Veja o exemplo. >> p1 = [2 1 3 4]; >> p2 = [1 -1 2]; >> p3 = conv(p1,p2) p3 = 2 p4 = 2 3 -1 6 3 2 8 >> p4 = deconv(p1,p2)

39

8. Bibliografia
MATSUMOTO, E. Y. MATLAB 6 Fundamentos de Programao. 1. ed. So Paulo: Editora rica Ltda., 2001. Centro Brasileiro de Pesquisas Fsicas. Matlab Curso Introdutrio. Disponvel em: <http://mesonpi.cat.cbpf.br/e2002/cursos/NotasAula/Tutorial_matlab.pdf>

Acesso em: 06 jul. 2005. Apostila do II Workshop Internacional de Ensino de Engenharia. Mini-curso Uso do Matlab no Ensino de Engenharia.

40

Potrebbero piacerti anche