Vous êtes sur la page 1sur 53

..

Introdu ao ao MATLAB c

Marcelo A. Trindade
Departamento de Engenharia Mec nica, Laboratorio de Din mica, a a Escola de Engenharia de S o Carlos, Universidade de S o Paulo (EESC-USP), a a Av. Trabalhador S o-Carlense, 400, 13566-590, S o Carlos, Brasil a a trindade@mec.puc-rio.br

Rubens Sampaio
Departamento de Engenharia Mec nica, Laboratorio de Din mica e Vibracoes, a a Pontifcia Universidade Catolica do Rio de Janeiro (PUC-Rio), rua Marqu s de S o Vicente, 225, 22453-900 Rio de Janeiro, Brasil e a rsampaio@mec.puc-rio.br

3 de Setembro de 2010

Conteudo
1 2 Introdu ao c Comandos B sicos do MATLAB a 2.1 Entrando no MATLAB . . . . . . 2.2 Primeiros passos . . . . . . . . . 2.3 Operacoes b sicas com matrizes a 2.4 Gravacao e recuperacao de dados 2.5 Zeros de polinomios . . . . . . . 2.6 Criacao e edicao de gr cos . . . a 2.7 Programando em MATLAB . . . 2.7.1 Arquivos .m . . . . . . . . 2.7.2 O comando global . . . . 2.7.3 O comando if . . . . . . . 2.7.4 O comando for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6 6 6 11 18 19 20 25 25 28 29 31 33 33 34 34 35 35 37 37 39 40 45 45 45 48 49 49

Aplica oes c 3.1 Programas interativos . . . . . . . . . . . . . . . . 3.2 Zeros de funcoes . . . . . . . . . . . . . . . . . . . 3.3 Calculando Integrais . . . . . . . . . . . . . . . . . 3.3.1 Regra trapezoidal . . . . . . . . . . . . . . . 3.3.2 Regra de Simpson . . . . . . . . . . . . . . 3.4 Equacoes diferenciais . . . . . . . . . . . . . . . . . 3.4.1 Sistema massa-mola-amortecedor . . . . . 3.4.2 P ndulo simples . . . . . . . . . . . . . . . e 3.4.3 Sistema com mais de um grau de liberdade Outros comandos 4.1 Formato de sada . 4.2 Comando diary . . 4.3 Comando cputime 4.4 O comando fprintf 4.4.1 Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CONTEUDO A Um programa para sistemas de equa oes lineares c A.1 Sistema com solucao unica . . . . . . . . . . . . . . . . . . . . . . . . A.2 Sistema com innitas solucoes . . . . . . . . . . . . . . . . . . . . . A.3 Sistema sem solucao . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 51 52 53 53

Captulo 1 Introdu ao c
R O MATLAB pode ser usado como uma linguagem de programacao ou como uma ferramenta de c lculo interativa. Em ambos os casos, o ambiente MATLAB a permite realizacao de c lculos, visualizacao de resultados e desenvolvimento de a algoritmos usando uma sintaxe muito proxima da notacao matem tica standard. a O nome MATLAB vem de MATrix LABoratory e representa bem o seu modo de funcionamento. Todas as vari veis s o denidas de forma matricial, o que faz a a com que este ambiente seja ideal para resolver problemas de c lculo envolvendo a matrizes e vetores. Ele e desenvolvido pela empresa The MathWorks, Inc. Mais informacoes podem ser obtidas no endereco http://www.mathworks.com. Um arquivo de programa MATLAB recebe a extens o .m e, por isso, tamb m a e e chamado de m-le ou arquivo .m. Ele pode ser criado e/ou modicado no edi tor proprio do MATLAB, MATLAB Editor/Debugger, que possui caractersticas que auxiliam bastante a edicao de programas como auto-colorizacao de palavras de acordo com a sintaxe e interacao com o ambiente de c lculo do MATLAB. a Uma das grandes virtudes do MATLAB e que todas suas funcoes s o escritas em a m-les, sendo que a maioria delas podem ser editadas/modicadas. Este fato possibilitou a criacao de diversos conjuntos de funcoes especcas a determina das areas, como controle, an lise de sinais, nancas, entre outras. Estes conjuntos a de funcoes, ou de m-les, s o chamados de toolbox. Toolboxes direcionados para a diversas areas s o distribudos pela propria MathWorks e inumeros outros s o a a desenvolvidos em todo o mundo, com e sem reconhecimento da MathWorks, e podem geralmente ser encontrados na internet. Enquanto que o programa principal do MATLAB depende da plataforma (Unix, Windows, Macintosh) os arquivos .m, que constituem as funcoes e programas, s o a independentes da plataforma e podem portanto ser utilizados em todas elas. Esta e outra raz o para o estabelecimento do MATLAB como ferramenta de c lculo a a matricial de predilecao entre os prossionais do meio acad mico e industrial. De e fato, n o e incomum encontrar um toolbox na internet bem adaptado ao proa blema especco que se quer resolver. E mesmo que ele tenha sido desenvolvido em ambiente Unix, pode ser utilizado em ambiente Windows. A linguagem de programacao do MATLAB e muito intuitiva. Por esta raz o, a o objetivo deste trabalho e iniciar a aprendizagem da utilizacao do ambiente MA

CAPITULO 1. INTRODUCAO

TLAB, dos comandos b sicos e de construcao de programa. A partir da, espea ramos que o usu rio seja capaz de desenvolver e direcionar os conhecimentos a adquiridos para sua area especca. Marcelo A. Trindade Rubens Sampaio

Captulo 2 Comandos B sicos do MATLAB a


2.1 Entrando no MATLAB

O MATLAB pode ser executado pressionando o cone correspondente, criado na instalacao do programa, ou atrav s da barra de tarefas. Quando executado, a ja e nela principal do MATLAB, chamada MATLAB Command Window, e aberta. O smbolo >> na tela indica que O MATLAB est pronto para receber um comando. a Assim, esta janela funciona como um ambiente interativo no qual comandos s o a fornecidos pelo usu rio e executados instantaneamente pelo MATLAB. Uma lia nha de comandos e nalizada pressionando a tecla [Enter]. Os comandos fornecidos s o memorizados e podem ser listados usando as setas para cima e para a baixo do teclado.

2.2

Primeiros passos

Uma vari vel pode ser denida dando-se valores a ela. O tipo da vari vel e aua a tomaticamente denido pelo MATLAB em funcao do valor dado a ela. A sintaxe e a seguinte >> t=1 t = 1 Neste caso, t e denido como um escalar pelo usu rio. No entanto, o MATLAB a interpreta a vari vel t como uma matriz de uma coluna e uma linha. Assim, a vetores e matrizes tamb m s o denidos da mesma maneira. e a >> T=[0 1 2 3 4 5 6 7 8 9 10] T = 0 1 2 3 4 5 6 7 8 9 10

CAPITULO 2. COMANDOS BASICOS DO MATLAB

Esta ultima denicao tamb m pode ser realizada de uma maneira mais simples, e fornecendo o valor inicial, o incremento e o valor nal, >> T=0:1:10 T = 0 1 2 3 4 5 6 7 8 9 10

As vari veis t e T foram armazenadas na memoria do MATLAB. Isto pode a ser vericado atrav s da funcao whos que mostra o nome, o tamanho e classe de e todas as vari veis presentes na memoria. a >> whos Name T t Size 1x11 1x1 Bytes 88 8 Class double array double array

Grand total is 12 elements using 88 bytes Cabe ressaltar que o MATLAB faz diferenca entre vari veis maiusculas e minusculas. a Assim, t e T s o vari veis distintas para o MATLAB. Pode-se observar que a a a dimens o das duas vari veis e dada em linhas x colunas. Portanto, a vari vel a a a escalar t e denida como uma matriz de uma linha e uma coluna. J a vari vel T a a tem uma linha e dez colunas. O elemento (i x j) da matriz T, T(i,j), pode ser recuperado atrav s do seguinte comando e >> T(1,5) ans = 4 A vari vel ans armazena o valor do ultimo c lculo realizado quando este n o a a a e associado a uma vari vel. Neste caso, como a vari vel T possui apenas uma a a linha, o comando T(5) tamb m forneceria o mesmo resultado. E possvel tamb m e e recuperar v rios elementos de T ao mesmo tempo usando vetores dos ndices a correspondentes, >> T(1,[1 3:6 10]) ans = 0 2 3 4 5 9

Note que o vetor de ndices e denido da mesma maneira que uma vari vel. a Todas as operacoes realizadas pelo MATLAB consideram vari veis matrici a ais, assim sendo a sintaxe do comando independe da dimens o da vari vel. Por a a exemplo, podemos calcular o seno de t e T usando a mesma sintaxe,

CAPITULO 2. COMANDOS BASICOS DO MATLAB >> x = sin(t) x = 0.8415 >> X = sin(T) X = Columns 1 through 7 0 0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794

Columns 8 through 11 0.6570 0.9894 0.4121 -0.5440

Desta maneira, as novas vari veis x e X, relativas a t e T, s o matrizes com dia a mens o de t e T respectivamente, cujos elementos s o os senos dos elementos t e a a T. Outras operacoes podem ser realizadas da mesma maneira >> a = 2*T a = 0 2 4 6 8 10 12 14 16 18 20

O MATLAB opera com numeros complexos da mesma forma que com numeros reais. A vari vel i representa 1 desde que n o tenha sido denida anteriora a mente pelo usu rio. a >> a=1+i, b=5+2i, a = 1.0000 + 1.0000i b = 5.0000 + 2.0000i As operacoes soma, produto e divis o s o realizadas da seguinte maneira a a

