Anda di halaman 1dari 81

MINISTRIO DA EDUCAO UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN - UTFPR CAMPUS CORNLIO PROCPIO GRUPO DE MATEMTICA

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

PR

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


SUMRIO CAPTULO I 1 INTRODUO ................................................................................................ 1.1 Breve Histrico e Viso Geral do Software MATLAB ............................. CAPTULO II 2 CONCEITOS BSICOS ................................................................................. 2.1 Controle da janela de comandos ............................................................... 2.2 Variveis ...................................................................................................... 2.3 Caracteres especiais .................................................................................. 2.4 Operadores aritmticos .............................................................................. 2.5 Operadores condicionais ........................................................................... 2.6 Operadores lgicos .................................................................................... CAPTULO III 3 FUNES ELEMENTARES DO MATLAB ..................................................... 3.1 Funes Cientficas ..................................................................................... 3.2 Formatos Numricos ................................................................................. 3.3 Entrada de Matrizes .................................................................................... 3.4 Polinmios ................................................................................................... 3.5 Sistemas de Equaes Lineares ............................................................... 3.6 Operaes com Conjuntos ........................................................................ 3.7 Data e Hora ................................................................................................... 3.8 Nmeros Complexos .................................................................................. 3.9 Operaes com vetores e matrizes ........................................................... CAPTULO IV 4 RECURSOS GRFICOS .................................................................................. 4.1 Visualizao de Curvas ............................................................................... 4.1.1 Estilos de linhas, marcadores e cores .................................................. 4.1.2 Especialidades dos grficos bidimensionais ...................................... 4.1.3 Funes grficas 2D especiais .............................................................. 4.1.4 Funes para grficos bidimensionais ................................................ 4.2 Visualizao de Superfcies ........................................................................ 4.2.1 Grficos de linha tridimensional ............................................................ 4.2.2 Grficos de Malha e Superfcie ............................................................... 4.2.3 Funes para grficos tridimensionais ................................................. 4.3 Visualizao de imagens ........................................................................... 4.4 Demais funes de manipulao de grficos do MATLAB ................... 4.5 Salvando figura em um formato bitmap (extenso BMP) ....................... 4.6 Slidos de revoluo .................................................................................. CAPTULO V 5 PROGRAMAO MATLAB .......................................................................... 5.1 O Editor do MATLAB .................................................................................. 5.2 M-Files: Criando seus prprios programas e funes ............................. 5.3 Principais comandos de programao ..................................................... 5.4 Interface com o usurio ............................................................................. CAPTULO VI 6 EXPRESSES SIMBLICAS ......................................................................... 6.1 Definindo variveis simblicas ................................................................ CAPTULO VII 7 TPICOS ESPECIAIS ..................................................................................... Otimizando a performance de cdigos MATLAB ................................... Estatstica, Matemtica Financeira e Programao Linear .................... Listas de Exerccios e Referncias Bibliograficas ........................................

3 3 5 5 5 6 6 6 6 7 7 8 8 10 12 14 15 15 16 17 17 18 18 20 22 23 23 24 26 27 27 28 28 29 29 30 32 36 38 38 49 49 49 66

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


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. Essas novas verses (5 e 6) foram desenvolvidas em linguagem C por: Steve Bangeret, Steve Kleiman e Clever Moler Stanford University. Desde a sua primeira verso (1984), o MATLAB tido como produto lder na rea de computao numrica e cientfica. Mais do que um software, o MATLAB um ambiente integrado de modelagem de sistemas e algoritmos, ideal para implementao de projetos complexos, e que por esta razo vem sendo adotado como ferramenta de desenvolvimento padro pelas principais universidades do Brasil e do mundo. O MATLAB um software destinado a fazer clculos com matrizes (matriz o seu elemento essencial). O nome MATLAB derivado de MATrix LABoratory, ou seja, um laboratrio de matrizes. O MATLAB um sistema interativo cujo elemento bsico da informao uma matriz que no requer dimensionamento. Esse sistema permite a resoluo de muitos programas numricos em apenas uma frao do tempo que se gastaria para escrever um 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 matrizes que 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 o usurio. O MATLAB um software matemtico interativo de alta performance utilizado em clculos numricos por cientistas, engenheiros, pesquisadores, estudantes, etc. O MATLAB composto de um mdulo matemtico bsico fundamental ao qual podemos agregar os mais variados toolbox (caixas de ferramentas) como: estatsticas, matemtica financeira, matemtica simblica, otimizao, etc. O MATLAB integra a anlise numrica, clculo matricial, processamento de sinais e grficos, de uma forma tal que os problemas e solues so expressos de maneira bem prximos como so escritos matematicamente. Assim, como os comandos so muito prximos da forma como so escritas as expresses algbricas, torna-se mais simples o seu uso.

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

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 ilustra essa 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: uma matriz numrica cujos elementos podem se constituir de nmeros complexos. Em diversas situaes, um significado especial atribudo a uma matriz 1x1, que representa um escalar, e para matrizes com uma linha ou uma coluna, que representam vetores. A linguagem MATLAB no contm declarao de dimensionamento ou declarao do tipo. O armazenamento feito automaticamente. A seguir dada uma breve descrio das teclas para reeditar uma linha de comando:
retorna a linha anterior retorna a linha posterior move um espao para a esquerda move um espao para a direita move uma palavra para a esquerda Ctrl move uma palavra para a direita Ctrl move para o comeo da linha Home move para o final da linha End apaga um caracter a direita Del apaga um caracter a esquerda Backspace Para sair do MATLAB, digite exit ou quit seguido de ENTER. Para interromper um comando do MATLAB, aperte a tecla Ctrl C, seguido de ENTER

O comando help proporciona informaes on-line sobre um tpico escolhido


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

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


CAPTULO II 2 CONCEITOS BSICOS 2.1 Controle da janela de comandos As principais funes para o controle da janela de comandos so:
clc clear computer delete demo diary dir fclose flops fopen format help home load lookfor save size ver version what who whos limpa a janela de comandos (semelhante ao comando cls do DOS) limpa da memria variveis e funes retorna string contendo o computador que est executando MATLAB apaga um arquivo ou um objeto grfico demonstra recursos do MATLAB; isoladamente, apresenta o menu de demos diary nome_do_arquivo salva o texto (comandos e resultados) de uma sesso dir nome_do_diretrio lista os arquivos no diretrio fecha um arquivo retorna a contagem de operaes em ponto flutuante realizadas abre arquivo estabelece o formato para mostrar os resultados numricos recurso de ajuda on-line retorna o cursor para o canto esquerdo superior da tela carrega variveis armazenadas em arquivos .mat recurso de ajuda (help) por palavra-chave grava variveis (em arquivos .mat (formato binrio) retorna as dimenses de uma matriz mostra o nmero da verso do MATLAB e dos toolboxes instalados retorna a verso em uso do MATLAB lista os arquivos (.m, .mat e .mex) no diretrio corrente lista as variveis correntes lista as propriedades das variveis atuais (nomes, dimenso, nmero de bytes e classe)

2.2 Variveis Cada varivel um local na memria do computador capaz de conter um valor que pode ser modificado durante a execuo do programa. Quando o MATLAB faz clculos, ele utiliza os valores conhecidos para as variveis no momento em que o clculo foi solicitado. Cuidado com lixos, use sempre o comando clear. O MATLAB possui constantes numricas predefinidas que podem ser utilizadas na definio de vetores e matrizes, bem como na manipulao de dados. So elas:
ans eps varivel de trabalho (utilizada para armazenamento quando no h atribuio), padro usada para resultados (ans = answer = resposta = sada dos resultados) 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. Pode ser usado como um erro a ser tolerado na busca de soluo para um determinado problema atravs de um processo iterativo Raiz imaginria (raiz quadrada de 1),ou seja: 1 infinito (exemplo: 1 / 0) Not a Number (no nmero) (exemplo: 0 / 0; / ) number of argument input: nmero de argumentos de entrada number of argument output: nmero de argumentos de sada 3.14159... = razo entre o permetro da circunferncia e seu dimetro maior nmero real positivo utilizvel (representvel em ponto flutuante)=1.7977x1030821023 menor nmero real positivo utilizvel (representvel em ponto flutuante)=2.2251x10-3082-1074

i ou j inf NaN ou nan nargin nargout pi realmax realmin

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


A seguir tem-se as principais dicas sobre o nome a ser dado a uma varivel
Regras para nomes devem comear com uma letra podem conter letras, algarismos e caracter de sublinhado sensveis a maisculas e minsculas podem conter at 32 caracteres Exemplo matriz1 matriz5_ex8 as variveis A e a so diferentes 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 define string efetua atribuio de varivel

2.4 Operadores aritmticos


Operador + * .* / ./ \ ^ .^ ' ou
transpose

Significado adio subtrao multiplicao multiplicao elemento a elemento diviso direita diviso elemento a elemento diviso esquerda potenciao potenciao elemento a elemento transposta

Exemplo 2+3 5-4 2*3 [1 2].*3 2/4 [8 4]./2 2\4 2^3 [3 4].^2 [3 4]

Resultado 5 1 6 3 6 0.5000 4 2 2 8 9 16 3 4

2.5 Operadores condicionais


Operador Descrio Exemplo igual a 5==2 == maior do que 5>2 > maior ou igual a 5>=2 >= menor do que 5<2 < menor ou igual a 5<=2 <= diferente (no igual a) 5~=2 ~= Lembrete: = usado para atribuio e no para comparao Resultado 0 (falso) 1(verdadeiro) 1(verdadeiro) 0(falso) 1(falso) 1(verdadeiro)

2.6 Operadores lgicos


Operador & | ~ xor any all Descrio e (and) ou (or) no (not) a ou b, mas no a e b (exclusive or) ou exclusivo verdadeiro se algum elemento do vetor for verdadeiro verdadeiro se todos os elementos do vetor forem verdadeiros

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


CAPTULO III 3 FUNES ELEMENTARES DO MATLAB

3.1 Funes Cientficas


O MATLAB tem uma srie de funes cientficas predefinidas (help elfun). A maioria pode ser usada da mesma forma que seria escrita matematicamente. Por exemplo:
>> x=sqrt(2)/2 x = 0.7071 >> y=acos(x) y = 0.7854 >> y_graus=y*180/pi y_graus = 45.0000

Estes comandos calculam o arco cujo cosseno

2 , inicialmente em radianos, depois 2

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


sin (x) cos (x) tan (x) cot (x) sec (x) csc (x) asin (x) acos (x) atan (x) acot (x) acsc (x) asec (x) Funes Trigonomtricas seno de x seno hiperblico de x sinh (x) coseno de x coseno hiperblico de x cosh (x) tangente de x tangente hiperblica de x tanh (x) cotangente de x cotangente hiperblica de x coth (x) secante de x secante hiperblica de x sech (x) cosecante de x cosecante hiperblica de x csch (x) arco cujo seno x arco cujo seno hiperblico x asinh (x) arco cujo cosseno x arco cujo coseno hiperblico x acosh (x) arco cuja tangente x. arco cuja tangente hiperblica x atanh (x) arco cuja cotangente x arco cujo cotangente hiperblica x acoth (x) arco cuja cosecante x arco cujo cosecante hiperblica x acsch (x) arco cuja secante x arco cujo secante hiperblica x asech (x) Funes Elementares valor absoluto, ou seja, mdulo de x exponencial (base e), ou seja, ex arredonda em direo ao zero, considera apenas a parte inteira: Exemplo: 2.98 = 2 arredonda em direo a menos infinito (-) arredonda em direo a mais infinito (+) mximo divisor comum de x e y mnimo mltiplo comum de x e y logaritmo natural (base e), ou seja, logaritmo de x na base e logaritmo decimal (base 10), ou seja, logaritmo de x na base 10 logaritmo base 2 e desmembra nmeros em ponto-flutuante aproximao racional: Exemplo: rat(pi)= 3 + 1/(7 + 1/16) = 355/113 sada no formato racional: Exemplo: rats(pi) = 355/113 resto da diviso de x por y: Exemplo: rem(8,3) = 2 arredonda para o inteiro mais prximo: Exemplo: 2.98 = 3 funo sinal raiz quadrada de x

abs(x) exp(x) fix floor ceil gcd(x,y) lcm(x,y) log(x) log10(x) log2 rat rats rem (x,y) round sign sqrt(x)

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


3.2 Formatos Numricos

Quando o MATLAB mostra um resultado numrico ele segue certas regras. No caso de nenhum formato estar definido, se um resultado um nmero inteiro, o MATLAB mostra 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 arco cosseno, que fizemos anteriormente. Se os dgitos significativos estiverem fora desta faixa, o MATLAB mostra o resultado em notao cientfica. Voc pode definir um formato diferente. Os seguintes comandos controlam o formato em que so mostrados os dados e resultados:
FORMATO format short format short e format long format long e format bank format rat RESULTADO Ponto fixo, 4 casas decimais (formato predefinido, default padro) Notao cientifica, 4 casas decimais Ponto fixo, 14 casas decimais Notao cientifica, 14 casas decimais Valor monetrio (dlares e centavos), 2 casas decimais Formato racional (aproximadamente), isto , razo de inteiros

importante salientar que o MATLAB no muda a sua forma de representar os nmeros internamente, quando formatos diferentes de exibio de nmeros so escolhidos. 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, os elementos 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] Pressionando ENTER, tem-se o resultado: A= 1 4 7 2 5 8 3 6 9 2) Sem usar o ponto e vrgula seria A=[1 2 3 Pressionando ENTER 4 5 6 Pressionando ENTER 7 8 9] Pressionando ENTER A= 1 4 7 2 5 8 3 6 9

Gerando a matriz com uso de uma declarao ou funo

Para gerar uma matriz atravs desta opo, basta declarar a funo e seu respectivo argumento. Exemplos:
1) Gerar uma matriz identidade 3X3 I3=eye(3) I3 = 1 0 0 0 1 0 0 0 1 2) Gerar uma matriz nula 2x3 Z0=zeros(2,3) Z0 = 0 0 3) Gerar um vetor formado por elementos 1's UM=ones(3,1) UM = 0 0 0 0 1 1 1

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


Criando um arquivo com extenso M

Para criar um arquivo com extenso M, utilizamos um editor de texto, como por exemplo o EDIT do DOS, o WORDPAD do WINDOWS, o editor do MATLAB, etc. Exemplo: 1) Utilizando o editor do MATLAB, criar o arquivo matriz1.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 em File, New e M-File

A seguir digite: M=[1 2 3;4 5 6] Para salvar este arquivo: Clique em File, Save As, Salve como: matriz1.m

Para que a matriz M esteja disponvel basta digitar o nome do arquivo nas linhas de comando.
matriz1 M= 1 4 2 5 3 6

