matlab-2

Upload: wendel-freire

Post on 16-Oct-2015

4 views

Category:

Documents


0 download

TRANSCRIPT

  • 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.

    1

  • >> ver

    --------------------------------------------------

    MATLAB Version 6.0.0.88 (R12) on PCWIN

    MATLAB License Number: 0

    --------------------------------------------------

    MATLAB Toolbox Version 6.0 (R12) 06-Oct-2000

    Simulink Version 4.0 (R12) 16-Jun-2000

    Stateflow Version 4.0 (R12) 04-Oct-2000

    Stateflow Coder Version 4.0 (R12) 04-Oct-2000

    Communications Blockset Version 2.0 (R12) 01-Sep-2000

    Communications Toolbox Version 2.0 (R12) 01-Sep-2000

    Control System Toolbox Version 5.0 (R12) 01-Sep-2000

    DSP Blockset Version 4.0 (R12) 01-Sep-2000

    Filter Design Toolbox Version 2.0 (R12) 01-Aug-2000

    Fixed-Point Blockset Version 3.0 (R12) 26-May-2000

    Image Processing Toolbox Version 2.2.2 (R12) 10-Mar-2000

    MATLAB Compiler Version 2.1 (R12) 26-Jul-2000

    Model Predictive Control Toolbox Version 1.0.5 (R12) 10-May-2000

    Nonlinear Control Design Blockset Version 1.1.4 (R12) 12-Jun-2000

    Optimization Toolbox Version 2.1 (R12) 07-Jun-2000

    Partial Differential Equation Toolbox Version 1.0.3 (R12) 31-Dec-1999

    Robust Control Toolbox Version 2.0.7 (R12) 10-May-2000

    SB2SL (converts SystemBuild to Simu... Version 2.1 (R12) 16-Jun-2000

    Signal Processing Toolbox Version 5.0 (R12) 01-Jun-2000

    Simulink Accelerator Version 1.0 (R12) 01-Mar-2000

    Model Differencing for Simulink and... Version 1.0 (R12) 19-Jul-2000

    Simulink Model Coverage Tool Version 1.0 (R12) 02-Jun-2000

    Simulink Report Generator Version 1.1 (R12) 01-Apr-2000

    Statistics Toolbox Version 3.0 (R12) 01-Sep-2000

    Symbolic Math Toolbox Version 2.1.2 (R12) 11-Sep-2000

    System Identification Toolbox Version 5.0 (R12) 27-Aug-2000

    Wavelet Toolbox Version 2.0 (R12) 16-Jun-2000

    b) Janelas

    A verso Matlab para ambiente Windows apresenta as seguintes janelas:

    2

  • 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.

    3

  • 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.

    4

  • O Matlab possui algumas funes do sistema operacional, apresentados na tabela

    abaixo.

    Tabela 1.1: Comandos do sistema operacional

    Comando Funo Exemplo

    cd ou pwd Informa ou altera diretrio cd

    dir ou ls Lista contedo do diretrio dir

    what exibe arquivos Matlab salvos no diretrio what

    which Identifica e localiza arquivo which cos

    ! Chama comando do sistema operacional !del arquivo.m

    5

  • 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 sinal -

    casa decimal ponto final .

    notao cientfica e

    1 j ou i

    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

    2.2 Matrizes

    Para o Matlab, qualquer valor numrico interpretado como uma matriz. Uma

    matriz definida da seguinte forma:

    6

  • 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 exemplo

    escalar >> 2

    ans =

    2

    vetor linha (1 ) n>> [1 2 3]

    ans =

    1 2 3

    vetor coluna ( ) n1

    >> [1;2;3]

    ans =

    1

    2

    3

    matriz bidimensional ( ) m n

    >> [1 2 3;4 5 6;7 8 9]

    ans =

    1 2 3

    4 5 6

    7 8 9

    matriz de dimenso

    mn n n 1 2 "

    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 _;

    7

  • 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 descrio

    who lista nomes das variveis do Workspace

    whos lista os nomes e tipos das variveis do Workspace

    clear elimina variveis do Workspace

    >> a = 1;

    >> b = [1 2; 3 4];

    >> texto = 'matlab';

    >> who

    Your variables are:

    a b texto

    >> whos

    Name Size Bytes Class

    a 1x1 8 double array

    b 2x2 32 double array

    texto 1x6 12 char array

    Grand total is 11 elements using 52 bytes

    >> clear b;

    >> whos

    Name Size Bytes Class

    a 1x1 8 double array

    texto 1x6 12 char array

    Grand total is 7 elements using 20 bytes

    >> who

    Your variables are:

    a texto

    8

  • 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.

    9

  • 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 1.4142 1.1250 1.0000

    0.3894 2.0138 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 1.4142 1.1250 1.0000 0 666.0000

    0.3894 2.0138 4.0000 100.0000 0 0

    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 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000

    >> y = 5:-0.5:1

    y =

    5.0000 4.5000 4.0000 3.5000 3.0000 2.5000 2.0000 1.5000 1.0000

    10

  • d) Principais instrues relacionadas com matrizes.

    Tabela 3.1: Comandos para criao de matrizes elementares

    funo descrio Exemplo

    eye

    cria matriz identidade

    >> eye(3)

    ans =

    1 0 0

    0 1 0

    0 0 1

    zeros

    cria matriz com todos os

    elementos nulos

    >> zeros(2,3)

    ans =

    0 0 0

    0 0 0

    ones

    cria matriz com todos os

    elementos iguais a um

    >> ones(2,3)

    ans =

    1 1 1

    1 1 1

    rand

    cria matriz com nmeros pseudo-

    randmicos com distribuio

    uniforme entre 0 e 1

    >> rand(2,3)

    ans =

    0.9501 0.6068 0.8913

    0.2311 0.4860 0.7621

    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 5 6 >> 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

    A= 1 23 4

    e . B= 5 67 8

    A Tabela 3.2 apresenta as principais operaes realizveis com essas duas matrizes.

    Tabela 3.2: Operaes com matrizes

    Operao Operador Exemplo

    soma

    + A B=+ + + = + + 1 5 2 6 6 83 7 4 8 10 12

    subtrao

    - A B= = 1 5 2 6 4 43 7 4 8 4 4

    multiplicao vetorial

    * A*B= 19 2243 50

    multiplicao escalar

    .* A .*B= = 1 5 2 6 5 123 7 4 8 21 32

    diviso matricial

    (equivale a ) -1A B

    / A / B=

    3 22 1

    diviso escalar

    ./ / / , ,A ./ B= =/ / , ,

    1 5 2 6 0 2 0 3333 7 4 8 0 428 0 5

    diviso esquerda

    (equivale a ) -1A B

    \ A \ B= 3 44 5

    potncia matricial

    ^ A^2=A*A= 7 1015 22

    potncia escalar

    .^ A .^2= = 2 2

    2 2

    1 41 29 163 4

    transposta

    A'= 1 32 4

    12

  • Exemplo 1: Considere o seguinte sistema de equaes lineares

    1 1 2

    2 1 2 3

    3 1 2

    23

    3 4

    y x x xy x x xy x x

    = + += += + +

    3

    3x

    1 1

    2 2

    3 3

    1 1 23 1 11 3 4

    y xy xy x

    = ou AXY =

    a) Qual o valor de se ? Y [ ]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 1 2

    3 -1 1

    -1 3 4

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

    Y =

    2

    6

    4

    b) Qual o valor de se Y ? X [ ]0 2 1 T= Nesse caso, pode-se deduzir que . No Matlab, esse operao

    equivalente a (diviso esquerda, ver tabela 3.2).

    -1X=A Y

    X=A\Y

    >> Y = [0 ; 2 ; 1];

    >> X = A\Y

    X =

    0.7000

    0.3000

    0.2000

    Exemplo 2: Utilizando o Matlab, plote a funo , para . 2 2y x x= + 3 5 5x 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

  • -5 -4 -3 -2 -1 0 1 2 3 4 5-5

    0

    5

    10

    15

    20

    25

    30

    35

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

    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 . No segundo caso,

    considera-se uma matriz m de dimenso . Nesse caso, B tambm uma matriz

    , no qual cada elemento dado por .

    2 7,3891=2 3

    ijae2 3 Bij>> x = 2;

    >> a = exp(2)

    a =

    7.3891

    >> M = rand(2,3)

    M =

    0.9501 0.6068 0.8913

    0.2311 0.4860 0.7621

    >> B = exp(m)

    B =

    2.5860 1.8346 2.4383

    1.2600 1.6258 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

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

    M =

    1 2 3 4

    5 6 7 8

    9 10 11 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:

    ( ) ( ) ( ) ( )( ) ( ) ( ) ( )( ) ( ) ( ) ( )

    elem. 1 elem. 4 elem. 7 elem. 10

    elem. 2 elem. 5 elem. 8 elem. 11

    elem. 3 elem. 6 elem. 9 elem. 12

    1 2 3 4

    M 5 6 7 8

    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 .

    Nesse caso, a matriz Z deve receber os elementos da 2

    [ ]Z 6 7 8=a 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

    det (X)

    determinante da matriz quadrada X

    >> X = [1 2 ; 4 5];

    >> det(X)

    ans =

    -3

    inv (X)

    matriz inversa da matriz

    >> inv(X)

    ans =

    -1.6667 0.6667

    1.3333 -0.3333

    diag (X)

    retorna a diagonal principal de X

    >> diag(X)

    ans =

    1

    5

    diag (v)

    se v um vetor, cria matriz diagonal

    utilizando elementos de v

    >>>> v = [1 2 3];

    >> diag(v)

    ans =

    1 0 0

    0 2 0

    0 0 3

    reshape(x,n,m)

    cria matriz de dimenso a partir

    da matriz x

    n m>> x = [1 2 3 4 5 6 7 8 9 0];

    >> reshape(x,2,5)

    ans =

    1 3 5 7 9

    2 4 6 8 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 , do tipo char array, que ocupa 10 bytes de memria. 5>> whos texto1

    Name Size Bytes Class

    texto1 1x5 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 ]

    [ 2] [1x3 double]

    >> whos celula

    Name Size Bytes Class

    celula 2x2 474 cell array

    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 Matrcula Nota

    Joo 001 1,0

    Maria 002 10,0

    Jos 003 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 Size Bytes Class

    s 1x3 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 , com , b e : 2y ax bx c= + + 1a = 2= 3c = 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 Verdadeiro se Exemplo

    = = ou eq A igual a B A = = B ou eq(A,B)

    ~= ou ne A diferente de B A ~= B ou ne(A,B)

    < ou lt A menor do que B A < B ou lt(A,B)

    > ou gt A maior do que B A > B ou gt(A,B)

    = B ou ge(A,B)

    ~ ou not lgica not ~A ou not(A)

    & ou and lgica and

    >> 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 verdadeiro se matriz M for

    isempty(M) vazia

    isequal(M,M2) igual a matriz M2

    isnumeric(M) numrica

    ischar(M) alfanumrica

    issparse(M) 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 = : :

    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

    comandos

    end

    Por exemplo, considere que se deseja determinar o maior valor de n tal que

    . Pode-se utilizar o seguinte cdigo. 100! 10n 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 , do tipo , com A singular ( ). O mtodo possui duas etapas: n AX Y= det(A) 01 Triangularizao: consiste em transformar A numa matriz triangular superior,

    mediante permutaes e combinaes lineares de linhas;

    2 Retrossubstituio: clculo de X, soluo de , a partir da soluo do ltimo

    componente de X, e ento substituindo regressivamente nas equaes anteriores.

    AX Y=

    1a etapa: triangularizao da matriz A

    1. Entrada { , , | , } n ija iy 1(1)i n= 1(1)j n=2. Para 1(1) 1k n= 2.1. Para i k 1(1)= + n

    n

    k

    nn

    n

    ix

    kk

    2.1.1. m a /ik ik kka= 2.1.2. Para j k 1(1)= + 2.1.2.1. a a *ij ij ik kjm a= + 2.1.3. y y *i i ikm y= +3. Sada { , , | , } n ija iy 1|i n= 1|j n=2a etapa: Retrossubstituio 1. Entrada {{ , , | i n , , so coefic. de uma matriz triang. sup.} n ija iy 1(1)= 1(1)j = n ija2. /n nx y a=3. Para 1( 1)1k n= 3.1. x y k k 3.2. Para i k 1(1)= + 3.2.1. x x *k k kia 3.3. x x /k k a4. Sada { } | 1(1)ix i 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 % Passo 2

    for i = k+1:n % Passo 2.1

    mik = -A(i,k)/A(k,k); % Passo 2.1.1

    A(i,:) = A(i,:) + mik*A(k,:); % Passos 2.1.2 e 2.1.2.1.

    Y(i) = Y(i) + mik*Y(k); % Passo 2.1.3

    end

    end

    % Retrossubstituicao

    x(n)=Y(n)/A(n,n); % Passo 2

    for k = n-1:-1:1 % Passo 3

    x(k)=Y(k); % Passo 3.1

    for i = k+1:n % Passo 3.2

    x(k) = x(k) - A(k,i)*x(i); % Passo 3.2.1

    end

    x(k)=x(k)/A(k,k); % Passo 3.3

    end

    disp('Vetor x='); % Passo 4

    disp(x');

    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 Tipo de linha Marcador

    y (amarela) - (slida) . (ponto)

    m (magenta) : (pontilhada) o (crculo)

    c (azul-claro) -. (ponto-trao) x (marcador x)

    r (vermelha) -- (tracejada) + (cruz)

    g (verde) * (estrela)

    b (azul) s (quadrado)

    w (branca) d (losango)

    k (preta) 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 ttulo ylabel nome do eixo y

    text texto em local especificado grid desenha linhas de grade

    gtext texto usando mouse axis intervalo dos eixos

    xlabel nome do eixo x legend 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 Descrio

    plot(x1,y1,clm1,...,xN,yN,clmN) eixos X e Y em escala linear

    semilogx(x1,y1,clm1,...,xN,yN,clmN) eixo X logartmico e eixo Y linear

    semilogy(x1,y1,clm1,...,xN,yN,clmN) eixo X linear e eixo Y logartmico

    loglogy(x1,y1,clm1,...,xN,yN,clmN) eixos X e Y logartmicos

    plotyy(x1,y1,clm1,x2,y2,clm2) duas curvas com escalas em Y diferentes

    stem(x,y) 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 Comando Exemplo

    Tipo de fonte \fontename \fontname{Arial}

    Tamanho da fonte \fontesize \fontsize{14}

    Texto em negrito \bf \bfTexto

    Texto em itlico \it \itTexto

    Subscrito _ X_n

    Sobrescrito ^ X^n

    Letras gregas '\nomeletra' '\pi'

    30

  • 5.5 Exemplos

    a) Plotar a funo , para . ( )xy e sen x= 0 10x< = 0)

    % Criacao de y(k) = a^k*u(k)

    a = 0.5;

    y = (a).^k.*u;

    stem(k,y);

    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

    curvas em 3D

    curvas de nvel

    plot3

    contour

    superfcies 3D

    malhas 3D

    surf

    mesh

    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 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=

    ( )2 22 2

    sen( , )

    x yz f x y

    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) % Grafico de superficie

    surf(X,Y,Z);

    figure(2) % Grafico de malha

    mesh(X,Y,Z);

    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

    1 2 3 4

    5 6 7 8

    9 10 11 12

    >> a = dlmread('dados.txt',' ')

    a =

    1 2 3 4

    5 6 7 8

    9 10 11 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 3 5 7

    2 4 6 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 Size Bytes Class

    a 1x2 16 double array

    texto 1x5 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 . Veja o exemplo,

    onde se considera um polinmio P .

    1(1) (2) ( 1) ( )n np x p x p n x p n= + + + +"5 4 26 15 3 4 1x x x x= + + +

    >> 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 . 2P 2x x= > >> 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 2 para

    . Veja o exemplo.

    2x x= 3 x < < 3

    >> 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

    . 3 2P 0,0046 0,7995 3,5478 99,8667x x x= + +>> 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 -1 6 3 2 8

    >> p4 = deconv(p1,p2)

    p4 =

    2 3

    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:

    Acesso em: 06 jul. 2005.

    Apostila do II Workshop Internacional de Ensino de Engenharia. Mini-curso Uso do Matlab no Ensino de Engenharia.

    40