CAPITULO 2. COMANDOS BASICOS DO MATLAB >> e=a+b, g=a*b, f=a/b, e = 6.0000 + 3.0000i g = 3.0000 + 7.0000i f = 0.2414 + 0.1034i

O modulo e o argumento de um numero complexo podem ser encontrados com os comandos abs e angle. Estes comandos s o de especial interesse para o a estudo de vibracoes. >> h=abs(b) h = 5.3852 >> d=angle(b) d = 0.3805 Note que o argumento e dado em radianos. A passagem para graus e feita da seguinte maneira >> d/pi*180 ans = 21.8014 As vari veis armazenadas na memoria do MATLAB podem ser removidas a da memoria atrav s do comando clear. Este comando e bastante interessante e quando se deseja liberar uma quantidade de memoria do MATLAB e/ou para manter na memoria apenas as vari veis de maior interesse para facilitar o cona trole das mesmas. Quanto usado sem par metros, remove todas as vari veis da a a memoria. >> clear >>

CAPITULO 2. COMANDOS BASICOS DO MATLAB >> whos >>

10

Este comando pode tamb m ser usado para remover apenas algumas vari veis e a selecionadas. Primeiro, denimos algumas vari veis a >> a=1; b=[2 3]; A=b*b; >> Atrav s do comando whos, pode-se ver que estas vari veis foram armazenadas e a na memoria do MATLAB >> whos Name A a b Size 2x2 1x1 1x2 Bytes 32 8 16 Class double array double array double array

Grand total is 7 elements using 56 bytes Vamos agora remover a vari vel a da memoria usando o comando clear e listar a novamente as vari veis presentes na memoria a >> clear a, whos, Name A b Size 2x2 1x2 Bytes 32 16 Class double array double array

Grand total is 6 elements using 48 bytes Os comandos b sicos gerais do MATLAB est o resumidos na tabela abaixo a a a seguir. Nome cd clc clear delete demo dir help helpwin lookfor quit whos Funcao Muda diretorio corrente Limpa a janela de comandos Apaga todas as vari veis da memoria do MATLAB a Apaga arquivos Executa programas de demonstracao das capacidades do MATLAB Lista arquivos no diretorio corrente Lista os topicos de ajuda disponveis Abre janela a navegacao nos topicos de ajuda Procura arquivos .m por palavra chave Encerra a sess o do MATLAB a Mostra informacoes sobre as vari veis armazenadas na memoria a

CAPITULO 2. COMANDOS BASICOS DO MATLAB

11

2.3

Opera oes b sicas com matrizes c a

As matrizes s o tratadas da mesma maneira que escalares e vetores no MATLAB, a j que estes ultimos s o tratados como casos particulares de matrizes. Por ser a a o elemento fundamental do MATLAB, nesta secao trataremos com mais detalhe de denicao, insercao e extracao de linhas e colunas, rearranjo e operacoes com matrizes. A denicao de uma matriz pode ser feita da seguinte maneira >> A=[1 2 3; 4 5 6] A = 1 4 2 5 3 6

Elementos podem ser extrados de uma matriz usando o mesmo procedi mento utilizado anteriormente para vetores, lembrando que a sintaxe do MA TLAB e A(i,j) com i e j denotando linha e coluna respectivamente. >> A(2,3) ans = 6 Linhas e colunas inteiras podem tamb m ser extradas de uma matriz atrav s da e e utilizacao o smbolo de dois pontos : para denotar todos os elementos. >> A(1,:), A(:,2) ans = 1 ans = 2 5 Pode-se tamb m remover linhas e colunas de uma matriz usando a matriz vazia e [] >> A(:,2)=[ ] A = 1 4 3 6 2 3

Neste caso, a segunda coluna da matriz A foi removida e o resultado armazenado na propria matriz A. Poderamos tamb m criar uma nova matriz B eliminando a e

CAPITULO 2. COMANDOS BASICOS DO MATLAB

12

segunda coluna de A, com o comando B=A(:,[1 3])1 . Desta forma, a matriz B e formada apenas pelas colunas 1 e 3 da matriz A, ou seja, a coluna 2 e eliminada. Da mesma forma, pode-se inserir novas linhas e colunas em uma matriz. Isto pode ser feito simplesmente associando valores aos novos elementos da matriz. >> A(3,:)=[7 8 9] A = 1 4 7 2 5 8 3 6 9

Este mesmo procedimento pode ser realizado para modicar valores de elementos especcos de uma matriz >> A(3,2)=10 A = 1 4 7 2 5 10 3 6 9

Podemos tamb m concatenar matrizes no MATLAB desde que as dimensoes see jam apropriadas, >> [A A(:,1); A(1:2,:) A(2:3,2)] ans = 1 4 7 1 4 2 5 10 2 5 3 6 9 3 6 1 4 7 5 10

Operacoes b sicas de matrizes, como tranposicao, determinante e invers o, a a s o bastante simples no MATLAB. O operador de transposicao e representado a por >> A ans = 1 2 3 4 5 6 7 10 9

Lembrando que o operador fornece na verdade o complexo conjugado trans posto. No caso de vari veis complexas, o operador . e uma opcao para transposicao a
1 Lembre-se

de redenir A, pois pelo ultimo comando a segunda coluna j foi eliminada. a

CAPITULO 2. COMANDOS BASICOS DO MATLAB

13

simples. Os comandos para calcular o determinante e a inversa de uma matriz s o os a seguintes >> det(A), inv(A) ans = 12 ans = -1.2500 0.5000 0.4167 1.0000 -1.0000 0.3333 -0.2500 0.5000 -0.2500

Note que estes comandos so funcionam para matrizes quadradas evidentemente. Para se conhecer as dimensoes de uma vari vel armazenada na memoria do MAa TLAB, pode-se usar o comando size >> [l,c]=size(A) l = 3 c = 3 As duas vari veis l e c fornecidas pelo MATLAB representam o numero de linhas a e colunas da matriz A. Outras operacoes com matrizes s o listadas digitando-se a help matfun. ` Algumas funcoes do MATLAB se aplicam individualmente a cada coluna da matriz fornecida produzindo um vetor linha cujos elementos correspondem ao resultado de cada coluna. Estas funcoes podem ser aplicadas as linhas de uma matriz, fornecendo-se a transposta da matriz como entrada. Algumas destas funcoes s o apresentadas na tabela abaixo. a max maior componente de um vetor mean m dia dos componentes de um vetor e min menor componente de um vetor prod produto dos componentes de um vetor sort ordena o vetor em ordem crescente std desvio padr o dos componentes de um vetor a sum soma dos componentes de um vetor Cabe observar que para um vetor a complexo, a funcao sort ordena seus com ponentes por ordem crescente de modulo. Os valores m ximos, mnimos e m dios a e globais de uma matriz podem ser obtidos usando a sintaxe max(max(A)).

CAPITULO 2. COMANDOS BASICOS DO MATLAB

14

O MATLAB possui tamb m algumas matrizes especiais muito uteis, cujos elee mentos de entrada s o numero de linhas e colunas. Quando apenas um elemento a e fornecido, a matriz produzida ser quadrada com a dimens o requerida. Algua a mas destas funcoes s o apresentadas na tabela abaixo, outras podem ser encon a tradas digitando help elmat. eye ones rand zeros matriz identidade ` matriz com todos elementos iguais a 1 matriz com elementos aleatorios distribudos entre 0 e 1 matriz nula

As operacoes de adicao/subtracao e multiplicacao de matrizes podem ser re alizadas com os mesmos operadores utilizados para escalares e vetores. Os principais operadores aritm ticos do MATLAB s o listados digitando-se help ops. e a Sejam as matrizes >> A=[1 2 3; 4 5 6], B=[1 3 ; 4 6; 3 4], A = 1 4 B = 1 4 3 3 6 4 2 5 3 6

Uma nova matriz C pode ser denida como resultado da multiplicacao das ma trizes A e B da seguinte maneira >> C=A*B C = 18 42 27 66

E claro que a multiplicacao de matrizes so e denida quando o numero de colunas da primeira matriz e igual ao numero de linhas da segunda. Assim, se tentarmos efetuar a operacao A*A, o MATLAB produzir uma mensagem de erro. Pode-se a tamb m multiplicar matrizes elemento por elemento atrav s da operacao A.*A e e >> A.*A ans = 1 16 4 25 9 36

CAPITULO 2. COMANDOS BASICOS DO MATLAB

15

J neste caso, as dimensoes das matrizes devem ser as mesmas. As operacoes elea mento por elemento podem ser muito uteis. Assim, o ultimo c lculo tamb m a e pode ser realizado usando o comando A.^2. Note a diferenca entre as duas operacoes de multiplicacao >> D=C*C, E=C.*C D = 1458 3528 E = 324 1764 729 4356 2268 5490

Os autovalores e autovetores de uma matriz podem ser calculados atrav s do e comando eig. Este comando produz uma matriz diagonal D de autovalores e uma matriz V cujas colunas s o os autovetores correspondentes, tal que C*V=V*D. a >> [V,D]=eig(C) V = -0.8412 0.5406 D = 0.6479 0 0 83.3521 -0.3818 -0.9242

O problema de autovalores generalizados C*V=E*V*D tamb m pode ser resole vido com a mesma funcao fornecendo adicionalmente a matriz E. >> [V,D]=eig(C,E) V = 0.9341 -0.3570 D = 0.1693 0 0 0.0025 -0.8258 0.5640