Sempre que escrevermos uma matriz e encerrarmos com ponto e vrgula ";" a sua exibio na tela ser omitida. Isto til principalmente no caso em que a expresso resulta 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 ENTER aps cada linha de comando para que o MATLAB execute o mesmo. 2) Os parmetros devem estar entre parnteses "( )"

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


3.4 Polinmios

10

Os polinmios so representados, no MATLAB, como vetores linhas contendo os coeficientes ordenados segundo as potncias decrescentes dos termos. Existem vrias funes que trabalham com polinmios so elas:
FUNO conv conv2 deconv poly polyadd polyder polyfit polyval residue roots OBJETIVO multiplicar polinmios; convoluo multiplicar polinmios bidimensionais dividir polinmios; deconvoluo construir polinmio a partir de suas razes. polinmio caracterstico efetuar a soma de polinmios calcular a derivada de polinmio efetuar ajuste polinomial de dados avaliar uma matriz polinomial resduo de diviso de polinmios determinar as razes de um polinmio (zeros)

3.4.1 Razes Considere o vetor p = [1 5 6], correspondente aos coeficientes da equao do segundo grau: x2 5x + 6 = 0 e r = [3 2] o vetor contendo as razes dessa equao. A funo MATLAB roots(p): determina as razes da equao cujos coeficientes esto contidos em p, enquanto que a funo poly( r) retorna os coeficiente do polinmio que possui como razes os componentes do vetor r. Assim, tem-se:
p=[1 5 6]; r=roots(p) r = 3 2 p=poly(r) p = 1 -5

3.4.2 Adio Se a dimenso dos polinmios p1 e p2 forem iguais, pode-se fazer: p1 + p2 para obter a sua soma. Se a dimenso de p1 for diferente da dimenso de p2, pode-se usar um dos dois casos: Preencher com zeros os coeficientes das potncias que faltam em um polinmio para este igualar-se em dimenso com o outro; Usar a funo polyadd(p1,p2)

3.4.3 Multiplicao A funo conv(p1,p2) multiplica o polinmio p1 pelo polinmio p2. 3.4.4 Diviso A sintaxe [q,r] = deconv(p1,p2) retorna o resultado da diviso do polinmio p1 pelo polinmio p2. Nessa sada aparecem duas variveis, onde:

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


q: o quociente da diviso de p1 por p2 e r: o resto dessa diviso 3.4.5 Avaliao A sintaxe polyval(p,a) avalia o polinmio p para o valor a 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 ans abreviao de answer = resposta

11

3.4.6 Derivada A funo que determina a derivada do polinmio p a funo: polyder (p). Sero exibidos 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 -5 Portanto, a derivada dada por: 2x-5

3.4.7 Interpolao: adequao de curvas (funo: polyfit) A funo MATLAB polyfit executa o ajuste polinomial de dados. A sintaxe polyfit(x,y,n) encontra os coeficientes de um polinmio de grau n que ajusta aos dados, p(x(i)) y(i), no sentido dos mnimos quadrados.

p=polyfit(x,y,n), onde n a ordem da funo de y em relao a x. Interpolao linear: n=1; Interpolao quadrtica: n=2; Interpolao cbica (usando funo do terceiro grau): n=3 Exemplos:
Function ajuste_poli1 x=[1 2 3 4 5]; y=[5 7 9 11 13]; plot(x,y,'.') pause close p1=polyfit(x,y,1) p2=polyfit(x,y,2) p3=polyfit(x,y,3) p1 = 2.0000 3.0000 p2 = 0.0000 2.0000 3.0000 p3 = -0.0000 0.0000 2.0000 function ajuste_poli2 x=[0 1 2 3 4 5]; y=[6 2 0 0 2 6]; plot(x,y,'.') pause close p1=polyfit(x,y,1) p2=polyfit(x,y,2) p3=polyfit(x,y,3) p1 = -0.0000 2.6667 p2 = 1.0000 -5.0000 6.0000 p3 = 0.0000 1.0000 -5.0000

3.0000

6.0000

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


3.5 Sistema de Equaes Lineares

12

Resolver sistemas da forma: A * x = b, se det(A) 0 (det = determinante) tem-se uma nica 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

x1 + 2 x2 + x3 = 8 Exemplo 1: Resolver o sistema de equaes lineares: 2 x1 x2 + x3 = 3 x + x 2 x = 5 2 3 1 No MATLAB, a entrada ser:


A=[1 2 1; 2 -1 1; -1 1 -2] A = 1 2 1 2 -1 1 -1 1 -2 b=[8;3;-5] b = 8 3 -5 x=inv(A)*b ou x=A\b ou x=pinv(A)*b x = 1 2 3

Assim, a representa: x1 = 1; x2 = 2 e x3 = 3

soluo

encontrada

17 x1 + 24 x 2 + x3 + 8 x 4 + 15 x5 = 175 33 x + 5 x + 7 x + 14 x + 16 x = 190 2 3 4 5 1 Exemplo 2 : Resolver o sistema: 4 x1 + 6 x 2 + 13 x3 + 20 x 4 + 22 x5 = 245 10 x + 12 x + 19 x + 21x + 3 x = 190 2 3 4 5 1 11x1 + 18 x 2 + 25 x3 + 2 x 4 + 9 x5 = 175

Dica: Use a funo inversa e a formatao de nmeros racionais 260 883 1171 1589 1952 Resposta: SPD: S = ( , , , , ) 393 393 393 393 393
X 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]'; format rat X=inv(A)*b X=inv(A)*b = X = 0.6616 260/393 2.2468 883/393 2.9796 1171/393 4.0433 1589/393 4.9669 1952/393

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


Uma outra funo MATLAB, permite a soluo de sistemas numricos: solve Exemplos : Resolva os sistemas usando a funo solve do MATLAB x + y = 10 x y = 2
x1 + 2 x2 + x3 = 8 2 x1 x2 + x3 = 3 x + x 2 x = 5 2 3 1
x 6 y 4 x 1 y 2 z 3 [x,y]=solve('x+y=10', 'x-y=2') = = [x,y,z]=solve('x+2*y+z=8','2*x-y+z=3','-x+y-2*z=-5') = = =

13

Exerccio 1: Construir um programa para a resoluo de sistemas lineares com uma nica soluo ou seja det(A) 0.
function sislin disp(' ') 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<=(length(b)) disp([' x_'num2str(i),' = ' num2str(x(i)) ]); i=i+1; end disp(' ') end

No objetivo, neste momento, a compreenso de todas as sintaxes usadas nesse programa, mas sim motivar o aprendiz para, a partir das funes MATLAB construir programas com uma facilidade maior para o usurio final.

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


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 intersec=intersect(A,B) intersec = 4 5 difer=setdiff(A,B) difer = 1 2 3 exclus=setxor(A,B) exclus = 1 2 3 6

14

Outros comandos teis


prod(v)retorna o produto do elementos do vetor v. Exemplo: v = [1 2 3], prod(v)= 6 power(m,n) determina mn, m pode ser matriz. Exemplo: power (2,3) = 8 factor(n) determina os fatores primos de n, 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 determinar o nmero de permutaes, faa: length(perms(v)) nchoosek(m,n) determina o nmero de combinaes simples nchoosek(4,2 )= 6.Para determinar as combinaes, faa nchoosek(v,n) onde V um vetor contendo os elementos a ser combinados e n, 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==0 disp(' ') fatorial_n=1; disp([' ' num2str(n),'! = ' num2str(fatorial_n)]); disp(' ') else disp(' ') fatorial_n=prod(1:n); disp([' ' num2str(n),'! = ' num2str(fatorial_n)]); disp(' ') end

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


3.7 Data e Hora

15

As funes relacionadas a data e hora so importantes, pois possibilitam determinar o tempo de execuo de nossos programas. As principais funes so:
date clock datestr weekday calendar datetick cputime etime tic, toc retorna dia-ms-ano retorna data e hora atual (ano, ms, dia, hora, minutos, segundos) nesta ordem converte a data numrica em literais retorna o dia da semana calendrio de qualquer ms inserir data em grficos (eixo x) tempo de CPU (unidade central de processamento) utilizado pelo MATLAB retorna tempo (em segundos) transcorrido entre dois momentos especificados. sintaxe: t1 = clock; t2 = clock ; tempo = etime(t2,t1) aciona e faz a leitura de um cronmetro, respectivamente

Exemplo
function 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 angle cart2pol cart2sph conj imag pol2cart real sph2cart mdulo (magnitude) do nmero complexo ngulo (fase, argumento) do nmero complexo transforma coordenadas cartesianas para polares transforma coordenadas cartesianas para esfricas conjugado do nmero complexo parte imaginria do nmero complexo transforma coordenadas polares para cartesianas parte real do nmero complexo 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 complexo angulo_radiano normalizado, isto , no intervalo [-pi,pi] angulo_graus=angulo_radiano*180/pi angulo_graus = 45

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


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

16

linspace: define vetores com elementos linearmente espaados (incrementos iguais). 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

Vetores
DECLARAO sum(v) std(v) max(v) mean(v) min(v) abs(v) norm(v) length(v) sort(v) prod(v) x * y SIGNIFICADO A soma dos componentes do vetor v Desvio padro com respeito mdia Maior componente de um vetor Mdia das componentes do vetor v Menor componente do vetor v Mdulo das componentes do vetor v Norma euclidiana do vetor v Nmero de componentes do vetor v Ordena o vetor v em ordem crescente Produto das componentes do vetor v Produto interno dos vetores x e y

