apostila introducao ao matlab

Upload: diego-moreno-bravo

Post on 04-Oct-2015

264 views

Category:

Documents


0 download

DESCRIPTION

Apostila Introducao Ao Matlab

TRANSCRIPT

  • Centro Nacional de Processamento de Alto Desempenho em So Paulo

    Universidade Estadual de Campinas

    Introduo ao MATLAB

    Cedric Marcelo Augusto Ayala Bravo

    der Lima de Albuquerque

  • Sumrio 1 Introduo .......................................................................................................................1

    1.1 Toolboxes................................................................................................................2 2 Ajuda no Matlab .............................................................................................................2

    2.1 Editor/Depurador de programas..............................................................................6 2.2 Comandos do UNIX/DOS ......................................................................................6 2.3 Limitaes de memria...........................................................................................7

    3 Manipulao de matrizes, vetores e escalares.................................................................7

    3.1 Operaes bsicas: +, -, *, / ..................................................................................10 3.2 Operador dois pontos ':' ........................................................................................13

    3.2.1 Outros usos do operador dois pontos ............................................................13 3.3 Clculos fundamentais e matrizes especiais .........................................................14

    3.3.1 Constantes predefinidas ................................................................................15 4 Funes elementares .....................................................................................................16

    4.1 Funes bsicas.....................................................................................................16 4.1.1 Exemplos simples .........................................................................................17 4.1.2 Nmeros complexos .....................................................................................18 4.1.3 Comandos de converso ...............................................................................20

    4.2 Funes trigonomtricas .......................................................................................20 4.3 Funes hiperblicas: nomenclatura.....................................................................21

    5 Controle de fluxo ..........................................................................................................22

    5.1 Regras para escrever uma function .......................................................................24 5.2 Operadores relacionais..........................................................................................24 5.3 Operadores lgicos ...............................................................................................26 5.4 Lao estrutural if-else-end ....................................................................................27 5.5 Estrutura switch-case-otherwise-end ....................................................................29 5.6 Estrutura while-end ...............................................................................................30 5.7 Estrutura for-end ...................................................................................................30

    6 Operaes sobre matrizes .............................................................................................31

    6.1 Outras funes teis..............................................................................................31 7 Medidas estatsticas ......................................................................................................32

    8 Grficos.........................................................................................................................33

    8.1 Comando subplot ..................................................................................................38 8.2 Outros recursos para grficos bidimensionais ......................................................40

    8.2.1 Grfico em coordenadas polares...................................................................44 8.3 Grficos tridimensionais .......................................................................................45

    8.3.1 Grficos de superfcie ...................................................................................46 8.3.2 Animao grfica ..........................................................................................47

    9 Soluo de sistemas de equaes lineares ....................................................................48

    9.1 Mtodos diretos.....................................................................................................49

  • 9.2 Mtodos iterativos.................................................................................................50 10 Ajuste de curvas e interpolao ................................................................................53

    11 Leitura e escrita de arquivos de dados ......................................................................62

    12 Anlise polinomial ....................................................................................................65

    13 Anlise numrica de funes ....................................................................................67

    14 Integrao e diferenciao ........................................................................................69

    14.1 Integrao..............................................................................................................69 14.2 Diferenciaco ........................................................................................................73

    15 Equaes diferenciais ordinrias ..............................................................................76

    15.1 Equao diferencial ordinria de ordem superior .................................................79 16 Decomposio e fatorao de matrizes.....................................................................82

    16.1 Fatorizao triangular - LU...................................................................................83 16.2 Decomposio - QR..............................................................................................83 16.3 Decomposio em valores singulares - SVD........................................................84 16.4 Autovalores e autovetores.....................................................................................84

    17 Comentrio final .......................................................................................................85

    18 Referncias Bibliogrficas ........................................................................................85

  • Introduo ao MATLAB

    1

    1 Introduo

    A primeira verso do Matlab escrita no final da dcada de 70 nas Universidades de

    Stanford e do Novo Mxico era destinada a cursos de teoria matricial, lgebra linear e

    anlise numrica.

    No desenvolvimento dos pacotes EISPAC e LINPACK de sub-rotinas em cdigo

    FORTRAN para manipulao de matrizes, pretendia-se que os alunos pudessem utilizar

    esses pacotes sem a necessidade de escrever programas em Fortran.

    Atualmente a capacidade do Matlab se estende alm do Laboratrio de Matrizes'

    original. O Matlab um sistema interativo e uma linguagem de programao para

    computao tcnica e cientfica em geral.

    Ele integra a capacidade de fazer clculos, visualizao grfica e programao em

    um ambiente fcil de usar, em que problemas e solues so expressos em uma linguagem

    matemtica familiar.

    Os usos tpicos para o Matlab incluem:

    Clculos matemticos;

    Desenvolvimento de algoritmos;

    Modelagem, simulao e confeco de prottipos;

    Anlise, explorao e visualizao de dados;

    Grficos cientficos e da engenharia;

    Desenvolvimento de aplicaes, incluindo a elaborao de interfaces grficas com o

    usurio.

    O Matlab um sistema interativo cujo elemento de dados bsico uma matriz que no

    requer dimensionamento. Isso permite solucionar muitos problemas computacionais, como

    aqueles que envolvem formulaes matriciais ou vetoriais em uma frao de tempo bem

    menor daquele ocupado para escrever um programa em uma linguagem como C ou Fortran,

    veja [1] e [2].

  • Introduo ao MATLAB

    2

    1.1 Toolboxes

    O Matlab tanto um ambiente quanto uma linguagem de programao [3], e um dos

    aspectos mais poderosos o fato de que a linguagem Matlab permite construir suas prprias

    ferramentas reutilizveis. O usurio pode facilmente criar suas prprias funes e

    programas especiais em linguagem Matlab. A medida que se escreve mais e mais funes

    para lidar com certos problemas naturalmente se levado a agrupar por convenincia,

    funes relacionadas entre si em diretrios especiais. Isso nos introduz o conceito de

    Toolbox: uma coleo de arquivos para tratar classes especiais de problemas.

    As toolboxes so mais do que uma simples coleo de funes teis, elas

    representam os esforos de alguns dos maiores pesquisadores do mundo em campos como

    controle, processamento de sinais e identificao de sistemas, dentre outros. Novas

    toolboxes so criadas a cada ano, dentre alguns exemplos no Matlab tem-se:

    Toolbox de Processamento de Sinais;

    Toolbox de Identificao de Sistemas;

    Toolbox de Otimizao;

    Toolbox de Sistemas de Controle;

    Toolbox de Controle Robusto;

    Toolbox de Redes Neurais;

    Toolbox Spline.

    Extrada e adaptada da Introduo do texto Guia do Usurio , [2].

    2 Ajuda no Matlab O Matlab pode ser utilizado tanto no ambiente Unix como no Windows. Aps

    chamar o matlab aparecem trs opes de ajuda a serem acessadas a partir do prompt (>>)

    ou linha de comandos do Matlab, a saber, helpwin, helpdesk e demo.

    O comando demo permite o acesso a uma janela indexada com vrias ferramentas

    que o Matlab implementa. Escolhe-se um tpico e sub tpico e clica-se sobre o boto Run

  • Introduo ao MATLAB

    3

    o qual chama uma outra janela que mostra uma srie de comandos usados pelo Matlab com

    a correspondente explicao acompanhada por uma visualizao grfica e vrias

    opes/botes de execuo como start, reset, play, next, prev, info, etc.

    Com o comando helpdesk obtm-se acesso a uma ajuda online com informaes

    completas sobre o Matlab em todos seus aspectos. Dentre estes tambm h itens onde so

    dados exemplos com explicaes do potencial do Matlab e dos comandos que so

    utilizados, apresenta-se tambm uma visualizao grfica quando esta compete. Alguns

    tpicos so apresentados no formato contedo-ndice. No preciso estar conectado a

    Internet para usar esse sistema. O comando help docopt ensina a configurar o Web Browser

    para ter acesso a esta ajuda online com o comando helpdesk.

    O comando Helpwin apresenta um conjunto de diretrios e um ttulo que reflete o

    tipo de ferramentas nele contidas. Clicando sobre qualquer um destes itens aparece um

    glossrio de comandos com a correspondente definio da funo que lhe designada.

    Clicando ainda sobre uma destas definies tem-se acesso a uma explicao sucinta dos

    usos desta funo assim como os argumentos de entrada e sada e de funes afins com ela.

    Caso existam outras funes que este comando possa executar, sero mostrados uma srie

    de arquivos com o mesmo nome, mas com funes distintas (funes sobrecarregadas).

    Para ter acesso a uma ajuda sobre estes comandos basta digitar qualquer das linhas

    apresentadas na linha de comandos do Matlab, com ou sem a extenso '.m'.

    Como ser visto depois a extenso '.m' reservada para designar um arquivo

    executvel dentro do Matlab. Assim, as funes ou mtodos usados pelo Matlab, esto

    implementados dentro de arquivos com extenso '.m', e so fceis de acessar e entender,

    pois esto escritos em uma linguagem matemtica familiar.

    No Matlab os comandos e variveis so caso sensitivo, isto , as variveis cujos

    nomes so var e vaR so distintas dentro do ambiente Matlab.

    Para ter acesso direto a explicao de uma determinada funo do Matlab cujo nome

    conhecido basta digitar help e o nome do comando, por exemplo, para acessar a

    explicao da funo 'power', elevao potencia de um nmero, digite (todos os

    comandos ou funes prprias do matlab devem ser digitadas em letra minscula) :

    >> help power

  • Introduo ao MATLAB

    4

    A sada resposta do Matlab ser:

    .^ Array power.Z = X.Y denotes element-by-element powers. X and Ymust have the same dimensions unless one is a scalar.A scalar can operate into anything.C = POWER(A,B) is called for the syntax 'A . B' when A or Bis an object.See also MPOWER.Overloaded methodshelp demtseries/power.mhelp fints/power.mhelp sym/power.m

    A funo mpower afim com a funo power, pois ela calcula potncias numricas.

    A funo mpower permite elevar uma matriz a uma potncia escalar, isto representa o

    produto de uma matriz por si mesma, coisa que no possvel calcular diretamente com

    power. Por exemplo, para A definida por:

    =

    4321

    A (1)

    >> B = power(A,2)

    retorna o resultado

    =

    16941

    B (2)

    Isto representa o quadrado de cada entrada de A. Ao passo que o comando

    >> C = mpower(A,2)

    devolve o resultado

    =

    2215107

    C (3)

    que equivale ao produto A vezes A.

  • Introduo ao MATLAB

    5

    O arquivo power.m no diretrio local matlab6/toolbox/matlab/ops acionado

    quando o comando help power executado. O mencionado arquivo, no caso especfico, s

    contm linhas de comentrio sem argumentos de entrada. J o arquivo sobrecarregado

    power.m, no diretrio local matlab6/toolbox/finance/ findemos/@demtseries, calcula a

    potncia de um nmero elemento a elemento e cujos argumentos de entrada so uma matriz

    e um nmero. Qual destes arquivos ser acionado depender, obviamente, do nmero e do

    tipo de argumentos.

    Outro comando de ajuda do Matlab o lookfor que pesquisa dentre as funes do

    Matlab aquelas que contm uma certa palavra chave. Por exemplo

    >> lookfor sound

    apresenta a seguinte sada: BEEP Produce beep sound.AUREAD Read NeXT/SUN (".au") sound file.AUWRITE Write NeXT/SUN (".au") sound file.SAXIS Sound axis scaling.SOUND Play vector as sound.SOUNDSC Autoscale and play vector as sound.WAVPLAY Play sound using Windows audio output device.WAVREAD Read Microsoft WAVE (".wav") sound file.WAVRECORD Record sound using Windows audio input device.WAVWRITE Write Microsoft WAVE (".wav") sound file.SOUNDVIEW View and play sound with replay button.XPSOUND Demonstrate MATLAB's sound capability.NNSOUND Turn Neural Network Design sounds on and off.PLAYSND Implementation for SOUND.

    Sendo que cada palavra inicial, ressaltada em letra maiscula, corresponde a uma

    funo definida dentro do Matlab.

    O comando de ajuda which permite visualizar o caminho atual de uma funo

    qualquer com extenso '.m'. Por exemplo:

    >> which power -all

    Apresenta a seguinte sada:

    power is a built-in function.

  • Introduo ao MATLAB

    6

    /usr/matlab6/toolbox/finance/findemos/@demtseries/power.m %demtseries method/usr/matlab6/toolbox/ftseries/ftseries/@fints/power.m % fintsmethod/usr/matlab6/toolbox/symbolic/@sym/power.m % sym method/usr/matlab6/toolbox/matlab/ops/power.m % Shadowed

    Estes so os caminhos dos atuais mtodos sobrecarregados com o nome power. O smbolo % significa que o que est a esquerda nessa linha comentrio, equivale a ! em Fortran e a // em C++.

    Informaes adicionais do Matlab na Web, tais como fone/fax/e-mails, podem ser obtidas com o comando info.

    2.1 Editor/Depurador de programas A atual verso do Matlab apresenta um editor especfico para manipular arquivos de

    dados e executveis, alm de permitir a depurao de programas na linguagem do Matlab.

    Este editor conta com comandos do tipo break line, step into, etc. Tambm existem no

    Matlab comandos especficos para depurar um programa. Para acessar pela ajuda e

    conhecer estes comandos digite:

    >> help debug

    e em seguida pode-se fazer o help de qualquer um dos comandos mostrados.

    2.2 Comandos do UNIX/DOS possvel executar comandos do UNIX ou do DOS dentro do Matlab. Quando o

    comando simples basta digit-lo como se estivesse numa console do UNIX ou uma janela

    DOS no Windows. Por exemplo, ls, dir, cd, etc. Quando o comando mais complexo ou

    com um maior nmero de parmetros proceda como dado a seguir.

    Por exemplo, quer-se utilizar o editor pico no ambiente Linux:

    >> unix 'pico meu_programa.m' +

    quando sair deste editor retorna-se ao prompt '>>' do Matlab.

  • Introduo ao MATLAB

    7

    Por exemplo, quer-se apagar um arquivo dentro do ambiente Windows:

    >> dos 'del arquivo.dat' +

    2.3 Limitaes de memria recomendvel, quando se trabalha com programas ou algoritmos que utilizam

    grande quantidade de memria, verificar a priori se a memria alocada suficiente para

    evitar que em determinado momento da execuo o programa aborte por insuficincia de

    memria. Isto pode s vezes ser testado pelo dimensionamento dos arranjos que em

    determinado momento sero gerados. Tambm isto pode ser monitorado testando ou

    executando isoladamente aquelas partes do algoritmo que apresentaram maior consumo de

    memria.

    Sabe-se que no existe limitao computacional para a utilizao das ferramentas do

    Matlab a no ser quelas impostas pela mquina em que esta sendo executado. A este

    respeito existe o comando bench, que testa a priori a performance da mquina do usurio,

    comparando certos algoritmos, como por exemplo, a decomposio matricial LU dentre

    outros, e retornando o tempo de CPU esperado. Este comando sem argumentos retorna,

    depois de um tempo, uma lista de mquinas com diferentes estruturas, e os tempos de CPU

    que elas utilizam incluindo a mquina do usurio, para desta forma efetuar a comparao.

    3 Manipulao de matrizes, vetores e escalares Para o Matlab todas as variveis constituem-se em matrizes. Por exemplo, para definir

    texto procede-se da seguinte forma:

    >> texto='Esta uma frase exemplo';

    Este procedimento por si s define a varivel texto como um vetor de 24

    componentes ou equivalentemente uma matriz linha de tamanho 1x24. O comando:

    >> texto +

  • Introduo ao MATLAB

    8

    provoca a sada:

    texto =

    Esta uma frase exemplo

    ao passo do que o comando

    >> texto(24) +

    retorna a sada

    ans =o

    que corresponde a entrada ou letra na posio nmero 24, isto a ltima letra da frase. A

    mesma sada obtida com a varivel:

    >> texto(1,24) + ans =o

    Repare que a varivel ans (de answer) padro para o Matlab e utilizada sempre que

    um resultado, que retornado por alguma funo, no foi designado a nenhuma outra

    varivel. Para atribuir um valor de retorno a uma varivel basta digitar o nome da varivel

    seguida do sinal = esquerda da funo que retorna do valor ou cadeia de caracteres

    (string). O smbolo ; inibe a resposta de sada, exceto quando o comando utilizado seja

    para mostrar por exemplo grficos ou mensagens.

    Clculos elementares: exemplo

    >> bananas = 4;>> laranjas = 5;>> frutas = laranjas + bananas;>> preco_laranja = 2.5;>> preco_banana = 2;>>

    preco_medio=(laranja*preco_laranja+banana*preco_banana)/...frutas;

    Comando who

  • Introduo ao MATLAB

    9

    Mostra as variveis ativas do ambiente (atualmente definidas). Caso foram digitados

    todos os exemplos desde o inicio da seo 3 o comando who daria a seguinte sada:

    >> whoYour variables are:ans frutas preco_banana preco_mediobananas laranjas preco_laranja texto

    Para ter acesso ao valor de uma determinada varivel basta digitar o seu nome no

    prompt e dar . Caso a varivel digitada no tenha sido definida ou no exista

    dentro do ambiente ser emitido uma mensagem de erro. Sempre que uma operao ou

    comando no seja vlido dentro do Matlab ser visualizada uma mensagem de erro, da

    mesma forma se no existe memria suficiente para executar uma determinada operao.

    Comando whos

    Mostra as variveis do ambiente mais o tamanho e tipo: >> whos

    Name Size Bytes Classans 1x1 2 char arraybananas 1x1 8 double arrayfrutas 1x1 8 double arraylaranjas 1x1 8 double arraypreco_banana 1x1 8 double arraypreco_laranja 1x1 8 double arraypreco_medio 1x1 8 double arraytexto 1x24 48 char array

    Repare que uma varivel simples como bananas considerada como um arranjo de

    dimenses 1x1 (double).

    Comando clear

    Permite apagar variveis do ambiente. >> clear bananas

    Apaga a varivel bananas do ambiente, o comando who acusar a ausncia desta varivel.

    >> clear prec*

  • Introduo ao MATLAB

    10

    Apagara todas as variveis que se iniciam com as letras prec

    >> clear all

    ou simplesmente clear apaga todas as variveis do ambiente.

    3.1 Operaes bsicas: +, -, *, / Por exemplo, para definir uma matriz no se requer dimensionamento prvio, embora

    isto seja possvel.

    Existem vrias formas de se definir uma matriz. Por exemplo, os valores so

    inseridos por linhas, separadas estas por ; da seguinte maneira:

    >> A = [ 2 1 1;1 2 1;1 1 2] + A =2 1 11 2 11 1 2

    vlido separar as entradas de cada linha por vrgula ou com um espao. Se uma

    linha longa pode-se continuar a linha de uma matriz na linha seguinte do prompt, usando

    reticncias,

    >> B=[1 2 3 ... + 4;5 6 7 8; 9 ... + 10 11 12] + B =1 2 3 45 6 7 89 10 11 12

    Um outro exemplo onde cada determina uma linha da matriz:

    C = [7 1 2 + 1 7 2 + 1 2 7] + C =3 1 22 3 11 2 3

  • Introduo ao MATLAB

    11

    J que qualquer dado numrico considerado um arranjo, os smbolos +, -, *, / so

    designados como operaes matriciais ao passo que para operaes com escalares podem

    ser utilizados os smbolos .- , .+ , .* , ./ . Quando o arranjo um nmero pode-se usar um ou

    outro smbolo indistintamente. Usando as matrizes A, B e C definidas acima observem os

    seguintes exemplos:

    >> A*C + ans =

    9 7 88 9 77 8 9

    Produtos entre matrizes de dimenses distintas so possveis desde que respeitadas

    as dimenses para o produto, por exemplo, A*B bem definida, j B*A no permitido

    dado que o nmero de colunas de B 4 e o nmero de linhas de A 3.

    >> MAT = A.*C+ ans =

    6 1 22 6 11 2 6

    Isto corresponde a um produto componente a componente, isto , a matriz MAT

    cujas entradas so MAT(i,j)=A(i,j)*C(i,j).

    >> A+1 + ans =

    3 2 22 3 22 2 3

    As formas A.+1, A(1,1).+1 no so validas ao passo que a forma 5.+1 aceita.

    >> A*5 % o mesmo que A.*5 + ans =

    10 5 55 10 55 5 10

    >> C/A % igual C vezes inversa de A ou A*inv(C) +

  • Introduo ao MATLAB

    12

    ans =1.5 -0.5 0.50.5 1.5 -0.5-0.5 0.5 1.5

    >> C./A % a matriz definida por C(i,j)/A(i,j)ans =

    1.5 1 22 1.5 11 2 1.5

    Outras operaes ainda so permitidas:

    >> z=[20 21 22];>> y=[A;z] % agrega uma quarta linha + ans =

    2 1 11 2 11 1 220 21 22

    Esta forma til para se trabalhar com sub matrizes ou matrizes em blocos.

    Para atribuir um valor a uma determinada entrada de uma matriz:

    >> A(2,3) = 0 + ans =

    2 1 11 2 01 1 2

    Deve-se ter um cuidado especial quando se trabalha com indexao matricial, pois

    uma atribuio como:

    >> A(4,4) = 100ans =

    2 1 1 01 2 1 01 1 2 00 0 0 100

    pode resultar em um redimensionamento indesejado da matriz A, por padro os valores

    restantes so preenchidos com zeros. Outras formas de manipulao de matrizes sero

    observadas no captulo 5.

  • Introduo ao MATLAB

    13

    3.2 Operador dois pontos ':' til considerar vetores construdos com valores contidos em intervalos. Duas

    formas podem ser usadas:

    vet = valor inicial : valor final ; %ouvet = valor inicial : incremento : valor final ;

    Exemplos: >> v = 3:7 + v =

    3 4 5 6 7>> v = 3:1.5:7 + v =

    3.0 4.5 7.0

    3.2.1 Outros usos do operador dois pontos

    Pode-se selecionar sub matrizes de uma matriz utilizando o operador dois pontos.

    Considerando a matriz B definida acima, sub1 formada por todas as linhas das colunas 2 e

    3 de B.

    >> sub1 = B(:,2:3)ans =

    2 36 710 11

    A matriz sub2 definida pelas entradas de B das linhas 2 e 3 interceptadas com as

    colunas 1 at 3.

    >> sub2 = B(2:3,1:3)ans =

    5 6 79 10 11

    Matrizes vazias podem ser definidas da seguinte maneira:

    >> V = [];>> V = 4:-1:5;

  • Introduo ao MATLAB

    14

    3.3 Clculos fundamentais e matrizes especiais Pode-se transformar uma matriz em vetor coluna da seguinte maneira:

    >> clear % apaga-se todas as variveis definidas at agora>> a=[1 2;3 4];%matriz 2x2>> b=a(:) + b =

    1234

    Para saber a dimenso de uma matriz (de agora em diante supe-se que na linha do

    prompt >> digitou-se a tecla )

    >> size(a)ans =

    2 2>> f=1:3;%vetor dos inteiros de 1 at 3>> b=f';%transposta de f>> a=b*f %matriz 3x3

    a =1 2 32 4 6

    3 6 9

    >> b = 3*a; % redefine b com componentes b(i,j)=3*a(i,j)>> c = a/5; % c definida por : c(i,j)=a(i,j)/5>> d =a.^ 2; % d define-se como : d(i,j)=a(i,j)2>> e = 3.^ a; % e definida como: e(i,j)=3a(i,j)

    Potncias escalares usando matrizes:

    >> a=[1 2 3];>> b=[2 2 2];>> a.^ b

    ans =1 4 9

    O comando zeros aloca uma matriz de zeros de um dado tamanho.

    >> A=zeros(2); % aloca uma matriz 2x2 de zeros

  • Introduo ao MATLAB

    15

    >> B = zeros(3,2);% a matriz de zeros de tamanho 3x2>> C = ones(2,3);%matriz de uns de dimenses 2x3>> D = eye(4);%matriz identidade de ordem 4

    3.3.1 Constantes predefinidas

    Existem no Matlab certos nomes de variveis que assumem valores default. Algumas destas constantes so:

    pi : constante de proporo entre o permetro da circunferncia e seu dimetro

    i,j : nmero imaginrio igual a raiz quadrada de -1

    inf : denota o infinito na reta

    NaN : quando o resultado de uma operao errada no um nmero

    date : retorna a data atual

    clock : retorna a hora no formato de vetor: ano ms dia hora minuto segundo

    ans : varivel de sada default

    Apesar das caractersticas especiais destas variveis elas no so proibidas no sentido

    de poderem ser definidas pelo usurio. Se isto acontecer o valor atual destas variveis ser

    aquele definido pelo usurio. Depois de aplicado o comando clear, sobre a constante'

    redefinida pelo usurio, ela assumira o seu valor default como constante predefinida pelo

    Matlab.

    Assim por exemplo, quando se trabalha com nmeros complexos, deve-se evitar o uso

    das constantes i, j para efetuar laos tipo for, pois isso ocasionar erros no clculo com

    nmeros complexos do tipo a+b*i, dado que o imaginrio i assumira valores inteiros e

    deixaria de valer a raiz quadrada de -1. Um outro exemplo:

    >> dateans =

    21-Nov-2001>> date = 1;>> datedate =

    1>> clear date>> dateans =

    21-Nov-2001

  • Introduo ao MATLAB

    16

    4 Funes elementares Nesta seo sero apresentados comandos para efetuar chamadas das funes

    matemticas elementares, como funes analticas trigonomtricas, exponenciais,

    logartmicas, que podem ser usadas tanto em escalares como em vetores e matrizes. No

    Matlab trabalha-se com listas numricas, portanto para se calcular o valor de uma funo

    conhecida ou definida, em uma varivel x, deve-se conhecer o valor x ou a lista x. Se x um

    nmero a funo retornar um nmero. Se x uma lista, a funo tambm retornara uma

    lista de valores, os correspondentes valores da funo para cada valor da lista. Por exemplo:

    >> x=[.1 .2 .3];>> sin(x) %funo trigonomtrica senoans =

    0.0998 0.1987 0.2955

    Isto , [sin(.1) sin(.2) sin(.3)]. Ainda se x uma matriz qualquer o resultado de b =

    sin(x) tambm uma matriz cujas componentes so b(i,j) = sin(x(i,j)).

    4.1 Funes bsicas Apresentam-se a seguir algumas funes simples que podem ser usadas tanto em

    escalares como em matrizes ou vetores.

    >> abs(x); % valor absoluto da varivel x>> sqrt(x); % raiz quadrada de x>> round(x);% arredonda x para o inteiro mais prximo>> fix(x); % arredonda x para o inteiro mais prximo de zero>> floor(x);% arredonda x para o inteiro mais prximo de >> ceil(x); % arredonda x para o inteiro mais prximo de +>> sign(x); % sinal de x, +1 ou -1>> rem(x); % resto de x:y>> exp(x); % exponencial de x>> log(x); % funo logaritmo com base e=2.7182818284590...>> exp(1), %(Neperiano)>> log10(5);%logaritmo em base 10 de 5

  • Introduo ao MATLAB

    17

    4.1.1 Exemplos simples

    Defina as seguintes matrizes:

    >> a = -2.6;>> A = [1 2 3];>> B = [2 2 2];>> C = [2.6 1.3 -3.2 3.5];

    ento os seguintes clculos so obtidos:

    >> x = round(a) % inteiro mais prximox =

    -3>> x=fix(a) % inteiro mais prximo de zerox =

    -2>> x=floor(C) % inteiro mais prximo de +x =

    2 1 -4 3>> x = ceil(C) % inteiro mais prximo de +x =

    3 2 -3 4>> x = sign(C) % sinalx =

    1 1 -1 1>> abs(a) % valor absolutox =

    2.6>> x = sqrt(C) % raiz quadradax =

    1.6125 1.140 0 + 1.7889i 1.8708

    No caso do nmero negativo o terceiro valor resulta num complexo.

    >> x = rem(7.5,2) % resto da diviso 7.5/2x =

    1.5>> x = rem(A,B) % resto da diviso entre as componentesx =

    1 0 1

  • Introduo ao MATLAB

    18

    No caso do argumento de entrada ser uma lista/matriz, cada elemento da lista (ou

    matriz) resposta a soluo dada pela funo que correspondente ao elemento na mesma

    posio na lista de entrada. Por exemplo:

    >> rem( [3 3 3;4 4 4;5 5 5] , [1 2 3;1 2 3;1 2 3] )ans =0 1 00 0 10 1 2

    Outros exemplos, diviso a esquerda e a direita.

    >> u=[1 2 3];>> v=[2 2 2];>> u./v; % vetor contendo as divises ui/vi>> v.\u; % o mesmo resultado anterior

    A hierarquia entre operaes aritmticas tais como operaes entre parnteses,

    potenciao, radicalizao, soma, produto, etc a usual.

    4.1.2 Nmeros complexos

    Na prxima seo ser preciso o conceito de nmero complexo. Como citado o

    valor padro de i e j a raiz quadrada de -1. Logo, naturalmente, um nmero complexo

    define-se da seguinte maneira (por exemplo):

    >> c1 = 3-2*i;>> c2 = -1/2+j;

    As operaes aritmticas podem ser usadas livremente.

    >> c1+c2;>> c1*c2;>> c1/c2; O produto c1*c2 corresponde ao produto de dois binmios com a restrio de que i*i=j*j=-1. O nmero complexo 1/c2 definido tal que c2*(1/c2)=1. As partes real e imaginria de c1 so obtidas com: >> real(c1);

  • Introduo ao MATLAB

    19

    >> imag(c1);

    Outras funes envolvendo complexos so exemplificadas a seguir. O valor

    absoluto de um complexo a+b*i a norma de (a,b).

    >> abs(c1)ans =

    3.6056>> conj(2+3*j); % o complexo conjugado de 2+3*j, isto , 2-

    %3*i

    A forma polar de um complexo tambm pode ser obtida.

    >> a=1;>> b=2;>> x = a+b*i;>> r=abs(x);>> theta = angle(x); % retorna o ngulo polar do vetor (a,b)

    %ou atan( b/a)>> y = r*exp(theta*i); % forma polar>> z = r*(cos(theta)+i*sin(theta)); % igual a y e igual a x

    %(formas equivalentes de um complexo)

    Exemplo simples de clculo com utilizao da funo tangente.

    >> A = [-pi/5 , 0;1+2*i , 3*pi/2+0.001];>> tan(A)ans =

    1.0e+02 *-0.0073 00.0003 + 0.0101*i -10.0000

    O primeiro valor (1.0e+02) indica que dever multiplicar-se o nmero 100 a matriz

    2x2 que vem em seguida. Para aumentar a preciso na resposta numrica aplique-se o

    comando:

    >> format long; % preciso da ordem 10-15>> 1/pians =

    0.31830988618379 Por padro a preciso mostrada de 5 dgitos que recuperada com o comando:

  • Introduo ao MATLAB

    20

    >> format short; % ou simplesmente format designa a preciso% default

    >> ans % varivel de sada padro que guarda o ltimo%resultado

    ans =0.3183

    Para maiores informaes do comando format digite help format.

    4.1.3 Comandos de converso

    Existe um nmero grande de funes que permite a converso entre diferentes tipos

    de dados. Algumas destas funes so exemplificadas a seguir.

    >> letra = num2str(2); % permite manipular um nmero como um

    % caractere

    Isto uma abreviao das palavras numeric to string. De tal forma que a varivel

    letra no mais um nmero e sim um caractere ao passo que o resultado da operao:

    >> letra+1ans =

    51 no 3 que seria a soma 2+1.

    >> str2num(letra)+1 % converte o contedo da varivel letra,%isto , o caractere 2 para o nmero 2 soma-lhe 1

    ans =3

    >> dec2hex(11); % converte o decimal 11 para o sistemahexadecimal (B)>> hex2dec('F'); % converte o valor hexadecimal para o

    %decimal (15)

    4.2 Funes trigonomtricas Os nmeros contidos na varivel argumento destas funes podem assumir qualquer

    valor real ou complexo, considerado este em radianos.

  • Introduo ao MATLAB

    21

    >> sin(x); %funo trigonomtrica seno de um ngulo>> cos(x); %funo coseno>> tan(x); %tangente de x>> asin(x);%arcoseno ou funo inversa do seno do argumento x>> acos(x);%arco coseno ou inversa do coseno de x>> atan(x);%inversa da tangente de x As funes csc(x), sec(x), cot(x), acsc(x), asec(x), acot(x) definem as funes

    cossecante, secante e cotangente de x e suas inversas respectivamente.

    Para as funes sin(x) e cos(x), se o argumento real este no limitado, isto

    [ ]+ ,ijx , se x complexo a funes sin(x), cos(x), tan(x) no esto definidas para qualquer complexo. A funo tan(x) indefinida para valores da forma (2*n+1)*pi/2, j

    que tan(x)=sin(x)/cos(x) e cos((2*n+1)*pi/2) nulo para n inteiro. Por exemplo:

    >> A = [pi -pi;pi/2 -pi/2];>> sin(A)ans =

    0.0000 -0.00001.0000 -1.0000

    >> sin(1000+i)ans =

    1.2759 + 0.6609i>> sin(1000*i)ans =

    NaN + Inf i Os smbolos NaN e Inf foram mencionados na subseo 3.3.1. As funes asin(x),

    acos(x) e atan(x) esto definidas para qualquer valor x real. Se x est no intervalo [-1,1] o

    resultado real, caso contrrio complexo.

    4.3 Funes hiperblicas: nomenclatura De forma semelhante s funes trigonomtricas, definem-se os comandos para

    calcular funes hiperblicas.

    >> sinh(x); % seno hiperblico de x>> cosh(x); % coseno hiperblico de x>> tanh(x); % tangente hiperblica de x

  • Introduo ao MATLAB

    22

    >> asinh(x); % inversa do seno hiperblico de x>> acosh(x); % inversa do coseno hiperblico de x>> atanh(x); % inversa da tangente hiperblica de x

    Com definies equivalentes respectivamente para csch(x), sech(x), coth(x), acsch(x),

    asech(x) e acoth(x).

    5 Controle de fluxo As funes executveis escritas na linguagem utilizada pelo Matlab esto

    implementadas em arquivos com extenso m. Suponha que o arquivo exemplo.m

    contenha uma srie de linhas de comandos ou funes do Matlab, ento quando este

    arquivo chamado sem extenso do prompt do Matlab:

    >> exemplo +

    o Matlab entender que este arquivo executvel e assim cada linha ser interpretada na

    seqncia de acordo com a sua funo.

    Da mesma forma um mtodo ou sub-rotina pode ser definido dentro de um arquivo

    com extenso .m contendo argumentos de entrada e de sada. Por exemplo, cria-se o

    arquivo circum.m contendo as seguintes linhas:

    %Esta funo calcula o permetro de uma circunferncia de% raio R. Si R uma matriz, circum(R) retornar uma matriz% contendo os permetros das circunferncias de raios iguais% aos respectivos valores da matriz Rfunction C = circum(R)C = 2*pi*R;

    As linhas acima correspondem ao arquivo circum.m. Para utilizar est funo basta

    digitar:

    >> circum(2)ans =

    12.5664Em caso de ser R um vetor:>> R = [1 2 3];

  • Introduo ao MATLAB

    23

    >> circum(R)ans =

    6.2832 12.5664 18.8496

    As primeiras linhas iniciadas com o smbolo % constituem uma valiosa fonte de

    informaes a respeito da funcionalidade do arquivo. Para ter acesso a elas no necessrio

    abrir o arquivo com um editor, basta digitar:

    >> help circum

    ento as primeiras linhas juntas de comentrios sero mostradas. Usando lookfor como

    exemplo, obtm-se a sada:

    >> lookfor permetrocircun.m;%Esta funo calcula o permetro de uma

    %circunferncia de raio R

    Este comando mostra s a primeira linha do arquivo, caso esta contenha a palavra

    permetro, alem do nome do arquivo. Por isto importante documentar de forma precisa

    esta primeira linha, caso o nmero de funes venha a aumentar consideravelmente.

    No necessrio que o nome do arquivo seja igual ao nome da function dentro do

    mesmo.

    Quando a funo tem mais de um argumento de sada, digamos rea, volume, ento

    estes devem vir entre colchetes, por exemplo, a seguinte funo definida no arquivo

    cilindro.m calcula a rea e o volume de um cilindro.

    %Calcula-se a rea e volume de um cilindro%de altura h e raio rfunction [area,volume] = cilindro(h,r)area = 2*pi*r*h+2*pi*r^ 2;volume = pi*r^ 2*h; Para chamar esta funo seja do prompt ou de outro executvel .m, basta digitar uma

    chamada na forma exemplificada a seguir:

    [a,v] = cilindro(0.5,1)

  • Introduo ao MATLAB

    24

    ento, as variveis a e v contero as informaes da rea e do volume do cilindro de h=0.5

    e r=1.

    Observaes

    Para que o arquivo .m seja localizado pelo Matlab, este deve se encontrar no

    diretrio atual. O comando pwd do Unix fornecer o caminho atual, por exemplo:

    >> pwd;/a/home/cenapad/cedric/MATLAB Se o arquivo .m, a ser interpretado pelo Matlab, estiver em outro diretrio diferente do

    atual, digamos /u/cedric/programas, ento o Matlab ter acesso a ele declarando o caminho

    com o comando path da seguinte maneira.

    >> path(path,'/u/cedric/programas');%no Unix>> path(path,'c:\cedric\programas');%no Windows

    5.1 Regras para escrever uma function conveniente observar as seguintes caractersticas na definio de uma funo:

    Escrever comentrios a respeito da funo, tendo especial nfase na primeira linha de

    comentrio.

    A primeira linha executvel deve conter a palavra function seguida dos argumentos

    de sada entre colchetes, se forem mais de um, o sinal = e o nome da funo com

    argumentos de entrada entre parnteses.

    Todos os argumentos de retorno devem estar definidos dentro do corpo da funo.

    Qualquer erro cometido dentro do arquivo .m ser acusado quando este for

    executado, retornando o formato de um erro de compilao.

    5.2 Operadores relacionais Estes operadores so similares aqueles usados em uma linguagem de programao tal

    como C ou Fortran.

  • Introduo ao MATLAB

    25

    Operador Descrio

    < menor do que

    maior que

    >= maior ou igual

    = = igual no sentido de condio/comparao

    ~ = no igual, distinto

    Exemplos:

    >> 1 1>2ans =

    0

    No caso do uso de arranjos.

    >> a = [1 2;3 4];>> b = [0 2;4 -5 ];>> a ~ = bans =

    1 01 1

    Isto quer dizer que: 1 distinto de 0 verdadeiro, 2 distinto de 2 falso, 3 distinto de

    4 verdadeiro e 4 distinto de -5 verdadeiro. Ao se comparar caracteres tambm ocorre

    algo semelhante, por exemplo:

    >> texto1='teste';>> texto2='texte';text01==text2ans =

    1 1 0 1 1

  • Introduo ao MATLAB

    26

    Esta forma efetua uma comparao caractere por caractere, posio a posio. Se as

    letras so iguais retorna 1, se no retorna 0. Um comando mais direto para saber se dois

    textos so iguais na sua totalidade :

    >> strcmp(texto1,'teste');ans =

    1

    Isto , o contedo da varivel texto1 exatamente o conjunto dos caracteres da

    palavra teste.

    5.3 Operadores lgicos So amplamente utilizados em expresses condicionais do tipo if-else.

    Operador Descrio

    & e

    | ou

    ~ no

    Por exemplo:

    >> a=2; b=0; c=1; % possvel definir variveis em uma mesma

    %linha>> a ~ (b= =c | c

  • Introduo ao MATLAB

    27

    A ltima expresso uma negao que equivale a questionar ou afirmar: b distinto

    de c e c maior ou igual que a? Isto falso devido a que c> a ~ = c | b < cans =

    1

    A resposta que a expresso verdadeira. Para isto basta que uma das comparaes

    seja verdadeira, isto , que a seja distinto de c ou que b seja menor do que c.

    5.4 Lao estrutural if-else-end Com os operadores anteriores estamos prontos para criar programas com a

    linguagem fornecida pelo Matlab. Os exemplos do uso destas estruturas em nada diferem

    daquelas utilizadas em linguagens como C ou Fortran.

    >> a=rand; % rand retorna um nmero aleatrio entre 0 e 1>> if a >= .5

    disp('O valor aleatrio maior ou igual do que1/2');%comando displayelse

    disp('O valor aleatrio menor que 1/2');%permite%visualizar uma mensagem durante a execuoend O valor aleatrio maior ou igual do que .

    Observaes:

    O lao foi iniciado em modo interativo.

    Enquanto o lao no foi fechado, com o end final, este no foi executado nem o

    prompt >> foi liberado.

    No exemplo o valor de a foi a=0.6068, assim o fluxo do programa passou pela

    primeira bifurcao e a mensagem correspondente foi mostrada. Repare que a varivel

    default ans no foi visualizada.

  • Introduo ao MATLAB

    28

    A estrutura de if 's pode ser aumentada da seguinte maneira. Num arquivo .m

    ficaria.

    val1 = input('Entre um nmero : ');%permite a entrada de va-%lores via teclado em modo interactivo

    val2 = input('Entre outro nmero : ');if val1val2

    disp('O segundo valor maior que o primeiro');else

    disp('Os valores so iguais');end possvel fazer uso da estrutura if-else-end de modo aninhado, como mostra o

    prximo exemplo.

    %exemplo de if-else aninhadodisp('Este programa testa si dois nmeros so divisveis');num=input('Entre numerador');den=input('Entre denominador');if(num>=den)

    if(rem(num,den)==0) % o resto nulo?if(num==den) % numerador e denominador iguais?

    disp('Os nmeros so iguais');else

    disp('Eles so divisveis');end

    else % o resto diferente de zerodisp('Eles no so divisiveis');

    endelse % caso num

  • Introduo ao MATLAB

    29

    y=0.0328084*x;elseif (strcmp(unidade1,'pes') & strcmp(unidade2,'cen'))

    y=30.84*x;elseif (strcmp(unidade1,'pol') & strcmp(unidade2,'pes'))

    y=x/12;elseif (strcmp(unidade1,'pes') & strcmp(unidade2,'pol'))

    y=12*x;else

    disp('Smbolo da unidade no definido');end O caso acima pode tambm ser refeito utilizando a estrutura switch-case-otherwise-end,

    como dado na prxima subseo.

    5.5 Estrutura switch-case-otherwise-end Outra forma padro de resolver uma tomada de decises exemplificada a seguir.

    % Converso entre unidades centmetros, polegas e psfprintf('\n\n');%pula duas linhasdisp('Converso entre unidades: centmetros, polegadas e ...ps');fprintf('\n');x=input('Entre valor numrico a converter : ');fprintf('\n\n');disp('Os seguintes so sistemas vlidos de converso:');disp('cen-pol ; pol-cen ; cen-pes ; pes-cen ; pol-pes ;...pes-pol');fprintf('\n');sistema = input('entre opo entre aspas> Entre sistema de...conversao : ');switch sistema

    case 'cen-pol'y=0.393701*x;disp([num2str(x),' centmetros = ',num2str(y),'

    polegadas']);case 'pol-cen'

    y=2.54*x;disp([num2str(x),' polegadas = ',num2str(y),'

    centmetros']);case 'cen-pes'

    y=0.0328084*x;disp([num2str(x),' centmetros = ',num2str(y),' ps']);

    case 'pes-cen'y=30.48*x;disp([num2str(x),' ps = ',num2str(y),' centimetros']);

  • Introduo ao MATLAB

    30

    case 'pol-pes'y=x/12;disp([num2str(x),' polegadas = ',num2str(y),' ps']);

    case 'pes-pol'y=12*x;disp([num2str(x),' ps = ',num2str(y),' polegadas']);

    otherwise disp('Unidade desconhecida');end

    5.6 Estrutura while-end O seguinte exemplo usa o comando while-end e permite achar um nmero pequeno que a

    maquina considera no nulo. Este nmero uma constante do Matlab denotada por eps.

    %Este programa calcula a constante epsfprintf('\n\n');disp('O lao while-end acha um nmero pequeno EPS2 tal que...1+EPS2/2 = 1');EPS2 = 1;num = 1;% contador do nmero de laoswhile (1+EPS2) > 1

    EPS2 = EPS2/2;num = num+1;

    endEPS2 = 2*EPS2;disp(['EPS2 = ',num2str(EPS2)]);disp(['nmero de lacos = ',num2str(num)]);disp('Faa os testes lgicos : EPS2+1>1 e EPS2/2+1>1');

    5.7 Estrutura for-end Para o valor da varivel indicial do lao deve ser dado um valor inicial, um

    incremento e um valor final para o termino do lao.

    seg = input('Contagem regressiva: tempo -> ');fprintf('\n');disp('* Aguardando o inicio da contagem *');fprintf('\n');tic;%marca o inicio do tempocont = 0;for k=seg:-1:0,

    cont = cont+1;while toc < cont,end

  • Introduo ao MATLAB

    31

    disp(['Contagem regressiva : ',num2str(k)]);end

    6 Operaes sobre matrizes O Matlab conta com algumas operaes especiais sobre matrizes que se tornam

    necessrias quando se trabalha matematicamente com elas.

    >> A =rand(5); % 5x5>> A';%transposta de A>> det(A);%determinante de uma matriz>> inv(A);%inversa de A, quando esta existe>> A-1;%inversa de A>> diag(A);%gera um vetor coluna com a diagonal de A>> C=[1 0 2 1 1];>> diag(C);%gera uma matriz 5x5 cuja diagonal C>> v1=[1 2 3 4 5];>> v2=[6 7 8 9 0];>> sum(v1.*v2)=1*6+2*7+3*8+4*9+5*0;%somatria de produtos>> %ou produto escalar de dois vetores>> B = randn(3,5);%matriz aleatoria 3x5>> B.A;%produto de matrizes, 3x5-5x5>> v3=[1 3 5 7 9]';%vetor coluna>> v4=[0 2 4 6 8]';%vetor coluna>> sum(v1.*v2);%somatria de produtos (vetores linhas)>> sum(v3.*v4);%somatria de produtos (vetores colunas)>> sum(v1'.*v3);%somatria de produtos>> sum(v1.*v4');%somatria de produtos>> C=randn(5,3);%matriz aleatoria 5x3

    As seguintes operaes so validas:

    >> 2*A+A.A;>> C'*A;%(3x5)-(5x5)>> B*C; C*B; % 3x5-5x3, 5x3-3x5>> B*B'; % 3x5-5x3>> A-1*A;%si existe a inversa o resultado a identidade>> (C'*A)-1; % caso a inversa existe (3x5-5x5)>> (B'*C')-1*(A'*A); % 5x3, 3x5, 5x5, 5x5

    6.1 Outras funes teis Existem outras operaes especiais sobre matrizes. Algumas delas so dadas a seguir.

    Considerando as definies dadas anteriormente para as matrizes A, B e C.

  • Introduo ao MATLAB

    32

    >> rot90(A);%rotao de 90 graus da matriz A>> fliplr(A);%permuta as colunas primeira e ltima de A>> flipud(B);%permuta as linhas primeira e ltima de B>> D = reshape(C,4,2);%reescreve C com diferentes dimenses>> E = reshape(B,6,7);% reescreve B preenchendo com zeros

    % as novas posies>> F = triu(A);% reescreve A preenchendo com zeros

    % a parte triangular superior>> G = tril(A);%G a parte triangular inferior de A

    7 Medidas estatsticas No prximo exemplo constri-se uma matriz aleatoriamente onde as colunas

    correspondem as notas de uma turma de 13 alunos, cada coluna representa uma matria. As

    linhas representam as notas de cada aluno.

    %Este exemplo calcula medidas estatsticas relativas as notas%de 6 matrias de uma turma de 13 alunosfor i=1:13,

    for j=1:6,TURMA(i,j)=100*rand; % valores entre 0 e 100

    endendmedia_turma = mean(TURMA); %media por matria (turma toda)media_portugues = mean(TURMA(:,3));%mdia das notas da coluna3[nota_minima,numero_alunos] = min(TURMA);%nota mnima de cada

    %matriamat = TURMA(:,1); %primeira coluna da matriz TURMA[ordem_ascendente,num] = sort(mat); %ordem ascendente dovetor mat

    %num o nmero do aluno na lista[nota_maxima,numero_alunos] = max(TURMA); %nota mxima decada

    % matria e o nmero do aluno (o primeiro que%achar)

    std(mat);%desvio padro da primeira matriahist(nota_minima);%histograma (10 barras por default) figura. [n,m] =hist(nota_minima);%n=altura, m = centro da barrahist(nota_minima,3);%histograma com 3 barras

    [n,m] = hist(nota_minima,3);

  • Introduo ao MATLAB

    33

    10 20 30 40 50 60 70 80 0

    0.5

    1

    1.5

    2

    2.5

    3

    3.5

    4

    4.5

    5

    Notas divididas em intervalos

    Nm

    ero

    de a

    luno

    s qu

    e tir

    aram

    a n

    ota

    no in

    terv

    alo

    Figura 1: Grfico de barras: histograma

    8 Grficos Para obter grficos em 2D usa-se o comando plot. Este comando permite uma

    variedade de argumentos de entrada. Estes argumentos permitem adicionar uma srie de

    opes sada grfica como ttulo para os eixos, ttulo para o grfico, opes para o tipo de

    letras, tamanho, cores. possvel a superposio de grficos ou obter vrios grficos em

    uma mesma janela. A seguir sero exemplificados estas opes, com vrios grficos.

    Exemplo simples:

    >> x=0:0.02*pi:2*pi;>> y = sin(x);>> z = cos(x);>> plot(x,y);%grfico do seno de x>> hold on;%permite a sada do prximo grfico>> %na mesma janela que o anterior, figura 2>> plot(x,z);%grfico do coseno de x>> plot(x,y,x,z);%grafica simultaneamente seno e coseno namesma janela

  • Introduo ao MATLAB

    34

    0 1 2 3 4 5 6 7-1

    -0.8

    -0.6

    -0.4

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

    Figura 2: Comando hold on : permite plotar vrias figuras numa mesma janela

    Com o comando hold on todas as figuras posteriores sero desenhadas na ltima

    janela (em justaposio). A diferena do ltimo comando acima com o comando hold on

    que o primeiro graficar somente as funes y e z na mesma janela. O prximo exemplo

    apresenta outras opes.

    >> x = lispace(0,2*pi,30);%30 divises do intervalo [0,2*pi]>> y=sin(x);>> plot(x,y,'-');%o trao da grfica sin(x) pontilhado,

    %figura>> z = cos(x);>> plot(x,y,'b:p',x,z,'c-',x,z,'m+');

    As opes b:p, c-, m+ esto indicadas na tabela a seguir. A combinao b:p indica

    que os pontos do grfico de sin(x) so identificados com um pentagrama (letra p), veja

    figura 4, os pontos sero unidos por uma linha pontilhada, indicado por dois pontos :,

    tanto os pontos como a linha sero mostradas em azul, indicado pela letra b. A opo c-

    indica que o grfico de cos(x) ser mostrado com uma linha contnua, indicado com o trao

  • Introduo ao MATLAB

    35

    -, de cor ciano, indicado com a letra c. O prximo exemplo permite modificar o fundo da

    janela do grfico, controlar o tamanho do intervalo, tanto nos eixos x como y. Este mesmo

    exemplo trabalha com ttulos e o tamanho da fonte e tipo de letra, como negrito, itlico,

    normal.

    0 1 2 3 4 5 6 7-1

    -0.8

    -0.6

    -0.4

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

    Figura 3: Funo sin(x) : traado pontilhado

    Considerando o mesmo intervalo anterior assim como as funes seno e co-seno,

    ainda define-se:

    >> t = tan(x);%tangente de x>> ct = cot(x);%cotangente de x>> set(gcf,'Color',[1 1 1]);%fundo branco>> plot(x,y,'r*',x,z,'mx',x,t,'bo-',x,ct,'kp-');

    Na ltima linha os pontos (x,sin(x)) so plotados com asteriscos em vermelho. Os

    pontos (x,cos(x)) so plotados com crculos brancos e estes unidos por uma linha contnua

    de cor branco. Os pontos da curva cot(x) so desenhados como pentagramas e unidos com

    uma linha tracejada de cor preta.

  • Introduo ao MATLAB

    36

    >> axis([0 2.5 -3.5 3.5]);

    A ltima linha limita o comprimento dos intervalos do eixo x e do eixo y. O eixo x

    visualizado entre 0 e 2.5 e o eixo y entre -3.5 e 3.5.

    >> grid;%cria uma grade superposta ao grfico atual>> title('Funes Trigonomtricas','FontSize',14,...'Fontweight','Bold');

    0 1 2 3 4 5 6 7-1

    -0.8

    -0.6

    -0.4

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

    Figura 4: Grficos superpostos com opes distintas de pontos e traado

    Esta ltima linha adiciona o ttulo Funes trigonomtricas na parte superior da

    janela do grfico, com um tamanho 14 de fonte tipo negrito.

    >> xlabel('\Tetha','FontSize',14,'Fontweight','Bold',...'FontAngle','normal');>> ylabel('Funes','FontSize',14,'Fontweight','Bold',...'FontAngle','italic');

    Estas linhas agregam ttulos a ambos os eixos x e y. A sada para \tetha ser a letra

    grega que leva este nome. Escolhem-se letras em negrito de tamanho 14 pontos, normal e

    itlico respectivamente. Define-se:

  • Introduo ao MATLAB

    37

    0 1 2 3 4 5 6

    -3

    -2

    -1

    0

    1

    2

    3

    Funes trigonomtricas

    Fun

    es

    Texto

    sin( ) cos( ) tan( ) cot( )

    Figura 5: Opes de representao grfica simultneas

    >> legend('sin(\tetha)','cos(\tetha)','tan(\tetha)',...'cot(\tetha)');

    Esta ltima opo provoca a apario de um pequeno retngulo na parte superior

    direita da janela do grfico, que identifica os grficos e a forma de representao dos

    mesmos, segundo a cor, tipo de trao e ponto adotado pela ordem de apario no comando

    plot, da esquerda para direita respectivamente, figura 5. A seqncia \Tetha visualizada

    como sendo a letra grega correspondente, figura 5.

    Um outro comando usado para introduzir texto dentro do grfico no ponto

    coordenado, digamos (x,y), Texto. Por exemplo, a linha:

    >> text(0.5,1,'\rightarrow Texo');

    Coloca uma seta apontando a direita para a palavra Texto (-> Texto), este texto ser

    colocado no ponto (1/2,1). Este tipo de comando permite tambm utilizar letras gregas e

    smbolos matemticos no formato latex como por exemplo \delta, \nabla etc.

  • Introduo ao MATLAB

    38

    8.1 Comando subplot O comando subplot permite visualizar vrias grficas separadas dentro de uma

    mesma janela. Por exemplo:

    >> x = linspace(0,2*pi,30);>> y = sin(x);>> z = cos(x);>> a = 2*sin(x).*(cos(x);>> b = sin(x)./(cos(x)+eps);>> subplot(2,2,1);%reserva uma janela para 4 grficos

    0 2 4 6-1

    -0.5

    0

    0.5

    1sin(x)

    0 2 4 6-1

    -0.5

    0

    0.5

    1cos(x)

    0 2 4 6-1

    -0.5

    0

    0.5

    12 sin(x) cos(x)

    0 2 4 6-20

    -10

    0

    10

    20sin(x)/cos(x)

    Figura 6: Subgrficos: arranjo grfico de dimenses 2 x 2

    Os argumentos esto designando uma mesma janela para plotar os seguintes 4

    grficos. Os primeiros dois argumentos indicam o nmero de grficos que podem ser

    alocados numa mesma janela. Neste caso 4 grficos dispostos em uma ordenao 2x2.

    Ento os valores 2,2,1 indicam que o prximo grfico a ser plotado ser visualizado na

    parte superior esquerda da janela, o que indicado pelo argumento 1.

  • Introduo ao MATLAB

    39

    0 2 4 60

    0.5

    1

    1.5

    2

    Escala decimal em X e Y

    Funao: 1-seno(X)

    1000

    0.5

    1

    1.5

    2

    Funo: 1-seno(X)

    Escala log em X

    0 2 4 6

    10-2

    10-1

    100

    Escala log em Y

    Funo: 1-seno(X)

    100

    10-2

    10-1

    100

    Escala log em X e log em Y

    Funo: 1-seno(X)

    Figura 7: Grficos utilizando escalas logartmicas

    >> plot(x,y);%sin(x) ser visualizada na parte superioresquerda da janela>> axis([0 2*pi -1 1]);%intervalos para ambos os eixos x e yrespectivamente>> title('sin(x)');%O titulo para o ltimo grfico: y =sin(x)>> subplot(2,2,2);%o o prximo grfico sair na posio acimaa direita>> plot(x,z);>> axis([0 2*pi -1 1]);%intervalos para x e y no segundogrfico>> title('cos(x)');>> subplot(2,2,3);%posio do prximo grfico, abaixo aesquerda>> plot(x,a);>> axis([0 2*pi -1 1]);%intervalo para os eixos do ltimogrfico>> title('2 sin(x) cos(x)');%ttulo para o ltimo grfico>> subplot(2,2,4);%posio do prximo grfico>> plot(x,b);%grfico atual>> axis([0 2*pi -20 20]);%eixos para o atual grfico>> title('sin(x)/cos(x)');%titulo para o grfico atual

    O resultado destas operaes mostrado na figura 6.

  • Introduo ao MATLAB

    40

    8.2 Outros recursos para grficos bidimensionais Existem comandos que permitem plotar em escalas logartmicas, grficos de barras

    ou pizzas. Os seguintes comandos podem ser usados no lugar de plot.

    >> x=(-pi,pi,30);>> y=sin(x);>> loglog(x,y);

    Ao invs dos valores de x e y sero plotados os valores dos logaritmos desses

    valores.

    >> semilog(x,y);

    Neste ltimo caso escala logartmica ser usada somente para os valores do eixo x.

    >> semilogy(x,y)

    8%

    16%

    24%32%

    16%

    5%Produo de gros

    ArrozFeijoSojaTrigoMilhoCevada

    Figura 8: Grfico em formato pizza ou torta Neste caso escala logartmica ser utilizada s no eixo y. O grfico apresenta

    exemplificaes destes comandos.

  • Introduo ao MATLAB

    41

    >> area(x,y);%a rea baixo a curva ser preenchida% com uma cor>> pie(a,b);%grfico em formato pizza

    Grficos em formato de torta ou pizza so criados usando este comando. O vetor a

    contm valores a serem plotados e b um vetor lgico opcional que descreve as fatias a

    serem separadas.

    Exemplo: grfico de torta, figura 8.

    >> a = [0.5 1 1.5 2.0 1 0.3];>> pie(a,a==max(a));>> title('Produo de gros');>> legend('Arroz','Feijo','Soja','Trigo','Milho','Cevada');

    A verso tridimensional do grfico de torta pode ser obtida da usando o mesmo

    vetor a anterior, figura 9.

    >> destaque = [0 1 0 1 0 1];%pedaos em destaque>> pie3(a,destaque);%formato pizza tridimensional>> colormap hsv;%opo de tonalidade de cor

    32%

    16%

    24%

    5%

    8%

    16%

    Figura 9: Grfico de torta tridimensional Exemplo: grfico de barras.

    >> b = [1960 1970 1980 1990 2000 2001];

  • Introduo ao MATLAB

    42

    >> bar(b,a);%barra vertical

    0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2

    1960

    1970

    1980

    1990

    2000 2001 An

    os d

    e pr

    odu

    o

    Produo de gros (em milhes de toneladas)

    Figura 10: Grfico de barras horizontal

    Os valores de b so as abscissas os de a so as ordenadas correspondentes. A escala

    dos valores do vetor b no adequada para um grfico de barras vertical, os primeiros

    valores so a cada 10 anos enquanto que nos ltimos dois a diferena de um ano, assim

    uma forma mais adequada utilizar um grfico de barras horizontal como exemplificado a

    seguir.

    >> barh(b,a);%barra horizontal>> xlabel('Anos de produo');>> ylabel('Produo de gros (em milhes de toneladas)');>> axis xy;%ordena os valores do eixo Y em forma ascendente,

    %figura 11 Exemplo: grfico de escada, figura 11.

    >> stairs(b,a);>> xlabel(' Anos de produo ');>> ylabel(' Produo em milhes de toneladas ');>> title('Grfico em escada','FontSize',18);

  • Introduo ao MATLAB

    43

    1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 0.2

    0.4

    0.6

    0.8

    1

    1.2

    1.4

    1.6

    1.8

    2

    Anos de produo

    Pro

    du

    o em

    milh

    es

    de to

    nela

    das

    Grfico em escada

    Figura 11: Grfico em formato de escada

    Exemplo: grfico de rea, figura 12.

    0 1 2 3 4 5 6 7 8 9 -200

    -100

    0

    100

    200

    300

    400

    500

    600

    Abscissa X

    Grfico de rea

    Ord

    enad

    a =

    x 3 *sin

    (x)+

    x/10

    Figura12: Grfico de rea: a rea entre a curva e o eixo X

    >> x=0:0.05*pi:3*pi;

  • Introduo ao MATLAB

    44

    >> y = x.3.*sin(x)+x/10;>> xlabel(' Abcisa X ');>> title('Grfico de rea','FontSize',18);>> ylabel(' Ordenada = x.3 * Sin(x) + x/10 ');>> area(x,y);

    8.2.1 Grfico em coordenadas polares

    Neste caso cada ponto do plano identificado a um raio r (distncia da origem) e

    um ngulo tetha (aquele que forma o raio com o eixo X). Cada ponto de uma curva no

    plano identificado com um par (r,tetha). Exemplo:

    >> tetha=0:2*pi/100:2*pi;%diviso do intervalo [0,2pi] em 100partes>> r = tetha/(2*pi);>> subplot(1,2,1);>> polar(tetha,r);%grfico em coordenadas polares>> title('* E S P I R A L *');

    Neste caso o raio inversamente proporcional constante 2*pi. Quando o ngulo

    tetha aumenta de 0 a 2pi e o raio tambm aumenta proporcionalmente. Ento a curva

    circular afastando-se do centro que a prpria origem, isto , uma espiral. Este e o prximo

    exemplo so mostrados na figura 13.

    >> subplot(1,2,2);>> polar(tetha,sin(2*tetha).*cos(2*tetha));>> title('Rosa de 8 ptalas');

    0.5

    1

    30

    210

    60

    240

    90

    270

    120

    300

    150

    330

    180 0

    * E S P I R A L *

    0.25

    0.5

    30

    210

    60

    240

    90

    270

    120

    300

    150

    330

    180 0

    Rosa de 8 ptalas

    Figura 13: Grficos em coordenadas polares

  • Introduo ao MATLAB

    45

    8.3 Grficos tridimensionais Para traar grficos curvilneos 3D utiliza-se o comando ou funo plot3. No prximo

    exemplo a varivel t aumenta com o par (cos(t),sin(t)) que est dentro de uma

    circunferncia de raio 1. Ao mesmo tempo o par (cos(t),sin(t)) est girando em sentido anti-

    horrio no plano X-Y e a terceira componente de t est aumentando e se afastando deste

    plano, logo o grfico corresponde a uma linha que vai girando e se afastando do plano X-Y,

    uma hlice, cujo ponto de partida o ponto (0,1,0) = (cos(0),sin(0),0). O grfico est

    desenhado na figura 14.

    >> t = linspace(0,10*pi,200);%[0,10pi] dividido em 200 partes>> plot3(sin(t),cos(t),t);>> title('H l i c e : curva paramtrica');>> xlabel('X = Sin(t)');>> ylabel('Y = cos(t)');>> zlabel('Z = t');

    -1-0.5

    00.5

    1

    -1

    -0.5

    0 0.5

    1 0 5

    10 15 20 25 30 35

    X = sin(t)

    H l i c e : curva paramtrica

    Y = cos(t)

    Z =

    t

    Figura 14: Grfico de linhas tridimensional (paramtrico)

  • Introduo ao MATLAB

    46

    8.3.1 Grficos de superfcie

    A seguir apresentado um exemplo com explicaes de cada comando grfico.

    >> x = -7.5:0.5:7.5;%vetor ou lista x>> y = -7.5:0.5:7.5;%vetor ou lista y>> [X,Y] = meshgrid(x,y);%matrizes coordenadas (x,y)>> R = sqrt(X.^ 2+Y.^ 2)+eps;%soma-se eps para evitar diviso

    %por zero>> Z = sin(R)./R+1;>> mesh(X,Y,Z);%grfico de rede>> hold on;%segura as sadas grficas posteriores na janela

    %atual>> pcolor(X,Y,Z);%provoca a apario de uma malha colorida no

    %domnio>> shading interp;%a cor definida de acordo com a altura>> contour(X,Y,Z,20,'k');%20 curvas de nvel em preto,

    %escolha automtica>> colorbar;%apresenta uma escala colorida de valores>> hold off;%cada comando grfico ser apresentado em uma

    %janela distinta

    Figura 15: Produto final da seqncia de comandos do exemplo

  • Introduo ao MATLAB

    47

    Cada linha da matriz X corresponde lista x e cada coluna da matriz Y

    corresponde lista y. Assim a matriz R o quadrado de cada elemento de X mais o

    quadrado de cada elemento de Y, componente a componente respectivamente.

    Semelhantemente segue a definio da matriz Z. O comando mesh grafica os pontos

    definidos pelas ternas, componentes respectivas de X, Y e Z e em seguida os liga com linhas

    retas formando uma rede. A seqncia de comandos escritos acima visualizada na figura

    15. Pode-se salvar o grfico em vrios formatos.

    8.3.2 Animao grfica

    Animao bidimensional

    Este exemplo mostra como se constri uma seqncia de grficos. Estes grficos so

    armazenados em uma matriz M, em seguida o comando movie permite mostrar a seqncia

    armazenada em M a uma certa taxa de repetio.

    >> x = -pi/2:.1:pi/2;>> for c=1:20,

    y = sin(2*x+c*pi/10);plot(x,y,'LineWidth',18);axis([-pi/2 pi/2 -1 1]);M(c) = getframe;

    end;>> movie(M,20,10);

    A ltima linha de comando significa que os grficos armazenados em M so mostrados

    10 vezes a uma taxa de repetio de 20 figuras por segundo.

    Animao tridimensional

    O lao que se apresenta a seguir no difere muito daquele apresentado anteriormente.

    Exemplo:

    >> x = -pi/2:.1:pi/2;>> y = -pi/2:.1:pi/2;>> [X,Y] = meshgrid(x,y);>> for c=1:20,

    Z = sin(2*X+c*pi/10)+1.5*cos(2*Y+c*pi/10);surf(X,Y,Z);M(c0 = getframe;

  • Introduo ao MATLAB

    48

    end;>> movie(M,20);%Esta animao pode ser salva

    9 Soluo de sistemas de equaes lineares Um sistema de equaes lineares se escreve da forma bAx = onde A uma matriz

    conhecida de dimenses nxm, geralmente quadrada (m=n), x o vetor coluna de incgnitas

    e b um vetor coluna de valores numricos. Caso A (quadrada) seja no singular, isto ,

    existe uma matriz denotada 1A tal que IAAAA == ** 11 , onde I a matriz identidade.

    Ento pela teoria o sistema apresenta uma nica soluo x. A matriz identidade

    caracterizada por 1=iiI e 0=ijI se ji , isto , os valores da diagonal so todos 1 e fora

    da diagonal os valores so zero.

    Uma boa medida da qualidade de uma matriz dado pelo nmero de condio. O

    comando cond(A) retorna este nmero, se o nmero retornado grande indicar que a

    matriz A aproximadamente singular, o que ruim do ponto de vista numrico. A preciso

    da soluo numrica utilizando A ser afetada.

    Caso nm < o sistema tem mais incgnitas que equaes e existem infinitas solues.

    Neste caso procura-se s vezes uma soluo que satisfaa a condio de minimizao da

    soma das distncias aos hiperplanos definidos pelas equaes (mnimos quadrados). Caso

    nm > o sistema tem mais equaes que incgnitas, ento o sistema sobre determinado e a

    soluo geralmente no existe. O problema de mnimos quadrados no tem soluo nica

    (norma Euclidiana):

    )*Norm( minimize bxA (4)

    Se a soluo existe, esta se acha diretamente da seguinte maneira:

    bAxbxA ** 1== (5)

    A inverso da matriz A do sistema nem sempre uma operao barata. Para

    matrizes grandes ou cheias prefere-se a utilizao de mtodos alternativos, como os

    mtodos de decomposio de matrizes tais como LU, QR, Cholesky ou mtodos iterativos

    como minres, gmres e outros (implementados no Matlab). Outro cuidado que deve ser

  • Introduo ao MATLAB

    49

    tomado que os mtodos de decomposio no se aplicam a qualquer tipo de matriz. Por

    exemplo, para o mtodo de Cholesky a matriz do sistema deve ser definida positiva. Uma

    operao simples como:

    >> A = [3 1 2;0 4 0;-1 -2 -3];%matriz no definida positiva>> R = chol(A);%mtodo de decomposio de Cholesky

    %retornara a seguinte%mensagem de erro:

    G??? Error using ==> cholMatrix must be positive definite.

    Para resolver o sistema utilizando mtodos de decomposio deve-se contar com o

    algoritmo que calcula a soluo baseado nas matrizes decompostas. J o mtodo iterativo

    consiste no clculo ou atualizao, a cada passo, de matrizes e vetores envolvidos no

    algoritmo que aproxima a soluo. Geralmente utilizam-se produtos vetor-vetor, matriz-

    vetor e calcula-se uma norma no erro da aproximao, tentando atingir uma tolerncia

    preestabelecida.

    9.1 Mtodos diretos A forma mais simples para resolver um sistema, porm a mais cara, consiste em

    calcular a inversa da matriz do sistema. Outros mtodos diretos usam decomposio de

    matrizes. Algumas destas formas so exemplificadas a seguir.

    >> A = [1 2 1;2 1 2;1 2 2];>> b = [1;0;-1];%vetor coluna>> B = inv(A);%inverte uma nica vez>> C = A^ -1;%forma alternativa para inverter A>> x = C*b;%caso b mude C continua o mesmo

    Utiliza-se a barra invertida para resolver o sistema com uso de eliminao Gaussiana.

    >> x = A\b;%eliminao de Gauss

    Decomposio LU

    O seguinte exemplo apresenta os conceitos citados anteriormente a respeito dos mtodos de

    decomposio.

    >> A = [1 2 2;2 1 2;2 2 1];

  • Introduo ao MATLAB

    50

    >> [L,U,P] = lu(A);

    Esta simples funo retornar 3 matrizes 3x3. Uma matriz triangular inferior L, uma

    triangular superior U e uma matriz de permutao P, de forma que L*U = P*A. Para

    resolver o sistema foi implementado o seguinte arquivo resolucao_LU.m. A chamada

    resolucao_LU(L,U,P,b) retorna a soluo x.

    function x = solve_LU(L,U,P,b)c = P*b;%permutao lado b: P*A*x = L*U*x = P*b% substituio triangular inferior: L y = cy = zeros(n,1);y(1) = c(1,1)/L(1,1);for i=1:n,

    soma = 0.0;for j=1:(i-1),

    soma = soma+L(i,j)*y(j);y(i) = c(i)-soma;

    endend% substituio triangular inferior U x = yx = zeros(n,1);x(n,1) = y(n,1)/U(n,n);for i=n:-1:1,

    soma = 0.0;for j=(i+1):n,

    soma = soma+U(i,j)*x(j);x(i) = (y(i)-soma)/U(i,i);

    endend

    Os algoritmos de resoluo associados a decomposio de matrizes podem ser

    achados em textos de lgebra Linear e a maioria so fceis de implementar.

    9.2 Mtodos iterativos Estes mtodos utilizam vrios argumentos de entrada como a matriz A, lado b,

    tolerncia (o default 1*10-06), nmero mximo de iteraes, o tamanho da matriz, o

    chute inicial (o default zero), etc. Os valores de retorno podem ser a soluo x, o

    nmero efetivo de iteraes para atingir a preciso, um nmero de diagnstico (flag), o

    resduo relativo etc.

  • Introduo ao MATLAB

    51

    O seguinte exemplo usa o mtodo PCG ou gradiente conjugado pr-condicionado que

    se aplica a uma matriz simtrica e definida positiva.

    size =10;A=rand(size);%matriz aleatria com valores entre 0 e 1tol = 1.e-03;for i=1:size,

    b(i,1) = 1; % como exemplo b=1for j=i:size,

    A(j,i) = A(i,j);%matriz simtricaif j == i

    A(i,i) = 100*A(i,i);%diagonalmente dominante o queend %garante que A seja definida positiva

    endend[x,flag,res,iter] = pcg(A,b,tol,size);

    O primeiro teste convergiu em 6 iteraes com um resduo de 7.4264e-05. O

    nmero flag = 0 indica que o mtodo convergiu com a desejada tolerncia num nmero de

    iteraes menor ou igual ao default.

    O prximo exemplo utiliza o mtodo minres que procura uma soluo que minimiza

    o resduo. Neste caso a matriz no precisa ser definida positiva, basta ser simtrica.

    size = 10;A=rand(size);tol = 1.e-04;for i=1:size,

    b(i,1) = 1;for j=i:size,

    A(j,i) = A(i,j);%matriz simtrica para o mtodo minresend

    endx=zeros(size,1);[x,flag,res,iter]=minres(A,b,tol,size);

    O primeiro teste retornou os seguintes resultados. A varivel flag = 0 indica que o

    mtodo convergiu dentro do nmero de iteraes desejado atingindo a tolerncia desejada,

    no caso, em 8 iteraes. A norma do resduo relativo foi:

    071228.2*

    =

    eb

    xAb (6)

  • Introduo ao MATLAB

    52

    Um segundo teste onde foi usada uma tolerncia de 1.e-08, convergiu em 10

    iteraes, atingindo um erro relativo de 1.1667e-13, com flag = 0.

    O comando spy til para verificar visualmente o grau de esparsidade de uma

    matriz. O seguinte algoritmo gera uma matriz ligeiramente esparsa e simtrica que ento

    visualizada com o comando spy, figura 16.

    0 2 4 6 8 10 12 14 16 18 20

    0

    2

    4

    6

    8

    10

    12

    14

    16

    18

    20

    nz = 258

    Figura 16: Grfico mostrando os valores no nulos de uma matriz

    size = 20;% tamanho da matrizs = rand(size);%matriz aleatria 20x20 (valores entre 0 e 1)for i=1:size,

    for j=1:size,if j >i

    s(i,j) = s(j,i);%provoca simetria em sendif s(i,j) < 0.6 & abs(i-j) > 4

    s(i,j) = 0.0;%introduo de esparsidade em send

    endend

  • Introduo ao MATLAB

    53

    spy(s,'*r');%mostra a matriz em formato grfico

    A ltima linha preenche os valores no nulos com asterisco e em cor vermelha. O

    grfico mostra tambm o nmero de zeros nz da matriz A.

    10 Ajuste de curvas e interpolao Este tipo de ferramentas til quando se dispe de um conjunto descontnuo de dados

    (valores numricos pontuais), e se procura traar uma curva ou superfcie (funo contnua)

    que contenha estes pontos.

    Existem diferentes curvas que podem ser utilizadas para interpolar estes pontos. Podem

    ser usados distintos graus para o polinmio que interpola, ou ainda podem ser usados

    polinmios por partes. Quando se usam polinmios por partes pode acontecer que a curva

    que interpola os pontos tenha derivada contnua ou no, naqueles pontos conhecidos.

    Naturalmente surge a questo de que modelo mais apropriado para interpolar os dados. O

    analista numrico deve saber decidir sobre esta questo, j que o uso de um modelo ou de

    outro acarretar uma resposta diferente. Nem sempre de um polinmio de grau maior ser

    obtida uma resposta mais precisa.

    Caso o analista conhea a priori o comportamento do seu modelo ele poder usar esta

    informao para a escolha do grau de interpolao. Caso contrrio ele dever procurar obter

    maior quantidade de medies experimentais para obter um comportamento mais apurado

    na zona de interesse no domnio do problema.

    O primeiro exemplo interliga pontos discretos no plano por meio de linhas retas,

    obtendo-se uma curva linear ou de grau um por partes, figura 17.

    dados1=[ 0 0;1 20;2 60;3 68;4 77;5 110];%Conjunto de pontos a%ser interpolado

    disp('Clculo que interpola este conjunto de pontos em x=2.6e x=4.9, respectivamente');y1 = interp1(dados1(:,1), dados1(:,2), 2.6) % valor

    %interpolado no ponto 2.6y2 = interp1(dados1(:,1), dados1(:,2), 4.9) % valor

    %interpolado no ponto 4.9xi=0:.01:5;%lista no intervalo [0,5]

  • Introduo ao MATLAB

    54

    yi = interp1(dados1(:,1), dados1(:,2),xi);% lista yi%interpola a lista xi

    plot(dados1(:,1), dados1(:,2),'o',xi,yi);% grfico da curva% interpolada

    0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50

    20

    40

    60

    80

    100

    120

    Figura 17: Interpolao linear por partes

    A resposta para os dois valores pontuais : y1 = 64.8000, y2 = 106.7000. Os valores

    conhecidos para x esto no intervalo [0,5], e os de y em [0,110], a figura mostra a curva de

    interpolao.

    O prximo exemplo corresponde a uma interpolao superficial, figura 17.

    velocidade=[2000,3000,4000,5000,6000];tempo=[0 1 2 3 4 5];temperatura = [ 0, 0, 0, 0, 0; 20, 110, 176, 190, 240; 60,180, 220, 285, 327; 68, 240, 349, 380, 428; 77, 310, 450,510, 620; 110, 405, 503, 623, 785];temp = interp2(velocidade, tempo,temperatura,3800,3.1)%os prximos passos permitem graficar a curva de interpolaovel=2000:100:6000;%40 pontost=0:0.125:5;%40 pontos[X,Y] = meshgrid(vel,t);Z = interp2(velocidade,tempo,temperatura,X,Y);mesh(X,Y,Z);xlabel('E I X O X');

  • Introduo ao MATLAB

    55

    ylabel('E I X O Y');zlabel('E I X O Z');

    Figura 18: Superfcie interpolante da matriz temperatura

    Comando spline

    Este tipo de interpolao utiliza polinmios cbicos para, no caso plano, unir cada dois

    pontos com um polinmio, e cada 4 pontos no espao com uma superfcie polinomial.

    Ainda a primeira e segunda derivada nestes pontos so contnuas. A figura 19 mostra a

    curva spline interpolante do exerccio a seguir.

    x = [0 1 2 3 4 5];y = [0 20 60 68 77 110];temp1 = spline(x,y,2.6);temp2 = spline(x,y,[2.6 4.9]);z = [.5 1.5 2.5 3.5 4.5];temps = spline(x,y,z);temp1 %resultadotemp2 %resultadotemps %vetor interpolante da lista zxi=0:0.2:5;%25 pontosyi = spline(x,y,xi);%interpolao da lista xi

  • Introduo ao MATLAB

    56

    plot(x,y,'o',xi,yi);%curva interpolante

    A sada numrica foi: temp1 = 67.3013, temp2 = 67.3013, 105.2020, temps = 2.7917,

    42.2083, 66.8750, 70.4167, 89.5833. Observe na figura como a curva suave nos pontos

    conhecidos.

    0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 -20

    0

    20

    40

    60

    80

    100

    120 Interpolao Spline

    Tempo [s]

    Gra

    us F

    aren

    heit

    Figura 19: Interpolao utilizando spline

    Comando polyfit

    Este comando acha os coeficientes de um nico polinmio que interpola os dados no

    sentido dos mnimos quadrados, isto , no necessariamente o polinmio passa pelos

    pontos, mas a soma das distncias dos pontos ao polinmio minimizada. O grau do

    polinmio deve ser especificado. O exerccio seguinte utiliza este comando. O resultado

    deste comando um vetor de comprimento grau+1 contendo os coeficientes em ordem

    descendente de potncias nx , 0,1,2,...,1= graun . O aumento do grau do polinmio nem

  • Introduo ao MATLAB

    57

    sempre garante uma melhor aproximao resposta procurada. Veja figura 20 para a sada

    grfica deste exemplo.

    0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0

    20

    40

    60

    80

    100

    120 Ajuste polinomial: grau 1

    X

    Y

    Figura: Ajuste polinomial de grau 1

    x = [0 1 2 3 4 5];y = [0 20 60 68 77 110];grau = 1;%grau do polinmio a ajustarcoef = polyfit(x,y,grau);ybest = polyval(coef,x);%para verificar a qualidade da

    %aproximaoaxis([-1,6,-20,120]);plot(x,ybest,x,y, 'o' );%compara graficamente os valoresdados

    %com os obtidos por ajustetitle ('Ajuste polinomial: grau 1');xlabel('X');ylabel('Y');grid;

    O resultado coef = 20.8286, 3.7619 significa que o polinmio considerado na

    aproximao :

  • Introduo ao MATLAB

    58

    7619.3*8286.201 += xP (7)

    0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 -2

    0

    2

    4

    6

    8

    10

    12

    14

    16

    x

    y

    Resultados experimentaisP2 P10

    Figura 21: Ajuste polinomial: graus 2 e 10

    A varivel ybest = 3.7619, 24.5905, 45.4190, 66.2476, 87.0762 ,107.9048 apresenta

    a avaliao deste polinmio para os valores do vetor x. O prximo exemplo mostra como o

    aumento do grau do polinmio no necessariamente aumenta a preciso dos resultados

    procurados. Ajustam-se aos dados polinmios de graus 2 e 10.

    x = 0:0.1:1;y = [-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3011.2];grau = 2; % n o grau do polinmio de interpolaop2=polyfit(x,y,grau);grau = 10;p10=polyfit(x,y,grau);xi = 0:0.01:1;y2 = polyval(p2,xi);

  • Introduo ao MATLAB

    59

    y10 = polyval(p10,xi);plot(x,y,'r+',xi,y2,'b-',xi,y10,'g-');xlabel('x');ylabel('y');legend( 'Resultados experimentais','P2', 'P10');

    Em geral, se existem n pontos a serem interpolados, ento um polinmio de grau

    acima de n-1 deve conter todos os pontos conhecidos. Como pode ser observado na figura

    21. Na mesma figura o polinmio de grau 10 apresenta uma maior oscilao em relao ao

    polinmio de grau 2.

    0 0.2 0.4 0.6 0.8 1-2

    0

    2

    4

    6

    8

    10

    12 Superposio de curvas interpolantes

    x

    y

    DadosLinearCbicaSpline

    0 0.05 0.1 0.15 0.2 0.25 -0.5

    0

    0.5

    1

    1.5

    2

    2.5

    3

    3.5

    4Zoom no intervalo [0,1/4]x[-1/2,4]

    x

    y

    DadosLinearCbicaSpline

    Figura 22: Comando interp1: opes linear, cbica e spline

    Mais sobre os comandos interp1 e interp2

    A outras opes que podem ser passadas para estes comandos como interpolao tipo

    spline que j foi mencionada; tipo cubic (o mesmo que Hermite cbico por partes) onde

    fora dos valores da funo so tambm requisitadas condies na primeira derivada nos

    pontos conhecidos; tipo linear que default. A figura 22 mostra o grfico do exemplo

    onde foram usados os trs tipos de interpolao citados.

  • Introduo ao MATLAB

    60

    x = 0:0.1:1;y = [-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.3011.2];xi = 0:0.01:1;intlin=interp1(x,y,xi,'linear');intcubic=interp1(x,y,xi,'cubic');intspline=interp1(x,y,xi,'spline');plot(x,y,'r+',xi,intlin,'b-',xi,intcubic,'k:',xi,intspline,'r-.');xlabel('x');ylabel('y');legend( 'Resultados experimentais','Linear','Cbica','Spline');

    O seguinte exemplo corresponde a uma interpolao bidimensional. Dada uma

    malha discreta de valores que medem a profundidade do solo marinho, matriz z, de uma

    rea retangular de 4x6 quilmetros quadrados, utiliza-se interpolao tipo cubic e nearest,

    figura 23.

    x = 0:0.5:4;y = 0:0.5:6;z=-[100 99 100 99 100 99 99 99 100; 100 99 99 100 99 99...100 99 99;99 99 98 98 100 99 100 100 100; 100 98 97 97 99 100 100...100 99;101 100 98 98 100 102 103 100 100; 102 103 101 100 102 106...104 101 100;99 102 100 100 103 108 106 101 99; 97 99 100 100 102 105...103 102 100;100 102 103 101 101 102 103 100 99; 100 102 103 102 101...101 100 99 99;100 100 101 101 100 100 100 99 99; 100 101 101 100 100 99...99 99 99;100 100 100 99 99 100 99 100 99];mesh(x,y,z);%visualiza malha grossa com ns (x,y,z)xlabel('Eixo x (km)');ylabel('Eixo y (km)');zlabel('Profundidade do oceano - metros');title('Medidas da profundidade do oceano');%alguns valores particulareszi = interp2(x,y,z,2.2,3.3) % linear (default)zi= interp2(x,y,z,2.2,3.3, 'cubic')zi= interp2(x,y,z,2.2,3.3, 'spline')zi= interp2(x,y,z,2.2,3.3, 'nearest')

  • Introduo ao MATLAB

    61

    xi=linspace(0,4,30); % eixo x refinadoyi=linspace(0,6,40); % eixo y refinado[xxi,yyi]=meshgrid(xi,yi); % malha de todas as possveis

    %combinaes (xi ,yi)subplot(2,1,1);% figura da esquerdazzi=interp2(x,y,z,xxi,yyi,'cubic'); % interpolao tipo cubicmesh(xxi,yyi,zzi);xlabel('Eixo x - Quilmetros');ylabel('Eixo y - Quilmetros');zlabel('Profundidade do oceano - metros');title('Interpolao tipo cubic : Malha refinada');axis([0 4 0 6 -110 -95]);subplot(2,1,2);zzi=interp2(x,y,z,xxi,yyi,'nearest'); % interpolao tipo%nearestmesh(xxi,yyi,zzi);xlabel('Eixo x - Quilmetros');ylabel('Eixo y - Quilmetros');zlabel('Profundidade do oceano - metros');title('Interpolao tipo nearest : Malha refinada');axis([0 4 0 6 -110 -95]);

    Figura: Interpolao bidimensional: cubic e nearest

  • Introduo ao MATLAB

    62

    11 Leitura e escrita de arquivos de dados Pode-se ler um arquivo de dados que contenha apenas nmeros usando o comando

    load. Um arquivo com qualquer extenso, por exemplo, matriz.dat, que contenha

    nmeros em formato de vetor ou matriz pode ser lido com o comando load. O Matlab cria

    uma varivel de nome matriz como sendo vetor ou matriz da mesma dimenso daquela que

    foi lida.

    Por exemplo, se o contedo do arquivo matriz.dat :

    1 2 3 45 6 7 8

    Depois de lido o arquivo com o comando load, cria-se a varivel matriz como sendo

    uma matriz 2x4:

    >> load matriz.dat;>> matrizmatriz =

    1 2 3 45 6 7 8

    >> size(matriz) %dimenses da varivel matrizans =

    2 4

    O arquivo no deve conter letras ou caracteres entre aspas. Os nmeros devem estar

    dispostos em forma de matriz. Para salvar as variveis ou dados em geral usa-se o comando

    save. Exemplo:

    >> clear;>> x = [0 1 2 3 4 5];>> y = sqrt(2)*eye(3);>> z = rand(2);>> save dados x y z;% salvar os dados x,y e z dentro doarquivo 'dados.mat'.>> save dados2.txt x y z -ascii;%salva em formato txt, 8digitos.>> save dados3.txt x y z -ascii -double;% salva em formato

    %txt com 16 digitos.

  • Introduo ao MATLAB

    63

    Para se trabalhar com leitura e escrita de dados existe a possibilidade de se utilizar

    comandos da linguagem C tais como fopen, fscanf, fclose. O seguinte exemplo abre o

    arquivo existente vetor.dat com o atributo 'somente leitura' para leitura de dados. O

    primeiro valor lido o comprimento do vetor. Depois o vetor lido e armazenado no vetor

    coluna vet e finalmente o arquivo fechado.

    clear;fid=fopen('vetor.dat','r');% abre um arquivo existente para

    %permitir s leituranval = fscanf(fid,'%2d',1);%nmero de valores a ler e 1vet = zeros(nval,1);%cria o vetor coluna vet cheio de zerosfor k=1:nval,

    vet(k) = fscanf(fid,'%5d',1);%le valores em formatoend %inteiro com no maximo 5 digitos decimaisfclose(fid);%fecha arquivodisp(' F I M ');who % mostra as variveis globais do ambientedisp('Vetor lido');vet % mostra no prompt o vetor lido do arquivo vetor.dat

    Para abrir ou criar um arquivo usa-se o comando fopen ('nome de arquivo','opo').

    O atributo r no campo opo do comando fopen indica que o arquivo somente leitura,

    isto , no ser possvel escrever nenhum dado nele. O valor 1 no comando fscanf indica

    que ser lido um valor por vez. O formato %5d significa que o valor a ser lido inteiro,

    indicado pela letra d, com no mximo 5 dgitos decimais.

    O comando fopen retornar um nmero inteiro positivo que identifica este arquivo

    para leitura e escrita. Caso o nmero retornado for -1, isto indicar que o arquivo no existe

    ou no foi criado.

    Opes de abertura ou gerao de arquivos:

    a : cria ou abre um arquivo existente para escrita, agrega os dados ao final do

    arquivo a+ : cria ou abre um arquivo existente para leitura ou escrita, agrega os dados ao

    final do arquivo w : cria ou abre um arquivo existente s para escrita, descartando o seu contedo w+ : cria ou abre um arquivo existente para leitura ou escrita, descartando o seu

    contedo r : abre arquivo existente s para leitura nao cria o arquivo nem permite escrita

    nele

  • Introduo ao MATLAB

    64

    r+ : abre arquivo existente para leitura e escrita O seguinte exemplo cria um arquivo cujo nome entrado por teclado, gera uma matriz 8x8

    e copia os valores dela dentro do arquivo em formato ponto fixo.

    %a seguinte linha pede o nome de um novo arquivo por tecladoarquivo_novo = input('Entre nome de um arquivo a ser criado -> ','s');ordem = 8;mat=randn(ordem);% cria matriz 8x8mat % mostra a matriz gera