Pode-se tamb m utilizar o comando svd para produzir uma decomposicao em e valores singulares

CAPITULO 2. COMANDOS BASICOS DO MATLAB >> [U,S,V] = svd(C) U = 0.3831 0.9237 S = 84.6912 0 V = 0.5395 0.8420 -0.8420 0.5395 0 0.6376 -0.9237 0.3831

16

S e uma matriz diagonal com a mesma dimens o de C e elementos n o negativos a a em ordem decrescente na diagonal, e U e V s o matrizes unit rias, tal que C = a a U*S*V. O comando usado para produzir a decomposicao LU e >> [L,U]=lu(C) L = 0.4286 1.0000 U = 42.0000 0 66.0000 -1.2857 1.0000 0

U e uma matriz triangular superior e L e uma matriz quase triangular inferior isto e, seria uma matriz triangular inferior se A fosse substituda por PA onde P e uma matriz de permutacao. A raz o disto tem a ver com a escolha do pivo, e n o a a ser discutido aqui. Outra forma deste comando e a

CAPITULO 2. COMANDOS BASICOS DO MATLAB >> [L,U,P]=lu(C) L = 1.0000 0.4286 U = 42.0000 0 P = 0 1 1 0 66.0000 -1.2857 0 1.0000

17

U e uma matriz triangular superior, L, uma matriz triangular inferior e P uma matriz de permutacao, tal que PA=LU. Note a diferenca entre L no primeiro e no segundo caso. Outra operacao de simples realizacao no MATLAB e de muita utilidade na pr tica e a resolucao de sistemas lineares do tipo A*x=b. Al m da maneira natural, a e por m denitivamente n o recomendada, de resolver o problema x=inv(A)*b, o e a MATLAB possui uma operacao de divis o a esquerda, representada pelo opera a ` dor \ . Assim, a solucao x=A\b e calculada fazendo eliminacao de Gauss de A e retrosubstituicao. Isto e feito fatorando A na forma LU. O sistema ca LUx=b e o sistema e resolvido calculando y do sistema Ly=Pb e ent o x do sistema Ux=y. Se a a matriz A n o for quadrada, o MATLAB utiliza a ortogonalizacao de Householder a com pivotamento de colunas. O valor de x e calculado pelo m todo dos mnimos e quadrados. >> A=[1 2; 3 4]; b=[5; 6]; x=A\b x = -4.0000 4.5000 Esta e a solucao do sistema linear x + 2y = 5 3x + 4y = 6

CAPITULO 2. COMANDOS BASICOS DO MATLAB

18

2.4

Grava ao e recupera ao de dados c c

O MATLAB permite ao usu rio de gravar dados no disco e recuperar dados do a disco. Estes dados s o geralmente vari veis resultantes de um c lculo realizado a a a no MATLAB que se pretende arquivar por diversos motivos. Os dados podem ser gravados num arquivo em formato texto (ASCII) ou em formato bin rio proprio a ao MATLAB usando o comando save. O formato padr o e o bin rio, que oria a gina um arquivo com extens o .mat. A sintaxe do comando save e mostrada no a exemplo a seguir >> A=[1 2 3; -4 5 -6; 7 9 11]; b=[1; 3; 5]; x=A\b; >> save dados A b x >> dir dados* dados.mat Vemos ent o que basta fornecer o nome do arquivo, sem extens o, no qual quea a remos gravar as vari veis. O MATLAB executa o comando criando um arquivo a chamado dados.mat que cont m as vari veis A, b e x e que e gravado no diretorio e a corrente. Verique o diretorio em que est trabalhando com cd antes de gravar a o arquivo para poder encontr -lo depois! E importante ressaltar que o arquivo a a criado e um arquivo bin rio, isto e, n o e possvel edit -lo num editor de texto. a a Como o arquivo foi gravado em disco, podemos fechar o MATLAB que os dados n o ser o perdidos. Para recuperar os dados, utilizamos o comando load, com a a a seguinte sintaxe >> clear >> load dados >> whos Name A b x Size 3x3 3x1 3x1 Bytes 72 24 24 Class double array double array double array

Grand total is 15 elements using 120 bytes Se n o especic ssemos as vari veis a gravar, todas as vari veis armazenadas na a a a a memoria do MATLAB seriam gravadas no arquivo dados.mat. Algumas vezes precisamos exportar os dados do MATLAB para um outro aplicativo. Nestes casos, geralmente precisamos gravar os dados em formato ASCII. Isto pode ser feito usando o par metro -ascii no comando save. No entanto, a precisa-se tomar alguns cuidados ao gravar v rias vari veis no mesmo arquivo. a a Facamos, por exemplo,

CAPITULO 2. COMANDOS BASICOS DO MATLAB >> save dados.txt A b x -ascii >> type dados.txt 1.0000000e+000 -4.0000000e+000 7.0000000e+000 1.0000000e+000 3.0000000e+000 5.0000000e+000 1.1000000e-001 5.8000000e-001 -9.0000000e-002 2.0000000e+000 3.0000000e+000 5.0000000e+000 -6.0000000e+000 9.0000000e+000 1.1000000e+001

19

Podemos observar que os elementos das vari veis A, b e x foram gravados linhaa a-linha no arquivo texto dados.txt. Este formato so deve realmente ser utilizado para exportar dados para outros aplicativos, pois ele impoe dois problemas para recuperacao dos dados no proprio MATLAB. O primeiro deles e que se perdeu a informacao de a que vari veis os elementos pertencem. Assim, se tentarmos re a cuperar os dados atrav s do comando load dados.txt, este so poder criar uma e a vari vel de nome dados. O segundo problema e que ao tentar criar uma unica a vari vel com os elementos do arquivo dados.txt, o MATLAB ser incapaz pois as a a linhas t m diferentes numeros de colunas. A opcao seria gravar um arquivo por e vari vel, a >> save A.txt A -ascii >> save b.txt b -ascii >> save x.txt x -ascii >> clear >> load A.txt, load b.txt, load x.txt, Evidentemente, este formato so faria sentido no caso de importacao de dados de outro aplicativo para o MATLAB ou exportacao de dados do MATLAB para outro aplicativo.

2.5

Zeros de polinomios

Algumas vezes precisamos calcular as razes de um polinomio. Isto pode ser feito no MATLAB atrav s do comando roots. Como exemplo, vamos calcular os e zeros do seguinte polinomio p( x ) = 5/8x5 5x4 3x3 + 2x 10. Um polinomio e denido no MATLAB atrav s de um vetor contendo os seus coecientes. Neste e caso, temos

CAPITULO 2. COMANDOS BASICOS DO MATLAB >> p=[5/8 -5 -3 0 2 -10]; >> x=roots(p) x = 8.5587 -0.9890 -0.9890 0.7097 0.7097

20

+ + -

0.8316i 0.8316i 0.7848i 0.7848i

Como podemos notar, este comando fornece todas as razes do polinomio p( x ). O processo inverso tamb m pode ser realizado. Assim, para achar os coecientes e do polinomio que tem as razes x usamos o comando poly, >> p=poly(x) p = 1.0000 -8.0000 -4.8000 -0.0000 3.2000 -16.0000

Notamos que n o obtemos os mesmos coecientes iniciais. No entanto, podemos a obt -los fazendo >> 5/8*p mostrando que o polinomio fornecido p( x ) = x5 e 8x4 4.8x3 + 3.2x 16 e tal que p( x ) = 5/8p( x ) . Isto e verdadeiro j que p( x ) = a 0 implica p( x ) = 0 e a raz o do = 8/5 escolhido pelo MATLAB vem do fato a que o comando poly encontra o polinomio cujo primeiro coeciente e unit rio. a

2.6

Cria ao e edi ao de gr cos c c a

O MATLAB, al m de realizar c lculos, possui diversas funcoes permitindo tamb m e a e criar gr cos em duas e tr s dimensoes a partir de dados fornecidos. O procedia e mento usual para a construcao de um gr co no MATLAB e apresentado a seguir a 1. Prepara ao dos dados c >> x = 0:0.3:30; >> y1 = exp(-.01*x).*sin(x); y2 = exp(-.05*x).*sin(.7*x); y3 = exp(-.1*x).*sin(.5*x); 2. Escolha de uma janela para tra ar o gr co e utiliza ao de uma das fun oes c a c c gr cas do MATLAB a >> figure(1) >> h = plot(x,y1,x,y2,x,y3); 3. Sele ao de tipos de linha e marcadores para as diferentes curvas c >> set(h,LineWidth,2,LineStyle,--;:;-.) >> set(h,Color,r;g;b)

CAPITULO 2. COMANDOS BASICOS DO MATLAB 4. Deni ao de limites dos eixos e inclus o de grid c a >> axis([0 20 -1 1]); >> grid on

21

5. Adi ao de anota oes no gr co como identica ao dos eixos, ttulo, legendas c c a c e texto >> xlabel(Tempo); ylabel(Amplitude); >> legend(h,Primeiro,Segundo,Terceiro); title(Resposta no Tempo); >> text(8.35,0.85,\leftarrow e^{(-0.05x)}sen(0.7x),... HorizontalAlignment,left) 6. Exporta ao do gr co para algum aplicativo (de processamento de texto, por c a exemplo) >> print -depsc -r600 myplot
Resposta no Tempo 1 e
( 0.05x)

0.8

sen(0.7x)

Primeiro Segundo Terceiro

0.6

0.4

0.2 Amplitude

0.2

0.4

0.6

0.8

10 Tempo

12

14

16

18

20

Figura 2.1: Exemplo de gr co com diferentes tipos de linhas. a Conv m ressaltar que a selecao de tipos e cores das linhas pode ser realizada e diretamente no comando gr co plot. Assim, o mesmo resultado poderia ser a obtido fazendo

CAPITULO 2. COMANDOS BASICOS DO MATLAB >> h = plot(x,y1,r--,x,y2,g:,x,y3,b-.);

22

As espessuras das linhas no entanto so podem ser denidas a posteriori neste caso com o comando set, como mostrado anteriormente. Podemos tamb m adicionar uma outra curva no gr co j existente usando e a a o comando hold. Quando ligado (hold on), todos os proximos gr cos ser o a a colocados sobre aqueles j existentes at que o hold seja desligado (hold off) ou a e que a janela seja fechada. >> hold on >> plot(x,-y3,m>--); >> hold off A legenda pode ser atualizada re-executando o comando legend, agora com mais um par metro (legend(Primeiro,Segundo,Terceiro,Quarto)). a O comando axis permite, entre outras coisas, mostrar apenas uma certa regi o a do gr co. Para isso, basta fornecer os intervalos em x e y (e em z para gr cos a a 3D) que se deseja mostrar. >> axis([0 2 -1 1]) Neste caso, apenas os limites do eixo x foram modicados. Note que o restante a do gr co n o e perdido, so n o est sendo mostrado. A visualizacao original a a a pode ser recuperada com o comando axis auto. Em alguns casos, tamb m e e interessante modicar o valores usados na marcacao dos eixos. Isto pode ser feito com o comando set. >> set(gca,XTick,[0:0.25:2],YTick,[-1:0.25:1]) O comando set pode ser utilizado para ajustar quaisquer propriedades de gr cos a no MATLAB. Aqui, usamos gca para denotar o eixo corrente. Digitando-se set(gca), obtemos todas as propriedades do eixo que podem ser modicadas e seus valores possveis. Existem diversos comandos para tracar gr cos tamb m em tr s dimensoes a e e no MATLAB. Seguem alguns exemplos de como tracar gr cos 3D. O primeiro a exemplo consiste em tracar uma curva em 3D com o comando plot3. >> t=0:0.1:10; x=exp(-t/5).*cos(3*t); y=exp(-t/5).*sin(3*t); >> plot3(x,y,t,k-,x,y,t,r*), >> hold on, plot3(x,y,zeros(size(t)),m--,ones(size(x)),y,t,r--, x,ones(size(y)),t,b--), hold off >> grid >> title(Grfico 3D com plot3 -- Projeoes) a c~ >> xlabel(X (mm)), ylabel(Y (mm)), zlabel(T (seg)), >> print -depsc plot3 Na verdade, neste exemplo, cinco curvas s o tracadas pelo MATLAB no mesmo a gr co. A primeira chamada do comando plot3 imprime no gr co os pontos a a (x,y,t) duas vezes, primeiro conectados por uma linha solida de cor preta e depois com estrelas de cor vermelha. A segunda chamada de plot3 traca projecoes da curva (x,y,t) no mesmo gr co 3D, gracas ao comando hold on. As projecoes a foram feitas, tracando os seguintes conjuntos pontos: (x,y,0), (1,y,t) e (x,1,t). Para

CAPITULO 2. COMANDOS BASICOS DO MATLAB

23

isso foram utilizadas as matrizes especiais zeros e ones que d o origem neste a caso a vetores compostos de elementos nulos e unit rios respectivamente, do a mesmo tamanho dos vetores x, y e t.
Grfico 3D com plot3 Projees

10

6 T (seg)

0 1 0.5 0 0 0.5 Y (mm) 1 1 0.5 X (mm) 0.5 1

Figura 2.2: Gr co 3D com projecoes. a E interessante realizar o mesmo gr co com o comando comet3. Este comando a traca a trajetoria animada tipo cometa dos pontos (x,y,t) e pode ser muito util para facilitar a visualizacao de curva complexas no espaco tridimensional. >> comet3(x,y,t) Seguem agora dois exemplos de gr cos de superfcie 3D usando variacoes a do comando mesh. >> figure(Position,[232 20 330 250],PaperPositionMode,auto) >> h=surfl(x,x,y2*y3); >> shading interp >> colormap(copper) >> xlabel(Eixo {\bf x}), ylabel(Eixo {\bf y}), zlabel(Eixo {\bf z}) >> print -depsc surfl

CAPITULO 2. COMANDOS BASICOS DO MATLAB

24

1 Eixo z

1 20 10 Eixo y 0 0 10 Eixo x

20

Figura 2.3: Exemplo de gr co de superfcie 3D. a Neste exemplo, posicao e tamanho da gura s o denidos na propriedade a Position. A propriedade seguinte PaperPositionMode denida como auto permite que o tamanho da gura seja mantido na impress o. Como pode ser a observado, o comando surfl produz uma superfcie iluminada a partir de uma direcao pr -determinada, sendo que a apar ncia solida da superfcie e dada pela e e interpolacao do mapa de cores (comando shading). O mapa de cores a ser utili zado e selecionado atrav s do comando colormap. As opcoes de mapas de cores e pr -denidos no MATLAB e listada com help graph3d. e No exemplo a seguir, utilizamos o comando subplot para tracar dois gr cos a na mesma gura. Fazendo subplot(n,m,j) ou subplot(nmj), divide-se a gura corrente em nm eixos dispostos em n linhas e m colunas, sendo que o eixo j ser utilizado para tracar o proximo gr co (a contagem e feita da esquerda para a a direita de linha em linha). >> figure(Position,[232 20 340 400],PaperPositionMode,auto) >> subplot(211), meshc(x,x,y2*y3), >> xlabel(Eixo {\bf x}), ylabel(Eixo {\bf y}), zlabel(Eixo {\bf z}) >> subplot(212), waterfall(x,x,y2*y3), view(-65,45) >> xlabel(\Theta = \Sigma i \alpha i \Gamma i), ylabel(x = 2 \pi \xi), zlabel(\Psi 2^T \Psi 3) >> colormap(cool) Os comandos gr cos 3D utilizados neste exemplo s o meshc e waterfall. O a a primeiro e uma combinacao dos comandos mesh, que traca uma malha colorida de acordo com o colormap, e contour, que traca as curvas de contorno. O co mando waterfall tamb m e uma variacao do comando mesh mas sem tracar as e ` linhas correspondentes as colunas (ou eixo y). Pode-se observar tamb m que o e segundo gr co tem uma rotacao diferente do primeiro. A posicao do observaa