Principais funes matriciais [Notao: (m = n0 de linhas, n = n0 de colunas e A = matriz]


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

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


Captulo IV 4 RECURSOS GRFICOS

17

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 fcil de averiguar. Nesta seo apresentar-se- aspectos bsicos e uma viso geral dos recursos grficos disponveis. Informaes detalhadas ou sobre grficos especficos podem ser obtidos no Help 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 ou MATHEMATICA. Por exemplo, para se desenhar o grfico da funo seno, de -pi at pi, devemos criar um vetor com os valores da funo seno e depois plotar o vetor:
1 0.8

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

O resultado do plot

0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 10 20 30 40 50 60 70

Note que o eixo das abcissas no reflete a faixa de valores que foi usada para produzir o vetor y, de -pi at pi. Ao invs disso, o plot assume que o eixo das abcissas deve ser o ndice do vetor. Para plotar os valores corretos no eixo das abcissas, basta usar uma pequena variao desse comando (plot(x,y)). Quando passamos dois vetores para o comando plot, a funo assume que o primeiro vetor o das abcissas, e o segundo vetor o das ordenadas. O resultado :
1

0.8

0.6

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

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1 -4

-3

-2

-1

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

18

Exemplo 1: Construir um programa para plotar duas curvas no mesmo grfico, sendo a primeira com linha slida, na cor vermelha e os pontos representados por asteriscos e a segunda com linha pontilhada e na cor azul.
1a forma: function grafico_2x1a x=-1:0.1:1; y=x.^2; z=x.^3; plot(x,y,'r*',x,z,'b:') pause close 2a forma: function grafico_2x1b x=-1:0.1:1; y=x.^2; z=x.^3; plot(x,y,'r*') pause % pausa at ser pressionada uma tecla hold on % Mantm o grfico atual plot(x,z,'b:') pause close

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 amarelo y yellow m magenta magenta (lils) azul-claro c cyan vermelho r red verde g green azul escuto b blue branco w white preto k black Marcadores de ponto ponto . point crculo o circle x x x-mark + + plus asterisco * star quadrado s square diamante d diamond tringulo v triangle tringulo ^ triangle tringulo < triangle tringulo > triangle p pentagram estrela de 5 pontas estrela de 6 pontas h hexagram Tipos de linhas slida - solid pontilhada : dotted -. dashdot trao-ponto -- dashed tracejada

Manipulao dos eixos (aps o plot):


hold on; plot([Xmin Xmax],[0 0]) hold on; plot([0 0], [Ymin Ymax]) insere os valores do eixo y em ordem decrescente elimina os eixos define escalas para os eixos X e Y retorna ao modo automtico: Xmin = min(X) e Xmax = max(X), etc

Construo do eixo X Construo do eixo X axis ('ij') axis ('off') axis([Xmin Xmax Ymin Ymax]) axis(auto)

4.1.2 Especialidades dos grficos bidimensionais


xlabel('rtulo do eixo x'): ttulo do eixo X ylabel('rtulo do eixo y'): ttulo do eixo Y grid: para inserir linhas de grade title('ttulo'): coloca ttulo no grfico, centralizado, na parte superior da tela text(x,y,'texto'): coloca texto usando as coordenadas (x,y) como incio do texto gtext('texto'): coloca texto, que ir comear a ser escrito no local onde o mouse for clicado, coincidindo o incio do texto com o cruzamento das duas retas que aparecem legend('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 do mouse clf apaga a figura atual close fecha todas as janelas grficas

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

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 direito acontece o contrrio box: liga a caixa ao eixo (traa os eixos das ordenadas e das abscissas nos dois lados) colordef black: colore o fundo da tela de preto colordef white: colore o fundo da tela de branco pause: pausa na execuo programa, at ser pressionada uma tecla pause (n): pausa na execuo de um programa de (n) segundos hold on: mantm o grfico atual

Exemplo 2: Desenhar o grfico da funo f(x) = x2 + 2, no intervalo [-5, 5], fornecendo ttulo ao grfico, bem como aos eixos x e y. Inserir uma observao destacando o vrtice da parbola, criar uma legenda e gerar grade.
function graf1 x=-5:0.01:5; % inicio: incremento :final y=x.^2+2; xv=0; yv=2; plot(x,y) % Cria curva com linha slida e azul hold on % Mantm o grfico atual plot(xv,yv,'or') title('PARBOLA') % Ttulo do grfico xlabel('eixo das abscissas') % Nome do eixo x ylabel('eixo das ordenadas') % Nome do eixo y text(xv, yv, 'vrtice') % Inseri texto ao grfico em local predefinido no programa (xv,yv) legend('y = x.^2 + 2') % Cria legenda grid % Gera grade pause close

Destaca-se que podem ser gerados vrios grficos em uma mesma janela, com o comando subplot e que as janelas grficas podem ficar abertas simultaneamente com os comandos figure e hold. A sintaxe subplot(m,n,p): particiona a tela para construo do grfico em um nmero igual a mxn, onde p representa a posio de cada novo grfico, ou seja, cada grfico ter 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) pause close

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

20

Nota: A estrutura do plot permite que os grficos no estejam restritos a funes. Podemos plotar curvas paramtricas tambm, como por exemplos.
Exemplo 1:Circunferncia trigonomtrica function ciclo t=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 on plot([-1 1],[0 0]) plot([0 0],[-1 1]) pause close
circunfer ncia trigonom trica
1
0.8
0.6
0.4

eixo dos senos

0.2
0
-0.2
-0.4
-0.6
-0.8
-1 -1
-0.5

0 eixo dos cossenos

0.5

Exemplo 2: Cardiide
2

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

-1

-2

-3 -3

-2.5

-2

-1.5

-1

-0.5

0.5

1.5

Com esse exemplo fica claro que o comando plot adequado para a visualizao de curvas 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 funo y = f(x) deve ser tratado como um caso particular de grficos de curvas (a saber, o grfico da funo y=f(x) o mesmo que o da curva x=t ; y=f(t) ). Existe tambm o plot3 que tem o mesmo princpio do plot, mas destina-se a visualizao de curvas paramtricas em 3. 4.1.3 Funes grficas 2D especiais pie: grficos de pizza (setores). A sintaxe pie(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 comando legend.

Exemplo:
function fatia x=[40 30 20 10]; pie(x,x==max(x)) legend('TIMOS','BONS','MDIOS',... 'REGULARES') pause close
10% T IMO S BO NS M DIO S REG ULARES

40%

20%

30%

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

21

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


Exemplo: function grafico_pareto1 x=[104 42 20 10 6 4 14]; pareto(x) legend('LINHA DE PARETO','HISTOGRAMA'); pause close
200
100%

180

90%
LINHA DE PARET O HIST O G RAMA

160

80%

140

70%

120

60%

100

50%

80

40%

60

30%

40

20%

20

10%

0%

histfit: histograma com ajuste a curva normal.


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

HIST O G RAMA CO M AJUST E A CURVA NO RMAL

90

80

70

60

50

40

30

20

10

0 -3

-2

-1

0 eixo x

area(x,y): Semelhante ao plot(x,y), mas a rea sob a curva hachurrada, ou seja, plota um grfico de rea.
function graf_area x1=-5:0.01:5; y1=x1.^2; plot(x1,y1) hold on x2=1:0.01:3; y2=x2.^2; area(x2,y2) title('GRFICO DE REA') xlabel('EIXO X') ylabel('EIXO Y') pause close
GR F ICO DE REA
25

20

15

EIXO Y
10
5
0 -5

0 EIXO X

comet: gera grfico com exibio da trajetria animada, ou seja, plota com trajetria de cometa.
Exemplo: x=0:0.001:2*pi; comet(x,sin(x))

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 4.1.4 Funes para grficos bidimensionais

22

A seguir, tem-se alguns dos principais comandos para plotar grficos 2D que no foram apresentados anteriormente:
bar barh clabel colorbar compass contour contourc delete errorbar ezplot ezpolar feather(z) fill fplot ginput hist line loglog patch polar (t,r) rose rotate scatter semilogx semilogy set stairs stem grfico de barras verticais (colunas) grfico de barras horizontais acrescenta rtulos dos nveis em grficos tipo curvas de nveis (contour) mostra mapa de cores na forma de uma barra (escala) de cores 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) plota contorno 2D (tipo curva de nvel) clculo dos nveis (para plotagem de curvas de nveis) elimina um objeto grfico traa grfico acrescentando barras (representando faixas) especificadas de erros. (funo,[Xmin Xmax] % coordenada linear (funo,[Xmin Xmax] % coordenada polar 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 horizontal desenha polgono 2D (funo,[Xmin Xmax] % plotar funo retorna as coordenadas de pontos de um grfico selecionados com o mouse ou o cursor plota histograma cria objeto grfico do tipo linha plota em escala logartmica para ambos os eixos cria objeto grfico do tipo patch plota em coordenadas polares o ngulo teta (t), em radianos, versus o raio r plota histograma em ngulo gira um objeto grfico de um certo ngulo, em uma direo especificada grfico discreto que indica pontos com marcadores plota em semilog plota em semilog estabelece propriedades para objetos grficos grfico escada (plotar em degrau, apropriado para sinais amostrados) grfico discreto que indica pontos com marcadores

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


4.2 Visualizao de Superfcies 4.2.1 Grficos de linha tridimensional

23

A sintaxe plot3(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_plot3 x=1:5; y=1:5;z=[2 2 3 4 4]; plot3(x,y,z) grid hold on plot3(x,y,z,'ro') pause close

4 3.5 3 2.5 2 5 4 3 2 1 1 2 4 3 5

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


function ex_plot3b t=0:pi/50:10*pi; plot3(sin(t),cos(t),t); title('DIAGRAMA DE LINHAS') grid xlabel('Eixo X') ylabel('Eixo Y') zlabel('Eixo Z') pause close

DIAGRAMA DE LINHAS

40 30 Eixo Z 20 10 0 1 0.5 0 -0.5 Eixo Y -1 -1 -0.5 Eixo X 0.5 0 1

O comando comet3 exibe o traado de uma curva em trs dimenses, com trajetria de cometa. Exemplo:
function helice % comet3: exibe o traado de uma curva em trs dimenses, visualiza-se o desenho de uma hlice sendo traado, por exemplo t=0:pi/100:10*pi; comet3(sin(t),cos(t),t) title('HLICE') xlabel('sen(t)') ylabel('cos(t)') zlabel('t') pause close

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


4.2.2 Grficos de Malha e Superfcie

24

A sintaxe [X,Y] = meshgrid([Xmin Xmax] , [Ymin Ymax]) especfica o domnio para plotar funes. Exemplo 1:
x=1:3; y=4:7; [X,Y]=meshgrid(x,y) X = 1 2 3 1 2 3 1 2 3 1 2 3 Y = 4 5 6 7 4 5 6 7 4 5 6 7

Desta forma, a declarao [X,Y]=meshgrid(x,y) transforma o domnio especificado pelos vetores x e y em valores de X e Y, permitindo a avaliao de funes de duas variveis Z=f(X,Y) e usando a declarao mesh(Z) plota-se superfcies em 3D. Exemplo 1: plotar z=x2 + y2 com 2 x 2 e 2 y 2
function parabolica x=-2:0.1:2; y=-2:0.1:2; [X,Y]= meshgrid(x,y); Z=X.^2+Y.^2; mesh(Z) pause print dbitmap c:\graficos\parabolica close

Para a visualizao de superfcies paramtricas em 3, o MATLAB possui duas funes, surf e mesh. No mesmo esprito do plot, essas funes recebem como parmetros 3 matrizes X, Y e Z e exibe uma reconstruo poligonal dos pontos p(i, j)=(x(i, j),y(i,j),z(i,j)). Por exemplo, para desenhar uma esfera podemos entrar com os comandos:
function graf_esfera t=-pi:0.5:pi; s=-pi:0.5:pi; % Esse comando gera uma matriz x onde 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); pause close

1
0.5
0
-0.5
-1 1
0.5
0
-0.5
-1
-1

1
0.5
0
-0.5

O caso mais comum de visualizao de superfcies de grficos de funes a dois parmetros z = f(x,y). Nesse caso as funes surf e mesh possibilitam um relaxamento nos parmetros de entrada. Os parmetros x e y no precisam mais ser matrizes, podendo ser vetores. Por exemplo, para plotar a gaussiana bidimensional f(x,y) = exp(-x2) * exp(-y2) podemos entrar com os comandos:

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


function graf_fdp2normal x=-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.0 camlight left lighting phong % para incrementar o grfico pause close

25

O comando mesh(X,Y,Z) cria uma perspectiva tridimensional plotando os elementos da matriz Z em relao ao plano definindo pelas matrizes X 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 (como plot, mesh e surf) possuem um grande nmero de opes. O comando contour3(Z) plota as curvas nvel de Z.

Exemplo 2:
function ex_contour3 x=-2:0.2:2; y=-2:0.2:2; [X,Y]=meshgrid(x,y); Z=X.^2+Y.^2; surf(X,Y,Z) pause contour3(Z) pause close
8
6
4
2
0 20
15
10
5
5

20
15
10

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

26

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

f ( x, y ) =

1 2

1 ( x2 + y 2 ) 2

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') pause close

4.2.3 Funes para grficos tridimensionais


Estes so alguns comandos para plotar grficos 3D que no foram apresentados anteriormente:
contour3 cylinder ezplot3 fill3 meshc quiver rotate3d on slice sphere stairs stem surface surfc surfil uicontrol uimenu view plota contorno 3D (tipo curva de nvel 3D) gera cilindro gera grfico 3D a partir das equaes paramtricas (x(t),y(t),z(t)) desenha polgono 3D combinao mesh/contour plota gradiente 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 plota fatias de um grfico volumtrico gera esfera grfico escada (plotar em degrau, apropriado para sinais amostrados) grfico discreto que indica pontos com marcadores igual ao mesh mas os espaos so preenchidos combinao surf/contour plota superfcie 3D com iluminao cria controle de interface de usurio na janela de figura corrente cria menu de interface com o usurio especifica ponto de visualizao (situao de um observador) para um grfico 3D. view (azimuth, elevao) % elevao descreve a localizao do observador como um ngulo acima do plano xy e azimuth refere-se ao ngulo interior ao plano xy onde o observador fica grfico tipo waterfall (semelhante a mesh, sem o quadriculado) controla a intensidade de cores escuras, onde: (0< n 1): usado para clarear e (-1 n<1): usado para escurecer

waterfall brighten(n)

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


4.3 Visualizao de Imagens

27

O MATLAB permite tambm que matrizes sejam visualizadas como imagens. Tambm possvel ler imagens de arquivos tipo BMP, JPEG, TIF, GIF ... e guardar essa imagem em uma matriz, o que possibilita processamento e tratamento de imagens. Para exemplificar a visualizao de imagens, vamos tomar como exemplo a gaussiana do 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 uma grande 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 disponveis para a manipulao dos grficos. No entanto, os outros recursos e extenses seguem o mesmo esprito das funes apresentadas anteriormente. Para ter acesso aos demais recursos para criao e manipulao de grficos disponveis, acesso o help do MATLAB. Assim, para ver uma relao completa das funes grficas do MATLAB: digite.
help graph2d help graph3d help specgraph help graphics grficos em duas dimenses grficos em trs dimenses especialidades do grficos informaes das funes grficas e uma breve explicao

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


4.5 Salvando figura em um formato bitmap (extenso BMP)

28

Para salvar uma figura num arquivo com extenso BMP, que posteriormente poder ser inserida, como figura, em softwares tais como: o Word for Windows, o Excel, etc., deve ser usado o comando: print dbitmap path filename, onde:
path filename o caminho onde ser gravado o arquivo (drive e pasta) o nome do arquivo, que assumir automaticamente a extenso bmp

Exemplos:
print dbitmap c:windows\parabola1 a figura atual ser salva, num arquivo com o nome parabola1.bmp, na pasta windows do drive c a figura atual ser salva, num arquivo com o nome print dbitmap a:\parabola1 parabola1.bmp, no seu disquete

Exemplo: Anlise de sinal: A caixa de ferramentas de processamento de sinal proporciona ferramentas para examinar e analisar sinais; examinando e analisando seu teor 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 espaados t=linspace(0,10,512);% eixo do tempo x=3*sin(5*t)-6*cos(9*t)+5*randn((size(t))); % Rudo Branco normal(0, 1) plot(t,x)% Plota sinal com rudo gaussiano title('SINAL DE UM RUDO') xlabel('EIXO DO TEMPO') pause print -dbitmap c:\graficos\ruido % salvar arquivo: ruido.bmp em c:\graficos close

4.6 Slidos em revoluo O MATLAB tem uma funo chamada makevase que ativa uma janela denominada Making a Vase (fazendo um vaso), proporcionando a possibilidade de gerar slidos em revoluo. Assim que digitado makevase na linha de comandos, voc deve clicar na opo New Shape, logo aparecer na primeira janela uma linha vermelha que representar o centro da rotao. Voc dever, em seguida, ir clicando com o boto esquerdo do mouse fazendo o contorno da sua figura sendo que, o ltimo ponto dever ser feito com o boto direito do mouse (ou esquerdo, desde que mantenha pressionado a tecla shift), 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:
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 revoluo abre uma janela de ajuda sobre como usar a funo makevase info fecha a janela relativa funo makevase close

New Shape

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


CAPTULO V 5 PROGRAMAO MATLAB

29

Os comandos do MATLAB so normalmente digitados na Janela de Comandos, onde uma 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", e consistem de uma seqncia de comandos normais do MATLAB, possibilitando incluir outros arquivos ".m" escritos no formato texto (ASCII). 5.1 O Editor do MATLAB Uma das ferramentas disponveis no MATLAB um editor de textos especfico para programas .m (o M-File Editor). Embora seja possvel editar um arquivo .m em qualquer editor de textos, o editor do MATLAB possui caractersticas que facilitam muito o trabalho do programador. Por exemplo, ele enfatiza as palavras chaves com cores diferentes, verifica balano de parnteses em expresses e prov uma interface amigvel para o uso do DEBUG. 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-FILE para criar um novo arquivo ou OPEN M-FILE para editar um arquivo j existente, a partir do menu FILE. 3) Selecionando os cones:

Desta forma, teremos a janela:

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


5.2 M-Files: criando seus prprios programas e funes

30

A maneira mais simples de se fazer um programa em MATLAB criar um arquivo texto com a lista de comandos desejados. Os comandos so os mesmos que so usados no Command 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 fossem entrados seqencialmente via teclado. Por exemplo, para se calcular a distncia entre dois pontos p e q em R3 podemos gerar um script com os comandos apropriados e cham-lo sempre que o clculo tenha que ser efetuado.
temp = (p(1)-q(1))^2 + (p(2)-q(2))^2 + (p(3)-q(3))^2 distancia = sqrt( temp )

Esse arquivo pode ser criado com qualquer editor de texto e deve ter uma extenso .m; por exemplo, o script acima poderia estar no arquivo distancia_p_q.m . Para chamlo 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 arquivo script deve estar no diretrio corrente ou no path do MATLAB, que a lista dos diretrios onde o MATLAB procura os arquivos, caso no ache no diretrio corrente. O diretrio padro : bin (verso 5) ou work (verso 6). Os arquivos script so teis quando se deseja efetuar uma seqncia de comandos com muita freqncia. Como mostra o exemplo anterior, os scripts se utilizam dos dados presentes na memria (workspace) para efetuar os comandos. Uma alternativa aos arquivos scripts so os arquivos tipo function, que admitem parmetros de entrada, retornam valores e possuem variveis locais (no afetam o workspace). Essas caractersticas fazem com que programas escritos nesse formato atuem exatamente como os comandos nativos do MATLAB. So, portanto, uma forma de ampliar a linguagem, e um dos pontos chaves do MATLAB. A palavra funo no MATLAB tem um significado diferente daquele que tem na Matemtica. Aqui funo um comando, que pode ter alguns argumentos de entrada e alguns de sada. 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 2 Exemplo 1: distancia=calcula_distancia([3 4],[0 0]) >> p=[1 0 0]; distancia = >> q=[0 1 0]; 5 >> d=calcula_distancia(p, q) Ou: >>d=calcula_distancia([1 0 0], [0 1 0]) d= 1.4142

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

31

Salienta-se que essa funo determina a distncia entre dois vetores quaisquer, independente do nmero de componente dos mesmos (desde que ambos vetores sejam de mesma dimenso, claro). O arquivo tipo function tambm tem que ter extenso .m e deve ter o mesmo nome usado na definio da funo, descrita na primeira linha do arquivo; no exemplo anterior o nome do arquivo deve ser calcula_distancia.m. Veja que para executar essa funo usamos o Command Window da mesma forma como se executa um comando nativo do MATLAB: A seguir, tem-se uma lista com alguns comandos de programao para o controle de fluxo, bem como comandos de programao geral e interfaces com o usurio.
Interrompe a execuo de laos FOR e WHILE equivalente ao BREAK do C limpa a tela (janela de comandos) limpa as variveis da memria do MATLAB (RAM read access memory) interrompe o fluxo do programa e recomea um loop FOR ou WHILE, j na iterao seguinte. S faz sentido dentro de um FOR ou WHILE exibe o nome e o contedo de uma varivel display exibe o contedo de uma varivel, sem mostrar o seu nome disp condiciona execuo de comandos if usado com o comando IF else usado com o comando IF elseif usado para terminar a execuo dos comandos IF, FOR, WHILE end mostra mensagem e aborta a execuo da funo error cria uma caixa de dilogo de erro errordlg executa uma expresso MATLAB definida atravs de uma string eval executa uma funo especificada por uma string feval repete comandos por um nmero de vezes especificado for grava dados em arquivo formatado fprintf l dados de arquivo formatado fscanf define m-file tipo FUNCTION (funo) function define variveis globais (Dica: nunca as use) global mostra uma caixa de dilogo de ajuda (HELP) helpdlg permite requisitar (com prompt) fornecimento de dados pelo teclado input suspende a execuo de uma rotina e permite que o usurio entre e execute novos keyboard comandos pelo teclado; a rotina continuada aps o usurio digitar return ltima mensagem de erro emitida pelo MATLAB lasterr gera um menu de escolhas para entrada do usurio menu verifica nmero de argumentos de entrada nargchk pausa na execuo de um programa at ser pressionada uma tecla pause pausa na execuo de um programa de n segundos pause(n) cria uma caixa de dilogo de perguntas questdlg caixa (rubberband box) para seleo de regio em grfico rbbox causa a sada imediata de uma funo return grava dados formatados em uma nica string sprintf switch e case equivalente ao CASE em Pascal ou o C. um teste para mltiplos casos caixa de dilogo para obter o nome de um arquivo existente uigetfile caixa de dilogo para especificar o nome de um novo arquivo uiputfile cria uma caixa de dilogo para advertncias (warning) warndlg repete comandos enquanto condio especificada for verdadeira while break clc, home clear continue

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


5.3 Principais comandos de programao

32

Como qualquer linguagem de programao, o MATLAB tem comandos especficos para o controle do fluxo do algoritmo, tais como: IF, FOR e WHILE. Esses comandos so similares aos encontrados em outras linguagens como C ou Pascal, e sua sintaxe bastante simples. A sintaxe do IF :
if teste .......... elseif .......... else .......... end

O elseif e o else no so obrigatrios, mas o end . O if (assim como o for e o while) pode ser usado tanto em linhas de comando quanto em textos de programas (onde sero mais teis de fato). Exemplo 01: Fazer um programa que permita calcular valores para a funo: 1 , se x < -1 f ( x) = x 2 , se - 1 x 1 x + 2 , se x > 1
function a=program1(x) if x<-1 a=1; elseif x>=-1 & x<=1 a=x ^2; else a=-x+2; end

A sintaxe do FOR :
for variavel = vetor .......... end

O valor de varivel recebe o contedo de cada coluna de vetor seqencialmente e, para cada contedo que receba, executa o corpo do FOR. Tipicamente o FOR tem o seguinte formato exibido no exemplo a seguir Exemplo 02:
for i = 1:10 disp(i*i ) end

O loop acima executado 10 vezes, com a varivel i assumindo o valor 1 no primeiro loop, 2 no segundo loop, 3 no terceiro, etc. O comando disp executa um display do argumento, i2 no caso. Portanto esse loop simples imprime os 10 primeiros quadrados perfeitos na janela de comandos (Command Window).

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

33

comum construes em que conjuntos de laos for so usados principalmente com matrizes. Exemplo 03:
for i=1:8 for j=1:8 A(i,j)=i+j; B(i,j)=i-j; end end C=A+B; disp(C) % mostra o resultado sem mostrar o nome da varivel

Exemplo 04: Construir um programa que plota o grfico da funo: 1 , se x < -1 f ( x) = x 2 , se - 1 x 1 x + 2 , se x > 1 Dica: Use o programa construdo no exemplo 01 (program1)
function program2 clear n=0; for t=-2:0.01:2 % gerar 401 nmeros n=n+1; x(n)=t; y(n)=program1(t);%aqui chama-se o programa "program 1", com entrada t e sada y(n) end plot(x,y) pause close % fecha a janela grfica

Em geral, as declaraes for e if-elseif-else aparecem juntas em um programa Exemplo 06:


for i=1:5 for j=1:5 if i==j; A(i,j)=1; elseif abs(i-j)==1 A(i,j)=-1; else A(i,j)=0; end end end disp(A) % mostra o resultado sem mostrar o nome da varivel

Exemplo 07: Criar um programa que verifique se o nmero dado positivo, se sim determinar se o mesmo par ou mpar.
function par_impar(n) if n<0 % se n negativo disp ('O nmero dado negativo') elseif rem(n,2)==0 % se nmero positivo e par disp ('O nmero dado positivo e par') else disp('O nmero dado positivo e mpar') end

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


A sintaxe do WHILE simples:
while teste .......... end

34

Exemplo 08: Usando o comando while determine o fatorial de um nmero dado


function fatorial(n) i=1; prod=1; if n<0 disp( ' ') error('n deve ser no negativo') else while i<=n prod=prod*i; i=i+1; end disp(' ') disp(prod) end

Exemplo 09: Plotar o grfico da funo y=a*x.^2+b*x+c, no intervalo xv - 5 < x < xv + 5


function parabola1 clear % limpa variveis e funes da memria (RAM) clc % limpa a tela aux='s'; while aux=='s'; clc % limpa a janela de comandos, posiciona o cursor no incio da tela a=input('a='); b=input('b='); c=input('c='); xv=-b/2*a; x=(xv-5):0.01:(xv+5);% definio do domnio y=a*x.^2+b*x+c; plot(x,y); figure(1) pause clc % limpa a tela close % fecha a figura aux=input('Plotar outro grfico? (s-sim, n-no)==>' , 's'); % Pergunta se quer plotar um outro grfico. Apenas quando for digitado "n" que o programa encerra-se, caso contrrio continua indefinidamente o loop. end

O comando switch executa certas afirmaes baseando-se no valor de uma varivel ou expresso. usado quando tm-se opes de escolha. Sua forma bsica :
switch expresso case valor1 afirmaes case valor2 afirmaes ... otherwise afirmaes end

Obs. : Se o primeiro caso for verdadeiro os outros casos no so executados.

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


Exemplo 10:
% multiplos condicionais em cada caso function ex_switch1 var=input('Entre com um dos valores: function ex_switch2 var=input('Entre com um valor ==> '); -1, 0 ou 1 ==> '); switch var switch var case 1 case 1 disp('1') disp('Nmero negativo') case {2,3,4} case 0 disp('2 ou 3 ou 4') disp('Zero') case 5 case 1 disp('5') disp('Nmero positivo') otherwise otherwise disp('outro valor') disp('outro valor') end end

35

O comando break permite uma sada antecipada de um for ou while. Esse comando faz com que o lao mais interno seja terminado imediatamente. Exemplo 11:
function modifica_matriz A=[1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5]; X='s'; for i=1:5 if x=='q' break end j=1; while j<=5 ['A('num2str(i),','num2str(j),')='num2str(A(i,j))] x=input('Modifica? (s-sim, n-no, p-prxima linha, q-sair)==>','s'); if x=='s' A(i,j)=input('Entre como novo valor de A(i,j)==>'); j=j+1; clc % limpa a tela end if x=='n' j=j+1; clc end if x=='p' clc break % interrompe o WHILE, para mudar para outra linha end if x=='q' clc break end end end

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


5.4 Interface com o usurio Neste item, apresentaremos os recursos desenvolvimento de interface com usurio. disponveis no MATLAB

36

para

display: exibe o nome e o contedo de uma varivel disp: exibe o contedo de uma varivel, sem mostrar o seu nome input: requisita uma entrada de dados atravs do teclado

Caixas de dilogos As caixas de dilogos possibilitam a construo de programas com interface mais amigvel. Por exemplo, ao invs de utilizarmos a funo input podemos usar a funo inputdlg (entrada de dados com caixa de dilogos), a qual tambm permite que se insira dados atravs do teclado. Exemplo 13:
function area_retangulo %CALCULO DA REA DE UM RETNGULO aviso={'Entre com a largura:' ,'Entre com o comprimento:'}; titulo='REA DE UM RETNGULO'; linhas=1; resposta=inputdlg(aviso,titulo,linhas); larg=str2num(char(resposta(1))); comp=str2num(char(resposta(2))); disp(' **************') disp(' * REA *') disp(' **************') area=larg*comp; disp(' 'area)

MENU: Lista de escolhas que aparece na tela enquanto determinado programa est sendo executado, ou seja, gera um menu de escolhas para entrada do usurio. Exemplo 11:
function imc k=menu('AVALIAO FSICA - IMC','QUER VER SUA SITUAO FSICA', ... 'FIM - PROGRAMA'); if k==1 dados = {'ENTRE COM O SEU PESO (kg):','ENTRE COM A SUA ALTURA (m):'}; titulo = 'NDICE DE MASSA CORPREA IMC'; linhas=1; resposta=inputdlg(dados,titulo,linhas); peso=str2num(char(resposta(1))); altura=str2num(char(resposta(2))); format bank indice = peso/(altura*altura); disp(' ----------------------------------------------------------') disp(' |PESO (kg) | ALTURA (m) | NDICE DE MASSA CORPREA - IMC |') disp(' ----------------------------------------------------------') saida=[peso altura indice]; disp(sprintf('%10.2f %11.2f %17.2f',saida')) disp(' ') if indice < 20 disp(' ')

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


disp(' VOC DEVE ALIMENTAR-SE MELHOR, REDUZIR O STRESS, ENGORDAR ') disp(' ') end if indice >= 20 & indice <=25 disp(' ') disp(' TUDO OK!, MANTENHA A FORMA') disp(' ') end if indice > 25 & indice < 30 disp(' ') disp(' VOC DEVE ALIMENTAR-SE MELHOR, REDUZIR O PESO ') disp(' ') end if indice >= 30 disp(' ') disp(' REPENSE O SEU MODO DE VIVER, OU ...') disp(' ') end pause imc else % sair disp(' disp(' disp(' disp(' disp(' end

37

do programa ') -------------------------') |OBRIGADO POR USAR: IMC |') -------------------------') ')

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


CAPTULO VI 6 EXPRESSES SIMBLICAS

38

Agora, vamos ver como podemos manipular com expresses que alm de nmeros e variveis numricas, contm tambm variveis simblicas. 6.1 Definindo variveis simblicas Primeiro precisamos dizer ao MATLAB que x uma varivel simblica. sym: Cria objeto simblico syms: Atalho para criar mltiplos objetos simblicos Uma vez definido que a varivel x uma varivel simblica, podemos definir expresses que envolvem esta varivel. Exemplo:
x=sym('x') x= x y=x+2*x y= 3*x Ou syms x y=x+2*x y = 3*x

Para definirmos vrias variveis podemos utilizar as seguintes sintaxes. Exemplo:


x x y y z z x= sym('x') = y= sym('y') = z= sym('z') = Ou simplesmente: syms x y z

6.2 Multiplicao literal de polinmios Sintaxe: collect(f) determina o resultado da multiplicao dos polinmios de f Exemplo: f=(x^2+1)*(x^3+2*x)
x=sym('x'); f=(x^2+1)*(x^3+2*x) f = (x^2+1)*(x^3+2*x) produto=collect(f) produto = x^5+3*x^3+2*x pretty(produto) x 5 3 + 3 x + 2 x

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


6.3 Simplificao de expresses simplify(f): simplifica expresses usando identidade simple(f): simplifica expresses e coloca na forma tcnica
Exemplo 1 x=sym('x'); f=sin(x)^2+cos(x)^2 f = sin(x)^2+cos(x)^2 simplif=simplify(f) simplif = 1 Exemplo 2 x=sym('x'); f=(x+1)*(x-1) f = (x+1)*(x-1) simples=simple(f) simples = x^2-1

39

Os comandos do exemplo 1 mandam o MATLAB simplificar a expresso sen2 x + cos2 x. Primeiro informamos que x uma varivel simblica, depois pedimos para simplificar a expresso que envolve x. Neste caso, as funes simplify e simple tem como argumento de entrada uma expresso simblica e de sada tambm. 6.4 Fatorao de polinmios factor(f): fatora o polinmio f, expressando-o como um produto de polinmios Exemplo:
x=sym('x'); f=x^4-5*x^3+5*x^2+5*x-6 f = x^4-5*x^3+5*x^2+5*x-6 fator=factor(f) fator = (x-1)*(x-2)*(x-3)*(x+1)

6.5 Expanso de polinmios expand(f): distribui o produto atravs de uma soma

Exemplo
x=sym('x'); f=(x-1)*(x-2)*(x-3)*(x+1) f = (x-1)*(x-2)*(x-3)*(x+1) expans=expand(f) expans = x^4-5*x^3+5*x^2+5*x-6

6.6 Exibio de expresses na forma mais legvel pretty(f): exibe o contedo da expresso f em um formato mais legvel
x=sym('x'); f=x^4-5*x^3+5*x^2+5*x-6 f = x^4-5*x^3+5*x^2+5*x-6 pretty(f) x 4 3 2 - 5 x + 5 x + 5 x - 6

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


6.7 Converso da forma numrica para a forma simblica poly2sym(f,'var'):
resp=poly2sym([1 -5 6],'x') resp = x^2-5*x+6 pretty(resp) x 2 - 5 x + 6

40

6.8 Converso da forma simblica para a forma numrica Sintaxe:sym2poly(f):


x=sym('x'); f=x^2-5*x+6 f = x^2-5*x+6 coef=sym2poly(f) coef = 1 -5 6

6.9 Inversa de funes Sintaxe: finverse(funo, varivel) Exemplo:


syms x y=2*x-4 y = 2*x-4 f_inversa=finverse(y) f_inversa = 2+1/2*x pretty(f_inversa) 2 + 1/2 x

6.10 Somatria de expresses Sintaxe: symsum(funo, varivel, a, b) Exemplo:

(2n 1) 2
1

syms n soma=symsum(2*n-1,1,n) soma = (n+1)^2-2*n-1 expande=expand(soma) expande = n^2 pretty(expande) 2 n

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


6.11 Funo composta Sintaxe: compose(funo f, funo g) fog = f(g(x))

41

Exemplo: Dadas as funes f(x)=x+1 e g(x)=x2 determine:


a) fog=f(g(x)) syms x f_x=x+1; g_x=x^2; f_o_g=compose(f_x,g_x) f_o_g = x^2+1 pretty(f_o_g) 2 x + 1 b) gof=g(f(x)) syms x g_x=x^2; f_x=x+1; g_o_f=compose(g_x,f_x) g_o_f = (x+1)^2 expandir=expand(g_o_f) expandir = x^2+2*x+1 pretty(expandir) 2 x + 2 x + 1

6.12 Combinao das funes: pretty e expand Exemplo: Determinao do binmio de Newton: (x+2)n
pretty(expand((x+2)^0)) 1 pretty(expand((x+2)^1)) x + 2 pretty(expand((x+2)^2)) 2 x + 4 x + 4 pretty(expand((x+2)^3)) 3 2 x + 6 x + 12 x + 8 pretty(expand((x+2)^4)) 4 3 2 x + 8 x + 24 x + 32 x + 16 pretty(expand((x+2)^5)) 5 4 3 2 x + 10 x + 40 x + 80 x + 80 x + 32 pretty(expand((x+2)^6)) 6 5 4 3 2 x + 12 x + 60 x + 160 x + 240 x + 192 x + 64

Exemplo geral: Dadas duas funes f(x) = 2x2+3x-5 e g(x) = x2-x+7, podemos fazer uma srie de operaes algbricas envolvendo estas funes, tais como: a) f+g b) f-g c) f*g d) expandir (f*g) e)f/g f) expandir(f/g) g) usar o comando pretty para tornar mais fcil a visualizao dos resultados h) f3 i) expandir(f3)

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


