Apostila Matlab Donizetti 15nov2002

download Apostila Matlab Donizetti 15nov2002

of 75

Transcript of Apostila Matlab Donizetti 15nov2002

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    1/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIMA

    SUMRIOCAPTULO I1 INTRODUO ................................................................................................ 31.1 Breve Histrico e Viso Geral do Software MATLAB ............................. 3CAPTULO II2 CONCEITOS BSICOS ................................................................................. 5

    2.1 Controle da janela de comandos ............................................................... 52.2 Variveis ...................................................................................................... 52.3 Caracteres especiais .................................................................................. 62.4 Operadores aritmticos .............................................................................. 62.5 Operadores condicionais ........................................................................... 62.6 Operadores lgicos .................................................................................... 6CAPTULO III3 FUNES ELEMENTARES DO MATLAB ..................................................... 73.1 Funes Cientficas ..................................................................................... 73.2 Formatos Numricos ................................................................................. 83.3 Entrada de Matrizes .................................................................................... 83.4 Polinmios ................................................................................................... 103.5 Sistemas de Equaes Lineares ............................................................... 123.6 Operaes com Conjuntos ........................................................................ 143.7 Data e Hora ................................................................................................... 153.8 Nmeros Complexos .................................................................................. 153.9 Operaes com vetores e matrizes ........................................................... 16CAPTULO IV4 RECURSOS GRFICOS .................................................................................. 174.1 Visualizao de Curvas ............................................................................... 174.1.1 Estilos de linhas, marcadores e cores .................................................. 184.1.2 Especialidades dos grficos bidimensionais ...................................... 184.1.3 Funes grficas 2D especiais .............................................................. 204.1.4 Funes para grficos bidimensionais ................................................ 224.2 Visualizao de Superfcies ........................................................................ 234.2.1 Grficos de linha tridimensional ............................................................ 234.2.2 Grficos de Malha e Superfcie ............................................................... 244.2.3 Funes para grficos tridimensionais ................................................. 264.3 Visualizao de imagens ........................................................................... 274.4 Demais funes de manipulao de grficos do MATLAB ................... 274.5 Salvando figura em um formato bitmap (extenso BMP) ....................... 284.6 Slidos de revoluo .................................................................................. 28

    CAPTULO V5 PROGRAMAO MATLAB .......................................................................... 295.1 O Editor do MATLAB .................................................................................. 295.2 M-Files: Criando seus prprios programas e funes ............................. 305.3 Principais comandos de programao ..................................................... 325.4 Interface com o usurio ............................................................................. 36CAPTULO VI6 EXPRESSES SIMBLICAS ......................................................................... 386.1 Definindo variveis simblicas ................................................................ 38CAPTULO VII7 TPICOS ESPECIAIS ..................................................................................... 49

    Otimizando a performance de cdigos MATLAB ................................... 49Estatstica, Matemtica Financeira e Programao Linear .................... 49Listas de Exerccios e Referncias Bibliograficas ........................................ 66

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    2/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    3

    CAPTULO I

    1 INTRODUO

    1.1 Breve Histrico e Viso Geral do Software MATLAB

    O MATLAB original foi desenvolvido em linguagem Fortran por Clever Moler. Essasnovas verses (5 e 6) foram desenvolvidas em linguagem C por: Steve Bangeret, SteveKleiman e Clever Moler Stanford University .

    Desde a sua primeira verso (1984), o MATLAB tido como produto lder na rea decomputao numrica e cientfica. Mais do que umsoftware , o MATLAB um ambienteintegrado de modelagem de sistemas e algoritmos, ideal para implementao deprojetos complexos, e que por esta razo vem sendo adotado como ferramenta dedesenvolvimento padro pelas principais universidades do Brasil e do mundo.

    O MATLAB umsoftware destinado a fazer clculos com matrizes (matriz o seuelemento essencial). O nome MATLAB derivado de MATrix LABoratory, ou seja, umlaboratrio de matrizes.

    O MATLAB um sistema interativo cujo elemento bsico da informao uma matrizque no requer dimensionamento. Esse sistema permite a resoluo de muitosprogramas numricos em apenas uma frao do tempo que se gastaria para escreverum programa semelhante em linguagem tradicional como Fortran, Basic, C/C++, Delphi,Visual Basic, etc.

    O MATLAB o ncleo de um ambiente de computao numrica baseado em matrizesque integra: Funes de tratamento numrico de alta performance; Sofisticados recursos de gerao de grficos para visualizao de dados; Poderosa linguagem de programao de alto nvel.

    Assim, o MATLAB pode ser usado para: Clculos matemticos; Desenvolvimento de algoritmos; Modelagem, simulao e visualizao de prottipos; Anlise, explorao e visualizao de dados;

    Grficos cientficos e de engenharia; Desenvolvimento de aplicaes, incluindo a elaborao de interfaces grficas com ousurio.

    O MATLAB umsoftware matemtico interativo de alta performance utilizado emclculos numricos por cientistas, engenheiros, pesquisadores, estudantes, etc. OMATLAB composto de um mdulo matemtico bsico fundamental ao qual podemosagregar os mais variados toolbox (caixas de ferramentas) como: estatsticas,matemtica financeira, matemtica simblica, otimizao, etc. O MATLAB integra aanlise numrica, clculo matricial, processamento de sinais e grficos, de uma formatal que os problemas e solues so expressos de maneira bem prximos como soescritos matematicamente. Assim, como os comandos so muito prximos da formacomo so escritas as expresses algbricas, torna-se mais simples o seu uso.

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    3/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    4

    Uma vez inicializado o MATLAB, aparecer na janela de comandos um prompt "".Esse prompt significa que o MATLAB est esperando comando. A figura a seguir ilustraessa tela inicial

    Figura 1: Janela de comandos do MATLAB

    No se esquea: Todo comando deve ser finalizado teclando-se "ENTER".

    No MATLAB trabalhamos essencialmente com um tipo de objeto: umamatriz numricacujos elementos podem se constituir de nmeros complexos. Em diversas situaes,um significado especial atribudo a uma matriz1x1, que representa um escalar , epara matrizes comuma linha ou uma coluna, que representam vetores .

    A linguagem MATLAB no contm declarao dedimensionamento ou declarao dotipo. O armazenamento feito automaticamente.

    A seguir dada uma breve descrio das teclas parareeditar uma linha de comando:

    retorna a linha anterior retorna a linha posterior move um espao para a esquerda move um espao para a direitaCtrl move uma palavra para a esquerdaCtrl move uma palavra para a direitaHome move para o comeo da linhaEnd move para o final da linhaDel apaga um caracter a direitaBackspace apaga um caracter a esquerdaPara sair do MATLAB, digiteexit ou quit seguido de ENTER.Para interromper um comando do MATLAB, aperte a teclaCtrl C, seguido de ENTER

    O comandohelp proporciona informaeson-line sobre um tpico escolhido

    help apresenta os diretrios no trajeto de busca (path ) do MATLABhelp funo mostra as linhas de comentrios que documentam a funohelp elfun lista as funes matemticas elementares que esto disponveishelp graphics lista as funes relacionadas com a criao e controle de figuras e grficoshelp plotxy lista as funes para traado de grficos X-Yhelp plotxyz lista as funes para traado de grficos de superfcies e 3D

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    4/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    5

    CAPTULO II

    2 CONCEITOS BSICOS

    2.1 Controle da janela de comandos

    As principais funes para o controle da janela de comandos so:

    clc limpa a janela de comandos (semelhante ao comandocls do DOS)clear limpa da memria variveis e funescomputer retorna string contendo o computador que est executando MATLABdelete apaga um arquivo ou um objeto grficodemo demonstra recursos do MATLAB; isoladamente, apresenta o menu de demosdiary diary nome_do_arquivo salva o texto (comandos e resultados) de uma sessodir dir nome_do_diretrio lista os arquivos no diretriofclose fecha um arquivoflops retorna a contagem de operaes em ponto flutuante realizadasfopen abre arquivoformat estabelece o formato para mostrar os resultados numricoshelp recurso de ajudaon -line home retorna o cursor para o canto esquerdo superior da telaload carrega variveis armazenadas em arquivos.matlookfor recurso de ajuda (help) por palavra-chavesave grava variveis (em arquivos.mat (formato binrio)size retorna as dimenses de uma matrizver mostra o nmero da verso do MATLAB e dostoolboxes instaladosversion retorna a verso em uso do MATLABwhat lista os arquivos (.m, .mat e .mex) no diretrio correntewho lista as variveis correnteswhos lista as propriedades das variveis atuais (nomes, dimenso, nmero de bytes e classe)

    2.2 VariveisCada varivel um local na memria do computador capaz de conter um valorque pode ser modificado durante a execuo do programa. Quando o MATLABfaz clculos, ele utiliza os valores conhecidos para as variveis no momentoem que o clculo foi solicitado. Cuidado com lixos, use sempre o comandoclear.

    O MATLAB possui constantes numricas predefinidas que podem ser utilizadas nadefinio de vetores e matrizes, bem como na manipulao de dados. So elas:

    ans varivel de trabalho (utilizada para armazenamento quando no h atribuio), padro usadapara resultados (ans = answer = resposta = sada dos resultados)

    eps Preciso numrica relativa (2-52 2x10-16), preciso em ponto flutuante. Menor nmero que,somado a 1, resulta em um nmero de ponto flutuante maior do que 1 no computador. Podeser usado como um erro a ser tolerado na busca de soluo para um determinado problemaatravs de um processo iterativo

    i ou j Raiz imaginria (raiz quadrada de 1),ou seja: 1inf infinito (exemplo: 1 / 0)NaN ou nan Not a Number (no nmero) (exemplo: 0 / 0; / )nargin number of argument input : nmero de argumentos de entradanargout number of argument output : nmero de argumentos de sadapi 3.14159... = razo entre o permetro da circunferncia e seu dimetrorealmax maior nmero real positivo utilizvel (representvel em ponto flutuante)=1.7977x10308

    21023realmin menor nmero real positivo utilizvel (representvel em ponto flutuante)=2.2251x10-3082-1074

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    5/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    6

    A seguir tem-se as principais dicas sobre o nome a ser dado a uma varivel

    Regras para nomes Exemplodevem comear com uma letra matriz1podem conter letras, algarismos e caracter de sublinhado matriz5_ex8sensveis a maisculas e minsculas as variveisA e a so diferentespodem conter at 32 caracteres variavel1234_exercicio22_lista03

    2.3 Caracteres especiais

    : indexao; gerao de vetores. como nico ndice, empilha matriz em uma coluna( ) ordem de precedncia em clculos; envolver ndices; envolver variveis de entrada[ ] definir vetores e matrizes; envolver variveis de sada. ponto decimal... linha de continuao, separador; Termina linhas suprimindo a sua impresso na tela% comentrios! Seguida de um comando do DOS, acionar esse comando digitado' definestring = efetua atribuio de varivel

    2.4 Operadores aritmticos

    Operador Significado Exemplo Resultado+ adio 2+3 5- subtrao 5-4 1* multiplicao 2*3 6.* multiplicao elemento a elemento [1 2].*3 3 6/ diviso direita 2/4 0.5000./ diviso elemento a elemento [8 4]./2 4 2 \ diviso esquerda 2\4 2^ potenciao 2^3 8.^ potenciao elemento a elemento [3 4].^2 9 16' outranspose

    transposta [3 4] 34

    2.5 Operadores condicionais

    Operador Descrio Exemplo Resultado== igual a 5==2 0 (falso)> maior do que 5>2 1(verdadeiro )>= maior ou igual a 5>=2 1(verdadeiro )< menor do que 5

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    6/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    7

    CAPTULO III

    3 FUNES ELEMENTARES DO MATLAB

    3.1 Funes Cientficas

    O MATLAB tem uma srie de funes cientficas predefinidas (help elfun ). A maioriapode ser usada da mesma forma que seria escrita matematicamente. Por exemplo:

    >> x=sqrt(2)/2x =

    0.7071>> y=acos(x)y =

    0.7854>> y_graus=y*180/piy_graus =

    45.0000

    Estes comandos calculam o arco cujo cosseno 22 , inicialmente em radianos, depois

    em graus. Abaixo segue uma lista de algumas funes cientficas disponveis:

    Funes Trigonomtricassin (x) seno de x sinh (x) seno hiperblico dexcos (x) coseno de x cosh (x) coseno hiperblico dextan (x) tangente de x tanh (x) tangente hiperblica dexcot (x) cotangente de x coth (x) cotangente hiperblica dexsec (x) secante de x sech (x) secante hiperblica dexcsc (x) cosecante de x csch (x) cosecante hiperblica dexasin (x) arco cujo seno x asinh (x) arco cujo seno hiperblico xacos (x) arco cujo cosseno x acosh (x) arco cujo coseno hiperblico xatan (x) arco cuja tangentex. atanh (x) arco cuja tangente hiperblica xacot (x) arco cuja cotangentex acoth (x) arco cujo cotangente hiperblica xacsc (x) arco cuja cosecante x acsch (x) arco cujo cosecante hiperblica xasec (x) arco cuja secante x asech (x) arco cujo secante hiperblica x

    Funes Elementaresabs(x) valor absoluto, ou seja, mdulo dexexp(x) exponencial (basee), ou seja, exfix arredonda em direo ao zero, considera apenas a parte inteira: Exemplo:2.98 = 2floor arredonda em direo a menos infinito (-)ceil arredonda em direo a mais infinito (+)gcd(x,y) mximo divisor comum dex e ylcm(x,y) mnimo mltiplo comum dex e ylog(x) logaritmo natural (basee ), ou seja, logaritmo dex na base e log10(x) logaritmo decimal (base10), ou seja, logaritmo dex na base 10log2 logaritmo base2 e desmembra nmeros em ponto-flutuanterat aproximao racional: Exemplo:rat(pi)= 3 + 1/(7 + 1/16) = 355/113rats sada no formato racional: Exemplo:rats(pi) = 355/113rem (x,y) resto da diviso dex por y: Exemplo:rem(8,3) = 2round arredonda para o inteiro mais prximo: Exemplo:2.98 = 3sign funo sinalsqrt(x) raiz quadrada dex

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    7/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    8

    3.2 Formatos Numricos

    Quando o MATLAB mostra um resultado numrico ele segue certas regras. No caso denenhum formato estar definido, se um resultado um nmero inteiro, o MATLABmostra como um inteiro. Quando um resultado um nmero real, o MATLAB mostra

    uma aproximao com at quatro casas decimais. Este foi o caso no exemplo do arcocosseno, que fizemos anteriormente. Se os dgitos significativos estiverem fora destafaixa, o MATLAB mostra o resultado em notao cientfica. Voc pode definir umformato diferente. Os seguintes comandos controlam o formato em que so mostradosos dados e resultados:

    FORMATO RESULTADOformat short Ponto fixo, 4 casas decimais(formato predefinido, default padro)format short e Notao cientifica, 4 casas decimaisformat long Ponto fixo, 14 casas decimaisformat long e Notao cientifica, 14 casas decimaisformat bank Valor monetrio (dlares e centavos), 2 casas decimaisformat rat Formato racional (aproximadamente), isto , razo de inteiros

    importante salientar que o MATLAB no muda a sua forma de representar osnmeros internamente, quando formatos diferentes de exibio de nmeros soescolhidos.

    3.3 Entrada de Matrizes

    Uma matriz, no MATLAB, pode ser introduzida de diversas maneiras:

    Entrada atravs de uma lista explcita de seus elementos

    Essa a maneira mais fcil de entrar com pequenas matrizes. Nessa lista, oselementos so separados por espao(s) " " ou por vrgula ",", estando entre colchetes"[ ]", e usando ponto e vrgula ";" para indicar o final de cada linha.

    Exemplos:1) Usando ponto e vrgula A=[1 2 3;4 5 6;7 8 9] PressionandoENTER, tem-se o resultado:A =

    1 2 34 5 67 8 9

    2) Sem usar o ponto e vrgula seria A=[1 2 3 PressionandoENTER4 5 6 PressionandoENTER7 8 9] PressionandoENTERA =

    1 2 34 5 67 8 9

    Gerando a matriz com uso de uma declarao ou funo

    Para gerar uma matriz atravs desta opo, basta declarar a funo e seu respectivoargumento .

    Exemplos:1) Gerar uma matriz identidade 3X3 I3=eye(3)

    I3 =

    1 0 00 1 00 0 1

    2) Gerar uma matriz nula 2x3 Z0=zeros(2,3)

    Z0 =0 0 00 0 0

    3) Gerar um vetor formado por elementos 1's UM=ones(3,1)

    UM =

    111

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    8/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    9

    Criando um arquivo com extenso M

    Para criar um arquivo com extensoM, utilizamos um editor de texto, como porexemplo o EDIT do DOS, o WORDPAD do WINDOWS, o editor do MATLAB, etc.

    Exemplo:1) Utilizando o editor do MATLAB, criar o arquivomatriz1.m (a extenso sempre m)contendo uma matriz M: 2x3, formada pelos elementos (1, 2, 3, 4, 5, e 6, nessa ordem).Para entrar no editor faa: Clique emFile , New e M -File

    A seguir digite: M=[1 2 3;4 5 6]

    Para salvar este arquivo: Clique emFile , Save As , Salve como:matriz1.m

    Para que a matriz M esteja disponvel basta digitar o nome do arquivo nas linhas decomando.

    matriz1M =

    1 2 34 5 6

    Sempre que escrevermos uma matriz e encerrarmos com ponto e vrgula ";" a suaexibio na tela ser omitida. Isto til principalmente no caso em que a expressoresulta em matrizes de grandes dimenses. Neste caso, para termos a matriz na tela,basta digitar o nome dado a ela.

    Exemplo: I50=eye(50); Pressionando ENTER, aparece apenas a prxima linha de comando % ao digitar o nome da matriz, a mesma mostrada de forma explcita. I50

    I50 =

    Columns 1 through 12

    1 0 0 0 0 0 0 0 0 0 0 0 ......

    Lembrete: 1) Deve-se dar ENTERaps cada linha de comando para que o MATLABexecute o mesmo.

    2) Os parmetros devem estar entre parnteses "( )"

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    9/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    10

    3.4 Polinmios

    Os polinmios so representados, no MATLAB, como vetores linhas contendo oscoeficientes ordenados segundo as potncias decrescentes dos termos. Existem vriasfunes que trabalham com polinmios so elas:

    FUNO OBJETIVOconv multiplicar polinmios; convoluoconv2 multiplicar polinmios bidimensionaisdeconv dividir polinmios; deconvoluopoly construir polinmio a partir de suas razes. polinmio caractersticopolyadd efetuar a soma de polinmiospolyder calcular a derivada de polinmiopolyfit efetuar ajuste polinomial de dadospolyval avaliar uma matriz polinomialresidue resduo de diviso de polinmiosroots determinar as razes de um polinmio (zeros)

    3.4.1 Razes

    Considere o vetor p = [1 5 6], correspondente aos coeficientes da equao dosegundo grau: x2 5x + 6 = 0 e r = [3 2] o vetor contendo as razes dessa equao.

    A funo MATLABroots (p): determina as razes da equao cujos coeficientes estocontidos em p, enquanto que a funopoly ( r) retorna os coeficiente do polinmio quepossui como razes os componentes do vetor r.

    Assim, tem-se:

    p=[1 5 6]; r=roots(p)r =32

    p=poly(r)p =

    1 -5 6

    3.4.2 Adio

    Se a dimenso dos polinmiosp1 e p2 forem iguais, pode-se fazer:p1 + p2 para obter asua soma. Se a dimenso de p1 for diferente da dimenso dep2, pode-se usar um dosdois casos:

    - Preencher com zeros os coeficientes das potncias que faltam em um polinmiopara este igualar-se em dimenso com o outro;

    - Usar a funopolyadd (p1,p2)

    3.4.3 Multiplicao

    A funoconv (p1,p2) multiplica o polinmiop1 pelo polinmiop2.

    3.4.4 Diviso

    A sintaxe [q,r] = deconv (p1,p2) retorna o resultado da diviso do polinmiop1 pelopolinmiop2. Nessa sada aparecem duas variveis, onde:q: o quociente da diviso dep1 por p2 e r: o resto dessa diviso

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    10/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    11

    3.4.5 Avaliao

    A sintaxepolyval (p,a) avalia o polinmiop para o valora

    Exemplo: Calcular o valor de p(5) para o polinmio p(x) = x2 5x + 6

    p = [1 5 6]; polyval(p,5)ans =

    6% como no foi atribudo um nome para a varivel resposta, a sada ansabreviao de answer = resposta

    3.4.6 Derivada

    A funo que determina a derivada do polinmiop a funo: polyder (p). Seroexibidos os coeficientes do polinmio que representam a derivada.

    Exemplo: Calcular a derivada da funo x2 5x + 6 = 0

    p = [1 5 6]; der=polyder(p)der =

    2 -5Portanto, a derivada dada por: 2x-5

    3.4.7 Interpolao: adequao de curvas (funo: polyfit)

    A funo MATLABpolyfit executa o ajuste polinomial de dados. A sintaxepolyfit (x,y,n) encontra os coeficientes de um polinmio de graun que ajusta aosdados, p(x(i))y(i), no sentido dos mnimos quadrados.p= polyfit (x,y,n), onden a ordem da funo dey em relao ax.Interpolao linear: n=1;Interpolao quadrtica: n=2;Interpolao cbica (usando funo do terceiro grau): n=3

    Exemplos:Function ajuste_poli1x=[1 2 3 4 5];y=[5 7 9 11 13];plot(x,y, '.' )pauseclosep1=polyfit(x,y,1)p2=polyfit(x,y,2)p3=polyfit(x,y,3)p1 =

    2.0000 3.0000p2 =

    0.0000 2.0000 3.0000p3 =

    -0.0000 0.0000 2.0000 3.0000

    function ajuste_poli2x=[0 1 2 3 4 5];y=[6 2 0 0 2 6];plot(x,y, '.' )pauseclosep1=polyfit(x,y,1)p2=polyfit(x,y,2)p3=polyfit(x,y,3)p1 =

    -0.0000 2.6667p2 =

    1.0000 -5.0000 6.0000p3 =

    0.0000 1.0000 -5.0000 6.0000

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    11/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    12

    3.5 Sistema de Equaes Lineares

    Resolver sistemas da forma: A * x = b, se det(A) 0 (det = determinante) tem-se umanica soluo dada por: x = A-1 * b.

    No MATLAB, esses sistemas podem ser resolvido com qualquer um dos comandos: x=inv(A)*b ou x=A\b ou x=pinv(A)*b

    Exemplo 1: Resolver o sistema de equaes lineares:=+

    =+=++

    523282

    321

    321

    321

    x x x

    x x x

    x x x

    No MATLAB, a entrada ser:

    A=[1 2 1; 2 -1 1; -1 1 -2]A =

    1 2 12 -1 1

    -1 1 -2 b=[8;3;-5]b =

    83

    -5x=inv(A)*b ou x=A\b ou x=pinv(A)*bx =

    123

    Assim, a soluo encontradarepresenta:x1 = 1;x2 = 2 ex3 = 3

    Exemplo 2 : Resolver o sistema:

    =++++=++++=++++=++++

    =++++

    175922518111903211912102452220136419016147533

    1751582417

    54321

    54321

    54321

    54321

    54321

    x x x x x

    x x x x x

    x x x x x

    x x x x x

    x x x x x

    Dica: Use a funo inversa e a formatao de nmeros racionais

    Resposta: SPD: = )3931952,

    3931589,

    3931171,

    393883,

    393260(S

    A=[17 24 1 8 15; 33 5 7 14 16; 4 6 13 20 22; 10 12 19 21 3; 11 18 25 2 9]; b=[175 190 245 190 175]'; X=inv(A)*bX =

    0.66162.24682.97964.04334.9669

    format rat X=inv(A)*bX =

    260/393883/393

    1171/3931589/393

    1952/393

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    12/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    13

    Uma outra funo MATLAB, permite a soluo de sistemas numricos:solve

    Exemplos : Resolva os sistemas usando a funosolve do MATLAB

    = =+ 210

    y x

    y x [x,y]=solve('x+y=10', 'x-y=2')x =6y =4

    =+=+=++

    523282

    321

    321

    321

    x x x

    x x x

    x x x [x,y,z]=solve('x+2*y+z=8','2*x-y+z=3','-x+y-2*z=-5')x =1y =2z =3

    Exerccio 1 : Construir um programa para a resoluo de sistemas lineares com uma nicasoluo ou seja det(A)0.function sislindisp( ' ' )disp( ' Resoluo de sistemas lineares do tipo Ax=b, com det(A)~=0' )disp( ' ' )A=input( ' Entre com a matriz dos coeficientes (entre [ ]): A ==> ' )disp( ' ' )b=input( ' Entre com o vetor das constantes (entre [ ]): b ==> ' )disp( ' ' )if det(A)==0

    disp( ' ' )

    disp ( ' Fim do Programa' )disp( ' ' )else

    disp( ' Soluo encontrada para o sistema' )disp( ' ' )x=inv(A)*b;i=1;

    while i

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    13/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    14

    3.5 Operaes com conjuntos

    Dados A = [1 2 3 4 5] e B = [4 5 6 7 8]union (A,B) representa AB = [1 2 3 4 5 6 7 8]intersect (A,B) representa AB = [4 5 ]setdiff (A,B) representa A - B = [1 2 3]setxor (A,B) representa (AB) - (AB) = [1 2 3 6 7 8]

    A=[1 2 3 4 5]; B=[4 5 6 7 8]; uniao=union(A,B)uniao =

    1 2 3 4 5 6 7 8 intersec=intersect(A,B)intersec =

    4 5 difer=setdiff(A,B)difer =

    1 2 3 exclus=setxor(A,B)exclus =

    1 2 3 6 7 8

    Outros comandos teis

    prod (v)retorna o produto do elementos do vetorv. Exemplo:v = [1 2 3],prod (v)= 6power (m,n) determinamn, m pode ser matriz. Exemplo:power (2,3) = 8factor (n) determina os fatores primos den, ou decompe polinmios.Ex. : 1)factor(210) = [2 3 5 7]2)x=sym('x'); decomp=factor(x^2-4) =(x-2)*(x+2)primes (n) determine os nmeros primos entre 0 e n. Ex. : 1)primes(10) = [2 3 5 7]perms ( v) mostra todas as possveis permutaes dos elementos contidos no vetor. Para determinaro nmero de permutaes, faa:length(perms( v)) nchoosek(m,n) determina o nmero de combinaes simplesnchoosek(4,2 )= 6 .Para determinar ascombinaes, faanchoosek(v,n) onde V um vetor contendo os elementos a ser combinados en,o nmero de elementos a ser tomado em cada combinao

    Exerccio 1: Construir um programa que calcula o fatorial de um nmero n dado.

    function fatorial(n)% Determinar o fatorial de um nmero n dado% n! = n .(n-1).(n-2).(n-3). ... .3.2.1% Sintaxe: fatorial(n)if n < 0

    disp( ' ' )disp( ' Erro: o nmero deve ser no negativo' )disp( ' ' )

    elseif n==0disp( ' ' )fatorial_n=1;disp([ ' ' num2str(n), '! = ' num2str(fatorial_n)]);disp( ' ' )

    elsedisp( ' ' )fatorial_n=prod(1:n);disp([ ' ' num2str(n), '! = ' num2str(fatorial_n)]);disp( ' ' )

    end

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    14/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    15

    3.7 Data e Hora

    As funes relacionadas a data e hora so importantes, pois possibilitam determinar otempo de execuo de nossos programas. As principais funes so:

    date retorna dia-ms-anoclock retorna data e hora atual (ano, ms, dia, hora, minutos, segundos) nesta ordemdatestr converte a data numrica em literaisweekday retorna o dia da semanacalendar calendrio de qualquer msdatetick inserir data em grficos (eixo x)cputime tempo de CPU (unidade central de processamento) utilizado pelo MATLABetime retorna tempo (em segundos) transcorrido entre dois momentos especificados.

    sintaxe: t1 =clock ; t2 =clock ; tempo =etime (t2,t1)tic, toc aciona e faz a leitura de um cronmetro, respectivamente

    Exemplofunction tempo

    t1=clock;disp( ' ' )c=clock;c1=c(1);c2=c(2);c3=c(3); c4=c(4);c5=c(5);c6=c(6);disp([ ' Data: ' num2str(date), ' ' num2str(c4), ' horas ' num2str(c5), ' minutos' num2str(c6), ' segundos' ])disp( ' ' )disp( 'OUTRA FORMA ' )disp( ' ' )disp([ ' dia: ' num2str(c3), ' ms: ' num2str(c2), ' ano: ' num2str(c1)])disp( ' ' )disp([ ' ' num2str(c4), ' horas ' num2str(c5), ' minutos ' num2str(c6), ' segundos' ])pause(2)t2=clock;t=etime(t2,t1);

    disp( ' ' )disp([ ' tempo transcorrido: ' num2str(t), ' segundos' ])disp( ' ' )

    3.8 Nmeros complexos

    Os nmeros complexos so nmeros da forma: z = a + bi = a + bj, com a e b ,e i = j = 1 . No MATLAB, as principais funes relacionadas aos complexos so:abs mdulo (magnitude) do nmero complexoangle ngulo (fase, argumento) do nmero complexocart2pol transforma coordenadas cartesianas para polares

    cart2sph transforma coordenadas cartesianas para esfricasconj conjugado do nmero complexoimag parte imaginria do nmero complexopol2cart transforma coordenadas polares para cartesianasreal parte real do nmero complexosph2cart transforma coordenadas esfricas para cartesianas

    Exemplo: a=1+1i; Real=real(a)Real = 1 Imag=imag(a)Imag = 1 Modulo=abs(a)Modulo =

    1.4142

    angulo_radiano=angle(a)angulo_radiano =

    0.7854% Obtm-se o argumento(ngulo)do nmero complexoangulo_radiano normalizado, isto , no intervalo [-pi,pi] angulo_graus=angulo_radiano*180/piangulo_graus =

    45

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    15/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    16

    3.9 Operaes com vetores e matrizes

    Definio de intervalos

    Exemplos:>> 0:0.05:2 % inicio: incremento :fim>> 0:2 % inicio:1:fim>> linspace (1,13,5) % linspace(inicio,fim,n)>> linspace (4,200) % linspace(inicio,fim,100)>> logspace (0,2,11) % potncia de 10: logspace(inicio,fim,n)>> for k=vi:in:vf instrues end

    linspace : define vetores com elementos linearmente espaados (incrementosiguais). Obs.: Se o nmero de elemento for omitido, o MATLAB assume 100.

    Exemplo: Formar uma P. A., onde a1=1; an=13 e n=5 Vet1=linspace(1,13,5) % Forma uma P. A., onde a1=1; an=13 e n=5

    Vet1 =1 4 7 10 13

    VetoresDECLARAO SIGNIFICADOsum(v) A soma dos componentes do vetorvstd(v) Desvio padro com respeito mdiamax(v) Maior componente de um vetormean(v) Mdia das componentes do vetorvmin(v) Menor componente do vetorvabs(v) Mdulo das componentes do vetorvnorm(v) Norma euclidiana do vetorv

    length(v) Nmero de componentes do vetorvsort(v) Ordena o vetorv em ordem crescenteprod(v) Produto das componentes do vetorvx * y Produto interno dos vetoresx e y

    Principais funes matriciais [Notao: (m = n0 de linhas, n = n0 de colunas e A = matriz]DECLARAO SIGNIFICADOdet(A) Determinante de uma matrizinv(A) Inversa de uma matrizpinv(A) Inversa generalizada de uma matrizeye(n) Matriz identidadek.eye(A) Matriz escalar

    trace Trao de uma matriz (soma dos elementos da diagonal principal)A = transpose(A) Matriz transpostarank(A) Posto de uma matriz (rank=nmero de linhas Linearmente Independentes)rand(m,n) Gera dados com distribuio uniforme no intervalo (0, 1)randn(m,n) Gera dados com distribuio normal padronizada (mdia = 0 e varincia = 1)diag(A) Matriz diagonal ou diagonal de uma matriz (exibe os elemento da diagonal)zeros(m,n) Matriz nulaautovalores = eig(A) Autovalores de uma matriz[autovet autoval]=eig(A) Autovetores de uma matriz (Os autovetores j saem normalizados)sqrt(A) Raiz de uma matriz (extrai a raiz de cada elemento da matriz)sqrtm(A) Raiz quadrada de uma matriz A1/2.A1/2 =1A * A = A Matriz idempotenteA= inv(A) Matriz ortogonal (A inversa da matriz a sua transposta)A= inv(A) e det(A) = 1 Matriz ortonormalA = A Matriz simtricaA = - A Matriz anti-simtrica

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    16/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    17

    Captulo IV

    4 RECURSOS GRFICOS

    O MATLAB possui ferramentas poderosas e amigveis para a visualizao de dados,

    bem de acordo com a filosofia de um laboratrio de dados: fcil de experimentar e fcilde averiguar. Nesta seo apresentar-se- aspectos bsicos e uma viso geral dosrecursos grficos disponveis. Informaes detalhadas ou sobre grficos especficospodem ser obtidos noHelp do MATLAB.

    4.1 Visualizao de Curvas

    Os dados a serem visualizados em um grfico devem estar, tipicamente, em um vetor.O MATLAB no desenha diretamente grficos de funes como no MAPLE ouMATHEMATICA. Por exemplo, para se desenhar o grfico da funo seno, de -pi atpi , devemos criar um vetor com os valores da funo seno e depois plotar o vetor:

    x = -pi : 0.1 : pi; y= sin (x); plot( y )

    O resultado doplot

    0 10 20 30 40 50 60 70-1

    -0.8

    -0.6

    -0.4

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

    Note que o eixo das abcissas no reflete a faixa de valores que foi usada para produziro vetor y, de -pi at pi . Ao invs disso, oplot assume que o eixo das abcissas deveser o ndice do vetor. Para plotar os valores corretos no eixo das abcissas, basta usaruma pequena variao desse comando (plot (x,y)).

    Quando passamos dois vetores para o comandoplot , a funo assume que o primeirovetor o das abcissas, e o segundo vetor o das ordenadas. O resultado :

    x = -pi : 0.1 : pi; y = sin ( x );plot( x, y);

    -4 -3 -2 -1 0 1 2 3 4-1

    -0.8

    -0.6

    -0.4

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    17/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    18

    Exemplo 1: Construir um programa para plotar duas curvas no mesmo grfico, sendo aprimeira com linha slida, na cor vermelha e os pontos representados por asteriscos ea segunda com linha pontilhada e na cor azul.

    1 a forma:function grafico_2x1ax=-1:0.1:1;y=x.^2;z=x.^3;plot(x,y, 'r*' ,x,z, 'b:' )pauseclose

    2 a forma:function grafico_2x1bx=-1:0.1:1;y=x.^2;z=x.^3;plot(x,y,' r* ')pause % pausa at ser pressionada uma teclahold on % Mantm o grfico atualplot(x,z,' b: ')pauseclose

    4.1.1 Estilos de linhas, marcadores e cores

    No MATLAB, existem as seguintes configuraes de linhas, marcadores e cores,opes essas vlidas para plotar em 2D e 3D.

    Tipos de cores Marcadores de ponto Tipos de linhasy yellow amarelo . point ponto - solid slidam magenta magenta (lils) o circle crculo : dotted pontilhadac cyan azul-claro x x-mark x -. dashdot trao-pontor red vermelho + plus + -- dashed tracejadag green verde * star asteriscob blue azul escuto s square quadradow white branco d diamond diamantek black preto v triangle tringulo

    ^ triangle tringulo< triangle tringulo> triangle tringulop pentagram estrela de 5 pontash hexagram estrela de 6 pontas

    Manipulao dos eixos (aps o plot ):

    Construo do eixo X hold on; plot([Xmin Xmax],[0 0])Construo do eixo X hold on; plot([0 0], [Ymin Ymax])axis ('ij') insere os valores do eixo y em ordem decrescenteaxis ('off') elimina os eixosaxis ([Xmin Xmax Ymin Ymax]) define escalas para os eixos X e Yaxis (auto) retorna ao modo automtico: Xmin = min(X) e Xmax = max(X), etc

    4.1.2 Especialidades dos grficos bidimensionais

    xlabel ('rtulo do eixo x'): ttulo do eixo Xylabel ('rtulo do eixo y'): ttulo do eixo Ygrid : para inserir linhas de gradetitle ('ttulo'): coloca ttulo no grfico, centralizado, na parte superior da telatext (x,y,'texto'): coloca texto usando as coordenadas (x,y) como incio do textogtext ('texto'): coloca texto, que ir comear a ser escrito no local onde o mouse for clicado, coincidindo oincio do texto com o cruzamento das duas retas que aparecemlegend ('legenda1','legenda2',...,'legendan'): cria uma caixa de legendas no canto superior direito.Quando desejar mudar de lugar, basta clicar na caixa e arrastar com o boto esquerdo domouse clf apaga a figura atualclose fecha todas as janelas grficas

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    18/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    19

    figure (n): ativa a janela da figura especificada (n)zoom : expande a figura a cada click do boto esquerdo do mouse e clicando-se no boto direitoacontece o contrriobox : liga a caixa ao eixo (traa os eixos das ordenadas e das abscissas nos dois lados)colordef black : colore o fundo da tela de pretocolordef white : colore o fundo da tela de branco

    pause : pausa na execuo programa, at ser pressionada uma teclapause (n): pausa na execuo de um programa de (n) segundoshold on : mantm o grfico atual

    Exemplo 2: Desenhar o grfico da funo f(x) = x2 + 2, no intervalo [-5, 5], fornecendottulo ao grfico, bem como aos eixos x e y. Inserir uma observao destacando ovrtice da parbola, criar uma legenda e gerar grade.

    function graf1x=-5:0.01:5; % inicio: incremento :finaly=x.^2+2;xv=0;yv=2;plot(x,y) % Cria curva com linha slida e azulhold on % Mantm o grfico atualplot(xv,yv, 'or' )title( 'PARBOLA' ) % Ttulo do grficoxlabel( 'eixo das abscissas' ) % Nome do eixo xylabel( 'eixo das ordenadas' ) % Nome do eixo ytext(xv, yv, 'vrtice' ) % Inseri texto ao grfico em local predefinido noprograma (xv,yv)legend( 'y = x.^2 + 2' ) % Cria legendagrid % Gera gradepauseclose

    Destaca-se que podem ser gerados vrios grficos em uma mesma janela, com ocomando subplot e que as janelas grficas podem ficar abertas simultaneamente comos comandos figure e hold .

    A sintaxe subplot (m,n,p): particiona a tela para construo do grfico em um nmeroigual a mxn, onde p representa a posio de cada novo grfico, ou seja, cada grficoter uma posio de acordo com elementos matriciais (m linhas e n colunas).

    Exemplo 3:function sub_plot

    subplot(2,2,1)x=-4:0.01:4;y=x.^2;plot(x,y)

    subplot(2,2,2)x=-4:0.01:4;y=x.^2-5*x+6;plot(x,y)

    subplot(2,2,3)x=-4:0.01:4;y=x.^2 + 5;plot(x,y)

    subplot(2,2,4)x=-2:0.01:2;y=x.^3;plot(x,y)pauseclose

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    19/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    20

    Nota: A estrutura doplot permite que os grficos no estejam restritos a funes.Podemos plotar curvas paramtricas tambm, como por exemplos.

    Exemplo 1:Circunferncia trigonomtricafunction ciclot=0:0.01:2*pi;

    x=cos(t);y=sin(t);plot(x,y, 'r' )title( 'circunferncia trigonomtrica' )xlabel( 'eixo dos cossenos' )ylabel( 'eixo dos senos' )hold onplot([-1 1],[0 0])plot([0 0],[-1 1])pauseclose

    -1 -0.5 0 0.5 1-1

    -0.8

    -0.6

    -0.4

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1circunfer ncia trigonom trica

    eixo dos cossenos

    e i x o

    d o s s e n o s

    Exemplo 2: Cardiide

    t=-pi:0.1:pi;x=2*cos(t)-cos(2*t);y=2*sin(t)-sin(2*t);plot(x,y);

    -3 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5-3

    -2

    -1

    0

    1

    2

    3

    Com esse exemplo fica claro que o comandoplot adequado para a visualizao decurvas paramtricas em 2D. A curva exibida uma poligonizao (interpolao linear)dos pontos p(i)=(x(i),y(i)) passados como parmetros. O caso de grfico de uma funoy = f(x) deve ser tratado como um caso particular de grficos de curvas (a saber, ogrfico da funo y=f(x) o mesmo que o da curva x=t ; y=f(t) ). Existe tambm oplot3 que tem o mesmo princpio doplot , mas destina-se a visualizao de curvasparamtricas em 3.

    4.1.3 Funes grficas 2D especiais

    pie : grficos de pizza (setores). A sintaxepie (x, x == max(x)): plota os valores de x,sendo destacada a fatia que representa a parte maior deste conjunto de dados. Para

    referenciar o que representa cada fatia deve-se usar o comandolegend .Exemplo:

    function fatiax=[40 30 20 10];pie(x,x==max(x))legend( 'TIMOS' , 'BONS' , 'MDIOS' ,... 'REGULARES' )pauseclose

    40 %

    30 %

    20 %

    10 %

    TIMOSBONSMDIOSREGULARES

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    20/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    21

    pareto (x): Os valores do vetorx so desenhados em colunas em ordem decrescente.

    Exemplo:function grafico_pareto1x=[104 42 20 10 6 4 14];

    pareto(x)legend( 'LINHA DE PARETO' , 'HISTOGRAMA' );pauseclose

    1 2 3 7 4 50

    20

    40

    60

    80

    100

    120

    140

    160

    180

    200

    0%

    10 %

    20 %

    30 %

    40 %

    50 %

    60 %

    70 %

    80 %

    90 %

    100%

    LINHA DE PARETO

    HISTOGRAMA

    histfit : histograma com ajuste a curva normal.

    Exemplo: x=normrnd(0,1,1000,1); histfit(x) xlabel('eixo x') ylabel('eixo y')

    -3 -2 -1 0 1 2 30

    10

    20

    30

    40

    50

    60

    70

    80

    90 HISTOGRAMA COM AJUSTE A CURVA NORMAL

    eixo x

    e i x o y

    area (x,y): Semelhante aoplot (x,y), mas a rea sob a curva hachurrada, ou seja,plota um grfico de rea.

    function graf_areax1=-5:0.01:5;y1=x1.^2;plot(x1,y1)hold onx2=1:0.01:3;y2=x2.^2;area(x2,y2)title( 'GRFICO DE REA' )xlabel( 'EIXO X' )ylabel( 'EIXO Y' )pauseclose

    -5 0 50

    5

    10

    15

    20

    25GRFICO DE REA

    EIXO X

    E I X O

    Y

    comet : gera grfico com exibio da trajetria animada, ou seja, plota com trajetriade cometa.

    Exemplo: x=0:0.001:2*pi;comet(x,sin(x))

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    21/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    22

    4.1.4 Funes para grficos bidimensionais

    A seguir, tem-se alguns dos principais comandos para plotar grficos 2D que no foramapresentados anteriormente:

    bar grfico de barras verticais (colunas)barh grfico de barras horizontaisclabel acrescenta rtulos dos nveis em grficos tipo curvas de nveis (contour )colorbar mostra mapa de cores na forma de uma barra (escala) de corescompass compass (z) traa um grfico que mostra ngulo e magnitude dos elementos complexos

    de z como setas emanando da origem (plotar em forma de bssula)contour plota contorno 2D (tipo curva de nvel)contourc clculo dos nveis (para plotagem de curvas de nveis)delete elimina um objeto grficoerrorbar traa grfico acrescentando barras (representando faixas) especificadas de erros.ezplot (funo,[Xmin Xmax] % coordenada linearezpolar (funo,[Xmin Xmax] % coordenada polarfeather (z) traa um grfico que mostra o ngulo e a magnitude dos elementos complexos de z

    como setas emanadas de pontos igualmente espaados ao longo de um eixo horizontalfill desenha polgono 2Dfplot (funo,[Xmin Xmax] % plotar funoginput retorna as coordenadas de pontos de um grfico selecionados com omouse ou o cursorhist plota histogramaline cria objeto grfico do tipo linhaloglog plota em escala logartmica para ambos os eixospatch cria objeto grfico do tipopatch polar (t,r) plota em coordenadas polares o ngulo teta (t), em radianos, versus o raio rrose plota histograma em ngulorotate gira um objeto grfico de um certo ngulo, em uma direo especificadascatter grfico discreto que indica pontos com marcadores

    semilogx plota em semilogsemilogy plota em semilogset estabelece propriedades para objetos grficosstairs grfico escada (plotar em degrau, apropriado para sinais amostrados)stem grfico discreto que indica pontos com marcadores

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    22/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    23

    4.2 Visualizao de Superfcies

    4.2.1 Grficos de linha tridimensional

    A sintaxeplot3 (x,y,z) utilizada para plotar pontos e linhas no espao tridimensional.

    Exemplo 1: Plotar a poligonal cujos vrtices so dados pelos vetores: x = [1 2 3 4 5],y = [1 2 3 4 5] e z = [2 2 3 4 4]

    function ex_plot3x=1:5; y=1:5;z=[2 2 3 4 4];plot3(x,y,z)gridhold onplot3(x,y,z, 'ro' )pauseclose

    12

    34

    5

    12

    34

    52

    2.5

    3

    3.5

    4

    Exemplo 2: Plotar a linha (hlice) onde: x= sen (t), y = cos(t) e z = t

    function ex_plot3bt=0:pi/50:10*pi;plot3(sin(t),cos(t),t);title( 'DIAGRAMA DE LINHAS' )gridxlabel( 'Eixo X' )ylabel( 'Eixo Y' )zlabel( 'Eixo Z' )pauseclose

    -1-0.5

    00.5

    1

    -1

    -0.50

    0.510

    10

    20

    30

    40

    Eixo X

    DIAGRAMA DE LINHAS

    Eixo Y

    E i x o

    Z

    O comando comet3 exibe o traado de uma curva em trs dimenses, com trajetriade cometa.

    Exemplo:function helice% comet3: exibe o traado de uma curva em trs dimenses, visualiza-se odesenho de uma hlice sendo traado, por exemplot=0:pi/100:10*pi;comet3(sin(t),cos(t),t)title( 'HLICE' )xlabel( 'sen(t)' )ylabel( 'cos(t)' )zlabel( 't' )pauseclose

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    23/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    24

    4.2.2 Grficos de Malha e Superfcie

    A sintaxe [X,Y] =meshgrid ([Xmin Xmax] , [Ymin Ymax]) especfica o domnio paraplotar funes.

    Exemplo 1:x=1:3;y=4:7;[X,Y]=meshgrid(x,y)X =

    1 2 31 2 31 2 31 2 3

    Y =4 4 45 5 56 6 67 7 7

    Desta forma, a declarao [X,Y]=meshgrid (x,y) transforma o domnio especificadopelos vetores x e y em valores de X e Y, permitindo a avaliao de funes de duasvariveisZ=f(X,Y) e usando a declarao mesh (Z) plota-se superfcies em 3D.

    Exemplo 1: plotar z=x2 + y2 com 2x 2 e 2 y 2function parabolicax=-2:0.1:2;y=-2:0.1:2;[X,Y]= meshgrid(x,y);Z=X.^2+Y.^2;mesh(Z)pauseprint dbitmap c:\graficos\parabolicaclose

    Para a visualizao de superfcies paramtricas em3, o MATLAB possui duasfunes, surf e mesh . No mesmo esprito doplot , essas funes recebem comoparmetros 3 matrizes X, Y e Z e exibe uma reconstruo poligonal dos pontosp(i, j)=(x(i, j),y(i,j),z(i,j)). Por exemplo, para desenhar uma esfera podemos entrar comos comandos:

    function graf_esferat=-pi:0.5:pi;s=-pi:0.5:pi;% Esse comando gera uma matriz xonde cada elemento:% x(i,j)=cos(t(i))*sin(s(j))x=transpose(cos(t))*sin(s);% y(i,j)=sin(t(i))*sin(s(j));y=transpose(sin(t))*sin(s);% z(i,j)=cos(s(j))z=ones([1 length(t)])'*cos(s);surf(x,y,z);pauseclose

    -1-0.5

    00.5

    1

    -1-0.5

    00.5

    1-1

    -0.5

    0

    0.5

    1

    O caso mais comum de visualizao de superfcies de grficos de funes a doisparmetros z = f(x,y). Nesse caso as funessurf e mesh possibilitam umrelaxamento nos parmetros de entrada. Os parmetros x e y no precisam mais sermatrizes, podendo ser vetores. Por exemplo, para plotar agaussiana bi-dimensional f(x,y) = exp(-x2) * exp(-y2) podemos entrar com os comandos:

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    24/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    25

    function graf_fdp2normalx=-2:0.1:2;y=-2:0.1:2;z=transpose(exp(-(x .*x))) * exp(-(y.*y));surf(x,y,z)% surf(x,y,z,'FaceColor','red','EdgeColor',...

    'none'); % somente para a verso 6.0camlight leftlighting phong % para incrementar o grficopauseclose

    O comandomesh(X,Y,Z)cria uma perspectiva tridimensional plotando os elementos damatriz Z em relao ao plano definindo pelas matrizesX e Y. Esse comando mesh obedece o mesmo padro do surf mas gera uma superfcie em arame:

    Salienta-se que os comandos de gerao de grficos (comoplot , mesh e surf )possuem um grande nmero de opes.

    O comandocontour3 (Z) plota as curvas nvel deZ.

    Exemplo 2:function ex_contour3x=-2:0.2:2;y=-2:0.2:2;[X,Y]=meshgrid(x,y);Z=X.^2+Y.^2;surf(X,Y,Z)pausecontour3(Z)pauseclose

    510

    1520

    510

    15200

    2

    4

    6

    8

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    25/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    26

    Exerccio 1: Plotar a funo de distribuio de probabilidade (f.d.p) definida por:)(

    21 22

    21),(

    y xe y x f

    +=

    para - 3 x 3 e - 3 y 3.

    function distr_normal[X,Y]=meshgrid(-3:0.1:3,-3:0.1:3);Z=(1/sqrt(2*pi)*exp(-0.5*(X.^2+Y.^2)));mesh(X,Y,Z)title( 'DISTRIBUIO NORMAL BIDIMENSIONAL' )xlabel( 'eixo X' )ylabel( 'eixo Y' )zlabel( 'eixo Z' )pauseclose

    4.2.3 Funes para grficos tridimensionais

    Estes so alguns comandos para plotar grficos 3D que no foram apresentadosanteriormente:

    contour3 plota contorno 3D (tipo curva de nvel 3D)cylinder gera cilindroezplot3 gera grfico 3D a partir das equaes paramtricas (x(t),y(t),z(t))fill3 desenha polgono 3Dmeshc combinao mesh/contourquiver plota gradienterotate3d on permite girar a figura, usando-se o mouse, para visualiz-la de vrios ngulos, basta

    para isso apertar o boto esquerdo do mouse e arrast-lo

    slice plota fatias de um grfico volumtricosphere gera esferastairs grfico escada (plotar em degrau, apropriado para sinais amostrados)stem grfico discreto que indica pontos com marcadoressurface igual ao mesh mas os espaos so preenchidossurfc combinao surf/contoursurfil plota superfcie 3D com iluminaouicontrol cria controle de interface de usurio na janela de figura correnteuimenu cria menu de interface com o usurioview especifica ponto de visualizao (situao de um observador) para um grfico 3D.

    view (azimuth, elevao ) % elevao descreve a localizao do observador comoum ngulo acima do plano xy eazimuth refere-se ao ngulo interior ao plano xyonde o observador fica

    waterfall grfico tipowaterfall (semelhante a mesh , sem o quadriculado)brighten (n) controla a intensidade de cores escuras, onde:

    (0< n1): usado para clarear e (-1n

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    26/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    27

    4.3 Visualizao de Imagens

    O MATLAB permite tambm que matrizes sejam visualizadas como imagens. Tambm possvel ler imagens de arquivos tipo BMP, JPEG, TIF, GIF ... e guardar essaimagem em uma matriz, o que possibilita processamento e tratamento de imagens.

    Para exemplificar a visualizao de imagens, vamos tomar como exemplo a gaussianado exemplo anterior, discretizada na matriz z.

    x = -2:0.1:2 ; y = -2:0.1:2 ; z = transpose(exp(- (x .*x) ) ) * exp( -(y.*y) ); imagesc(z) ; % comando para visualizao da imagem

    Assim como os outros recursos grficos, a visualizao de imagens possui umagrande flexibilidade no ajuste dos parmetros.

    4.4 Demais Funes de Manipulao de Grficos do MATLAB

    As sees anteriores mostraram um conjunto muito reduzido dos recursos disponveispara a manipulao dos grficos. No entanto, os outros recursos e extenses seguemo mesmo esprito das funes apresentadas anteriormente. Para ter acesso aosdemais recursos para criao e manipulao de grficos disponveis, acesso ohelp do

    MATLAB. Assim, para ver uma relao completa das funes grficas do MATLAB:digite.

    help graph2d grficos em duas dimenses help graph3d grficos em trs dimenses help specgraph especialidades do grficos help graphics informaes das funes grficas e uma breve explicao

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    27/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    28

    4.5 Salvando figura em um formato bitmap (extenso BMP)

    Para salvar uma figura num arquivo com extenso BMP, que posteriormente poderser inserida, comofigura, em softwares tais como: oWord for Windows , o Excel , etc.,

    deve ser usado o comando:print dbitmap path filename , onde:path o caminho onde ser gravado o arquivo (drive e pasta)filename o nome do arquivo, que assumir automaticamente a extensobmp

    Exemplos:print dbitmap c:windows\parabola1 a figura atual ser salva, num arquivo com o nome

    parabola1.bmp, na pastawindows do drive cprint dbitmap a:\parabola1 a figura atual ser salva, num arquivo com o nome

    parabola1.bmp, no seu disquete

    Exemplo: Anlise de sinal : A caixa de ferramentas de processamento de sinalproporciona ferramentas para examinar e analisar sinais; examinando e analisando seuteor de freqncia ou expectro e criando filtros.

    function ruido% Construir um sinal de rudos:% A fc.linspace(0,10,512) cria 512 elem. igualmente espaados entre 0 e 10% linspace = linearmente espaadost=linspace(0,10,512); % eixo do tempox=3*sin(5*t)-6*cos(9*t)+5*randn((size(t))); % Rudo Branco normal(0, 1)plot(t,x) % Plota sinal com rudo gaussianotitle( 'SINAL DE UM RUDO' )xlabel( 'EIXO DO TEMPO' )pauseprint -dbitmap c:\graficos\ruido % salvar arquivo: ruido.bmp em c:\graficosclose

    4.6 Slidos em revoluo

    O MATLAB tem uma funo chamadamakevase que ativa uma janela denominadaMaking a Vase (fazendo um vaso), proporcionando a possibilidade de gerar slidos emrevoluo.

    Assim que digitadomakevase na linha de comandos, voc deve clicar na opoNewShape , logo aparecer na primeira janela uma linha vermelha que representar ocentro da rotao. Voc dever, em seguida, ir clicando com o boto esquerdo domouse fazendo o contorno da sua figura sendo que, o ltimo ponto dever ser feitocom o boto direito do mouse (ou esquerdo, desde que mantenha pressionado a teclashift ), aparecendo ento a figura (slido) na tela.

    Na janela, que usa as mesmas caractersticas de confeces de um vaso de barro,tem-se as opes:

    New Shape deve ser acionado (clicando) para se fazer uma nova figura (molde)Comment Window uma janela que fornece as instrues (passos) para confeces da superfcie em

    revoluoinfo abre uma janela de ajuda sobre como usar a funomakevase close fecha a janela relativa funomakevase

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    28/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    29

    CAPTULO V

    5 PROGRAMAO MATLAB

    Os comandos do MATLAB so normalmente digitados na Janela de Comandos, ondeuma nica linha de comando introduzida e processada imediatamente. O MATLAB tambm capaz de executar seqncias de comandos armazenadas em arquivos.

    Os arquivos que contm as declaraes do MATLAB so chamados arquivos ".m", econsistem de uma seqncia de comandos normais do MATLAB, possibilitando incluiroutros arquivos ".m" escritos no formato texto (ASCII).

    5.1 O Editor do MATLAB

    Uma das ferramentas disponveis no MATLAB um editor de textos especfico paraprogramas .m (o M-File Editor). Embora seja possvel editar um arquivo.m emqualquer editor de textos, o editor do MATLAB possui caractersticas que facilitammuito o trabalho do programador. Por exemplo, ele enfatiza as palavras chaves comcores diferentes, verifica balano de parnteses em expresses e prov uma interfaceamigvel para o uso doDEBUG. Podemos invocar o M-File Editor:

    1) Usando o comando:>> edit nome-do-arquivo ou, para abrir o editor com um arquivo vazio,>> edit

    2) Selecionando NEW M-FILEpara criar um novo arquivo ouOPEN M-FILEparaeditar um arquivo j existente, a partir do menuFILE.

    3) Selecionando os cones:

    Desta forma, teremos a janela:

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    29/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    30

    5.2 M-Files: criando seus prprios programas e funes

    A maneira mais simples de se fazer um programa em MATLAB criar um arquivo textocom a lista de comandos desejados. Os comandos so os mesmos que so usados noCommand Window e tem a mesma sintaxe. Um programa escrito assim chamado

    script e toda vez que for chamado efetua a lista dos comandos como se eles fossementrados seqencialmente via teclado. Por exemplo, para se calcular a distncia entredois pontos p e q em R3 podemos gerar um script com os comandos apropriados echam-lo sempre que o clculo tenha que ser efetuado.

    temp = (p(1)-q(1))^2 + (p(2)-q(2))^2 + (p(3)-q(3))^2distancia = sqrt( temp )

    Esse arquivo pode ser criado com qualquer editor de texto e deve ter uma extenso .m;por exemplo, oscript acima poderia estar no arquivodistancia_p_q.m . Para cham-lo basta entrar com o nome do arquivo na janela de comandos (Command Window ):

    p=[1 0 0]; q=[0 1 0]; distancia_p_q

    temp =2

    distancia =1.4142

    Lembre-se que o arquivoscript deve estar no diretrio corrente ou nopath doMATLAB, que a lista dos diretrios onde o MATLAB procura os arquivos, caso noache no diretrio corrente. O diretrio padro :bin (verso 5) ouwork (verso 6).

    Os arquivos script so teis quando se deseja efetuar uma seqncia de comandoscom muita freqncia. Como mostra o exemplo anterior, osscripts se utilizam dosdados presentes na memria (workspace ) para efetuar os comandos.

    Uma alternativa aos arquivosscripts so os arquivos tipo function , que admitemparmetros de entrada, retornam valores e possuem variveis locais (no afetam oworkspace ). Essas caractersticas fazem com que programas escritos nesse formatoatuem exatamente como os comandos nativos do MATLAB. So, portanto, uma formade ampliar a linguagem, e um dos pontos chaves do MATLAB.

    A palavra funo no MATLAB tem um significado diferente daquele que tem naMatemtica. Aqui funo um comando, que pode ter alguns argumentos de entrada ealguns de sada.

    Exemplo:function distancia=calcula_distancia(x,y)% Calcula a distancia euclidiana entre os pontos x e y (vetores do Rn)diferenca=x-y;distancia=sqrt(diferenca*transpose(diferenca));Exemplo 1:>> p=[1 0 0];>> q=[0 1 0];>> d=calcula_distancia(p, q)Ou:>>d=calcula_distancia([1 0 0], [0 1 0])d= 1.4142

    Exemplo 2distancia=calcula_distancia([3 4],[0 0])distancia =

    5

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    30/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    31

    Salienta-se que essa funo determina a distncia entre dois vetores quaisquer,independente do nmero de componente dos mesmos (desde que ambos vetoressejam de mesma dimenso, claro).

    O arquivo tipofunction tambm tem que ter extenso.m e deve ter o mesmo nome

    usado na definio da funo, descrita na primeira linha do arquivo; no exemploanterior o nome do arquivo deve sercalcula_distancia.m . Veja que para executaressa funo usamos o Command Window da mesma forma como se executa umcomando nativo do MATLAB:

    A seguir, tem-se uma lista com alguns comandos de programao para o controle defluxo, bem como comandos de programao geral e interfaces com o usurio.

    break Interrompe a execuo de laosFOR e WHILE equivalente ao BREAK do Cclc, home limpa a tela (janela de comandos)clear limpa as variveis da memria do MATLAB (RAM read access memory)continue interrompe o fluxo do programa e recomea um loop FOR ou WHILE, j na iterao

    seguinte. S faz sentido dentro de um FOR ou WHILEdisplay exibe o nome e o contedo de uma variveldisp exibe o contedo de uma varivel, sem mostrar o seu nomeif condiciona execuo de comandoselse usado com o comandoIF elseif usado com o comandoIF end usado para terminar a execuo dos comandosIF , FO R, WHILE error mostra mensagem e aborta a execuo da funoerrordlg cria uma caixa de dilogo de erroeval executa uma expresso MATLAB definida atravs de umastring feval executa uma funo especificada por umastring for repete comandos por um nmero de vezes especificado

    fprintf grava dados em arquivo formatadofscanf l dados de arquivo formatadofunction definem-file tipoFUNCTION (funo)global define variveis globais (Dica: nunca as use)helpdlg mostra uma caixa de dilogo de ajuda (HELP)input permite requisitar (comprompt ) fornecimento de dados pelo tecladokeyboard suspende a execuo de uma rotina e permite que o usurio entre e execute novos

    comandos pelo teclado; a rotina continuada aps o usurio digitarreturn lasterr ltima mensagem de erro emitida pelo MATLABmenu gera um menu de escolhas para entrada do usurionargchk verifica nmero de argumentos de entradapause pausa na execuo de um programa at ser pressionada uma teclapause(n) pausa na execuo de um programa de n segundosquestdlg cria uma caixa de dilogo de perguntasrbbox caixa (rubberband box ) para seleo de regio em grficoreturn causa a sada imediata de uma funosprintf grava dados formatados em uma nicastring switch e case equivalente aoCASE em Pascal ou o C. um teste para mltiplos casosuigetfile caixa de dilogo para obter o nome de um arquivo existenteuiputfile caixa de dilogo para especificar o nome de um novo arquivowarndlg cria uma caixa de dilogo para advertncias (warning )while repete comandos enquanto condio especificada for verdadeira

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    31/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    32

    5.3 Principais comandos de programao

    Como qualquer linguagem de programao, o MATLAB tem comandos especficospara o controle do fluxo do algoritmo, tais como:IF, FOR e WHILE. Esses comandosso similares aos encontrados em outras linguagens como C ou Pascal, e sua sintaxe bastante simples.

    A sintaxe doIF:

    ifteste ..........elseif..........else..........end

    O elseif e o else no so obrigatrios, mas oend . O if (assim como ofor e o while )pode ser usado tanto em linhas de comando quanto em textos de programas (ondesero mais teis de fato).

    Exemplo 01: Fazer um programa que permita calcular valores para a funo:

    >+

    +

    ');amostra = normrnd(0,1,n,1)

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    52/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    53

    8) Gerar o grfico da funo de distribuio normal padronizada univariada(N(0,1):= 0 e = 1) e determinar os percentuais de1, 2, 3 e 4

    function y=fdp_normal(x)y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));function distr_normal_integralArea_1S=quad( 'fdp_normal' ,-1,1)*100;Area_2S=quad( 'fdp_normal' ,-2,2)*100;Area_3S=quad( 'fdp_normal' ,-3,3)*100;Area_4S=quad( 'fdp_normal' ,-4,4)*100;disp( ' ' )disp([ ' MAIS ou MENOS 1 SIGMA = ' num2str(Area_1S) '%' ])disp( ' ' )disp([ ' MAIS ou MENOS 2 SIGMA = ' num2str(Area_2S) '%' ])disp( ' ' )disp([ ' MAIS ou MENOS 3 SIGMA = ' num2str(Area_3S) '%' ])disp( ' ' )disp([ ' MAIS ou MENOS 4 SIGMA = ' num2str(Area_4S) '%' ])disp( ' ' )pausex=-4:0.01:4;y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));plot(x,y, 'b.' )gridtitle( 'DISTRIBUIO NORMAL UNIVARIADA' )xlabel( 'eixo X' )ylabel( 'eixo Y' )%gtext('')pausehold onx=-3:0.01:3;y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));plot(x,y, 'r.' )%gtext('')pausehold onx=-2:0.01:2;y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));plot(x,y, 'g.' )%gtext('')pausehold onx=-1:0.01:1;y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));plot(x,y, 'y.' )

    %gtext('')legend( '+ ou - 4 sigma' , '+ ou - 3 sigma' , '+ ou - 2 sigma' , '+ ou - 1 sigma' )pausex=-2:0.01:2;y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));area(x,y)pauseclose

    >> distr_normal_integralMAIS ou MENOS 1 SIGMA = 68.2691%MAIS ou MENOS 2 SIGMA = 95.4499%MAIS ou MENOS 3 SIGMA = 99.733%MAIS ou MENOS 4 SIGMA = 99.9938%

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    53/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    54

    OUTRA FORMA : Usando a funo MATLAB normpdf

    function normalx=-3:0.01:3;y=normpdf(x,0,1);plot(x,y)

    xlabel ( 'Eixo x' )ylabel ( 'Eixo y' )title ( 'DISTRIBUIO NORMAL' )grid %gradepausecloseformat banksigma1=(normcdf(1,0,1)-normcdf(-1,0,1))*100;sigma2=(normcdf(2,0,1)-normcdf(-2,0,1))*100;sigma3=(normcdf(3,0,1)-normcdf(-3,0,1))*100;sigma4=(normcdf(4,0,1)-normcdf(-4,0,1))*100;disp( ' ' )disp( 'PERCENTUAIS DA DISTRIBUIO NORMAL ' )

    disp( ' ' )disp([ ' MAIS ou MENOS 1 SIGMA = ' num2str(sigma1) '%' ])disp( ' ' )disp([ ' MAIS ou MENOS 2 SIGMA = ' num2str(sigma2) '%' ])disp( ' ' )disp([ ' MAIS ou MENOS 3 SIGMA = ' num2str(sigma3) '%' ])disp( ' ' )disp([ ' MAIS ou MENOS 4 SIGMA = ' num2str(sigma4) '%' ])Resultados:

    PERCENTUAIS DA DISTRIBUIO NORMALMAIS ou MENOS 1 SIGMA = 68.2689%MAIS ou MENOS 2 SIGMA = 95.45%MAIS ou MENOS 3 SIGMA = 99.73%

    MAIS ou MENOS 4 SIGMA = 99.9937%

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    54/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    55

    REGRESSO LINEAR SIMPLES

    A seguir tem-se alguns exemplos de regresso linear simples atravs do mtodo dosmnimos quadrados.

    9) Tomando-se a produo de milho (Y) e a quantidade de fertilizante (X) necessria,dados pela tabela a seguir, faa a regresso linear e calcule o coeficiente decorrelao.Fertilizantes (X) 6 10 12 14 16 18 22 24 26 32Milho (Y) 40 44 46 48 52 48 60 68 74 80

    function reglinear(X,Y)% DETERMINAO DA FUNO DE REGRESSO LINEAR E DO COEFICIENTE DE CORRELAO e R2m_est=(mean(X.*Y)-mean(X)*mean(Y))/(mean(X.^2)-(mean(X).^2));q_est=mean(Y)-m_est*mean(X);a=(mean(X.*Y)- mean(X)* mean(Y)).^2;b=(mean(X.^2)-(mean(X)).^2)*((mean(Y.^2)-(mean(Y)).^2));RSQUARE=sqrt(a/b)*100;RSQUARE2=(a/b)*100;disp( ' ' )disp( ' -------------------------------------------------------------------' )disp( '| MODELO DE REGRESSO LINEAR SIMPLES: MTODO DOS MNIMOS QUADRADOS |' )disp( ' -------------------------------------------------------------------' )disp( ' -----------------------------------------------------------' )disp([ '|FUNO DE REGRESSO ESTIMADA:Y =' num2str(q_est), ' + ' num2str(m_est), '*X |' ]);disp( ' -----------------------------------------------------------' )disp( ' -----------------------------------------------------' )disp([ ' | COEFICIENTE DE CORRELAO LINEAR: ' num2str(RSQUARE), ' % |' ]);disp( ' -----------------------------------------------------' )disp( ' ' )disp( ' ------------------' )disp([ ' | R2 = ' num2str(RSQUARE2), ' % |' ]);disp( ' ------------------' )disp( ' ' )

    Resoluo via funo implementada no MATLAB: reglin x=[6;10;12;14;16;18;22;24;26;32]; y=[40;44;46;48;52;48;60;68;74;80]; reglin(x,y)

    -------------------------------------------------------------------| MODELO DE REGRESSO LINEAR SIMPLES: MTODO DOS MNIMOS QUADRADOS |--------------------------------------------------------------------------------------------------------------------------| FUNO DE REGRESSO ESTIMADA: Y = 26.125 + 1.6597*X |-------------------------------------------------------------------------------------------------------| COEFICIENTE DE CORRELAO LINEAR: 96.4966 % |-------------------------------------------------------------------| R2 = 93.1159 % |-------------------

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    55/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    56

    10) A seguir tem-se os km rodados e os litros gastos, faa a regresso linear edetermine o coeficiente de correlao.

    Medida km litros Medida km litros1 3203 400 13 3203 4002 3203 400 14 3203 4003 2603 340 15 803 1004 3105 400 16 803 1005 1305 150 17 1102 1306 804 100 18 3202 4007 1604 200 19 1604 1508 2706 300 20 1603 2009 805 100 21 3203 40010 1903 200 22 3702 45011 3203 400 23 3403 44012 3702 450

    Resoluo via funo implementada no MATLAB: reglin reglin(x,y)

    -------------------------------------------------------------------| MODELO DE REGRESSO LINEAR SIMPLES: MTODO DOS MNIMOS QUADRADOS |--------------------------------------------------------------------------------------------------------------------------| FUNO DE REGRESSO ESTIMADA: Y = -11.5627 + 0.12739*X |-------------------------------------------------------------------------------------------------------| COEFICIENTE DE CORRELAO LINEAR: 99.3065 % |-------------------------------------------------------------------| R2 = 98.6177 % |-------------------

    REGRESSO LINEAR MLTIPLA

    Notas:1) O MATLAB, possui uma funo que determina a soluo para o modelo deregresso linear mltiplo a funoregress . A sintaxe mais simples desta funo regress (y,x, alpha)

    2) O MATLAB possui um toolbox para a rea de estatstica (stats ), assim a respeitodas demais funes estatsticas digite nas linhas de comandohelp stats ou consulte aapostila do prprio MATLAB, apostila em ingls, no formato pdf e inclusa no CD deinstalao do mesmo.

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    56/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    57

    MATEMTICA FINANCEIRA

    A seguir tem-se alguns programas escritos em MATLAB, voltados para a rea dematemtica financeira.

    k=menu( 'MATEMTICA FINANCEIRA - PROF.M.Sc.: DONIZETTI' , ... 'MONTANTE - JUROS COMPOSTO' , 'PRESTAO - SISTEMA PRICE' , ... 'MONTANTE - SRIE DE PGTO UNIFORMES' , ... 'FIM DO PROGRAMA - matfin' );if k==1%CALCULO DO MONTANTEclear % limpa as variveis (lixos)clc % limpa a telaaviso={ 'ENTRE COM O CAPITAL:' , 'ENTRE COM A TAXA:' , 'ENTRE COM O PERODO:' };titulo= 'MONTANTE - JUROS COMPOSTOS' ;linhas=1;resposta=inputdlg(aviso,titulo,linhas);pv=str2num(char(resposta(1)));i=str2num(char(resposta(2)));n=str2num(char(resposta(3)));

    format bankfv=pv*(1 + i/100)^n;disp( ' ' )disp( ' ----------' )disp( ' |MONTANTE|' )disp( ' ----------' )disp( ' ' )disp(fv)pauseclc % limpa a telamatfin

    elseif k==2%CALCULO DA PRESTAO PELO SISTEMA PRICEclear % limpa as variveis (lixos)

    clc % limpa a telaaviso={ 'ENTRE COM O CAPITAL:' , 'ENTRE COM A TAXA:' , 'ENTRE COM O PERODO:' };titulo= 'MONTANTE - JUROS COMPOSTOS' ;linhas=1;resposta=inputdlg(aviso,titulo,linhas);pv=str2num(char(resposta(1)));i=str2num(char(resposta(2)));n=str2num(char(resposta(3)));format bankpmt=pv*(i/100*(1+ i/100)^n)/((1+i/100)^n-1);disp( ' -------------' )disp( ' | PRESTAO |' )disp( ' -------------' )disp( ' ' )disp(pmt)% CLCULO DA TABELA DE AMORTIZAO, PERODO A PERODO - PRICESaldoDevedor=pv;pause(1)disp( ' ---------------------------------------------------------------- ' )disp( ' |PERIODO| |JURO| |AMORTIZAO| |SALDO_DEVEDOR| |GASTO| ' )disp( ' ---------------------------------------------------------------- ' )

    for j=1:n % nmero de prestaesJuro=SaldoDevedor*(i/100); % juros de cada periodo

    Amort=pmt-Juro; % valor da amortizao do perodo SaldoDevedor=SaldoDevedor-Amort; % atualizao do saldo devedor

    J=fix(j);format bankgasto=(pmt*j);

    periodo=[J Juro Amort SaldoDevedor gasto];disp(periodo)pause(1)

    end

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    57/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    58

    pauseclc % limpa a telamatfin

    elseif k==3%CALCULO DO MONTANTE EM UMA SRIE DE PAGAMENTOS UNIFORMESclear % limpa as variveis (lixos)clc % limpa a telaaviso = { 'ENTRE COM A PRESTAO:' , 'ENTRE COM A TAXA:' , 'ENTRE COM O PERODO:' };titulo = 'MONTANTE - JUROS COMPOSTOS' ;linhas=1;resposta=inputdlg(aviso,titulo,linhas);pmt=str2num(char(resposta(1)));i=str2num(char(resposta(2)));n=str2num(char(resposta(3)));format bankfv=pmt*((1+i/100)^n-1)/(i/100);disp( ' ----------' )disp( ' |MONTANTE|' )disp( ' ----------' )disp( ' ' )disp(fv)

    clc % limpa a telamatfin

    else% sair do programadisp( ' ' )disp( ' ---------------------------' )disp( ' |OBRIGADO POR USAR: matfin ' )disp( ' ---------------------------' )disp( ' ' )clc % limpa a telaend

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    58/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    59

    K=menu( 'SISTEMAS DE AMORTIZAO - PROF.M.Sc.: DONIZETTI' , ... 'SISTEMA PRICE - FRANCS' , ... 'SISTEMA DE AMORTIZAO CONSTANTE - SAC' , ... 'SISTEMA DE AMORTIZAO AMERICANA - SAA' , ... 'FIM - PROGRAMA - sisamo' );

    % RESUMO SOBRE OS SISTEMAS DE AMORTIZAO%% Tabela Price - Sistema de Amortizao Francs%% - Prestaes sempre iguais, peridicas e sucessivas% - Juros incidem sobre o saldo devedor e so decrescentes% - Parcelas de amortizao do principal assumem valores crescentes%% SAC - Sistema de Amortizao Constante%% - Prestaes decrescentes% - Juros incidem sobre o saldo devedor e so decrescentes% - Amortizaes do principal so sempre iguais ou constantes em todo% o prazo do financiamento%% SAA - Sistema de Amortizao Americana

    %% - Neste sistema paga-se periodicamente apenas os juros, e na ltima% prestao paga-se os juros somados ao capital emprestado% (juros + principal). Sendo assim, as prestaes so constantes,% com excesso da ltima% - Juros incidem sobre o saldo devedor e so contantes,% com excesso da ltima% - Amortiza-se apenas na ltima prestao

    if K==1clearclc% SISTEMA PRICE (FRANCS) DE AMORTIZAO% PRICIPAL CARACTERSTICA: PRESTAO CONSTANTE% BASTANTE UTILIZADO NAS COMPRAS COM POUCAS PRESTAES

    % CALCULO DA PRESTAO PELO SISTEMA PRICEdisp( ' ' )aviso={ 'ENTRE COM O CAPITAL:' , 'ENTRE COM A TAXA:' , 'ENTRE COM O PERODO:' };titulo= 'SISTEMA PRICE - PRESTAO CONSTANTE' ;linhas=1;resposta=inputdlg(aviso,titulo,linhas);pv=str2num(char(resposta(1)));i=str2num(char(resposta(2)));n=str2num(char(resposta(3)));format bankpmt=pv*(i/100*(1+ i/100)^n)/((1+i/100)^n -1);disp( ' -----------------------------------------------------------------------' )disp( ' |VALOR EMPRESTADO | N.0 DE PRESTAO | TAXA DE JUROS | VALOR PRESTAO|' )disp( ' -----------------------------------------------------------------------' )sai=[pv n i pmt];disp(sprintf( '%13.2f %15.0f %17.2f %17.2f\n' ,sai'))% CLCULO DA TABELA DE AMORTIZAO PERODO A PERODO - PRICESaldoDevedor=pv;%pause(1)disp( ' -----------------------------------------------------------------' )disp( ' |PERIODO|PRESTAO| JUROS |AMORTIZAO|SALDO_DEVEDOR|TOTAL GASTO|' )disp( ' -----------------------------------------------------------------' )prest=0;ju=0;amt=0;

    for p=1:n % nmero de prestaesJuro=SaldoDevedor*(i/100); % juros de cada periodoAmort=pmt-Juro; % valor da amortizao do perodo

    SaldoDevedor=SaldoDevedor-Amort; % atualizao do saldo devedorgasto=(pmt*p);resp=[p pmt Juro Amort SaldoDevedor gasto];disp(sprintf( '%8.0f %10.2f %8.2f %9.2f %12.2f %12.2f\n' ,resp'))

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    59/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    60

    pause(1) %prest=prest+pmt;ju=ju+Juro;amt=amt+Amort;end

    disp( ' ----------------------------------------------' )disp( ' |TOTAL PAGO | JUROS PAGOS | AMORTIZAO TOTAL|' )disp( ' ----------------------------------------------' )total=[gasto ju amt];disp(sprintf( '%12.2f %12.2f %15.2f\n' ,total'))pauseclc % limpa a telasisamo

    elseif K==2clearclc% SISTEMA DE AMORTIZAO CONSTANTE% PRICIPAL CARACTERSTICA: AMORTIZAO CONSTANTE% CALCULO DO VALOR DA AMORTIZAOaviso = { 'ENTRE COM O CAPITAL:' , 'ENTRE COM A TAXA:' , 'ENTRE COM O PERODO:' };titulo = 'SAC - AMORTIZAO CONSTANTE' ;

    linhas=1;resposta=inputdlg(aviso,titulo,linhas);pv=str2num(char(resposta(1)));i=str2num(char(resposta(2)));n=str2num(char(resposta(3)));format bankAmort=pv/n;disp( ' -------------------------------------------------------------------' )disp( ' |VALOR EMPRESTADO | N.0 DE PRESTAO | TAXA DE JUROS | AMORTIZAO|' )disp( ' -------------------------------------------------------------------' )sai=[pv n i Amort];disp(sprintf( '%12.2f %15.0f %17.2f %17.2f\n' ,sai'))% CLCULO DA TABELA DE AMORTIZAO PERODO A PERODO - SACSaldoDevedor=pv;% pause(1)disp( ' ------------------------------------------------------------------' )disp( ' |PERIODO|AMORTIZAO| JUROS |PRESTAO|SALDO_DEVEDOR|TOTAL GASTO|' )disp( ' ------------------------------------------------------------------' )gasto=0;amt=0;ju=0;

    for p=1:n % nmero de prestaesJuro=SaldoDevedor*(i/100); % juros de cada periodopmt=Amort+Juro; % valor da prestao perodoSaldoDevedor=SaldoDevedor-Amort; % atualizao do saldo devedorgasto=gasto+pmt;ju=ju+Juro;amt=amt+Amort;resposta=[p Amort Juro pmt SaldoDevedor gasto];disp(sprintf( '%9.0f %10.2f %9.2f %9.2f %11.2f %12.2f\n' ,resposta'))pause(1)end

    disp( ' ----------------------------------------------' )disp( ' |AMORTIZAO TOTAL | JUROS PAGOS |TOTAL PAGO |' )disp( ' ----------------------------------------------' )total=[amt ju gasto];disp(sprintf( '%15.2f %15.2f %15.2f\n' ,total'))pauseclc % limpa a telasisamo

    elseif K==3

    clcclear% SISTEMA DE AMORTIZAO AMERICANA - SAA% PRICIPAL CARACTERSTICA: A CADA PERODO PAGA-SE APENAS O JUROS,

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    60/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    61

    % NO LTIMO PERODO PAGA-SE O JUROS + O MONTANTE EMPRESTADO% PORTANTO O JUROS SEMPRE CONSTANTE% CALCULO DO VALOR DO JUROSaviso={ 'ENTRE COM O CAPITAL:' , 'ENTRE COM A TAXA:' , 'ENTRE COM O PERODO:' };titulo= 'SAA - JUROS CONSTANTE' ;linhas=1;resposta=inputdlg(aviso,titulo,linhas);pv=str2num(char(resposta(1)));i=str2num(char(resposta(2)));n=str2num(char(resposta(3)));format bankJuro= pv*(i/100);disp( ' ----------------------------------------------------------------' )disp( ' |VALOR EMPRESTADO | N.0 DE PRESTAO | TAXA DE JUROS | JUROS |' )disp( ' ----------------------------------------------------------------' )sai=[pv n i Juro];disp(sprintf( '%12.2f %15.0f %17.2f %17.2f\n' ,sai'))% CLCULO DA TABELA DE AMORTIZAO PERODO A PERODO - SACSaldoDevedor=pv;% pause(1)disp( ' ------------------------------------------------------------------' )disp( ' |PERIODO| JUROS |PRESTAO|AMORTIZAO|SALDO_DEVEDOR|TOTAL GASTO|' )

    disp( ' ------------------------------------------------------------------' )ju=0;gasto=0;amt=0;prest=0;

    for p=1:(n-1) % nmero de prestaesJuros=pv*(i/100); % juros de cada periodopmt=Juros; % valor da prestao do perodoAmort=0;SaldoDevedor=SaldoDevedor-Amort; % atualizao do saldo devedorgasto=Juros*p;resposta=[p Juro pmt Amort SaldoDevedor gasto];disp(sprintf( '%8.0f %9.2f %10.2f %9.2f %11.2f %13.2f\n' ,resposta'))pause(1)end

    p=n;Juros=pv*(i/100); % juros de cada periodopmt=Juros+pv; % valor da amortizao do perodoAmort=pv;SaldoDevedor=SaldoDevedor-Amort; % atualizao do saldo devedorgasto=Juros*p+ pv;resposta=[p Juro pmt Amort SaldoDevedor gasto];disp(sprintf( '%8.0f %9.2f %10.2f %9.2f %11.2f %13.2f\n' ,resposta'))ju=Juros*n;amt=pv;disp( ' --------------------------------------------' )disp( ' |JUROS PAGOS |TOTAL PAGO |AMORTIZAO TOTAL|' )

    disp( ' --------------------------------------------' )total=[ju gasto amt];disp(sprintf( '%12.2f %12.2f %13.2f\n' ,total'))pauseclc % limpa a telasisamo

    else% sair do programadisp( ' ' )disp( ' ----------------------------' )disp( ' |OBRIGADO POR USAR: sisamo |' )disp( ' ----------------------------' )disp( ' ' )clc % limpa a telaend

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    61/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    62

    PROGRAMAO LINEAR

    A Programao Linear ( LINEAR PROGRAMMING ): o campo da Matemtica cujoobjetivo otimizar a soluo de um problema que depende de um conjunto de variveissujeito a um conjunto de restries.

    Exemplo 01: Considere o seguinte problemaUma indstria produz duas peas A e B que necessitam passar por trs operaes. Ostempos de execuo por unidade, as disponibilidades em horas por ms, e os lucrosem reais por unidade so dados pela seguinte tabela:

    Operao Pea A(minutos/unidade)

    Pea B(minutos/unidade)

    Disponibilidade(horas/ms)

    1 11 9 1652 7 12 1403 6 6 160

    Lucro (R$ / unidade) 9 10

    Pergunta-se em quais condies a industria deve trabalhar mensalmente para obter omaior lucro, isto quais as quantidades de peas A e B que devem ser fabricadas parater lucro mximo?

    Resoluo :Sejam:x1 = quantidade de peas A a ser produzida por ms.x2 = quantidade de peas B a ser produzida por ms.

    tempo gasto com a operao 11x1 + 9x2 165*(60) (1)7x1 + 12x2 140*(60) (2)6x1 + 6x2 160* (60) (3)

    Assim, temos11x1 + 9x2 9.9007x1 + 12x2 8.4006x1 + 6x2 9.600

    Obs.: 60 usado para acerto das unidadesLucro obtido L = 9x1 + 10x2Como no possvel nmero negativo de peas acrescentamos as condies depositividade que so: x1 0 e x2 0

    Logo o problema proposto encontrando valores de x1 e x2 satisfazendo

    11x1 + 9x2 9.9007x1 + 12x2 8.4006x1 + 6x2 9.600

    x10 e x20

    tal que L = 9x1 + 10x2 represente o lucro mximo.

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    62/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    63

    Observaes :1) possvel encontrar graficamente os valores x1, x2 que satisfazem as equaes

    acima.

    Considere as retas

    1) 11x1 + 9x2 9.900!

    Intereseco com os eixos coordenados (900;0) e (0, 1100)2) 7x1 + 12x2 8.400 ! Intereseco com os eixos coordenados (1200;0) e (0; 700)3) 6x1 + 6x2 9.600 ! Intereseco com os eixos coordenados (1600;0) e (0; 1600)

    A regio R descreve todos os pontos (x1, x2) 2 que satisfazem as condies doproblema. Pode se provar que a soluo para o lucro ocorre sempre em algum vrtice(no necessariamente em um nico) desta regio.

    x11=[900 0];x12=[0 1100];x21=[1200 0];x22=[0 700];x31=[1600 0];x32=[0 1600];plot(x11,x12,x21,x22,x31,x32)legend( '11x1+9x2=9900' , '7x1+12x2=8400' , '6x1+6x2=9600' )hold onc=[-9 -10];A=[11 9; 7 12; 6 6];b=[9900; 8400; 9600];minimo=lp(c,A,b)x=minimo(1);y=minimo(2);plot(x,y, 'ko' )text(x+20,y+20, 'ponto timo' )

    0 200 400 600 800 1000 1200 1400 16000

    20 0

    40 0

    60 0

    80 0

    1000

    1200

    1400

    1600

    ponto timo

    11x1+9x2=99007x1+12x2=84006x1+6x2=9600

    2) O problema acima um tpico problema de programao linear (P.L.). Um problemade P.L. caracterizado pelos seguintes pontos:

    Uma funo linear para ser otimizada (ser maximizada ou minimizada) As variveis do problema esto sujeitas condies de interdependncia lineares

    so equaes ou inequaes lineares.

    Programao Linear (Linear Programming )

    Problema:0x

    bAx:as.cx

    Min

    Sintaxe: lp (c,A,b)

    c=[-9 -10]; A=[11 9; 7 12; 6 6]; b=[9900; 8400; 9600]; minimo=lp(c,A,b)

    minimo =

    626.0870

    334.7826 Portanto, essas so as quantidades a serem produzidas

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    63/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    64

    Exemplo 02:(Covest-PE) Eric necessita de complementos das vitaminas A e C. Diariamente precisade pelo menos 63 unidades de A e no mnimo 55 unidades de C. Ele pode escolherentre os compostos I e II, que apresentam, por cpsula, as caractersticas abaixo:

    Composto Vitamina A Vitamina C Valor R$I 7 unidades 4 unidades 0,70II 4 unidades 5 unidades 0,50

    Qual o gasto mnimo dirio de Eric, em reais, com os compostos I e II?

    Resoluo:Primeira etapa: O equacionamento:

    ++

    +

    0xx55x5x4634x7x

    aSujeito

    0,50x0,70x

    22

    22

    22

    22

    e

    Min

    Segunda etapa: A soluo via MATLAB:

    O padro da funo MATLABlp (c,A,b) (lp , a abreviao de linear programming ) :

    0

    bAx asujeito

    x

    x

    c Min

    Assim, tem-se que adaptar o sistema anterior, ficando o mesmo da seguinte forma:

    +

    0xex55x5x4

    634x7x- a.

    0,50x0,70x

    21

    21

    21

    21

    S

    Min

    Implementao MATLAB A=[-7 -4;-4 -5]

    A = -7 -4-4 -5

    b=[-63 55]b =

    -63 -55 c=[0.70 0.50]c =

    0.7000 0.5000

    resp=lp(c,A,b)

    resp =5.00007.0000

    custo=c*respcusto =

    7.0000% Portanto, o custo mnimo dirioser de R$ 7,00

    Exerccio 01: Elaborar um aplicativo, usando a funolp , de forma que torne mais fcila utilizao dessa funo por parte do usurio final.Dica: Construa uma interface com

    o usurio, sendo solicitado do mesmo: a matrizA e os vetores c e b

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    64/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    65

    Exerccio 02: Resolver os seguintes problemas de programao lineara) min -0.56x1 -0.42x2sujeito a:

    1x1 + 2x2 240.0001.5x1 + 1x2180.000

    x1 110.000c=[-0.56;-0.42];A=[1 2; 1.5 1; 1 0];b=[240000; 180000 ; 110000];minimo=lp(c,A,b)minimo =

    60000.0090000.00

    b) max 80x1 + 80x2sujeito a:

    x1 + 2x280

    3x1 + 2x2 120x10 e x2 0x11=[80 0];x12=[0 40];x21=[40 0];x22=[0 60];plot(x11,x12,x21,x22)legend( 'x1+2x2=80' , '3x1+2x2=1200' )hold onc=[-80 -80];A=[1 2; 3 2];b=[80; 120];minimo=lp(c,A,b)

    x=minimo(1);y=minimo(2);plot(x,y, 'ro' )text(x+1,y+1, 'ponto timo' )

    minimo = 20.0000

    30.0000

    0 10 20 30 40 50 60 70 800

    10

    20

    30

    40

    50

    60

    ponto timo

    x1+2x2=803x1+2x2=1200

    PROGRAMAO QUADRTICA(quadraticProgramming )

    Problema:

    0x

    bCx:as.xt

    ++ cbx Ax Min

    Sintaxe: qp (A,b,C,d)ExemploMin 2x2 - 5x + 6s.a: x 10qp(A,b,C,d)a=qp(2,-5,1,10)a=2.5000

    Nota:

    O MATLAB possui um toolbox para a rea de otimizao (help optim ), assim consultea ajuda online ou a apostila do prprio MATLAB, apostila em ingls, no formato pdf einclusa no CD de instalao do mesmo.

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    65/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    66

    LISTA DE EXERCCIOS 1 - Comandos Bsicos do MATLAB,Sistemas Lineares e Equaes

    1) Dadas as matrizes: = 3421

    A e = 8765

    B , calcule:

    Obs.: Usando a janela de comandos (Command Window ) do MATLAB

    a) A+Bb) A'+B'c) A-Bd) A*Be) A.*Bf) 2*A+B'g) det(A)

    h) det(B)i) det(A*B) j) inv(A)k) inv(B)l) inv(A)*Am) inv(B)*B

    2) Construa um programa (script - roteiro) que execute todos os itens pedidos noexerccio anterior.Dica: Abra um arquivo a partir de (File, New, M-File) ou digitandoedit, nas linhas de comando. Digite os comandos necessrios e salve o arquivo como nome de roteiro1.m, no diretrio (bin, verso 5 ou work, verso 6) ou em seudisquete . Para execut-lo a partir do disquete digite o seguinte comando na linhade comandos: addpath a: , logo aps digite o nome do arquivoroteiro1.

    3) Criar as seguintes matrizesa) Identidade de ordem 5b) Matriz nula do tipo 3x4c) Matriz de elementos 1's do tipo 8x1

    4) Resolva os sistemas lineares

    a)=++

    =+=

    443632

    z y x

    z y x

    z y x SPD S = { (-6, -14, 10)}

    b)=+

    =+=++

    023

    232

    z y x

    z y x

    z y x SPD S= 3),

    57

    ,532

    (

    (1) Use a funo inversa (inv (A)) e o formato racional (format rat )(2) Use a funosolve e compare com o resultado obtido em (1)(3) Use o programa escrito na apostila e compare com os resultados obtidos

    em (1) e (2)

    5) Resolva as equaes:a) x2 + 4 = 0 b) x2 - 9x + 16 = 0 c) x2 - 4x + 4 = 0

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    66/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    67

    6) Em uma sala de aula esto 8 pessoas, reunidas em uma mesa circular. Cada umaescolhe um nmero aleatrio e pega o seu nmero e soma com os nmeros daspessoas ao lado, a sua direita e esquerda. Passa-se as 8 somas para voc, queestava fora da sala. Como voc faz para descobrir o nmero que cada umescolheu?

    Nota: Considere que as somas sejam: Soma1=6; Soma2=9; Soma3=12;Soma4=15; Soma5=18; Soma6=21; Soma7=16; Soma8=11

    Resoluo :

    Equacionamento

    =++=++=++=++ =++

    =++=++=++

    8

    7

    6

    5

    4

    3

    2

    1

    somabah

    somaahg

    somahg f

    somag f esoma f ed

    somaed c

    somad cb

    somacbaImplementao via MATLAB

    A=[1 1 1 0 0 0 0 00 1 1 1 0 0 0 00 0 1 1 1 0 0 00 0 0 1 1 1 0 00 0 0 0 1 1 1 00 0 0 0 0 1 1 11 0 0 0 0 0 1 11 1 0 0 0 0 0 1];

    b=[6;9;12;15;18;21;16;11];

    x=inv(A)*b

    Soluo MATLAB

    x =1.002.003.004.005.006.007.008.00

    Obs.: Poderia se resolver este exerccio usando o comandosolve

    [a b c d e f g h]=solve( 'a+b+c=6' , 'b+c+d=9' , 'c+d+e=12' , 'd+e+f=15' , ... 'e+f+g=18' , 'f+g+h=21' , 'g+h+a=16' , 'h+a+b=11' )a =

    1

    b =2

    c =3

    d =4

    e =5

    f =6

    g =7

    h =8

  • 8/6/2019 Apostila Matlab Donizetti 15nov2002

    67/75

    ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

    PROF. M. Sc. JOS DONIZETTI DE LIA

    68

    LISTA DE EXERCCIOS 2 - Nmeros complexos, Polinmios eConstrues Grfica

    Nmeros complexos1) Dado o nmero complexo Z= 3 + 4i, determinar:

    a) A parte real do nmero Z c) O mdulo de Zb) A parte imaginria de Z d) O ngulo de Z (em graus)

    Polinmios1) Determinar as razes do polinmio x4 10x3 +35x2-