CAPITULO 2. COMANDOS BASICOS DO MATLAB

25

1 Eixo z 0 1 20 10 Eixo y 0 0 10 Eixo x

20

1
3 T 2

0 10 10 x=2 5 0 0

20 15

1 20

= i i i

Figura 2.4: Exemplo de gr co de superfcie 3D. a dor de gr cos em 3D pode ser modicado com o comando view, com o qual a dene-se o angulo de observacao e a altura do observador. Enm, pode-se colo car textos com formatacao mais complexa nos ttulos, como aqueles apresentados no segundo gr co, utilizando comandos TEX. a Os principais comandos para tracar, editar e modicar gr cos no MATLAB a s o apresentados nas tabelas seguintes. a

2.7
2.7.1

Programando em MATLAB
Arquivos .m

No primeiro captulo, os comandos b sicos do MATLAB foram apresentados. a Neste caso, o ambiente MATLAB foi utilizado como uma ferramenta de c lculo a interativa, no sentido que v rias linhas de comandos foram digitadas e execua tadas, uma por vez, com o objetivo de gerar um ou mais resultados num ricos e a ou gr cos. No entanto, e f cil imaginar que a medida que a s rie de comana e dos aumenta em complexidade, e/ou em quantidade, este procedimento se torna cansativo e pouco pr tico. Felizmente, o MATLAB tamb m permite que se consa e trua e execute programas na linguagem MATLAB. Neste caso, a sequencia de comandos digitadas e executadas, uma por vez, anteriormente pode ser concentrada em um arquivo programa .m que ao ser executado no MATLAB, executa cada linha do programa, composta pelas linhas de comandos usadas anterior-

CAPITULO 2. COMANDOS BASICOS DO MATLAB

26