>>x=sym(x); % define a varivel x como simblica >>f=2*x^2+3*x-5; g=x^2-x+7; % define as funes f e g >>A=f+g A = 3*x^2+2*x+2 >>B=f-g B = x^2+4*x-12 >>C=f*g C = (2*x^2+3*x-5)*(x^2-x+7) >>D=expand(C) D = 2*x^4+x^3+6*x^2+26*x-35 >>E=f/g E = (2*x^2+3*x-5)/(x^2-x+7) >>F=expand(E) F = 2/(x^2-x+7)*x^2+3/(x^2-x+7)*x-5/(x^2-x+7) >>pretty(F) 2 x x 5 2 ---------- + 3 ---------- - ---------2 2 2 x - x + 7 x - x + 7 x - x + 7 >>H=f^3 H = (2*x^2+3*x-5)^3 >>I=expand(H) I= 8*x^6+36*x^5-6*x^4-153*x^3+15*x^2+225*x-125

42

Observe que o MATLAB no faz as simplificaes ou expanses automaticamente. Para isso, usamos os comandos simplify que simplifica e expand que faz a expanso. Alm destes, usamos anteriormente tambm o comando pretty, que mostra a expresso de uma forma mais fcil de enxergar. Alm destes, existe o comando simple, que tenta encontrar a forma mais simples de escrever uma expresso. O MATLAB pode realizar operaes mais avanadas sobre expresses simblicas. A funo compose calcula a composio das funes f(x) e g(x) em f(g(x)), a funo finverse encontra a inversa funcional de uma expresso e a funo subs substitui uma varivel por um nmero (ou por outra varivel) em uma expresso. Por exemplo:
>> f=1/(1-x^2); g=sin(x); >> a=compose(f,g) a = 1/(1-sin(x)^2) >>b=compose(g,f) b = sin(1/(1-x^2)) >>c=finverse(g) c = asin(x) >>d=subs(f,x,2) d = -1/3

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


O MATLAB pode resolver equaes literais. Por exemplo, para resolver a equao: ax2+bx+c = 0 algebricamente, podemos usar os comandos:
a=sym('a'); b=sym('b'); c=sym('c'); x=sym('x'); Ou simplismente: syms a b c x % define as variveis a, b, c e x como simblicas

43

raizes=solve(a*x^2+b*x+c) raizes = [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]

O MATLAB pode exibir este resultado de uma forma mais fcil de enxergar usando a funo pretty.
pretty(raizes) [ [ [1/2 [ [ [ [ [1/2 [ 2 1/2] -b + (b - 4 a c) ] --------------------] a ] ] 2 1/2] -b - (b - 4 a c) ] --------------------] a ]

Um outro exemplo: Clculo do determinante de uma matriz de ordem 2 e 3


Determinante 2x2 syms a b c d Determinante 3x3 syms a b c d e f g h i A=[a b c; d e f;g h i] A=[a b; c d] DET=det(A) DET=det(A) DET = DET = i*a*e-a*f*h-i*d*b+d*c*h+g*b*f-g*c*e a*d-b*c

possvel plotar o grfico de uma funo matemtica, sem definir o domnio da mesma.
sym x ou x = sym('x') exemplo 1: ezplot(sin(x)) exemplo 2: ezplot(x^2) % define a varivel x como simblicas

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


Abaixo segue um resumo das funes para manipulao de expresses algbricas:
diff(f) compose(f,g) expand(expr) finverse(expr) pretty(expr) simple simplify(expr) solve(expr) subs(expr,x,a) syms x y z a b calcula a derivada de f determina a composta f(g(x)) expande uma expresso expr determina a inversa funcional da expresso expr exibe a expresso expr numa forma mais bonita procura encontrar uma forma mais simples de escrever uma expresso expr simplifica a expresso expr acha a(s) soluo(es) da equao expr = 0 substitui na expresso expr a varivel x por a define as variveis simblicas x, y, z, a e b

44

Existem vrias outras funes para manipulao de expresses algbricas. Voc pode obter informaes sobre elas digitando help symbolic. Uma funo interessante que mostra as capacidades do MATLAB em tratar com funes matemticas funtool que uma calculadora para funes.

6.13 Limites Sintaxe: limit(funo,valor) % Determina o limite de uma expresso, para um valor Exemplos: sen( x) lim x 0 x
lim x2 4 x2 x 2

syms x limit(sin(x)/x,0) 1 syms x limit((x^2-4)/(x-2),2) 4

Exerccio:
x Usar mudana de varivel e o MATLAB para provar que: lim 1 + 1 = 2,71 = e xp(1) x x

Soluo: Fazendo t =
syms t

1 quando x , t 0 t

lim(1 + t ) t =
t 0

limit((1+t)^(1/t),0) exp(1)

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


6.14 Diferenciao (derivadas)

45

J vimos que a sintaxe polyder (p) determina a derivada numrica do polinmio p. Para determinar as derivadas simblicas usamos a seguinte sintaxe: diff(f, var, ord), onde: f: funo literal de uma ou mais variveis var: varivel em relao a qual deseja-se derivar ord: ordem da derivada a ser calculada Assim, tem-se: diff(f) derivada de f em relao a x diff(f,s) derivada de f em relao a s diff(f,2) derivada de f duas vezes em relao a x diff(f,s,2) derivada de f em relao a s duas vezes Exemplo 01: Calcular a derivada de 2.a ordem da funo f(x) = x3
x=sym('x'); deriv=diff(x^3,x,2) deriv = 6*x

Exemplo 02: Calcular a derivada de 1.a ordem da funo f(x) = x2 +y2


a) Em relao a varivel x syms x y der1_x=diff(x^2+y^2,x,1) der1_x = 2*x b) Em relao a varivel y syms x y der1_y=diff(x^2+y^2,y,1) der1_y = 2*y

Usando o MATLAB, determine as derivadas das seguintes funes: x3 x3 x 4 + 3x 2 f ' ( x) = 2 Exemplo 03: f (x ) = sen 2 . cos 2 x +1 x + 1 ( x + 1) 2

sym x a=diff(sin((x^3)/(x^2+1))) a = cos(x^3/(x^2+1))*(3*x^2/(x^2+1)-2*x^4/(x^2+1)^2) pretty(a) 3 x cos(------) 2 x + 1 / 2 4 \ | x x | |3 ------ - 2 ---------| | 2 2 2| \ x + 1 (x + 1) /

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


3 Exemplo 04: f ( x ) = sen 2 x .ln x 3 f ' ( x) = 2 sen x. cos x. ln x 3 + . sen 2 x x

46

sym x b=diff((sin(x))^2*log(x^3)) b = 2*sin(x)*log(x^3)*cos(x)+3*sin(x)^2/x pretty(b) 2 3 sin(x) 2 sin(x) log(x ) cos(x) + 3 ------x


Exemplo 05: f ( x ) = cos x
1 cos 3 x f ' ( x) = sen( x) + cos 2 ( x). sen x = sen 3 x 3

sym x c=diff(cos(x)-(1/3)*(cos(x)^3)) c = -sin(x)+cos(x)^2*sin(x) pretty(c) 2 -sin(x) + cos(x) sin(x)


Exemplo 06: f ( x ) = sec x + e 6 x f ' ( x) = 2 sec 2 ( x).tg ( x) + e 6 x

syms x e d = diff((sec(x))^2)+((e)^(6*x)) d = 2*sec(x)^2*tan(x)+e^(6*x) pretty(d) 2 (6 x) 2 sec(x) tan(x) + e

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 6.15 Integrao


Clculo numrico da integral definida

47

So dadas trs funes para calcular a rea sob a curva num intervalo finito. A integrao numrica usando o processo chamado de quadratura, no MATLAB, pode ser feita atravs das funes: quad Integrao numrica usando a regra de Simpson recursiva (baixa ordem). quad8 Integrao numrica usando a regra de Newton-Cotes adaptativa (alta ordem). Alm dos mtodos anteriores, o MATLAB, determina a integral definida atravs das funes: trapz aproxima a integral sobre a funo, pelo somatrio das reas dos trapzios trapz (x,y) d o valor da integral de y com seu respectivo x usando para isso o mtodo dos trapzios. Mtodo trapezoidal.
Integrais simblicas

Sintaxe: int('funo',varivel, a, b)

determina a integral literal

integ_sen=int('sin(x)',a,b) integ_sen = f ( x)dx -cos(b)+cos(a) pretty(integ_sen) - cos(b) + cos(a) 3 integral=int('x^3/sqrt(1-x)') x dx integral = 2/7*(1-x)^(7/2)-6/5*(1-x)^(5/2)+2*(1-x)^(3/2)-2*(1-x)^(1/2) 1 x pretty(integral) 7/2 5/2 3/2 1/2 2/7 (1 - x) - 6/5 (1 - x) + 2 (1 - x) - 2 (1 x) integral=int('x^3/sqrt(1-x)',0,1) x3 dx integral = 32/35 1 x

outras sintaxes para a integral literal


int(f) a integral indefinida da funo f em relao varivel x int(f,s) a integral indefinida da funo f em relao varivel s int(f,a,b) a integral definida da funo f em relao varivel x de a at b int(f,s,a,b) a integral definida da funo f em relao varivel s de a at b

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


6.16 Equaes diferenciais

48

Para resolver uma Equao Diferencial Ordinria (E.D.O.) no MATLAB, pode se usar a funo dsolve, cuja sintaxe dada por: dsolve(f, cond,'var'), onde: f : funo; cond : so as condies iniciais (ou de contorno) e var: varivel Nota: O MATLAB, utiliza como padro a varivel t como sendo a varivel independente. Para alterar, basta informar como um ltimo parmetro a varivel a ser considerada como independente. Exemplos: 1) Resolver a E.D.O. de 1.a ordem:

dy = 1 + y 2 com condio inicial y(0)=1 dt

sol=dsolve('Dy=1+y^2,y(0)=1','x') sol= tan(x+1/4*pi)

2) Resolver a equao diferencial f'(x)=6x2+x-5 sujeita condio inicial f(0)=2


sol=dsolve('Dy=6*x^2+x-5,y(0)=2','x') sol= 2*x^3+1/2*x^2-5*x+2

3) Resolver a equao diferencial iniciais f(0) = 3 e f'(0) = 3

f''(x) = 5cos(x) + 2sen(x) sujeita s condies

sol=dsolve('D2y=5*cos(x)-2*sin(x)','y(0)=3','Dy(0)=4','x') sol = -5*cos(x)+2*sin(x)+8+2*x

Outras funes relacionadas com E.D.O.


ode23 ode23p ode45 Resolve equaes diferenciais pelo mtodo de Runge-Kutta de 2/3 ordens (baixa ordem) Resolve eq. dif. atravs de ode23, plotando o resultado Resolve eq. dif. pelo mtodo de Runge-Kutta-Fehlberg de 4/5 ordens (alta ordem)

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


CAPTULO VII 7 TPICOS ESPECIAIS OTIMIZANDO A PERFORMANCE DE CDIGOS MATLAB

49

Pode-se freqentemente melhorar a velocidade de execuo de um cdigo em MATLAB ao trocar os laos for e while por vetores ou matrizes que so os elementos essenciais do MATLAB. Exemplo: Calcular o valor do seno de 1001 no intervalo [0, 1] com elementos igualmente espaados
1) Usando o comando for function performance tic i=0; for t=0:0.01:10 i=i+1; y(i)=sin(t); end pause(1) toc Resultado: elapsed_time = 1.3200 1) Usando a forma de vetor function performance tic t=0:0.01:10; y=sin(t); pause(1) toc Resultado: elapsed_time = 1.0400

ESTATSTICA
Funo Distribuio Acumulada DISTRIBUIO Beta Binomial Qui-quadrado Exponencial F de Snedecor Gama Geomtrica Hipergeomtrica Normal Poisson t de Student Uniforme discreta Uniforme contnua Weibull COMANDO betacdf binocdf chi2cdf expcdf fcdf gamcdf geocdf hygecdf normcdf poisscdf tcdf unicdf unifcdf weibcdf Funo Distribuio Acumulada Inversa COMANDO betainv binoinv chi2inv expinv finv gaminv geoinv hygeinv norminv poissinv tinv unidinv unifinv weibinv Funo Densidade de Probabilidade COMANDO betapdf binopdf chi2pdf exppdf fpdf gampdf geopdf hygepdf normpdf poisspdf tpdf unipdf unifpdf weibpdf Gerao de Amostra Aleatrias COMANDO betarnd binornd chi2rnd exprnd frnd gamrnd geornd hygernd normrnd poissrnd trnd unirnd unifrnd weibrnd

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