Tabela 2.1: Principais comandos gr cos do MATLAB. a Comandos para tracar gr cos a plot Gr co 2D em escala linear para ambos eixos a loglog Gr co 2D em escala logartmica para ambos eixos a semilogx Gr co 2D em escala logartmica para o eixo x e linear para y a semilogy Gr co 2D em escala linear para o eixo x e logartmica para y a ` ` plotyy Gr co 2D com eixos y diferentes a direita e a esquerda a comet Traca trajetoria animada 2D dos pontos (x,y) bar Gr co de barras a hist Histograma polar Gr co usando coordenadas polares com angulo em radianos a stairs Gr co em forma escada a stem Gr co 2D com sequencia discreta de y a plot3 Traca curvas em 3D comet3 Traca trajetoria animada 3D dos pontos (x,y,z) mesh Traca uma malha colorida em 3D, meshc (+ contorno) surf Traca uma superfcie colorida em 3D, surfc (+ contorno) Comandos para editar e modicar gr cos a axis Controla a escala e a visualizacao dos eixos colormap Especica o mapa de cores utilizado grid Adiciona ou remove linhas de grelha do gr co corrente a hold Mant m o gr co corrente (futuros gr cos s o sobrepostos a este) e a a a legend Adiciona e dene uma legenda no gr co corrente a subplot Divide uma gura em v rias sub-guras e seleciona uma delas a text Coloca um texto no gr co corrente a title Ttulo do gr co corrente a xlabel Ttulo do eixo x corrente ylabel Ttulo do eixo y corrente mente, tamb m uma por vez. Desta forma, o m todo de execucao das linhas de e e comandos e o mesmo. No entanto, se de v rias linhas de comandos queremos a e alterar apenas uma delas e repetir a sequ ncia de comandos, neste caso basta modicar a linha correspondente no arquivo e re-executar o programa. Este arquivo programa recebe o nome de roteiro (script) j que ele informa ao MATLAB o roa e teiro a ser seguido na execucao da sequ ncia de linhas de comandos contidas no arquivo programa. Um arquivo .m pode ser criado usando-se qualquer editor de texto. Antes de criar um novo arquivo, assegure-se que o diretorio corrente e de seu uso pessoal. altamente recomendado que cada usu rio trabalhe em um diretorio de uso pes E a soal para evitar conito com arquivos de outros usu rios. O procedimento para a mudar de diretorio e vericar o diretorio corrente e o seguinte:

CAPITULO 2. COMANDOS BASICOS DO MATLAB >> cd c:\users\myname >> cd c:\users\myname

27

O usu rio pode ainda listar os programas contidos no diretorio corrente de a duas maneiras. O comando dir lista todos os arquivos no diretorio corrente enquanto que o comando what lista somente os arquivos especcos do MATLAB >> dir . .. ap2.m ap2result.mat ap3.m >> what M-files in the current directory d:\trindade\cursos\Vib ap2 ap3 ap3l ap4 ap4l d1 bode mm1 mm2 odecomp p1 p11 p12 p2 p eqlin pend pend eq teste ap3l.m ap4.m ap4l.m d1 bode.m mm1.m mm2.m odecomp.m p1.m p11.m p12.m p2.m p eqlin.m pend.m pend eq.m sample.tex teste.eps teste.m

MAT-files in the current directory d:\trindade\cursos\Vib ap2result As versoes mais atuais do MATLAB (5.x e 6.x) possuem um editor de texto integrado. Para criar um novo arquivo .m, selecione no menu principal do MATLAB File/New/M-le ou pressione o bot o Folha em branco. Para xar o a procedimento, digite o programa seguinte no arquivo rec m-criado: e clear all t=0:0.1:10; y=sin(t).*cos(t); plot(t,y,bo-) Grave o arquivo com um nome qualquer (por exemplo, exemplo1.m) selecionando File/Save no menu. O programa pode agora ser executado na janela de comandos do MATLAB fazendo >> exemplo1 . Certique-se que o diretorio corrente e o mesmo utilizado para gravar o arquivo .m. Este programa traca t [0, 10] contra y(t) = sin t cos t com linha solida e crculos azuis. Assim como os comandos do MATLAB, o usu rio tamb m pode criar prograa e mas que atuam como funcoes, isto e fornecem um ou mais resultados quando um ou mais par metros s o fornecidos. Funcoes s o tamb m arquivos .m e poa a a e dem ser criadas da mesma maneira que os programas roteiro. Para exemplicar, criemos uma funcao sc( x ) = sin x cos x num novo arquivo .m:

CAPITULO 2. COMANDOS BASICOS DO MATLAB function f = sc(x) f = sin(x).*cos(x);

28

E preciso gravar este arquivo com o mesmo nome da funcao, isto e sc.m. Note que agora a rec m-criada funcao sc pode ser utilizada no MATLAB da mesma e maneira que as funcoes (comandos) do MATLAB. >> a = sc(2) a = -0.3784 ` E interessante observar que as vari veis utilizadas na funcao, f e x, s o internas a a a funcao. De fato, executando-se o comando whos veremos que estas vari veis n o a a foram armazenadas na memoria do MATLAB. A vari vel a assume o resultado a da funcao e o par metro x utilizado pela funcao e igual ao valor fornecido pelo a usu rio, neste caso 2. a Podemos tamb m utilizar esta nova funcao para reescrever o programa roteiro e exemplo1 da seguinte forma: clear all t=0:0.1:10; y=sc(t); plot(t,y,bo-)

2.7.2

O comando global

` Apesar de as funcoes criadas no MATLAB so utilizarem vari veis internas a a funcao em quest o ou locais, pode-se tamb m utilizar vari veis armazenadas na a e a memoria do MATLAB atrav s do comando global <var1> <var2> .... Este coe mando determina que as vari veis <var1> <var2> ... s o globais, ou seja poa a dem ser utilizadas em outros programas. function f = sc(x) % Arquivo sc.m global p f = sin(p*x).*cos(x); clear all % Arquivo principal.m (chama arquivo funao sc.m) c~ global p p=3; t=0:0.1:10; y=sc(t); plot(t,y,bo-)

CAPITULO 2. COMANDOS BASICOS DO MATLAB

29

2.7.3

O comando if

O comando if permite que se utilize comandos condicionais no MATLAB, tanto no Command Window como no interior de roteiros ou funcoes. A melhor ma neira de entender a sintaxe deste comando e atrav s de um exemplo. Consie dere a funcao sc denida anteriormente. Suponha que a funcao agora tenha um valor limite para o par metro p, de forma que se p < 1 a funcao retorna a sc( x ) = sin x cos x e n o sc( x ) = sin px cos x. Isto pode ser realizado modicando a novamente o arquivo sc.m e incluindo o comando if. function f = sc(x) % Arquivo sc.m global p if p<1 f = sin(1*x).*cos(x); else f = sin(p*x).*cos(x); end O MATLAB interpreta esta funcao da seguinte maneira: 1) o valor de p de nido na memoria do MATLAB e recuperado, 2) se o valor de p for menor que 1, a funcao executa a linha f = sin(1*x).*cos(x); e retorna o valor de f como resposta, 3) se o valor de p for maior que ou igual a 1, a funcao executa a linha f = sin(p*x).*cos(x); e retorna o valor de f como resposta. Desta forma, mesmo que p seja denido menor que 1 no programa principal.m, o mnimo valor de p considerado na funcao sc e 1. O programa seguinte ilustra a utilizacao da nova funcao sc com o comando if includo. clear all % Novo arquivo principal.m (chama arquivo fun~o sc.m) ca global p t=0:0.1:10; p= 3; y1=sc(t); p= 1; y2=sc(t); p=0.1; y3=sc(t); % p<1 plot(t,y1,bo-,t,y2,r-,t,y3,gs) xlabel(x), ylabel(sc(x) = sin(px) cos(x), com p maior ou igual a 1), legend(p=3,p=1,p=0.1,3) Executando o arquivo principal.m no MATLAB, a seguinte gura e produzida. Alternativamente, v rias condicoes podem ser consideradas utilizando o coa mando if em conjuncao com elseif. O exemplo seguinte ilustra esta utilizacao do comando if.

CAPITULO 2. COMANDOS BASICOS DO MATLAB


1

30

0.8

sc(x) = sin(px) cos(x), com p maior ou igual a 1

0.6

0.4

0.2

0.2

0.4

0.6

0.8

p=3 p=1 p=0.1 0 1 2 3 4 5 x 6 7 8 9 10

Figura 2.5: Gr co da funcao sin( px ) cos( x ) para diferentes valores de p. a function f = sc(x) % Arquivo sc.m global p if p<1 f = sin(1*x).*cos(x); elseif p<2 f = sin(2*x).*cos(x); elseif p<3|p==7 f = sin(3*x).*cos(x); else f = sin(p*x).*cos(x); end Os operadores relacionais e os conectivos logicos que podem ser usados com o comando if s o listados na tabela a seguir. a

CAPITULO 2. COMANDOS BASICOS DO MATLAB Operadores relacionais < menor que > maior que <= menor que ou igual a >= maior que ou igual a == igual a = diferente de Conectivos logicos & e | ou n o a xor ou excludente

31

2.7.4

O comando for

O comando for permite que se repita uma s rie de comandos para diferentes e valores de uma ou mais vari veis. A sintaxe do comando for e a seguinte: a for k=ki:dk:kf comandos end onde a linha comandos e executada para cada um dos seguintes valores da vari vel a controladora k: ki, ki+dk, ki+2dk, ..., kf. Note que se (kf-ki) n o for multiplo a de dk, o ultimo valor assumido por k e ki+N dk, onde N e o m ximo valor inteiro a para o qual ki+N dk e menor que kf. O valor do incremento dk pode tamb m ser negativo desde que kf seja menor e que ki. Sempre que o incremento dk n o e fornecido, utilizando por exemplo a for k=ki:kf, o MATLAB supoe que dk e igual a 1. Tente reproduzir os exemplos abaixo2 : for k=1:0.5:3 disp(k) end 1 1.5000 2 2.5000 3 Aqui k comeca em 1 e e incrementado de 0.5 at chegar em 3. e
que voc pode usar o comando for no command window ou em roteiros ou e funcoes (.m). Reproduza estes exemplos das duas maneiras.
2 Lembre-se

CAPITULO 2. COMANDOS BASICOS DO MATLAB for k=1:-0.4:-1 disp(k) end 1 0.6000 0.2000 -0.2000 -0.6000 -1 Aqui k comeca em 1 e e decrementado de 0.4 at chegar em -1. e for k=1:3.5 disp(k) end 1 2 3

32