Anlise Estatstica dos Dados Estatstica Descritiva Comando corrcoef cov geomean harmmean kurtosis mean median moment skewness std var Outras funes bsicas Declarao max min sort sum prod cumsum cumprod diff length Anlise Grfica Declarao boxplot normplot hist histfit bar barh scatter plot pareto pie, pie3 area Estatstica descritiva coeficiente de correlao matriz covarincia mdia geomtrica mdia harmnica coeficiente de curtose mdia aritmtica mediana momento centrado coeficiente de assimetria desvio padro varincia

50

Significado valor mximo valor mnimo ordenar em ordem crescente soma dos elementos produto dos elementos soma acumulada produto acumulado diferena entre elementos nmero de componentes do vetor

Significado boxplot da anlise exploratria anlise de normalidade histograma histograma ajustado a normal grfico de barras grfico de colunas grfico disperso dos dados grfico de linha grfico de pareto ou curva ABC grfico em setores (pizza) grfico de rea

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


Exemplos 1) Exemplo de boxplot para 3 amostras normais
30

51

x1=normrnd(10,2,50,1); x2=normrnd(15,4,50,1); x3=normrnd(20,5,50,1); x=[x1 x2 x3]; boxplot(x)

25

Values

20

15

10

5 1 2 Column Number 3

2) Gerar uma amostra normal de tamanho 100, de mdia zero e desvio padro 1, construir o histograma e determinar: o valor mximo, o valor mnimo e a soma total.
x=normrnd(0,1,100,1); hist(x) maximo_x=max(x) minimo_x=min(x) soma_x=sum(x) RESULTADOS maximo = minimo = soma = 2.9199 -2.7532 -2.2903
20 18 16 14 12 10 8 6 4 2 0 -3 -2 -1 0 1 2 3

3) Gerar uma amostra normal com 100 elementos, de mdia 70 e desvio padro 10 e analisar a normalidade atravs do comando normplot
Normal Probability Plot 0.997 0.99 0.98 0.95 0.90 0.75

x=normrnd(70,100,100,1); normplot(x)

Probability

0.50 0.25 0.10 0.05 0.02 0.01 0.003 -200 -150 -100 -50 0 Data 50 100 150 200

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


4) Dados x = [ 1 2 3 4 5 6 7 8 9 10] e y = [ 8 2 6 0 1 3 6 8 3 5] a) Representar o diagrama de disperso para x e y plot(x,y,'o')
x=[1 2 3 4 5 6 7 8 9 10] y=[8 2 6 0 1 3 6 8 3 5] plot(x,y,'o')

52

b) Representar um grfico de linha plot(x,y)

x=[1 2 3 4 5 6 7 8 9 10] y=[8 2 6 0 1 3 6 8 3 5] plot(x,y)


5) Para as variveis alturas e pesos de um grupo de 10 pessoas adultas, dadas pela tabela a seguir, calcular:
altura(cm) 180 pesos(kg) 80 181 82 170 75 165 68 178 78 156 60 165 63 190 85 175 70 173 72

a) b) c) d) e)

A altura mdia e o peso mdio O desvio padro para a altura e para o peso O coeficiente de correlao A maior altura e o maior peso A menor altura e o menor peso
d) maior_alt = 190.00 maior_peso = 85.00 e) menor_alt = 156.00 menor_peso = 60.00 0.94 1.00

a) med_alt = 173.30 med_peso = 73.30 b) desv_alt = 9.75 desv_peso = 8.21 c) coef_corr = 1.0 0.94

6) Gerar uma amostra aleatria Normal de tamanho 100, de mdia 0 e desvio padro 1, construindo o histograma ajustado a curva normal.
20 18 16

v=normrnd(0,1,100,1); histfit(v)

14 12 10 8 6 4 2 0 -3 -2 -1 0 1 2 3

7) Gerar uma amostra Normal com mdia 0 e desvio padro 1, com o tamanho n da amostra, sendo informado via teclado.
n = input('Entre com o tamanho da amostra, n ==> '); amostra = normrnd(0,1,n,1)

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

53

8) Gerar o grfico da funo de distribuio normal padronizada univariada (N(0,1): = 0 e = 1) e determinar os percentuais de 1, 2, 3 e 4
function y=fdp_normal(x) y=(1/sqrt(2*pi)*exp(-0.5*(x.^2))); function distr_normal_integral Area_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(' ') pause x=-4:0.01:4; y=(1/sqrt(2*pi)*exp(-0.5*(x.^2))); plot(x,y,'b.') grid title('DISTRIBUIO NORMAL UNIVARIADA') xlabel('eixo X') ylabel('eixo Y') %gtext('<------------- 99,99% ---------------->') pause hold on x=-3:0.01:3; y=(1/sqrt(2*pi)*exp(-0.5*(x.^2))); plot(x,y,'r.') %gtext('<--------- 99,73% --------->') pause hold on x=-2:0.01:2; y=(1/sqrt(2*pi)*exp(-0.5*(x.^2))); plot(x,y,'g.') %gtext('<------ 95,44% ------>') pause hold on x=-1:0.01:1; y=(1/sqrt(2*pi)*exp(-0.5*(x.^2))); plot(x,y,'y.') %gtext('<-- 68,27% -->') legend('+ ou - 4 sigma','+ ou - 3 sigma','+ ou - 2 pause x=-2:0.01:2; y=(1/sqrt(2*pi)*exp(-0.5*(x.^2))); area(x,y) pause close

'%']) '%']) '%']) '%'])

sigma','+ ou - 1 sigma')

>> distr_normal_integral MAIS 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% PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

54

OUTRA FORMA: Usando a funo MATLAB normpdf


function normal x=-3:0.01:3; y=normpdf(x,0,1); plot(x,y) xlabel ('Eixo x') ylabel ('Eixo y') title ('DISTRIBUIO NORMAL') grid %grade pause close format bank sigma1=(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 NORMAL MAIS 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%

'%']) '%']) '%']) '%'])

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


REGRESSO LINEAR SIMPLES

55

A seguir tem-se alguns exemplos de regresso linear simples atravs do mtodo dos mnimos 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 de correlao. Fertilizantes (X) Milho (Y) 6 40 10 44 12 46 14 48 16 52 18 48 22 60 24 68 26 74 32 80

function reglinear(X,Y) % DETERMINAO DA FUNO DE REGRESSO LINEAR E DO COEFICIENTE DE CORRELAO e R2 m_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 % | -------------------

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

56

10) A seguir tem-se os km rodados e os litros gastos, faa a regresso linear e determine o coeficiente de correlao.
Medida 1 2 3 4 5 6 7 8 9 10 11 12 km 3203 3203 2603 3105 1305 804 1604 2706 805 1903 3203 3702 litros 400 400 340 400 150 100 200 300 100 200 400 450 Medida 13 14 15 16 17 18 19 20 21 22 23 km 3203 3203 803 803 1102 3202 1604 1603 3203 3702 3403 litros 400 400 100 100 130 400 150 200 400 450 440

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 de regresso linear mltiplo a funo regress. A sintaxe mais simples desta funo regress(y,x, alpha) 2) O MATLAB possui um toolbox para a rea de estatstica (stats), assim a respeito das demais funes estatsticas digite nas linhas de comando help stats ou consulte a apostila do prprio MATLAB, apostila em ingls, no formato pdf e inclusa no CD de instalao do mesmo.

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


MATEMTICA FINANCEIRA

57

A seguir tem-se alguns programas escritos em MATLAB, voltados para a rea de matemtica 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 MONTANTE clear % limpa as variveis (lixos) clc % limpa a tela aviso={'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 bank fv=pv*(1 + i/100)^n; disp(' ') disp(' ----------') disp(' |MONTANTE|') disp(' ----------') disp(' ') disp(fv) pause clc % limpa a tela matfin elseif k==2 %CALCULO DA PRESTAO PELO SISTEMA PRICE clear % limpa as variveis (lixos) clc % limpa a tela aviso={'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 bank pmt=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 - PRICE SaldoDevedor=pv; pause(1) disp(' ---------------------------------------------------------------- ') disp(' |PERIODO| |JURO| |AMORTIZAO| |SALDO_DEVEDOR| |GASTO| ') disp(' ---------------------------------------------------------------- ') for j=1:n % nmero de prestaes Juro=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 bank gasto=(pmt*j); periodo=[J Juro Amort SaldoDevedor gasto]; disp(periodo) pause(1) end

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


pause clc % limpa a tela matfin elseif k==3 %CALCULO DO MONTANTE EM UMA SRIE DE PAGAMENTOS UNIFORMES clear % limpa as variveis (lixos) clc % limpa a tela aviso = {'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 bank fv=pmt*((1+i/100)^n-1)/(i/100); disp(' ----------') disp(' |MONTANTE|') disp(' ----------') disp(' ') disp(fv) clc % limpa a tela matfin else % sair do programa disp(' ') disp(' ---------------------------') disp(' |OBRIGADO POR USAR: matfin ') disp(' ---------------------------') disp(' ') clc % limpa a tela end

58

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


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

59

if K==1 clear clc % SISTEMA PRICE (FRANCS) DE AMORTIZAO % PRICIPAL CARACTERSTICA: PRESTAO CONSTANTE % BASTANTE UTILIZADO NAS COMPRAS COM POUCAS PRESTAES % CALCULO DA PRESTAO PELO SISTEMA PRICE disp(' ') 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 bank pmt=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 - PRICE SaldoDevedor=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 prestaes Juro=SaldoDevedor*(i/100); % juros de cada periodo Amort=pmt-Juro; % valor da amortizao do perodo SaldoDevedor=SaldoDevedor-Amort; % atualizao do saldo devedor gasto=(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'))

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


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')) pause clc % limpa a tela sisamo elseif K==2 clear clc % SISTEMA DE AMORTIZAO CONSTANTE % PRICIPAL CARACTERSTICA: AMORTIZAO CONSTANTE % CALCULO DO VALOR DA AMORTIZAO aviso = {'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 bank Amort=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 - SAC SaldoDevedor=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 prestaes Juro=SaldoDevedor*(i/100); % juros de cada periodo pmt=Amort+Juro; % valor da prestao perodo SaldoDevedor=SaldoDevedor-Amort; % atualizao do saldo devedor gasto=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')) pause clc % limpa a tela sisamo elseif K==3 clc clear % SISTEMA DE AMORTIZAO AMERICANA - SAA % PRICIPAL CARACTERSTICA: A CADA PERODO PAGA-SE APENAS O JUROS,

60

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


% NO LTIMO PERODO PAGA-SE O JUROS + O MONTANTE EMPRESTADO % PORTANTO O JUROS SEMPRE CONSTANTE % CALCULO DO VALOR DO JUROS aviso={'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 bank Juro= 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 - SAC SaldoDevedor=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 prestaes Juros=pv*(i/100); % juros de cada periodo pmt=Juros; % valor da prestao do perodo Amort=0; SaldoDevedor=SaldoDevedor-Amort; % atualizao do saldo devedor gasto=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 periodo pmt=Juros+pv; % valor da amortizao do perodo Amort=pv; SaldoDevedor=SaldoDevedor-Amort; % atualizao do saldo devedor gasto=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')) pause clc % limpa a tela sisamo else % sair do programa disp(' ') disp(' ----------------------------') disp(' |OBRIGADO POR USAR: sisamo |') disp(' ----------------------------') disp(' ') clc % limpa a tela end

61

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


PROGRAMAO LINEAR

62

A Programao Linear (LINEAR PROGRAMMING): o campo da Matemtica cujo objetivo otimizar a soluo de um problema que depende de um conjunto de variveis sujeito a um conjunto de restries.
Exemplo 01: Considere o seguinte problema Uma indstria produz duas peas A e B que necessitam passar por trs operaes. Os tempos de execuo por unidade, as disponibilidades em horas por ms, e os lucros em reais por unidade so dados pela seguinte tabela:
Operao 1 2 3 Lucro (R$ / unidade) Pea A (minutos/unidade) 11 7 6 9 Pea B (minutos/unidade) 9 12 6 10 Disponibilidade (horas/ms) 165 140 160

Pergunta-se em quais condies a industria deve trabalhar mensalmente para obter o maior lucro, isto quais as quantidades de peas A e B que devem ser fabricadas para ter 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) 7x1 + 12x2 140*(60) 6x1 + 6x2 160* (60) Assim, temos 11x1 + 9x2 9.900 7x1 + 12x2 8.400 6x1 + 6x2 9.600 Obs.: 60 usado para acerto das unidades Lucro obtido L = 9x1 + 10x2 Como no possvel nmero negativo de peas acrescentamos as condies de positividade que so: x1 0 e x2 0 Logo o problema proposto encontrando valores de x1 e x2 satisfazendo 11x1 + 9x2 9.900 7x1 + 12x2 8.400 6x1 + 6x2 9.600 x1 0 e x20 tal que L = 9x1 + 10x2 represente o lucro mximo. (1) (2) (3)

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

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 do problema. 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+12 x2=8400','6x1+6x2=9600') hold on c=[-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')

1600
1400
1200
1000
800
600
400
200
0
0

11x1+9x2=9900 7x1+12x2=8400 6x1+6x2=9600

ponto timo

200

400

600

800

1000

1200

1400

1600

2) O problema acima um tpico problema de programao linear (P.L.). Um problema de 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)

Min cx
Problema:

s. a : Ax b x0

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

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

64

Exemplo 02: (Covest-PE) Eric necessita de complementos das vitaminas A e C. Diariamente precisa de pelo menos 63 unidades de A e no mnimo 55 unidades de C. Ele pode escolher entre os compostos I e II, que apresentam, por cpsula, as caractersticas abaixo:
Composto I II Vitamina A 7 unidades 4 unidades Vitamina C 4 unidades 5 unidades Valor R$ 0,70 0,50

Qual o gasto mnimo dirio de Eric, em reais, com os compostos I e II? Resoluo: Primeira etapa: O equacionamento:
Min 0,70x 2 + 0,50x 2 7x 2 + 4x 2 63 Sujeito a 4 x 2 + 5x 2 55 x e x 0 2 2

Segunda etapa: A soluo via MATLAB: O padro da funo MATLAB lp(c,A,b) (lp, a abreviao de linear programming) :

Min cx Ax b sujeito a x 0 Assim, tem-se que adaptar o sistema anterior, ficando o mesmo da seguinte forma: Min 0,70x1 + 0,50x 2
- 7x1 4x 2 63 S . a 4 x1 5x 2 55 x e x 0 1 2

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.0000 7.0000 custo=c*resp custo = 7.0000 % Portanto, o custo ser de R$ 7,00

mnimo

dirio

Exerccio 01: Elaborar um aplicativo, usando a funo lp, de forma que torne mais fcil a utilizao dessa funo por parte do usurio final. Dica: Construa uma interface com o usurio, sendo solicitado do mesmo: a matriz A e os vetores c e b

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


Exerccio 02: Resolver os seguintes problemas de programao linear a) min -0.56x1 -0.42x2 sujeito a: 1x1 + 2x2 240.000 1.5x1 + 1x2 180.000 x1 110.000
c=[-0.56;-0.42]; A=[1 2; 1.5 1; 1 0]; b=[240000; 180000 ; 110000]; minimo=lp(c,A,b) minimo = 60000.00 90000.00

65

b) max 80x1 + 80x2 sujeito a: x1 + 2x2 80 3x1 + 2x2 120 x1 0 e x2 0


x11=[80 0]; x12=[0 40]; x21=[40 0]; x22=[0 60]; plot(x11,x12,x21,x22) legend('x1+2x2=80','3x1+2x2=1200') hold on c=[-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
60
x1+2x2=80 3x1+2x2=1200

50

40

30

ponto timo

20

10

10

20

30

40

50

60

70

80

PROGRAMAO QUADRTICA (quadratic Programming) Min x t Ax + bx + c s. a : Cx b Problema:

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

qp(A,b,C,d)

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

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


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

66

1 2 5 6 1) Dadas as matrizes: A = e B = 7 8 , calcule: 4 3 Obs.: Usando a janela de comandos (Command Window) do MATLAB
a) b) c) d) e) f) g) A+B A'+B' A-B A*B A.*B 2*A+B' det(A) h) i) j) k) l) m) det(B) det(A*B) inv(A) inv(B) inv(A)*A inv(B)*B

2) Construa um programa (script - roteiro) que execute todos os itens pedidos no exerccio anterior. Dica: Abra um arquivo a partir de (File, New, M-File) ou digitando edit, nas linhas de comando. Digite os comandos necessrios e salve o arquivo com o nome de roteiro1.m, no diretrio (bin, verso 5 ou work, verso 6) ou em seu disquete. Para execut-lo a partir do disquete digite o seguinte comando na linha de comandos: addpath a:, logo aps digite o nome do arquivo roteiro1. 3) a) b) c) Criar as seguintes matrizes Identidade de ordem 5 Matriz nula do tipo 3x4 Matriz de elementos 1's do tipo 8x1
x y z = 2 x + 3 y + 4 z = 4

4) Resolva os sistemas lineares a) 3x y + z = 6 SPD S = { (-6, -14, 10)}

2 x + 3 y + z = 2 23 7 b) x y + z = 3 SPD S= ( , ,3) 5 5 x y + 2z = 0

(1) Use a funo inversa (inv(A)) e o formato racional (format rat) (2) Use a funo solve 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

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

67

6) Em uma sala de aula esto 8 pessoas, reunidas em uma mesa circular. Cada uma escolhe um nmero aleatrio e pega o seu nmero e soma com os nmeros das pessoas ao lado, a sua direita e esquerda. Passa-se as 8 somas para voc, que estava fora da sala. Como voc faz para descobrir o nmero que cada um escolheu? Nota: Considere que as somas sejam: Soma1=6; Soma2=9; Soma3=12; Soma4=15; Soma5=18; Soma6=21; Soma7=16; Soma8=11 Resoluo:
Equacionamento Implementao via MATLAB A=[1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1]; x = 1.00 2.00 3.00 4.00 5.00 6.00 7.00 8.00 Soluo MATLAB

a + b + c = soma1 b + c + d = soma 2 c + d + e = soma3 d + e + f = soma4 e + f + g = soma5 f + g + h = soma6 g + h + a = soma7 h + a + b = soma 8

b=[6;9;12;15;18;21;16;11]; x=inv(A)*b

Obs.: Poderia se resolver este exerccio usando o comando solve


[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') e = a = 5 1 b = 2 c = 3 d = 4 f = 6 g = 7 h = 8

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


LISTA DE EXERCCIOS 2 - Nmeros complexos, Polinmios e Construes Grfica Nmeros complexos 1) Dado o nmero complexo Z= 3 + 4i, determinar: a) A parte real do nmero Z c) O mdulo de Z b) A parte imaginria de Z d) O ngulo de Z (em graus) Polinmios 1) Determinar as razes do polinmio x4 10x3 +35x2-50x +24
p=[1 -10 raizes=roots(p) raizes = 4 3 2 1 35 -50 24];

68

2) Determinar o polinmio cujas razes so: 1, 2, 3 e 4 ambas razes com multiplicidade 1 (cada elemento raiz uma nica vez)
raizes=[1 2 3 4]; p=poly(raizes) p = 1 -10 35

-50

24

3) Dados os polinmios p(x) = x2 + 2x +3 e q(x) = 4x2 + 5x + 6 a) Determine o produto de p(x) por q(x) atravs de seus coeficientes
a p=[1 2 3]; q=[4 5 6]; a=conv(p,q) = 4

13

28

27

18

b) Os coeficientes do quociente e do resto da diviso de p(x) por q(x)


[quoc resto]=deconv(p,q) quoc = 0.2500 resto = 0 0.7500 1.5000

c) Calcule o valor numrico do polinmio p(x) para x = 1


p=[1 2 3]; px_1=polyval(p,1) px_1 = 6

d) Avalie o polinmio q(x) para x = 1, x = 2, x = 3, x = 4 e x = 5


q=[4 5 6]; qx_1_5=polyval(p,1:5) qx_1_5 = 6 11 18 27

38

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


Construo de Grficos

69

1) Construa o grficos das seguintes funes (com titulo ao grfico, nomes a seus eixos e linhas de grade) a) f(x) = x3 no intervalo [-5;5] b) f(x) = ex no intervalo [-10;10] c) f(x) = cos(x) no intervalo [-2, 2] d) y = sen (x) no intervalo 0 x 4. 2) Plotar o grfico da funo humps, dada por:
f ( x) = 1 1 + 6 ( x 0,3) 2 + 0,01 ( x 0,9) 2 + 0,04

no intervalo -2 x 2. Em seguida determine as razes dessa funo nesse intervalo.


function graf_humps x=-2:0.1:2; y=1./((x-0.3).^2+0.01)+ ... 1./((x-0.9).^2+0.04)-6; plot(x,y,[-2 2],[0 0]) % necessrio definir a funo function y=humps(x) y=1/((x-0.3)^2+0.01)+ ... 1/(x-0.9)^2+0.04)-6; fzero('humps',[-0.5 0]) ans = -0.1316 fzero('humps',[1 1.5]) ans = 1.2995
100

80

60

40

20

-20 -2

-1.5

-1

-0.5

0.5

1.5

3) Construir o grfico das funes: sen (x), sen (2x), sen (3x), sen(4x), sen (x/2) e sen (x/3), no intervalo [0, 4] usando o comando subplot. 4) Fazer em um mesmo grfico, usando o comando plot, os grficos das funes: a) sen (x) e sen (x + ) b) cos (x) e cos (x + ) 5) Plotar o grfico cuja equao : y = x3 - 8x2 +15x, no intervalo [-2, 7].
x 6) Plotar o grfico da funo z = x.e

com - 2 x 2 e - 2 y 2, usando o comando mesh. Fornecer um ttulo ao grfico, rotular os eixos x , y e z, inserir linha de grade.

y2

x=-2:0.1:2; y=-2:0.1:2; [X Y]=meshgrid(x,y); Z=X.*exp(-X.^2-Y.^2); mesh(X,Y,Z) title('GRFICO DA SUPERFCIE Z=X.*exp(-X.^2-Y.^2'); xlabel('eixo x') ylabel('eixo y') zlabel('eixo z')

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

70

7) Representar graficamente a parbola de equao y = x2 + x - 6, no intervalo - 3 x 2 e determine as razes dessa equao. 8) Representar graficamente a equao y = x3 - 2x2 - 5 x + 6, no intervalo - 5 x 5 e determine as razes dessa equao. 9) Representar graficamente as duas curvas anteriores simultaneamente no intervalo 3 x 4 10) Plotar o grfico cuja equao dada por: f ( x) =
X1=-2:0.1:(2-10*eps); x2=(2+10*eps):0.1:6; y1=(x1.^2-4)./(x1-2); y2=(x2.^2-4)./(x2-2); plot(x1,y1,'g',x2,y2,'g') pause close

x2 4 x2
8
7

( x 2) , no intervalo [-2, 6].

0 -2

-1

11) Plotar o grfico cuja equao : y =

1 , no intervalo [-5, 5]. x


fun o inversa de x

x1=-5:0.1:(0-eps); % eps = 2,22x10-16 y1=1./x1; x2=(0+eps):0.1:5; % eps = 2,22x10-16 y2=1./x2; plot(x1,y1,'b',x2,y2,'b') axis([-5 5 -10 10]) % Definio da rea de plotagem: x=[0 5] e y=[0 10] grid xlabel('x') ylabel('y = 1 / x ') title('funo inversa de x') hold on plot([0 0],[-10 10],'k') % assintota pause; close

10

2
y = 1/ x

-2

-4

-6

-8

-10 -5

-4

-3

-2

-1

0 x

12)

Plotar o grfico cuja equao : y =

1 , no intervalo [-5, 5]. x 1


gr fico da fun o: 1/(x-1))
10
8
6
4
2
y = 1 /(x -1)

x1=-5:0.1:(1-10*eps); % eps=2,22x10-16 y1=1./(x1-1); x2=(1+10*eps):0.1:5; % eps=2,22x10-16 y2=1./(x2-1); plot(x1,y1,'b',x2,y2,'b') axis([-5 5 -10 10]) grid xlabel('x') ylabel('y = 1 /(x-1) ') title('grfico da funo: 1/(x-1))') hold on plot([0 0],[-10 10],'k') plot([-5 5],[0 0],'k') plot([1 1],[-10 10],'r') % Assintota pause; close

0
-2
-4
-6
-8
-10 -5

-4

-3

-2

-1

0 x

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


LISTA DE EXERCCIOS 3 - PROGRAMANDO COM O MATLAB

71

1) Criar uma matriz do tipo 3x3 tal que cada elemento aij = i + j, usando um duplo FOR
n=3; m=3; for i=1:m for j=1:n A(i,j)=i+j; end; end disp('Matriz A') disp(A)

2) Usando dois comandos for criar uma matriz do tipo 4x3 com todos elementos iguais a 10.
for m=1:4 for n=1:3 A(m,n)=10; end end disp(A)

3) Gerar uma matriz de Hilbert ( uma matriz cujos elementos so iguais a 1 / (i + j - 1) com i e j variando de 1 at n e salvar este arquivo como "hilbert.m".
Primeira forma: Usando um duplo for For i=1:n For j=1:n A(i,j)=1/(i+j-1); End End Segunda forma: Usando o comando eval t='1/(i+j-1)'; for i=1:n for j=1:n A(i,j)=eval(t) end end

4) Construir um programa que determina o grfico da funo tg(x) para


Function graf_tangente % grfico da funo tangente(x) x = [-pi/2 3*pi/2] x11=(-pi/2+eps):0.01:(pi/2-eps); x12=(pi/2+eps):0.01:(3*pi/2-eps); x=[x11';x12']; % excluir os valores onde a funo indefinida y=tan(x); plot(x,y,'r') xlabel('x (radianos)') ylabel('y = tangente(x) ') title('grfico da funo tangente ') grid axis([-pi/2 3*pi/2 -5 5]) hold on plot([-5 5],[0 0])% cria o eixo das abscissas hold on plot([0 0],[-5 5]) % cria o eixo das ordenadas pause close

3 2

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

72

5) Elabore um programa para calcular xn (x inteiro e positivo) sem usar exponenciao ou funo predefinida (lembre-se: xn = x* x* ... *x (n-vezes))
function pot=potencia(x,n) Pot=1; For i=1:n pot=pot*x; end

6) Elabore um programa que calcula a soma dos n primeiros nmeros naturais no nulos
function soma=soma1(n) Soma=0; For i=1:n soma=soma+i; end function soma=soma2(n) soma=0; i=1; while i<=n soma=soma+i; i=i+1; end Funo MATLAB (built in function) sum Exemplo: sum(1:100)

function soma=soma3(n) soma=0; while n~=0 soma=soma+n; n=n-1; end

7) Elabore um programa que calcula a soma dos quadrados dos n primeiros nmeros naturais no nulos.
function soma=soma_quad(n) Soma=0; For i=1:n soma=soma+i*i; end

8) Elaborar uma funo que determina o maior nmero fatorial calculado pelo MATLAB
function max_fatorial % Determinar o maior nmero fatorial calculado pelo MATLAB n=1; while prod(1:n) < realmax

n=n+1;
end disp(' ') disp(n-1)

9) Escrever um programa para gerar uma matriz identidade de ordem 5, usando os comandos: for e if 10) Escrever um programa para gerar uma matriz identidade de ordem n, solicitando do usurio a ordem da mesma. Dica: Use os comandos: input, for e if 11) Gerar uma matriz triangular inferior, cujos elementos diagonais so iguais a 5 e os demais iguais a10. 12) Escrever um programa para gerar uma matriz diagonal, cujos elementos diagonais so os nmeros inteiros positivos nessa ordem.

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB

73

13) Em uma sala de aula esto 8 pessoas, reunidas em uma mesa circular. Cada uma escolhe um nmero aleatrio e pega o seu nmero e soma com os nmeros das pessoas ao lado, a sua direita e esquerda. Passa-se as 8 somas para voc, que estava fora da sala. Como voc faz para descobrir o nmero que cada um escolheu? Elaborar um aplicativo que solicite do usurio as 8 somas e determina os nmeros escolhidos. Os valores A, B, ..., H so recebidos do usurio a + b + c = A atravs da sintaxe: b + c + d = B A = input ('Entre com o valor da primeira soma ==> ') .... c + d + e = C H = input ('Entre com o valor da oitava soma ==> ') d + e + f = D Assim, basta resolver o sistema: x = inv(A)*b e + f + g = E f + g +h = F g + h + a = G h + a + b = H 14) Gerar 1000 nmeros aleatrios com distribuio normal e verificar a distribuio dos dados atravs da funo histfit
>> a=randn(10000,1); >> histfit