Aqui k comeca em 1 e e incrementado de 1 at chegar em 3. Ele n o chega a e a 3.5 porque o proximo valor incrementado seria 4.

Captulo 3 Aplica oes c


3.1 Programas interativos

Muitas vezes e interessante fazer um programa interativo de forma que o usu rio a possa execut -lo entrando os dados necess rios ao programa via teclado sem ter a a que editar o arquivo .m do programa. Isto pode ser feito atrav s do comando e input. Considere por exemplo que voc quer fazer um programa que calcula e valores para a funcao f ( x ) = ae2x+b , e plota x versus f ( x ), a partir dos valores inicial e nal de x (xi e x f ) e dos par metros a e b. No entanto, voc tamb m quer a e e que o usu rio entre com estes valores sem ter que alterar o seu programa. Isto a pode ser feito da seguinte maneira: function [y,x] = interat clear disp(Programa Interat - Vers~o 1.0 ) a a = input(Entre com o valor de a = ); b = input(Entre com o valor de b = ); xi= input(Entre com o valor inicial de x = ); xf= input(Entre com o valor final de x = ); x = xi:(xf-xi)/99:xf; % define 100 valores de x entre xi e xf y = a*exp(-2*x+b); plot(x,y,ro-) Quando o usu rio executar o programa interat, os valores de a, b, xi e x f a s o pedidos ao usu rio pelo programa. O usu rio pode fornecer os valores sima a a plesmente digitando o valor pedido seguido de < Enter >. Assim que os quatro valores s o fornecidos o programa calcula os valores de f ( x ) e plota o gr co. a a Note que a funcao interat tamb m fornece como sada os valores de x e f ( x ). e Se o usu rio executar o programa fazendo >> interat os valores de x e f ( x ) a s o imprimidos no comand window apos execucao do programa. Se o usu rio a a executar o programa fazendo >> f=interat; os valores de f ( x ) s o armazenaa dos na memoria do MATLAB na vari vel f. Os valores n o s o impressos na a a a tela e os valores de x s o perdidos. Se o usu rio executar o programa fazendo a a [f,x]=interat; os valores de x e f ( x ) s o armazenados na memoria do MAa 33

CAPITULO 3. APLICACOES TLAB nas vari veis x e f respectivamente. a

34

3.2

Zeros de fun oes c

O MATLAB acha zeros de funcoes usando o comando fzero. A funcao, da qual deseja-se encontrar os zeros, deve ser denida em um arquivo .m como denido previamente. Considere a seguinte funcao f ( x ) = sin x cos x. A funcao apl1 e ent o escrita a function f=apl1(x) f=sin(x)-cos(x); A raiz pode ser determinada usando o comando fzero no comand window do MATLAB ou no interior de um outro programa. >> fzero(apl1,1) ans = 0.7854 Note que o segundo argumento 1 e um chute inicial para o c lculo da raiz. a Note tamb m que o valor do angulo x que satisfaz f ( x ) = 0 est em radianos e a (0.7854 radianos = 45 graus). No entanto, existem outros valores de x para os quais f ( x ) = 0, isto e, a funcao f ( x ) tem outras razes. Dando o chute inicial 3, por exemplo, tem-se >> fzero(apl1,3) ans = 3.9270 ou, em graus, 225. Este comando pode ser utilizado com qualquer outra funcao escrita no MATLAB.

3.3

Calculando Integrais

Pode-se tamb m calcular integrais de uma funcao no MATLAB. Existem v rios e a m todos de aproximacao num rica de integrais denidas implementados no MAe e TLAB. Considere a seguinte integral
b

I=

f ( x ) dx

Esta integral pode ser aproximada usando a regra de Simpson com o comando quad ou usando a regra trapezoidal com o comando trapz. Os dois comandos trabalham de maneira bem diferente.

CAPITULO 3. APLICACOES

35

3.3.1

Regra trapezoidal

O comando trapz aproxima a integral usando os pontos da funcao denidos pelo usu rio. Assim, para usar este comando primeiro deve-se denir os vetores x, no a intervalo [ a, b], e f, os valores da funcao correspondentes aos valores denidos no vetor x. Considere, por exemplo, a seguinte integral
1

I=

2xe x dx

A aproximacao para esta integral pode ser calculada atrav s do seguinte pro e grama: function I=integral(dx) x=0:dx:1; f=2*x.*exp(-x.^2); I=trapz(x,f); Este programa cria um vetor x de a = 0 at b = 1, com incremento dx denido e pelo usu rio, calcula os valores de f ( x ) nestes pontos e usa o comando trapz para a aproximar a integral de f ( x ). A gura seguinte mostra gracamente a funcao para dx = 0.1 e para dx = 0.02. A area sob a curva e a integral denida da funcao f ( x ). O c lculo da integral e feito no MATLAB, usando a rec m-denida funcao a e integral, da seguinte maneira >> integral(.1) ans = 0.6298 >> integral(.02) ans = 0.6320 Observe que as aproximacoes da integral I para dx = 0.1 e dx = 0.02 s o a diferentes. De fato, usando o incremento menor dx = 0.02 aproxima-se melhor a area sob a curva f ( x ). O valor exato desta integral e Iexato = 1 e1 ou calculando no MATLAB I = 0.63212055882856. Observando o gr co da funcao, e a f cil imaginar porque a diminuicao do incremento dx melhora a aproximacao da a integral. No entanto, na proxima secao, um m todo mais eciente para o c lculo e a da integral e apresentado.

3.3.2

Regra de Simpson

O comando quad permite que se calcule a integral I usando a regra de Simpson. A sintaxe deste comando e a seguinte: quad(fc,a,b,tol)

CAPITULO 3. APLICACOES
0.9

36

0.8

0.7

0.6

0.5 f(x) 0.4 0.3 0.2 0.1 0 0

0.1

0.2

0.3

0.4

0.5 x

0.6

0.7

0.8

0.9

Figura 3.1: Representacao da aproximacao da integral de uma funcao. sendo que fc e o arquivo .m que dene a funcao da qual se quer calcular a integral. a e b s o os limites de integracao e tol e a toler ncia de erro exigida a a para a aproximacao da integral. Mostra-se mais adiante que, quanto menor a toler ncia de erro exigida, mais preciso e o c lculo da integral. a a Primeiro, cria-se o programa apl2.m que dene a funcao f ( x ). function y=apl2(x) % funao apl2.m c~ y=2*x.*exp(-x.^2); 103 . O c lculo da integral I pode ser efetuado usando a toler ncia usual que e de a a Neste caso, e desnecess rio denir tol no comand window. a >> quad(apl2,0,1) ans = 0.63212053454568 Calculando agora com uma toler ncia de 108 a >> quad(apl2,0,1,1e-8) ans = 0.63212055882677

CAPITULO 3. APLICACOES

37

Note que, comparando-se com o valor exato apresentado na secao anterior, quando diminui-se a toler ncia melhora-se a aproximacao da integral. a

3.4

Equa oes diferenciais c

No MATLAB existem diversas algoritmos para resolver sistemas de equacoes di ferenciais ordin rias de primeira ordem. Estes s o mostrados na tabela abaixo. a a
ode45 ode23 ode113 ode15s ode23t ode23s ode23tb Integradores de equacoes diferenciais ordin rias a Runge-Kutta explcito de ordem 4/5 (Dormand-Prince) Runge-Kutta explcito de ordem 2/3 (Bogacki-Shampine) Preditor-corretor de passo vari vel (Adams-Bashforth-Moulton) a BDF de passo quase constante para EDOs rgidas (Klopfenstein-Shampine) Implementacao da regra trapezoidal Implementacao de um par Rosenbrock (2,3) modicado para EDOs rgidas Runge-Kutta implcito trapezoidal/BDF (Bank-Rose-Hosea-Shampine)

A seguir, alguns exemplos de solucao de equacoes diferenciais ordin rias s o a a apresentados.

3.4.1

Sistema massa-mola-amortecedor

Considere um sistema massa-mola-amortecedor descrito pela equacao diferencial ordin ria seguinte a m x + c x + kx = f sin t Note que esta equacao diferencial ordin ria possui ordem 2 (pois x e derivada a 2 x/dt2 ). No entanto, esta equacao pode ser escrita como segunda de x no tempo, d um sistema de duas equacoes de primeira ordem da seguinte forma y1 = x y1 = x y2 = y1 = x y2 = x =

f m

sin t

c mx

k mx =

f m

sin t

c m y2

k m y1

Em resumo, tem-se duas equacoes de primeira ordem y1 = y2 f y2 = m sin t


c m y2 k m y1

Primeiro, escreve-se uma funcao que calcula y1 e y2 a partir dos valores de t, y1 e y2 . Esta funcao e chamada diversas vezes no processo de integracao do sistema de equacoes diferenciais. function dydt=apl3(t,y,opt,P) m = P(1); c = P(2); k = P(3); f = P(4); dydt = [y(2); (f*sin(t) - c*y(2) - k*y(1))/m];

CAPITULO 3. APLICACOES

38

Note que as vari veis y1 , o deslocamento da massa, e y2 , a velocidade da a massa, foram agrupadas no vetor y. Assim, a sada da funcao apl3 tem como elementos y1 e y2 : y= y1 y2 ; dydt = y1 y2

A sintaxe para a utilizacao dos comandos ode* na integracao da equacao diferencial do massa-mola-amortecedor e a seguinte >> [t,Y]=ode45(apl3,[ti tf],Yi); sendo que ti e tf s o os instantes de tempo inicial e nal e Yi e o vetor de a condicoes iniciais. Note que Yi deve ser um vetor coluna (neste caso, com duas linhas) tal que Yi = y 1 | t =0 y 2 | t =0

x (0) x (0)

A funcao ode45, assim como as outras funcoes de integracao de EDOs, retorna um vetor coluna t contendo os instantes de tempo em que a solucao foi calculada e uma matriz Y com mesmo numero de linhas que t. Cada coluna de Y corresponde ao comportamento de uma vari vel no tempo. No caso deste exemplo, a a primeira coluna representa os deslocamentos da massa assumidos em cada instante de tempo e a segunda coluna representa as velocidades da massa assumidas em cada instante de tempo. A linha de comando utilizada para executar a integracao das equacoes pode tamb m ser parte de um outro programa. Considere, por exemplo, o seguinte e programa function mma(m,c,k,f,xi,vi,ti,tf) parametros = [m c k f]; Yi = [xi; vi]; [t,Y] = ode45(apl3,[ti tf],Yi,[],parametros); subplot(221) plot(t,Y(:,1)); xlabel(Tempo); ylabel(Deslocamento); subplot(223) plot(t,Y(:,2)); xlabel(Tempo); ylabel(Velocidade); subplot(122) plot(Y(:,1),Y(:,2)) xlabel(Deslocamento); ylabel(Velocidade); Note que os par metros m, c, k e f s o passados do programa principal mma a a para a integracao das equacoes atrav s do vetor parametros. O recebimento dos e par metros pela funcao que calcula dydt e feita atrav s do argumento extra P. a e ` O par metro opt n o tem utilidade mas e necess rio devido a sintaxe de chaa a a possvel tamb m fazer o mesmo programa utilizando oumada do integrador. E e

CAPITULO 3. APLICACOES

39

tros integradores de EDOs. Para isto, basta substituir ode45 por outro integrador (ode15s por exemplo). Assim, pode-se executar o programa principal no comand window do MATLAB >> mma(1,.5,2,.5,1,0,0,10) ` sendo que o primeiro valor corresponde a massa m, o segundo ao amortecedor c, ` ` o terceiro a rigidez k, o quarto a amplitude da forca f , o quinto ao deslocamento ` inicial x (0), o sexto a velocidade inicial x (0), o s timo ao instante inicial ti e o e oitavo ao instante nal t f . A proxima gura apresenta o resultado.
1 0.8

Deslocamento

0.5

0.6

0.4

0.5

0.2

10 Tempo

15

20

Velocidade

0.2

1 0.5

0.4

0.6 Velocidade 0 0.8 0.5 1 1.5 1

10 Tempo

15

20

1.2

0.5

0 0.5 Deslocamento

Figura 3.2: Resposta livre de um sistema de um grau de liberdade tipo massamola-amortecedor a um conjunto de condicoes iniciais.

3.4.2

P ndulo simples e

A din mica do p ndulo simples e representada pela seguinte equacao diferencial a e ordin ria a g + sin = 0 l

CAPITULO 3. APLICACOES

40

Seguindo a metodologia apresentada na secao anterior, esta equacao pode ser integrada usando um programa principal que explicite o m todo de integracao e e de um programa auxiliar que dena a equacao a resolver. Primeiramente, deve-se transformar a equacao anterior em um sistema de equacoes de primeira ordem. y1 = y2 g y2 = l sin y1 ` O programa principal pendulo.m e ent o muito similar aquele utilizado para a o problema do sistema massa-mola-amortecedor. function pendulo(g,l,xi,vi,ti,tf) parametros = [g l]; Yi = [xi; vi]; [t,Y] = ode45(apl4,[ti tf],Yi,[],parametros); subplot(221) plot(t,Y(:,1)); xlabel(Tempo); ylabel(Deslocamento); subplot(223) plot(t,Y(:,2)); xlabel(Tempo); ylabel(Velocidade); subplot(122) plot(Y(:,1),Y(:,2)) xlabel(Deslocamento); ylabel(Velocidade); e o programa auxiliar que dene a equacao do p ndulo e e function dydt=apl4(t,y,opt,P) g = P(1); l = P(2); dydt = [y(2); -g/l*sin(y(1))]; Pode-se ent o executar o programa principal pendulo no comand window do a MATLAB: >> pendulo(9.81,10,1,0,0,20) Experimente aumentar o valor de xi de 1 para 2 e 3, para ver o que acontece com os gr cos. Voc consegue distinguir o comportamento deste sistema n oa e a linear daquele do sistema linear massa-mola-amortecedor. As guras a seguir apresentam o resultado para estas e outras condicoes iniciais.

CAPITULO 3. APLICACOES
2 2

41

Deslocamento

Deslocamento

0.5

0.8

1.5

0.6

0 1 1 0.5

0.5

0.4

10 Tempo

15

20

Velocidade

10 Tempo

15

20

Velocidade

0.2

2
0.2

0.5 1 Velocidade 1 0 1.5

0.5 Velocidade

0.4

0.6

0.5

0.8

10 Tempo

15

20

1 1

0.5

0 0.5 Deslocamento

0 3

10 Tempo

15

20

2 2

0 Deslocamento

3 2 Deslocamento 1

2 0 1 2 0 5 10 Tempo 15 20 Velocidade 3 1

3 2 Velocidade 1 0 2 1 2 3 0 5 10 Tempo 15 20 3 3 2 1 0 1 Deslocamento 2 3 1

Deslocamento

0 2 2 1 0 5 10 Tempo 15 20 Velocidade 4

4 1 2 Velocidade 2 0 3

10 Tempo

15

20

4 4

0 Deslocamento

Figura 3.3: Resposta livre de um p ndulo sujeito a deslocamentos angulares inie ciais de 1, 2 e 3 rad e considerando v rias velocidades angulares iniciais. a

CAPITULO 3. APLICACOES

42

3.4.3

Sistema com mais de um grau de liberdade

Procure na biblioteca de arquivos .m os programas mmola.m e pduplo.m. Execute estes arquivos no MATLAB e, em seguida, veja como eles foram feitos (>> type mmola) e (>> type pduplo). Apesar de serem mais extensos e usarem alguns comandos novos, estes dois programas utilizam a mesma metodologia apresentada nas ultimas duas secoes para resolver as equacoes diferenciais de um sistema massa-mola-amortecedor com 3 graus de liberdade e de um p ndulo duplo. e
2
20

1.5 1o modo (0.09 Hz) = [0.500, 0.707, 0.500] 1

Amplitude (dB)

10 0 10 20

0.5 2o modo (0.32 Hz) = [0.707, 0.000, 0.707] 0

30 10
1

10

20

0.5
Fase (graus)

40

3o modo (0.54 Hz) = [0.500, 0.707, 0.500] 1

60 80 100 120 140 160 10


1

1.5

10 Frequencia (Hz)

0
0.8

0.5

1.5

2.5

3.5

4.5

5.5

6
0.5

Condicao Inicial 3o modo Massa 1 Massa 2 Massa 3

Forcamento Harmonico de Frequencia 1 rad/s Massa 1 Massa 2 Massa 3

0.6

0.4

0.3 0.4 0.2 Deslocamento (m) Deslocamento (m) 0 2 4 6 8 10 12 Tempo (seg.) 14 16 18 20 0.2

0.1

0.2

0.1

0.2 0.4 0.3 0.6

0.4

0.8

0.5

10

20

30

40 Tempo (seg.)

50

60

70

80

Figura 3.4: Sistema massa-mola-amortecedor com tr s graus de liberdade: moe dos de vibracao, resposta em frequ ncia, vibracao livre, resposta com forcamento e harmonico.

CAPITULO 3. APLICACOES

43

2 Posicao da massa A Posicao da massa B 0 5 10 15 20 25

10 8

6 4 2 0 2

10

15

20

25

10 Velocidade da massa A Velocidade da massa B 0 5 10 15 20 25

15 10 5 0 5 10

10

10

15

20

25

Figura 3.5: Resposta livre de um p ndulo duplo. e

Captulo 4 Outros comandos


4.1 Formato de sada

Ainda que todos os c lculos em MATLAB sejam feitos com precis o dupla, o a a formato da sada na tela pode ser modicado com as seguintes instrucoes : format short format long format short e format long e d quatro decimais (o usual) a d quatorze decimais a notacao cientca com 4 decimais notacao cientca com quinze decimais.

Quando um formato e prescrito este e mantido at que seja prescrito outro fore mato. Como exemplo escreveremos o numero com os quatro formatos discutidos: short 3.1416 3.14159265358979 long 3.1416e+000 short e 3.141592653589793e+000 long e.

4.2

Comando diary

O comando diary <nome de arquivo> faz com que tudo o que aparecer na tela, daquele momento em diante, (exceto gr cos), seja guardado no arquivo <nome a de arquivo> at que ordenemos diary off. Para continuar guardando os dados e escrevemos diary on. Por exemplo >> >> >> >> clear diary ss a=[1 2 3 4 5 6]; b=a.^2

44

CAPITULO 4. OUTROS COMANDOS b = 1 >> c = 1 4 >> d=c d = 1 2 3 4 5 6 2 5 3 6 4 9 16 25 36

45

c=[1 2 3; 4 5 6]

>> diary off No arquivo ascii ss cam guardados todos estes comandos. Abrindo este arquivo com um editor de texto temos a=[1 2 3 4 5 6]; b=a.^2

b = 1 4 9 16 25 36

c=[1 2 3; 4 5 6]