15) Elabore um aplicativo que determine as razes e o vrtice de uma funo quadrtica
function zero_para clear; clc disp(' ENTRE COM OS COEFICIENTES: a, b e c') disp (' ') disp(' O COEFICIENTE "a" NO PODE SER ZERO') disp (' ') disp(' POIS UMA FUNO DO SEGUNDO GRAU') disp (' ') a=input(' ENTRE COM O COEFICIENTE, a = '); disp(' ') b=input(' ENTRE COM O COEFICIENTE, b = '); disp(' ') c=input(' ENTRE COM O COEFICIENTE, c = '); disp(' ') disp(' ----------------------------') disp(' RAZES (ZEROS) DA PARBOLA ') disp(' ----------------------------') delta=b^2-4*a*c; if delta >=0 x=(-b-sqrt(delta))/(2*a) x=(-b+sqrt(delta))/(2*a) else i=sym ('i'); x=(-b-sqrt(-delta)*i)/(2*a) x=(-b+sqrt(-delta)*i)/(2*a) end disp(' ') disp(' ------------------------------------') disp(' COORDENADAS DO VRTICE DA PARBOLA ') disp(' ------------------------------------') disp(' ') xv=-b/(2*a) yv=-(b^2-4*a*c)/(4*a)

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


16) Determinao do fatorial de um nmero 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==0 disp(' ') fatorial_n=1; disp([' ' num2str(n),'! = ' num2str(fatorial_n)]); disp(' ') else disp(' ') fatorial_n=prod(1:n); disp([' ' num2str(n),'! = ' num2str(fatorial_n)]); disp(' ') end function fatorial3(n) function fatorial2(n) if n==0 if n==0 disp(1) disp(' ') else disp('1') prod=1; disp(' ') for i=1:n; else prod=prod*i; prod=1; end while n~=0 disp(' ') prod=prod*n; disp(prod) n=n-1; end end disp(' ') disp(prod) disp(' ') end function p=factorial(n) function fatorial4(n) i=1; if (length(n)~=1)|(fix(n)~=n)|(n<0) prod=1; error('n deve ser no negativo') if n<0 end disp( ' ') p=prod(1:n); error('n deve ser no negativo') else while i<=n prod=prod*i; i=i+1; end disp(' ') disp(prod) end

74

Exerccio: Elaborar um aplicativo que solicite do usurio o seu salrio bruto e que determine o seu salrio lquido, isto , j descontado o INSS e o IRPF Nota: Considere que as alquotas do INSS podem ser: 8%, 9%, 10%, 11%, sendo que o valor mximo no possa ultrapassar R$156,00 (valor mximo). As alquotas do IRPF so: 1. Isento para valores at R$ 1.057,50; 2. 15,00% para valores de R$ 1.057,50 at R$ 2.115,00; 3. 27,50% para valores acima de 2.115,00; 4. Assim o valor mximo para deduo de R$ 423,00.

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


REFERNCIAS BIBLIOGRFICAS

75

01 Curso de MATLAB for Windows, Departamento de Engenharia Mecnica, UNESP, Campus de Ilha Solteira. 02 JOHNSON, R. A.; WICHERN, D. W. Applied multivariate statistical analysis. 4. ed. New Jersey: PrenticeHall, inc., 1998. 03 LECKAR, H.; SAMPAIO, R. Aproximando solues de AX=B com o MATLAB, PUC-RJ. 04 MARQUES, J. M. MATLAB BSICO Curitiba 1999 05 MATLAB for Windows Users Guide, version 5.2 Student, The Math Works Inc., 1991. 06 MATLAB: The Language of Technical computing Using MATLAB: Version 5. Natick, MA: The Math Works, Inc, 1998. 07 MATSUMOTO, E. Y. MATLAB 6 Fundamentos de programao, Ed. rica, 1. ed., 2001. 08 OPTIMIZATION TOOLBOX: For use with MATLAB. User's Guide: version 5. Natick, MA: The Math Works, Inc, 1997. 09 PUCCINI, A. de Lima e PIZZOLATTO, N. Introduo a Programao Linear. Rio de Janeiro. Livros Tcnicos e Cientficos ed., 1983 10 SAMPAIO, R.; CATALDO, E.; RIQUELME, R. Introduo ao MATLAB, Laboratrio de vibraes, PUC-RJ. 11 STATISTICS TOOLBOX: For use with MATLAB. User's Guide: version 2.1. Natick, MA: The Math Works, Inc., 1998. 12 SWOKOWSKI, E. W Clculo com Geometria Analtica. 2. ed. Vol I e II Makron Books So Paulo, 1994 13 SYMBOLIC MATH TOOLBOX: User's Guide: version 2. Natick, MA: The Math Works, Inc, 1997. 14 THE STUDENT EDITION OF MATLAB: Version 5 User's Guide. New Jersey, 1998. 15 ZIONTS, Stanley Linear and Integer Programming. New Jersey, Prentice-Hall, inc., 1974.

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB ANEXO I - MATRIZES E SISTEMAS LINEARES


% OPERAES ELEMENTARES DE MATRIZES disp(' ')% mostra uma linha em branco disp(' MEU PRIMEIRO SCRIPT (ROTEIRO)')%exibe a mensagem em vermelho clc % limpa a tela clear % limpa as variveis pause(1)% pausa de 1 segundos % DECLARAO DA MATRIZES M1=[1 2;3 4] pause(1) M2=[5 6;7 8] pause(1) M3=[9 10] pause(1) disp(' M4=M1+M2') M4=M1+M2 pause(1) disp(' M5=M1+M2') disp(' ') disp(' ATENO: O MATLAB AVISAR QUE NO POSSVEL POIS AS DIMENSES') disp(' NO ESTO DE ACORDO PARA SE EFETUAR A SOMA DE MATRIZES') disp(' AS MATRIZES DEVEM SER DO MESMO TIPO, ISTO :') disp(' O NMERO DE LINHAS DA 1.a MATRIZ DEVE SER IGUAL AO N.0 DE LINHAS DA 2.a') disp(' O NMERO DE COLUNAS DA 1.a MATRIZ DEVE SER IGUAL AO N.0 DE COLUNAS DA 2.a') disp(' ') %M5=M1+M3 pause(1) disp(' M6=M1-M2') M6=M1-M2 pause(1) disp(' M7=5*M1') M7=5*M1 pause(1) disp(' M8=M1*M2') M8=M1*M2 pause(1) disp(' M9=M3*M1') M9=M3*M1 pause(1) disp(' M10=M1*M3') disp(' ') disp(' ATENO: O MATLAB AVISAR QUE NO POSSVEL POIS AS DIMENSES') disp(' NO ESTO DE ACORDO PARA SE EFETUAR A MULTIPLICAO DE MATRIZES') disp(' O NMERO DE COLUNAS DA 1.a MATRIZ DEVE SER IGUAL') disp(' AO N.0 DE COLUNAS DA 2.a MATRIZ') %M10=M1*M3 disp(' ') pause(1) disp(' MATRIZ TRANSPOSTA') M11=transpose(M1)% MATRIZ TRANSPOSTA M13=M1'% MATRIZ TRANSPOSTA M12=transpose(M3)% MATRIZ TRANSPOSTA pause(1) M14=M11*M12 pause(1) disp('DETERMINANTE') det_M1=det(M1) pause(1) %det_M3=det(M3) disp(' ') disp(' ATENO: O MATLAB AVISAR QUE NO POSSVEL POIS AS DIMENSES') disp(' NO ESTO DE ACORDO PARA SE O CLCULO DO DETERMINANTE') disp(' A MATRIZ DEVE SER QUADRADA, ISTO :') disp(' O N.0 DE LINHAS DEVE SER IGUAL AO NMERO DE COLUNAS') pause(1) disp(' ') %DETERMINANTES GENRICOS syms a b c d % define as variveis: a, b, c e d como simblicas

76

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


A=[a b; c d] % cria a matriz genrica de ordem 2 det_A=det(A) % clculo do determinante pause(1) syms a b c d e f g h i % define as variveis a,... como simblicas A=[a b c; d e f; g h i] %cria a matriz genrica de ordem 3 det_A=det(A) % clculo do determinante disp(' MATRIZ INVERSAS') disp(' LEMBRE-SE:') disp(' EXISTE A MATRIZ INVERSA SE DETERMINANTE FOR DIFERENTE DE ZERO') disp(' M*M^(-1)=M^(-1)*M=I') inv_M1=inv(M1) % ou inv_M1=M1^(-1) disp(' VERIFICAO') I=M1*inv(M1) I=inv(M1)*M1 % RESOLUO DE SISTEMAS pause(1) disp('RESOLUO DE SISTEMAS LINEARES') disp(' A*X=b') disp(' A^(-1)*A*X=A^(-1)*b') disp(' I*X=A^(-1)*b') disp(' X=A^(-1)*b') disp(' ') pause(1) disp(' EXEMPLO ==> x + y = 60 e x - y = 20') A=[1 1;1 -1] b=[60; 20] x=inv(A)*b disp(' ') pause(1) %---USANDO A FUNO DO MATLAB ==> solve --disp(' SISTEMA POSSVEL DETERMINADO ==> x + y = 60 e x - y = 20') [x,y]=solve('x + y = 60','x - y = 20') pause(1) disp(' SISTEMA POSSVEL INDETERMINADO ==> x + y = 10 , y + z = 8 e x + 2y + z = 18') [x,y,z]=solve('x+y=10','y+z=8','x+2*y+z=18') disp(' ') X=[x y z]% MELHORA A SADA disp(' ') pretty(X) pause(1) disp(' ') disp(' SISTEMA IMPOSSVEL ==> x + y = 5 , 2x + 2y = 30') [x,y]=solve('x+y=5','2*x+2*y=30') disp(' ') pause(1) disp(' x^2-5*x+6=0') x=solve('x^2-5*x+6=0') pause(1) syms a b c %definio das variveis a b c como simblicas disp(' a*x^2+b*x+c=0') x=solve('a*x^2+b*x+c=0') pause(1) disp(' SADA MAIS LEGVEL ==> pretty(x)') pretty(x) % sada mais elegante (mais legvel) disp(' ') disp(' FUNES INTERESSANTES OU CURIOSAS') disp(' ') disp(' funtool ==> CALCULADORA DE FUNES') disp(' ') disp(' makevase ==> SLIDOS DE REVOLUO') disp(' ') disp(' demos ==> DEMONSTRAO DE SEUS RECURSOS') disp(' ') disp(' tour ==> PASSEIO PELO SOFTWARE MATLAB') disp(' ') disp(' travel==> SIMULAO DO CACHEIRO VIAJANTE') disp(' ') disp(' eartmap ==> MAPA DO PLANETA TERRA - GUA') disp(' ')

77

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


SADA MEU PRIMEIRO SCRIPT (ROTEIRO) M1 = 1 3 2 4

78

M2 = 5 7 6 8

M3 = 9 M4=M1+M2 M4 = 6 10 M5=M1+M2 ATENO: O MATLAB AVISAR QUE NO POSSVEL POIS AS DIMENSES NO ESTO DE ACORDO PARA SE EFETUAR A SOMA DE MATRIZES AS MATRIZES DEVEM SER DO MESMO TIPO, ISTO : O NMERO DE LINHAS DA 1.a MATRIZ DEVE SER IGUAL AO N.0 DE LINHAS DA 2.a O NMERO DE COLUNAS DA 1.a MATRIZ DEVE SER IGUAL AO N.0 DE COLUNAS DA 2.a M6=M1-M2 M6 = -4 -4 M7=5*M1 M7 = 5 15 M8=M1*M2 M8 = 19 43 M9=M3*M1 M9 = 39 58 22 50 10 20 -4 -4 8 12 10

M10=M1*M3 ATENO: O MATLAB AVISAR QUE NO POSSVEL POIS AS DIMENSES NO ESTO DE ACORDO PARA SE EFETUAR A MULTIPLICAO DE MATRIZES O NMERO DE COLUNAS DA 1.a MATRIZ DEVE SER IGUAL AO N.0 DE COLUNAS DA 2.a MATRIZ

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


MATRIZ TRANSPOSTA M11 = 1 2 3 4

79

M13 = 1 2 3 4

M12 = 9 10

M14 = 39 58 DETERMINANTE det_M1 = -2

ATENO: O MATLAB AVISAR QUE NO POSSVEL POIS AS DIMENSES NO ESTO DE ACORDO PARA SE O CLCULO DO DETERMINANTE A MATRIZ DEVE SER QUADRADA, ISTO : O N.0 DE LINHAS DEVE SER IGUAL AO NMERO DE COLUNAS A = [ a, b] [ c, d]

det_A = a*d-b*c

A = [ a, b, c] [ d, e, f] [ g, h, i]

det_A = i*a*e-a*f*h-i*d*b+d*c*h+g*b*f-g*c*e MATRIZ INVERSAS LEMBRE-SE: EXISTE A MATRIZ INVERSA SE DETERMINANTE FOR DIFERENTE DE ZERO M*M^(-1)=M^(-1)*M=I inv_M1 = -2.0000 1.5000 1.0000 -0.5000

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


VERIFICAO I = 1.0000 0.0000 0 1.0000

80

I = 1.0000 0.0000 0 1.0000

RESOLUO DE SISTEMAS LINEARES A*X=b A^(-1)*A*X=A^(-1)*b I*X=A^(-1)*b X=A^(-1)*b EXEMPLO ==> x + y = 60 e x - y = 20 A = 1 1 1 -1

b = 60 20

x = 40 20

SISTEMA POSSVEL DETERMINADO ==> x + y = 60 e x - y = 20 x = 40

y = 20 SISTEMA POSSVEL INDETERMINADO ==> x + y = 10 , y + z = 8 e x + 2y + z = 18 x = -y+10

y = y

z = -y+8

X =

PROF. Msc. JOS DONIZETTI DE LIMA

ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB


[ -y+10, y, -y+8] [-y + 10 y -y + 8]

81

SISTEMA IMPOSSVEL ==> x + y = 5 , 2x + 2y = 30 Warning: Explicit solution could not be found. > In C:\MATLAB\toolbox\symbolic\solve.m at line 130 In C:\MATLAB\bin\roteiro1.m at line 110 x = [ empty sym ]

y = []

x^2-5*x+6=0 x = [ 2] [ 3] a*x^2+b*x+c=0 x = [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))] SADA MAIS LEGVEL ==> pretty(x) [ [ [1/2 [ [ [ [ [1/2 [ 2 1/2] -b + (b - 4 a c) ] --------------------] a ] ] 2 1/2] -b - (b - 4 a c) ] --------------------] a ]

FUNES INTERESSANTES OU CURIOSAS funtool ==> CALCULADORA DE FUNES makevase ==> SLIDOS DE REVOLUO demos ==> DEMONSTRAO DE SEUS RECURSOS tour ==> PASSEIO PELO SOFTWARE MATLAB travel==> SIMULAO DO CACHEIRO VIAJANTE eartmap ==> MAPA DO PLANETA TERRA - GUA

PROF. Msc. JOS DONIZETTI DE LIMA