c = 1 4 d=c 2 5 3 6

d = 1 2 3 diary off 4 5 6

CAPITULO 4. OUTROS COMANDOS Fazendo na tela do MATLAB >> diary on >> d=[1 2; 3 4]; >> e=inv(d) e = -2.0000 1.5000 >> diary off o arquivo ca a=[1 2 3 4 5 6]; b=a.^2

46

1.0000 -0.5000

b = 1 4 9 16 25 36

c=[1 2 3; 4 5 6]

c = 1 4 d=c 2 5 3 6

d = 1 2 3 diary off d=[1 2; 3 4]; e=inv(d) 4 5 6

e = -2.0000

1.0000

CAPITULO 4. OUTROS COMANDOS 1.5000 diary off -0.5000

47

4.3

Comando cputime

O comando cputime d o tempo de CPU, em segundos, dos processos do MAa TLAB desde o comeco da secao . Consideremos o programa a seguir t=cputime; operacoes cputime-t Desta maneira obtemos o tempo de CPU gasto para executar as operacoes espe cicadas. Este comando serve para testar a eci ncia de nossos programas. e Como aplicacao, consideremos o programa 1. clear t=cputime; a1=0:5000; a2=0:2:10000; a3=10000:15000; A=[a1 ; a2; a3]; for i=1:3 for j=1:5001 C(i,j)=A(i,j)^3; end end cputime-t Ao executar este programa obtemos o tempo de CPU gasto, que foi de 5.0600 seg. 2. clear t=cputime; a1=0:5000; a2=0:2:10000; a3=10000:15000; A=[a1 ; a2; a3]; C=A.^3; cputime-t A executar este programa obtemos o tempo de CPU gasto, que foi de 0.1100 seg.

CAPITULO 4. OUTROS COMANDOS

48

Notemos que os tempos dependem da conguracao de seu computador, mas as magnitudes s o proporcionais. Os dois programas fazem as mesmas contas, mas a de maneiras diferentes. Observamos, por m, que a maneira utilizada no segundo e programa e mais eciente que no primeiro, pois utiliza a forma matricial de tratar os dados.

4.4

O comando fprintf

Este comando serve para mostrar a sada de um programa. A sintaxe do comando e: fprintf(formato de sada,vari veis). O formato de sada cont m o texto e o formato a e desejado para as vari veis especicadas em vari veis. Usamos %e, %f e %g para a a formatar a sada . Se %e e usado, os conteudos das vari veis a serem impressas a estar o em notacao exponencial e com %f os conteudos das vari veis ser o mosa a a trados na notacao comum de numeros reais. Com %g e usada a notacao %e ou %f dependendo do caso. Se o car ter \n aparecer no formato de sada, a impres o a a continuar na linha seguinte. O formato de sada usual deve terminar com um a \n. Para esclarecer melhor este comando consideremos o seguinte exemplo.

4.4.1

Exemplo

Consideremos A uma matriz quadrada. Desejamos encontrar seus autovalores e seus autovetores. function pp1(A) n=length(A(:,1)); [V,D]=eig(A); for i=1:n fprintf(Valor proprio Lambda(%g) = %f \n,i,D(i,i)) fprintf(Vetor proprio associado ao valor Lambda(%g),\n v(%g) = \n ,i,i); disp(V(:,i)) pause(2) end Neste programa disp(V(:,i)) e usado para evitar na sada do vetor (coluna) a pa lavra ans. O comando pause(2) faz com que o programa espere dois segundos para executar o comando seguinte. Se usamos so pause, a execucao e interrom pida at que seja pressionada uma tecla. A execucao e a sada deste programa s o e a mostradas a seguir. >> A=[1 2 3 1 0; 3 -10 4 5 6; 0 1 0 1 2; 3 -10 4 5 6; 1 2 3 4 5 ]; >> pp1(A) Valor proprio Lambda(1) = 9.644410 Vetor proprio associado a valor Lambda(1), v(1) = 0.2271

CAPITULO 4. OUTROS COMANDOS 0.4149 0.2394 0.4149 0.7395 Valor proprio Vetor proprio v(2) = 0.1777 -0.6680 0.0941 -0.6680 0.2592 Valor proprio Vetor proprio v(3) = 0.9323 0.1148 -0.2666 0.1148 -0.1830 Valor proprio Vetor proprio v(4) = -0.8392 -0.1105 0.5207 -0.1105 -0.0110 Valor proprio Vetor proprio v(5) = 0.6968 0.0942 -0.4519 0.4708 -0.2825

49

Lambda(2) = -8.689421 associado a valor Lambda(2),

Lambda(3) = 0.511543 associado a valor Lambda(3),

Lambda(4) = -0.466532 associado a valor Lambda(4),

Lambda(5) = 0.000000 associado a valor Lambda(5),

Ap ndice A e Um programa para sistemas de equa oes lineares c


Dado um sistema de equacoes lineares AX = b queremos saber se o sistema tem ou n o solucao . Se tiver solucao desejamos saber se ela e unica ou n o . Se a a a solucao for unica desejamos conhecer a solucao. Se o sistema tiver innitas solucoes desejamos conhecer pelo menos uma solucao . O programa a seguir discute, para um sistema dado, se a solucao existe ou n o e a quando existir se e unica ou n o, fornecendo tamb m a solucao (quando e unica) a e e forncendo ao menos uma solucao (quando n o e unica). Quando o sistema a n o tiver solucao desejamos que o programa encontre um vetor X que minimize a o erro pelo m todo dos mnimos quadrados. e Para saber se o sistema tem ou n o solucao o programa compara o posto da maa triz A com o posto da matriz [ A : b]. O sistema ter solucao quando ambos os a postos forem iguais. Para a unicidade precisamos ainda que o posto da matriz A seja igual ao numero de incognitas do sistema, caso contr rio o sistema ter ina a nitas solucoes . O programa encontra, neste caso, pelo menos uma solucao . No caso do sistema n o ter solucao o programa encontra um vetor X que minimiza a o erro do sistema AX = b pelo m todo dos mnimos quadrados. e function sist1(A,b) n=rank(A);%Da o posto da matriz A fprintf(Posto da matriz A= %g \n,n); m=rank([A b]);%Da o posto de [A:b] fprintf(Posto da matriz [A:b]= %g \n,m); if n==m & n==length(A(1,:)) disp(O sistema tem sol unica) X2=pinv(A)*b; disp(X2); elseif n==m & n<length(A(1,:)) disp(O sistema tem infinitas sols) 50

APENDICE A. UM PROGRAMA PARA SISTEMAS DE EQUACOES LINEARES51 disp(Usando divisao a esquerda uma solu\c c\~ao e) X1=A\b; disp(X1); disp(Usando inversa generalizada uma solu\c c\~ao e) X2=pinv(A)*b; disp(X2); else disp(O sistema nao tem sol) disp(Usando divisao a esquerda uma aproximacao e) X1=A\b; disp(X1); e1=b-A*X1; J1=e1*e1/2; fprintf(Erro da divisao a esquerda = %f \n,J1) disp(Usando inversa generalizada uma aproximacao e) X2=pinv(A)*b; disp(X2); e2=b-A*X2; J2=e2*e2/2; fprintf(Erro da inversa generalizada = %f \n,J2) end Para olhar o funcionamento do programa consideremos os seguintes exemplos

A.1

Sistema com solu ao unica c


x + 2y + 3z = 2 2x y + z = 3 3x y + 2z = 0

Consideremos o sistema

Para achar a solucao do sistema fazemos >> A=[1 -2 3;2 -1 1;3 -1 2]; >> b=[2;3;0]; >> sist1(A,b) de onde temos Posto da matriz A= 3 Posto da matriz [A:b]= 3 O sistema tem sol unica 0.2500 -5.7500 -3.2500

APENDICE A. UM PROGRAMA PARA SISTEMAS DE EQUACOES LINEARES52

A.2

Sistema com innitas solu oes c


x + 2y + 3z + w = 1 2x y + z w = 0 3x y + 2z + 2w = 0

Consideremos o sistema

Para achar a solucao do sistema fazemos >> A=[1 -2 3 1;2 -1 1 -1;3 -1 2 2]; >> b=[1;0;0]; >> sist1(A,b) de onde temos Posto da matriz A= 3 Posto da matriz [A:b]= 3 O sistema tem infinitas sols Usando divisao a esquerda uma solu\c cao e -0.2500 0 0.4375 -0.0625 Usando inversa generalizada uma solu\c cao e -0.2500 -0.2115 0.2788 -0.0096

A.3

Sistema sem solu ao c


x + 2y + 3z + w = 2x y + z w = 3x y + 2z + 2w = x + y + 10z + w = 2 2x y + z w = 1 0 0 2

Consideremos o sistema

Para achar a solucao do sistema fazemos >> A=[1 2 3 1;2 -1 1 -1;3 -1 2 2; 1 1 10 1;2 -1 1 -1]; >> b=[1;0;0;2;2]; >> sist1(A,b) de onde temos

APENDICE A. UM PROGRAMA PARA SISTEMAS DE EQUACOES LINEARES53 Posto da matriz A= 4 Posto da matriz [A:b]= 5 O sistema nao tem sol Usando divisao a esquerda uma aproximacao e 0.3125 0.3125 0.1875 -0.5000 Erro da divisao a esquerda = 1.000000 Usando inversa generalizada uma aproximacao e 0.3125 0.3125 0.1875 -0.5000 Erro da inversa generalizada = 1.000000

Vous aimerez peut-être aussi