Вы находитесь на странице: 1из 86

Introduo Programao

1. INTRODUO O Matlab um software interactivo poderoso orientado para o clculo numrico, desenvolvido no incio dos anos 70. O nome Matlab resulta da conjugao das palavras MATrix e LABoratory e deve-se ao facto do seu elemento bsico de informao ser a matriz, e em que qualquer varivel que se defina uma matriz. O facto das matrizes poderem ser criadas sem dimensionamento prvio, aliado ao grande conjunto de funes internas (tambm designadas funes built-in) de que dispe, permite a resoluo de muitos problemas numricos de uma forma mais simples e rpida do que se gastaria para desenvolver programas semelhantes em Fortran, C ou Pascal. Ao contrrio destas linguagens de programao mais tradicionais, o Matlab permite que nos preocupemos exclusivamente com os conceitos tcnicos, sem necessidade de preocupao com a gesto de memria ou com a declarao do tipo de variveis. Este software, para alm de disponibilizar uma linguagem de programao de alto nvel prpria, fornece um ambiente de computao com excelentes capacidades grficas e com uma grande srie de ferramentas (funes) comuns a diversas reas de conhecimento. Alm disso, o Matlab disponibiliza uma srie de ferramentas adicionais (as toolboxes), organizadas segundo diversas reas cientficas, que formam uma coleco de programas especiais projectados para resolver problemas especficos. Como exemplos de toolboxes que integram o Matlab temos: Matemtica Simblica Manipulao simblica de funes, Processamento de Sinal Projecto e anlise de filtros (analgicos e digitais), Sistemas de Controlo Projecto e anlise de sistemas de controlo, Processamento de Imagem Manipulao de imagem, e Estatstica Anlise de dados estatsticos. Outro aspecto muito importante do Matlab o facto de permitir criar facilmente grficos bidimensionais e tridimensionais, dos mais diversos tipos. O Matlab permite tambm a criao de interfaces grficas, que facilitam a interaco do utilizador com as aplicaes. Tais interfaces podem utilizar menus, botes, caixas de dilogo, animaes, texto e muitos elementos grficos. 1.1 AMBIENTE DE TRABALHO Aps iniciar uma sesso Matlab abre-se uma janela semelhante mostrada na Figura 1.1, designada por Matlab Desktop. A figura contm trs pequenas sub-janelas, que se podem activar/desactivar a partir da opo Desktop do menu principal: Command Window, Current Directory Window e Command History Window. Este o modo de abertura padro (por defeito) do Matlab. No entanto, o Matlab pode por meio de funes internas, apresentar outro tipo de janelas. No total, o Matlab pode apresentar os seguintes tipos de janelas: Janela de Comandos (Command Window) a janela principal, inicializa variveis, e permite executar comandos e funes Matlab; Historial de Comandos (Command History) Janela que apresenta o histrico dos comandos mais recentes digitados na Janela de Comandos; Navegador de Directorias (Current Directory) Permite alterar a directoria de trabalho (corrente), bem como visualizar os respectivos ficheiros;

Introduo Programao Espao de dados (Workspace) Permite visualizar e manipular o contedo do espao de dados global; Ajuda (Help) Permite obter ajuda na utilizao do programa; Janela Grfica (Figure Window) Aberta sempre que um comando grfico executado, apresenta o grfico criado por esse comando; Editor Usada para escrever, editar e depurar (debug) programas;

FIGURA 1.1 Ambiente de Trabalho Os pontos seguintes descrevem como se deve trabalhar com mais pormenor com a Janela de Comandos e com o Editor. 1.1.1 JANELA DE COMANDOS a janela principal do Matlab. Pode ser utilizada para inicializar variveis, executar comandos, abrir outras janelas, bem como executar programas Matlab que so gravados como ficheiros-M (assim designados, porque lhes so atribudas extenses .m ao serem salvos). Um exemplo simples de utilizao da Janela de Comandos mostrado na Figura 1.2.

Introduo Programao

FIGURA 1.2 A Janela de Comandos Quando o sistema est preparado para receber comandos apresenta o smbolo >> na Janela de Comandos, designado por prompt. Quando o comando digitado e a tecla ENTER pressionada, o comando executado. Normalmente, digitado um comando por linha; contudo, se pretendermos que vrios comandos sejam digitados na mesma linha, eles devem ser separados por vrgulas. Quando a tecla ENTER pressionada, os comandos so executados pela ordem com que foram digitados, da esquerda para a direita. Um comando anteriormente digitado pode ser chamado outra vez atravs das teclas de direco do teclado () e (). Assim que o comando desejado for exibido no prompt, possvel modific-lo (se necessrio) e execut-lo. Se um comando for muito extenso de modo que no caiba numa linha, pode-se digitar reticncias () e pressionar a tecla ENTER para continuar na prxima linha. A continuao de um comando no Matlab pode ocupar 4.096 caracteres aps a linha inicial. Se no final de um comando, digitar um ponto e vrgula (;) o resultado de sada ocultado. Os comentrios so usados para adicionar descries ou explicar algum ponto particular do programa. Quando o smbolo de percentagem (%) digitado no incio de uma linha de comando, o programa considera a linha como um comentrio. Significa que, quando a tecla ENTER for pressionada, a linha no ser executada. O smbolo % seguido de um comentrio, tambm pode ser digitado aps um comando. Tal, no produzir qualquer efeito na execuo desse comando.

Introduo Programao A Janela de Comandos pode ser limpa atravs do comando clc, ou atravs da opo Clear Command Window no menu Edit, tendo-se assim acesso a uma janela de comandos com apenas um prompt no incio da janela. De notar que no entanto, o comando no altera o que foi executado anteriormente. Por exemplo, se foram declaradas variveis antes do comando clc, elas continuam existindo aps esse comando e podem ser utilizadas. 1.1.2 EDITOR DE CDIGO FICHEIROS M Embora todos os comandos do Matlab possam ser executados na Janela de Comandos, no conveniente utiliz-la quando, pretendemos executar comandos em srie, e fundamentalmente, quando esses comandos estiverem encadeados logicamente entre si, ou seja, quando constiturem um programa. Como vimos no ponto anterior os programas Matlab so gravados como ficheiros-M. Estes ficheiros de comandos designados por ficheiros-M so criados num editor de cdigo incorporado no Matlab. Quando o ficheiro chamado, os comandos vo sendo executados pela ordem em que esto listados no ficheiro. Existem dois tipos de ficheiros-M: scripts e funes. Os scripts so simplesmente uma coleco de comandos Matlab, sendo as variveis utilizadas globais, o que significa que so acessveis no ambiente de trabalho Matlab mesmo aps a sua execuo, ou seja, podem ser utilizadas ou ter o seu valor modificado a qualquer momento por uma aplicao que faa uso delas. As funes aceitam argumentos de entrada e retornam valores de sada depois da sua execuo. As variveis utilizadas so internas prpria funo, o que significa que no so reconhecidas no ambiente de trabalho Matlab. Para executar um programa basta digitar o respectivo nome na Janela de Comandos, ou, ento clicando no cone Run. Mas antes disso, o utilizador deve-se certificar que o Matlab consegue encontrar o caminho onde est o ficheiro; para tal, o utilizador deve seleccionar a directoria na janela Current Directory, ou digitando o comando cd seguido do caminho onde se encontra a directoria. A qualquer momento pode-se interromper a execuo do cdigo, pressionando as teclas CTRL + C. O editor de cdigo permite tambm a depurao (debug) de ficheiros-M. O debugger permite identificar possveis erros no cdigo do programa. 1.2 OPERAES ARITMTICAS COM ESCALARES Neste ponto estuda-se apenas as operaes aritmticas com escalares (nmeros). Os nmeros podem ser usados directamente em clculos aritmticos (como numa calculadora) ou ento podem ser atribudos s variveis a serem utilizadas em clculos futuros. As operaes aritmticas so efectuadas recorrendo aos smbolos apresentados na tabela seguinte: Operao Exponenciao Multiplicao Diviso direita Smbolo ^ * / Exemplo 6^5 6*5 6/5 Precedncia 1 (Mais alta) 2 2

Introduo Programao Diviso esquerda Adio Subtraco \ + 6\5 = 5/6 6+5 6-5 2 3 3

De notar que os smbolos, exceptuando o da diviso esquerda, so os mesmos utilizados na maioria das calculadoras. Em se tratando de escalares, a diviso esquerda a operao inversa da diviso direita. Quando se escrever uma expresso aritmtica dever-se- ter em ateno, as precedncias das vrias operaes que constituem a referida expresso, tal como definido na tabela acima. A exponenciao a operao de maior precedncia seguindo-se as operaes de multiplicao e diviso e, por ltimo, as operaes de adio e subtraco. Se duas ou mais operaes tiverem a mesma precedncia, a operao mais esquerda ser executada primeiro. Tal como nas calculadoras, estas precedncias podem ser alteradas recorrendo a parntesis, j que, as expresses dentro dos parntesis so calculadas primeiro. 1.3 FORMATO DE SADA O utilizador pode controlar o formato numrico dos dados de sada atravs do comando format, que afecta somente o modo como os dados so mostrados, e no como o Matlab calcula e salva os nmeros (o Matlab efectua todas as operaes em dupla preciso). O formato padro de sada para os valores numricos o ponto fixo com quatro dgitos decimais (denominado short). Porm, se todos os elementos da matriz so inteiros exactos, a matriz mostrada num formato sem qualquer ponto decimal. Uma vez digitado um comando format, todos os resultados exibidos no ecr seguem esse formato. Os formatos mais utilizados esto descritos na tabela abaixo: Comando format short Descrio Notao em ponto fixo com 4 dgitos decimais para: 0.001nmero1000. Caso contrrio, o formato short e. format long Notao em ponto fixo com 14 dgitos decimais para: 0.001nmero100. Caso contrrio, o formato long e. format short e Notao cientfica com 4 dgitos decimais. format long e format short g Notao cientfica dgitos decimais. com 15 Exemplo >> 826/9 ans = 91.7778 >> 826/9 ans = 91.77777777777777 >> 826/9 ans = 9.1778e+001 >> 826/9 ans = 9.177777777777777e+001 >> 826/9 ans = 91.778 >> 826/9

format long g

escolhido o melhor formato em 5 dgitos, entre a notao de ponto fixo ou ponto flutuante (cientfica). escolhido o melhor formato

Introduo Programao em 15 dgitos, entre a notao de ans = ponto fixo ou ponto flutuante (cientfica). 91.7777777777778 Dois dgitos decimais. >> 826/9 ans = 91.78 Elimina espaos para permitir que mais linhas de informao sejam mostradas no ecr. Adiciona espaos entre linhas (oposto ao format compact) Fraco >> 0.3 ans = 3/10

format bank format compact format loose Format rat

1.4 VARIVEIS As declaraes no Matlab so na maior parte dos casos da forma >> Nome_varivel = expresso ou simplesmente, >> expresso As expresses so compostas de operadores e outros caracteres especiais, de funes e dos nomes das variveis. A avaliao das expresses produz matrizes, que so ento mostradas no ecr e atribudas s variveis para utilizao futura. Se o nome da varivel e o sinal de igualdade (=) so omitidos, a varivel com o nome ans (da palavra answer, em portugus resposta), automaticamente criada. Uma varivel um nome formado por uma letra ou por uma cadeia de letras e nmeros, ao qual atribudo um valor. Uma vez atribudo um valor numrico varivel, podemos us-la em expresses matemticas, em funes, e comandos do Matlab. Quando uma varivel declarada, o Matlab reserva um espao de memria onde o valor da varivel armazenado. Quando se utiliza uma varivel, o seu valor passado automaticamente ao comando que faz uso dela; se for atribudo um novo valor varivel, o contedo do espao de memria substitudo. Os nomes das variveis podem conter letras, nmeros e o smbolo sublinhar (underscore) at a um mximo de 63 caracteres, e tm obrigatoriamente de comear por uma letra. O Matlab uma linguagem case sensitive, ou seja, faz distino entre letras maisculas e minsculas; assim a e A so variveis diferentes. De notar, que no Matlab todas as funes devem ser escritas em minsculas; inv(A) calcula a inversa da matriz A, enquanto que Inv(A) uma funo indefinida. Ao inicializar o Matlab algumas variveis so predefinidas, como por exemplo: pi Designa a constante matemtica ; realmin e realmax Designam o menor e o maior nmero com que se pode trabalhar ;

Introduo Programao

10

nargin e nargout Designam o nmero de argumentos de entrada e de sada de uma funo ; inf Representa + ; NaN (Not a Number) Usado quando o Matlab no pode determinar um valor numrico vlido, como por exemplo 0/0 ; ans Varivel que assume o valor da ltima expresso no atribuda a uma varivel especificada. Se o utilizador no atribui o valor de uma expresso a uma varivel, o Matlab armazena, automaticamente, o resultado a ans; eps A menor diferena entre dois nmeros. Equivale a 2.2204e-016; i Definido como -1, isto 0 + 1.0000i; j O mesmo que i. As variveis predefinidas podem ser redefinidas a qualquer momento, mas recomendado que as variveis pi, eps e inf no sejam redefinidas, porque muitas aplicaes fazem uso delas. Outras variveis, como i e j, so s vezes redefinidas quando os nmeros complexos no esto envolvidos. Deve-se tambm evitar utilizar nomes de funes predefinidas do Matlab para denominar variveis (por exemplo: sin, cos, sqrt, exp, etc), j que uma vez que o nome de uma funo utilizada para definir uma varivel, ento essa funo no pode mais tarde ser utilizada. De seguida descrevem-se alguns comandos teis no trabalho com variveis; so utilizados para eliminar variveis ou obter informao relativamente s variveis declaradas numa sesso: clear Apaga da memria todas as variveis e funes; clear x y z Apaga da memria as variveis x, y e z; who Lista no ecr todas as variveis activas; whos Lista no ecr todas as variveis declaradas, com o respectivo tamanho em bytes e a classe de armazenamento; save O comando save salva todas as variveis declaradas na directoria corrente de trabalho, num ficheiro chamado matlab.mat. O comando save nome_de_ficheiro armazena todas as variveis declaradas na directoria corrente de trabalho no ficheiro nome_de_ficheiro .mat. Para salvar noutra directoria, deve-se colocar o caminho total (pathname) no nome_de_ficheiro; load O comando load carrega no espao de trabalho todas as variveis guardadas no ficheiro matlab.mat com o comando save; o comando load nome_de_ficheiro carrega no espao de trabalho todas as variveis guardadas no ficheiro nome_de_ficheiro .mat, com o comando save nome_de_ficheiro; quit Fecha a sesso do Matlab. 1.4.1 ESCRITA DE VARIVEIS A impresso do valor de variveis na linha de comandos, pode ser feita com a funo disp. Quando usada na forma disp(x), o Matlab escreve o valor da varivel sem mostrar o seu nome. De seguida mostra-se um exemplo em que so

Introduo Programao

11

mostradas as sadas aps a declarao da varivel x, e aps a utilizao da funo disp.

>> x=6 x= 6 >> disp(x) 6 >> Esta funo tambm usada para escrever texto, mostrando uma sequncia de caracteres entre plicas (string). Mostra-se um exemplo a seguir: >> disp('O valor da varivel x '),x O valor da varivel x x= 6 >> Para alm desta funo, o Matlab tem outra funo de escrita de variveis, que permite um melhor controlo na formatao dos dados - a funo fprintf - que ser estudada no ponto 4. 1.5 FUNES ELEMENTARES Alm das operaes aritmticas bsicas referidas no ponto 1.2 as expresses podem incluir funes. O Matlab possui um grande nmero de funes originais que no podem ser alteradas pelo utilizador. Outras funes esto disponveis em bibliotecas externas, que so ficheiros com extenso .m criados a partir das funes originais. Uma funo composta por um nome e por um argumento entre parntesis. O argumento de uma funo pode ser um nmero, uma varivel ou uma expresso composta de nmeros e/ou variveis. Funes tambm podem ser includas no argumento de outras funes, assim como em expresses. De seguida vamos estudar algumas funes originais elementares do Matlab, utilizadas mais usualmente divididas em trs grupos: funes matemticas elementares, funes trigonomtricas e de arredondamento. Funes matemticas elementares Funo sqrt (x) Descrio Raz quadrada Exemplo >> sqrt (24) ans = 4.8990

Introduo Programao realsqrt (x) Raz quadrada, mas produz erro se o argumento negativo. >> realsqrt(-4) ??? Error using ==> realsqrt Realsqrt produces complex result. >> exp(3) ans = 20.0855 >> log(100) ans = 4.6052 >> log10(100) ans = 2 >> log2 (100) ans = 6.6439 >> factorial(6) ans = 720 >> nthroot(1000,3) ans = 10 >> abs (-150) ans = 150 >> x=3 ; y=2 ; >> z=complex(x,y) z= 3.0000 + 2.0000i >> x = 5+2i ; >> real (x) ans = 5 >> x = 5+2i ; >> imag (x) ans = 2 >> x = 5+2i ; >> conj (x) ans = 5.0000 - 2.0000i

12

exp (x) log (x) log10 (x) log 2 (x) factorial (x) nthroot(x,n ) abs (x) complex (x,y) real (x)

Exponencial Logaritmo natural (neperiano) Logaritmo na base 10 Logaritmo na base 2 Factorial N-sima raz de x, ou seja, x; x e n so reais, mas se x<0 ento n ter que ser inteiro e mpar. Valor absoluto (mdulo) Define nmero complexo.

Parte real complexo.

de

um

nmero

imag (x)

Parte imaginria de um nmero complexo. Conjugado complexo. de um nmero

conj (x)

Funes trigonomtricas elementares Funo sin (x) Descrio Seno de x (x em radianos); se fizer sind (x) ento x em graus. Exemplo >> sind (90) ans =

Introduo Programao 1 >> cosd (90) ans = 0 >> tand (180) ans = 0 >> secd (180) ans = -1 >> asind (1) ans = 90

13

cos (x) tan (x)

Co-seno de x (x em radianos); se fizer cosd (x) ento x em graus. Tangente de x (x em radianos); se fizer tand (x) ento x em graus.

sec (x), csc Secante, Co-secante e Co(x), cot (x) tangente de x (x em radianos); se fizer secd (x), cscd (x) ou cotd (x) ento x em graus. asin (x), Arco seno, Arco co-seno e Arco acos (x), atan tangente; se fizer asind (x), acosd (x) (x), atand (x) ento o ngulo respectivo em graus. Funes de arredondamento elementares Funo round (x) fix (x) ceil (x) Descrio Arredonda para o nmero inteiro mais prximo. Truncatura de x Arredonda para o menor inteiro >= x.

floor (x)

Arredonda para o maior inteiro <=x.

rem (x,y) mod (x,y)

Retorna o resto da diviso de x por y. Mdulo da diviso inteira. igual a x n*y com n = floor (x/y). Quando x e y tm o mesmo sinal igual a rem (x,y) Sinal de x. Se x>0 toma o valor 1; se x=0 toma o valor 0, e se x<1 toma o valor -1.

sign (x)

Exemplo >> round (53.5) ans = 54 >> fix (53.5) ans = 53 > ceil (53.5) ans = 54 >> ceil (-53.5) ans = -53 >> floor (53.5) ans = 53 >> floor (-53.5) ans = -54 >> rem (10,3) ans = 1 >> mod(10,-3) ans = -2 >> mod(-10,3) ans = 2 >> y=-50; >> sign(y) ans =

Introduo Programao -1

14

1.6 AJUDA O Matlab disponibiliza informao de ajuda sobre a maior parte dos tpicos, e pode ser acedida pela Janela de Ajuda, atravs das funes de ajuda e atravs de muitos outros recursos que a Mathworks (Matlab helpdesk) apresenta. A janela de ajuda apresentada na figura Figura 1.3, pode ser acedida atravs do comando helpdesk ou atravs do menu Start -> Help. Nesta janela encontra-se informao detalhada diversa, nomeadamente sobre a instalao do Matlab, e sobre as vrias funes, toolboxes e funcionalidades do Matlab.

FIGURA 1.3 A Janela de Ajuda O comando help fornece a lista de tpicos disponveis. Contudo, quando executado na forma help <funo>, apresenta na Janela de Comandos informao detalhada sobre a funo em causa. Por exemplo, o exemplo apresentado a seguir apresenta a informao apresentada para a funo line. >> help line LINE Create line.

Introduo Programao LINE(X,Y) adds the line in vectors X and Y to the current axes. If X and Y are matrices the same size, one line per column is added. LINE(X,Y,Z) creates lines in 3-D coordinates. LINE returns a column vector of handles to LINE objects, one handle per line. LINEs are children of AXES objects. The X,Y pair (X,Y,Z triple for 3-D) can be followed by parameter/value pairs to specify additional properties of the lines. The X,Y pair (X,Y,Z triple for 3-D) can be omitted entirely, and all properties specified using parameter/value pairs. Execute GET(H), where H is a line handle, to see a list of line object properties and their current values. Execute SET(H) to see a list of line object properties and legal property values.

15

See also <a href="matlab:help patch">patch</a>, <a href="matlab:help text">text</a>, <a href="matlab:help plot">plot</a>, <a href="matlab:help plot3">plot3</a>. Reference page in Help browser <a href="matlab:doc line">doc line</a> O comando doc uma alternativa ao comando help mas apresenta a informao na Janela de Ajuda. O comando helpwin abre uma nova janela prpria de ajuda para navegao, onde se poder seleccionar o tpico de que pretende obter ajuda. O comando lookfor <palavra> , procura uma determinada palavra em todos os ficheiros-M do Matlab na linha H1, que corresponde primeira linha de comentrios de uma determinada funo.

Introduo Programao

16

2. MATRIZES (ARRAYS) Todas as variveis em Matlab so matrizes. Uma matriz uma lista de valores organizados em linhas e/ou colunas; a matriz mais simples (unidimensional) formada por uma linha ou por uma coluna, tambm denominadas vectores. As operaes estudadas no ponto anterior envolveram variveis escalares, que so tratadas em Matlab como matrizes especiais de dimenso 1 x 1, ou seja matrizes de uma linha por uma coluna. Consoante o nmero de linhas e colunas pode-se falar em diversos tipos de matrizes. Uma matriz m x n uma tabela de valores dispostos em m linhas por n colunas. Quando uma matriz possui apenas uma nica linha (m=1) denomina-se vector linha, e se tem apenas uma nica coluna designa-se por vector coluna. As matrizes podem ser introduzidas em Matlab de diferentes maneiras: - digitadas na Janela de Comandos; - geradas por comandos e funes; - criadas em ficheiros-Matlab; - carregadas a partir de um ficheiro de dados externo. 2.1 VECTORES Como se estudou no ponto anterior, um vector uma matriz com uma nica linha (vector linha) ou com uma nica coluna (vector coluna). Em Matlab a forma mais simples de criar um vector, utilizar o operador de concatenao ( [ ] ) digitando os seus elementos entre parntesis rectos. No caso de um vector linha, os seus elementos esto separados por um espao ou por uma vrgula; no caso de um vector coluna, os seus elementos esto separados por um ponto e vrgula ou ento dever-se- pressionar a tecla ENTER aps digitar cada elemento. No exemplo seguinte, mostram-se diferentes formas de definir o vector x; as duas primeiras como vectores linha, e as outras duas como vectores coluna. >> x = [1 3 5 7 9] x= 1 3 5 7 >> x = [1,3,5,7,9] x= 1 3 5 7 >> x = [1;3;5;7;9] x= 1 3 5 7 9 >> x = [1 3 5

9 9

Introduo Programao 7 9] x= 1 3 5 7 9 >>

17

Um elemento de um vector identificado pelo seu ndice colocado entre parntesis curvos ( ) . No exemplo anterior x(3) = 5. A instruo end referencia o ltimo ndice de um vector. No exemplo seguinte exemplifica-se a referencia ao ltimo e penltimo elementos do vector x. >> x = [1 3 5 7 9] x= 1 3 5 7 >> x(end) ans = 9 >> x(end-1) ans = 7 >>

No caso especial de vectores com elementos espaados de um valor constante pode-se utilizar a notao [m:n:p], em que m o primeiro elemento, p o ltimo elemento e n o incremento constante. Neste caso os parntesis so opcionais. Quando se omite o valor de n o sistema assume que o incremento 1. Se os valores de m, n e p so tais que o valor de p no pode ser obtido, ento (sendo p positivo) o ltimo elemento do vector ser o ltimo nmero que no exceder o valor de p. >> x = [1:2:11] x= 1 3 5 7 9 11 >> y = [1:7] y= 1 2 3 4 5 6 >> y = [1:-2:-7] y= 1 -1 -3 -5 -7 >>

Introduo Programao

18

O Matlab possibilita a criao de um vector especificando o primeiro elemento xi, o ltimo elemento xf e o nmero de elementos n, por meio do comando linspace. A notao utilizada linspace (xi, xf, n). >> vector = linspace(0, 100, 11) vector = 0 10 20 30 40 50 60 70 80 90 100 >>

2.2 MATRIZES BIDIMENSIONAIS Uma matriz possui elementos dispostos em linhas e colunas. So muitas vezes utilizadas para armazenar informao na forma de uma tabela de nmeros ou strings. Alm disso, exercem um papel importante na lgebra linear e so usadas em engenharia e em outras cincias para descrever muitas grandezas fsicas. Uma matriz m x n uma matriz com m linhas e n colunas, e em que m por n o tamanho (ou dimenso) da matriz. Uma matriz com m igual a n designa-se por matriz quadrada. A forma mais simples de definir uma matriz escrever as diferentes linhas da matriz separadas por ponto e vrgula. Por sua vez, as linhas devem obedecer s regras definidas no ponto anterior para os vectores linha, ou seja, separando os diferentes elementos por espaos ou vrgulas. O seguinte exemplo mostra a definio da seguinte matriz 4 x 3. 1 2 3 4 5 6 7 8 9 10 11 12 ( matriz 4 x 3 )

>> x = [1 2 3;4 5 6;7 8 9;10 11 12] x= 1 2 3 4 5 6 7 8 9 10 11 12 >> Tambm se poderia definir a matriz separando as linhas consecutivas com a tecla ENTER. >> x = [1 2 3 456 789 10 11 12]

Introduo Programao x= 1 4 7 10 >>

19

2 3 5 6 8 9 11 12

Os elementos de uma matriz podem ser nmeros ou expresses matemticas (constitudas por nmeros, variveis e funes), mas todas as linhas tm que possuir a mesma quantidade de elementos. O Matlab exibe no ecr uma mensagem de erro, caso seja feita uma declarao incompleta da matriz. De seguida mostra-se um exemplo de uma matriz com elementos constitudos por expresses matemticas. >> x = [a b*c cosd(90); b^3 sqrt(c) 28] x= 6.7000 150.0000 0 125.0000 5.4772 28.0000 As linhas duma matriz tambm podem ser geradas por meio do comando linspace ou por meio da notao de criao de vectores com incremento constante estudados no ponto anterior. Por exemplo, >> x = [linspace(5,35,4); 1:3:10 ;10 20 30 40] x= 5 15 25 35 1 4 7 10 10 20 30 40 >> As funes internas zeros(m,n), ones(m,n) e eye(n) criam matrizes especiais: - A funo zeros(m,n) cria uma matriz com m linhas e n colunas preenchida com zeros; - A funo ones(m,n) cria uma matriz com m linhas e n colunas preenchida com o elemento um; - A funo eye(n) cria uma matriz quadrada com n linhas e n colunas cujos elementos da diagonal principal so iguais a 1 e os restantes elementos so zeros. >> x = zeros(5,6) x= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> y = ones(5,6)

0 0 0 0 0

0 0 0 0 0

Introduo Programao y= 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >> z = eye(5) z= 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 >>

20

1 1 1 1 1 0 0 0 1 0

1 1 1 1 1 0 0 0 0 1

1 1 1 1 1

As funes zeros e ones apresentam tambm a hiptese de utilizar apenas um argumento: neste caso zeros(m) cria uma matriz quadrada m x m de zeros, e ones(m) cria uma matriz quadrada m x m de elementos iguais a 1. 2.3 MANIPULAO DE MATRIZES Uma matriz possui elementos dispostos em linhas e colunas. Um elemento identificado especificando o nmero da linha e da coluna que ocupa na matriz. Por exemplo, X(3,4) faz referncia ao elemento na linha 3 e coluna 4 da matriz X. Por outro lado, possvel modificar o valor de um elemento da matriz atribuindolhe um novo valor. Igualmente, os elementos da matriz podem ser usados como variveis em expresses e funes matemticas. De seguida apresentam-se alguns exemplos. >> A = [1 2 3; 4 5 6; 7 8 9] A= 1 2 3 4 5 6 7 8 9 >> A (2,3) ans = 6 >> A (3,1) = 20 A= 1 2 3 4 5 6 20 8 9 >> A (2,2) - A (3,2) ans = -3 >>

Introduo Programao

21

Podemos usar dois pontos ( : ) para referenciar uma gama de elementos dentro de um vector ou matriz. No caso de um vector, por exemplo x (m:n) referencia todos os elementos entre as posies m e n do vector x. >> x = [2 -3 5 8 3 45 64] x= 2 -3 5 8 3 45 >> y = x(3:6) y= 5 8 3 45 >>

64

No caso de uma matriz, podemos considerar os seguintes casos: A (:,n) referencia os elementos da matriz A em todas as linhas da coluna n. A (n,:) referencia os elementos da matriz A em todas as colunas da linha n. A (:,m:n) referencia os elementos da matriz A em todas as linhas entre as colunas m e n. A (m:n,:) referencia os elementos da matriz A em todas as colunas entre as linhas m e n. A (m:n,p:q) referencia os elementos da matriz A entre as linhas m e n e as colunas p e q. >> A=[25 46 5 32 2 9; 31 6 7 98 1 76; 4 87 21 8 6 11; 34 9 3 45 89 -53; 6 33 7 -54 12 2] A= 25 46 5 32 2 9 31 6 7 98 1 76 4 87 21 8 6 11 34 9 3 45 89 -53 6 33 7 -54 12 2 >> B = A (:,4) B= 32 98 8 45 -54 >> C = A (1,:) C= 25 46 5 32 2 9 >> D = A (:,3:5) D= 5 32 2 7 98 1 21 8 6

Introduo Programao 3 45 89 7 -54 12 >> E = A(2:4,3:6) E= 7 98 1 76 21 8 6 11 3 45 89 -53 >>

22

No exemplo anterior foram criados novos vectores e matrizes a partir de uma matriz previamente declarada, usando-se um conjunto de elementos ou um grupo de elementos dessa matriz. No entanto, possvel seleccionar elementos especficos (linhas e/ou colunas) de variveis previamente declaradas para criar novas variveis. Isto pode ser feito digitando os elementos das linhas (colunas) dentro de parntesis rectos ( [ ] ), como se mostra nos exemplos seguintes: > x = 5:4:41 x= 5 9 13 17 21 25 29 33 37 41 >> y = x([2,4,6:9]) y= 9 17 25 29 33 37 >> A = [2:3:20;ones(1,7);1:2:13;zeros(1,7)] A= 2 5 8 11 14 17 20 1 1 1 1 1 1 1 1 3 5 7 9 11 13 0 0 0 0 0 0 0 >> B = A([1,3],[1,3,5:7]) B= 2 8 14 17 20 1 5 9 11 13 >>

2.3.1 JUNO DE ELEMENTOS Uma varivel do tipo vector ou matriz pode ser modificada pela adio de elementos. Um vector (matriz com uma nica linha ou coluna) pode ser modificado acrescentando novos elementos ou, ento, pode ter a sua dimenso acrescida, ou seja, transformando-se numa matriz bidimensional. Alm disso, linhas e/ou colunas podem ser adicionadas a uma matriz para obter uma matriz de tamanho diferente. O acrscimo de elementos pode ser realizado simplesmente por atribuio de valores aos elementos que se deseja adicionar ou por juno de elementos pertencentes a alguma varivel previamente declarada. No caso de um vector se um vector possui 5 elementos, podemos aument-lo atribuindo valores aos elementos 6, 7, e assim por diante. Se por exemplo, um vector

Introduo Programao

23

possui n elementos e um novo valor atribudo ao elemento cuja referncia n+2, o Matlab atribui o valor zero ao elemento n+1, ou seja, de um modo geral o Matlab atribui zeros aos elementos posicionados entre o ltimo elemento original e o novo elemento terminal do vector. Alguns exemplos so mostrados a seguir. >> x = 1:5 x= 1 2 3 4 5 >> x(6:10) = 10:8:42 x= 1 2 3 4 5 10 >> y = [1 2 3] y= 1 2 3 >> y(7) = 4 y= 1 2 3 0 0 0 >> w (4) = 10 w= 0 0 0 10 >>

18 26 34

42

Os elementos tambm podem ser adicionados por meio da anexao de vectores j declarados. Por exemplo: >> x = 1:5 x= 1 2 3 >> y = 6:10 y= 6 7 8 >> z = [x y] z= 1 2 3 >> z = [x;y] z= 1 2 3 6 7 8 >>

9 10 4 5 6 7 8 9 10

4 5 9 10

No caso das matrizes, linhas e/ou colunas podem ser inseridas numa matriz previamente definida, atribuindo valores aos novos elementos e juntando-os matriz existente. Neste caso necessrio algum cuidado, j que o tamanho das linhas ou colunas adicionadas, deve estar de acordo com a definio da matriz original. Alguns exemplos:

Introduo Programao

24

>> A = [1 2 3 4 5; 6 7 8 9 10] A= 1 2 3 4 5 6 7 8 9 10 >> A(3,:) = [11 12 13 14 15] A= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 >> B = eye(3) B= 1 0 0 0 1 0 0 0 1 >> C = [A B] C= 1 2 3 4 5 1 0 6 7 8 9 10 0 1 11 12 13 14 15 0 0 >>

0 0 1

Se uma matriz possui a dimenso m x n, e um novo elemento inserido numa posio de referncia superior ao seu tamanho, o Matlab aumenta o tamanho da referida matriz de modo a incluir esse novo elemento. Neste caso, tal como nos vectores, aos elementos que foram automaticamente adicionados -lhes atribudo o valor zero. >> A = [1 2 3;4 5 6;7 8 9] A= 1 2 3 4 5 6 7 8 9 >> A(6,5) = 34 A= 1 2 3 0 0 4 5 6 0 0 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 >> B(3,5) = -56 B= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -56 >>

Introduo Programao

25

2.3.2 ELIMINAO DE ELEMENTOS Pode-se apagar um elemento ou um conjunto de elementos num vector ou numa matriz, atribuindo o vazio a esse elemento ou conjunto de elementos utilizando parntesis rectos sem nenhum caracter entre eles. Ao apagar elementos, podemos eventualmente redefinir uma matriz num vector e um vector num escalar. De seguida apresentam-se alguns exemplos: >> x = 1:3:28 x= 1 4 7 10 13 16 19 22 25 28 >> x(6) = [] x= 1 4 7 10 13 19 22 25 28 >> x(4:7) = [] x= 1 4 7 25 28 >> A = [1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20] A= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >> A(:,2:4) = [] A= 1 5 6 10 11 15 16 20 >>

2.3.3 FUNES PARA MANIPULAO DE MATRIZES O Matlab possui muitas funes pr-definidas para gesto e manipulao de matrizes. Algumas das mais importantes so listadas a seguir: Funo size (A) Descrio Devolve o tamanho da matriz Exemplo
>> A=[1 2 3 4 5 6; 7 8 9 10 11 12] A= 1 2 3 4 5 6 7 8 9 10 11 12 >> size (A) ans =

Introduo Programao

26

length (A)

Devolve o comprimento de um vector.

numel (A)

Devolve o nmero de elementos da matriz.

reshape(A,m, n)

Rearranja uma matriz com r linhas e s colunas para m linhas e n colunas. De notar que o produto r x s deve ser igual ao produto m x n

2 6 >> A=[1 3 5 7 9] A= 1 3 5 7 9 >> length (A) ans = 5 >> A=[1 2 3 4 5 6; 7 8 9 10 11 12] A= 1 2 3 4 5 6 7 8 9 10 11 12 >> numel (A) ans = 12 >> A A= 1 2 3 4 5 6 7 8 9 10 11 12 >> reshape (A,3,4) ans = 1 8 4 11 7 3 10 6 2 9 5 12

diag (x)

Quando x um vector, cria uma matriz quadrada contendo os elementos de x na diagonal principal

>> x=[1 2 3 4] x= 1 2 3 >> diag(x) ans = 1 0 0 0 2 0 0 0 3 0 0 0

4 0 0 0 4

diag (A)

>> A=[1 2 3 4;5 6 7 8;9 Quando A uma matriz, cria um vector coluna a partir dos elementos 10 11 12] A= na diagonal principal 1 2 3 4 5 6 7 8 9 10 11 12 >> diag(A) ans = 1 6 11

2.3.4 MATRIZ TRANSPOSTA

Introduo Programao

27

O smbolo transforma um vector linha em vector coluna e viceversa um vector coluna em vector linha. >> x = [1 2 3] x= 1 2 3 >> y = x' y= 1 2 3 >> A = [1 2 3;4 5 6;7 8 9] A= 1 2 3 4 5 6 7 8 9 >> B = A' B= 1 4 7 2 5 8 3 6 9 >>

2.4 CADEIAS DE CARACTERES (STRINGS) E VARIVEIS TIPO STRING Uma string uma sequncia ordenada de caracteres, e representada no Matlab na forma de um vector linha de caracteres. A forma mais simples de criar uma string por atribuio directa de valor a uma varivel, sendo a string uma sequncia de caracteres entre aspas simples ( ). No exemplo seguinte criada a string Introduo Programao, que atribuda varivel cadeira. >> cadeira = ' Introduo Programao ' cadeira = Introduo Programao >> whos Name Size Bytes Class cadeira 1x26 52 char array

Grand total is 26 elements using 52 bytes

Introduo Programao

28

Uma string pode conter letras, nmeros, espaos e outros smbolos. As aspas simples ( ) tambm podem ser usadas dentro de strings; para isso, so necessrias duas aspas dentro da string, para que o Matlab interprete como uma nica aspa. Quando uma string est a ser digitada, os caracteres aparecem em roxo aps a aspa de abertura da string. Aps fechar a segunda aspa, os caracteres mudam para a cor normal. Quando uma varivel declarada como string, os caracteres que a formam so armazenados na forma de um vector de linhas semelhante ao que foi descrito atrs no ponto 2.1. Cada carcter, incluindo os espaos, um elemento do vector. Significa isto que, uma string de uma linha um vector linha com um nmero de elementos igual quantidade de caracteres contidas na string. Os elementos da string so referenciados pela posio que ocupam no vector. No exemplo seguinte, no vector cadeira o primeiro elemento um espao, e o quinto elemento a letra r. >> cadeira = ' Introduo Programao ' cadeira = Introduo Programao >> cadeira(1) ans = >> cadeira(5) ans = r >> Tal como nos vectores anteriormente estudados tambm possvel modificar elementos da string. No exemplo seguinte, no vector cadeira a palavra Programao substituda por Informtica. >> cadeira = ' Introduo Programao ' cadeira = Introduo Programao >> cadeira(15:25)='Informtica' cadeira = Introduo Informtica >> As matrizes tambm podem conter strings, e tal como foi feito para os nmeros descrito no ponto 2.2, deve-se digitar ponto e vrgula ou pressionar a tecla ENTER no fim de cada linha. Cada linha deve ser tratada como uma string, ou seja, necessrio colocar aspas no incio e no fim de cada uma delas. Neste caso, cada string armazenada numa linha da matriz e os seus caracteres so distribudos pelas colunas correspondentes. Portanto, um vector de strings apenas vlido se todas as strings (linhas) tiverem o mesmo comprimento. Quando se cria um vector de strings por atribuio utilizando o operador de concatenao ( [ ] ),

Introduo Programao

29

necessrio aumentar cada string com espaos at atingir o comprimento da maior string. No exemplo seguinte necessrio introduzir 3 espaos na primeira linha de modo a introduzir compatibilidade na matriz. >> cadeira = ['Introduo ' ' Programao'] cadeira = Introduo Programao >> Uma forma mais fcil de criar vectores de linhas recorrer funo char, que cria um vector de linhas com o mesmo nmero de linhas, a partir de caracteres de entrada com tamanhos diferentes. O Matlab adiciona automaticamente espaos de modo a igualar as linhas menores quela que possuir mais elementos (ou seja, a maior linha da matriz). Na funo char, as linhas devem ser separadas por vrgulas, tal como se demonstra no exemplo seguinte: >> Primeiro_Semestre=char('Introd. Program.','Des. Tcnico','Anlise Mat.') Primeiro_Semestre = Introd. Program. Des. Tcnico Anlise Mat. >>

2.5 OPERAES MATEMTICAS COM MATRIZES No ponto 1.2 foram estudadas as operaes aritmticas elementares com escalares (nmeros), ou seja, com matrizes 1x1. No entanto as matrizes podem ser do tipo vector (uma linha ou uma coluna), ou ainda mais complexas, do tipo bidimensional (matrizes em linhas e coluna) e at mesmo de dimenses maiores. Nestes casos, em que as operaes matemticas se tornam mais complexas, o Matlab dispe de um grande conjunto de funcionalidades concebido para executar operaes muito avanadas com matrizes. Neste ponto, estudam-se as operaes matemticas bsicas que o Matlab realiza ao manipular matrizes. De modo a poder explicar as diferentes operaes matemticas que se tratam nos pontos seguintes sobre vectores e matrizes, considerem-se o seguinte vector genrico x de n elementos

e a matriz A genrica de ordem mxn.

Introduo Programao

30

2.5.1 ADIO E SUBTRACO As operaes de adio ( + ) e subtraco ( - ) de matrizes so efectuadas apenas se as matrizes tm o mesmo tamanho. A adio e subtraco entre duas matrizes realiza-se elemento a elemento, ou seja, obtida adicionando-se ou subtraindo-se, respectivamente, elementos em posies correspondentes nas matrizes. No exemplo seguinte ilustra-se a adio e subtraco entre 2 vectores e 2 matrizes. >> x = [5 8 -4] x= 5 8 -4 >> y = [3 -5 6] y= 3 -5 6 >> x + y ans = 8 3 2 >> x - y ans = 2 13 -10 >> A = [4 -6 10;-2 15 6] A= 4 -6 10 -2 15 6 >> B = [7 14 1;52 -2 8] B= 7 14 1 52 -2 8 >> A + B ans = 11 8 11 50 13 14 >> A - B ans = -3 -20 9 -54 17 -2 >>

Introduo Programao

31

A adio e subtraco tambm so definidas se um dos operadores um escalar, ou seja, uma matriz 1x1. Neste caso, o escalar adicionado ou subtrado de todos os elementos do outro operador. Por exemplo, >> x = [5 8 -4] x= 5 8 -4 >> x - 3 ans = 2 5 -7

2.5.2 MULTIPLICAO A operao de multiplicao ( * ) de matrizes executada pelo Matlab de acordo com as regras da lgebra Linear, pelo que, o nmero de colunas da matriz esquerda do operador de multiplicao igual ao nmero de linhas da matriz direita do operador de multiplicao. Por exemplo, no produto das matrizes A*B o resultado uma matriz que tem o mesmo nmero de linhas da matriz A e o mesmo nmero de colunas da matriz B. No exemplo seguinte, ilustra-se o produto de 2 matrizes e o produto de um vector por uma matriz: >> A = [4 -6 10;-2 15 6] A= 4 -6 10 -2 15 6 >> B = [5 1 10 2;3 -8 -1 4;7 6 -2 9] B= 5 1 10 2 3 -8 -1 4 7 6 -2 9 >> A * B ans = 72 112 26 74 77 -86 -47 110 >> x = [3 7] x= 3 7 >> x * A ans = -2 87 72 >>

Introduo Programao

32

De notar que a multiplicao de matrizes no obedece propriedade comutativa, ou seja, se A e B so matrizes nxn, em geral A*B B*A. Por outro lado, a operao de potenciao s pode ser realizada com matrizes quadradas, j que o produto A*A s pode ser realizado se o nmero de colunas da primeira matriz for igual ao nmero de linhas da segunda matriz. Dois vectores podem ser multiplicados um pelo outro somente se tiverem o mesmo nmero de elementos, e se um deles for um vector linha e o outro for um vector coluna. O resultado da multiplicao de um vector linha por um vector coluna uma matriz 1x1 - ou seja, um escalar e designado produto escalar de dois vectores. O Matlab possui uma funo interna, dot (x,y), que calcula o produto escalar de dois vectores, e em que, os vectores x e y tanto podem ser vectores linha como vectores coluna. A multiplicao de um vector coluna por um vector linha (ambos com n elementos) d uma matriz de tamanho nxn. De seguida mostram-se alguns exemplos que ilustram o que foi dito: >> A = [5 3;1 -6] A= 5 3 1 -6 >> B = [6 2;7 9] B= 6 2 7 9 >> A*B ans = 51 37 -36 -52 >> B*A ans = 32 6 44 -33 >> x = [4 8] x= 4 8 >> y = [5;9] y= 5 9 >> x*y ans = 92 >> y*x ans = 20 40 36 72 >> z = [8 9] z= 8 9

Introduo Programao >> x*z ??? Error using ==> mtimes Inner matrix dimensions must agree. >> dot (x,z) ans = 104 >>

33

Quando uma matriz multiplicada por um escalar (nmero) cada elemento da matriz multiplicado por esse escalar (nmero). >> x =[ 1 2 3] x= 1 2 3 >> 5*x ans = 5 10 15 >> x*5 ans = 5 10 15

2.5.3 DIVISO O Matlab define dois tipos de operadores de diviso: o operador de diviso esquerda ( \ ) e o operador de diviso direita ( / ). O operador de diviso esquerda (\) usado, entre outras coisas, para resolver a equao matricial AX = B, em que X e B so vectores coluna. A equao AX = B, pode ser resolvida multiplicando esquerda ambos os lados da equao pela inversa de A: A-1AX = A-1B O lado esquerdo da equao igual a, A-1AX = IX = X e portanto, a soluo da equao AX = B , X = A-1B, ou usando o operador de diviso esquerda do Matlab : X = A\B. Concluindo, na resoluo da equao AX = B, o Matlab pode usar as duas ltimas equaes: na primeira, o vector X pode ser obtido pela multiplicao da inversa de A (inv (A) ou A-1) pela matriz B; na segunda, obtido pela diviso esquerda de A por B. De seguida obtm-se pelos dois mtodos referidos acima a soluo do seguinte sistema de equaes:

Introduo Programao 2x + 3y + 2z = 1 3x + 4y + z = 3 5x + 4y + z = 2 >> A = [2 3 2;3 4 1;5 4 1] A= 2 3 2 3 4 1 5 4 1 >> B = [1;3;2] B= 1 3 2 >> x = inv(A)*B x= -0.5000 1.4000 -1.1000 >> x = A\B x= -0.5000 1.4000 -1.1000 >>

34

O operador de diviso direita (/) usado, entre outras coisas, para resolver a equao matricial XC = D, em que X e D so vectores linha. A equao XC = D, pode ser resolvida multiplicando direita ambos os lados da equao pela inversa de C: XCC-1 = DC-1 O lado esquerdo da equao igual a, XCC-1 = XI = X e portanto, a soluo da equao XC = D , X = DC-1, ou usando o operador de diviso esquerda do Matlab : X = D/C. De seguida ilustra-se a resoluo do sistema de equaes anterior por meio do operador de diviso direita. >> A = [2 3 5;3 4 4;2 1 1] A=

Introduo Programao 2 3 5 3 4 4 2 1 1 >> C = [2 3 5;3 4 4;2 1 1] C= 2 3 5 3 4 4 2 1 1 >> D =[1 3 2] D= 1 3 2 >> x = D*inv(C) x= -0.5000 1.4000 -1.1000 >> x=D/C x= -0.5000 1.4000 -1.1000 >>

35

2.5.4 EXPONENCIAO A expresso A^p eleva A p-sima potncia, e definida se A uma matriz quadrada e p um escalar. De seguida mostram-se alguns exemplos: >> A = [2 3 5;3 4 -4;2 1 1] A= 2 3 5 3 4 -4 2 1 1 >> A^2 ans = 23 23 3 10 21 -5 9 11 7 >> A*A ans = 23 23 3 10 21 -5 9 11 7 >> A^3 ans = 121 164 26 73 109 -39 65 78 8 >>

Introduo Programao

36

2.5.5 OPERAES ELEMENTO A ELEMENTO Para alm das operaes estudadas anteriormente nos pontos 2.5.2, 2.5.3 e 2.5.4 (denominadas multiplicao, diviso e exponenciao matricial) em que so seguidas rigorosamente as regras da lgebra Linear, o Matlab permite tambm a multiplicao, diviso e exponenciao elemento a elemento. Estas operaes (operaes escalares) s podem ser realizadas com matrizes do mesmo tamanho, e so efectuadas com os elementos que ocupam a mesma posio nas matrizes. So executadas no Matlab, digitando um ponto antes do operador aritmtico, tal como apresentado na tabela seguinte: Operao Multiplicao escalar Diviso escalar direita Diviso escalar esquerda Exponenciao escalar Smb olo .* ./ .\ .^

Mostram-se a seguir exemplos da multiplicao, diviso e exponenciao escalar, envolvendo elementos correspondentes de matrizes: >> A = [2 3 5;3 4 -4;2 1 1] A= 2 3 5 3 4 -4 2 1 1 >> B = [4 -3 1;8 6 -2;1 4 9] B= 4 -3 1 8 6 -2 1 4 9 >> A./B ans = 0.5000 -1.0000 5.0000 0.3750 0.6667 2.0000 2.0000 0.2500 0.1111 >> A.\B ans = 2.0000 -1.0000 0.2000 2.6667 1.5000 0.5000 0.5000 4.0000 9.0000 >> A.^2 ans = 4 9 25 9 16 16 4 1 1 >>

Introduo Programao

37

2.6 FUNES PARA CLCULO DE MATRIZES Na tabela seguinte descrevem-se algumas das funes internas do Matlab mais utilizadas no clculo de matrizes. Funo inv (A) Descrio Calcula a matriz inversa da matriz quadrada A. Exemplo
>> A=[2 3 5;3 4 -4;2 1 1] A= 2 3 5 3 4 -4 2 1 1 >> inv(A) ans = -0.1905 -0.0476 0.7619 0.2619 0.1905 -0.5476 0.1190 -0.0952 0.0238 >> det(A) ans = -42 >> x=[5 -7 8] x= 5 -7 8 >> max(x) ans = 8 >> max(A) ans = 3 4 5 >> [d,n]=max(x) d= 8 n= 3 >> [d,n]=max(A) d= 3 4 5 n= 2 2 1 >> min(x) ans = -7 >> min(A) ans = 2 1 -4 >> [d,n]=min(x) d= -7 n= 2 >> [d,n]=min(A) d=

det (A) max (A)

Calcula o determinante da matriz quadrada A. Se A um vector calcula o maior elemento de A. Se A uma matriz, calcula um vector linha com o maior elemento de cada coluna.

[d,n] = max (A)

min (A)

Se A um vector, d recebe o maior elemento de A e n indica a posio de d no vector A. Se A uma matriz d um vector linha com o maior elemento de cada coluna, e n um vector linha com a posio destes elementos em cada coluna. Se A um vector calcula o menor elemento de A. Se A uma matriz, calcula um vector linha com o menor elemento de cada coluna. Se A um vector, d recebe o menor elemento de A e n indica a posio de d no vector A. Se A uma matriz d um vector linha com o menor

[d,n] = min (A)

Introduo Programao elemento de cada coluna, e n um vector linha com a posio destes elementos em cada coluna. Calcula o produto escalar (interno) dos dois vectores x e y. Os vectores tanto podem ser vector linha como vector coluna, mas tm que ter o mesmo nmero de elementos.
2 n= 1 1 3 -4 2

38

dot (x,y)

sum (x) mean (x) sort (x) median (x) std (x) cross (x,y)

Se x um vector, calcula a soma dos elementos do vector. Se x um vector calcula a mdia aritmtica dos elementos de A. Se x um vector, ordena os elementos de x por ordem crescente. Se x um vector calcula o valor mediano dos elementos de x. Se x um vector calcula o desvio padro dos elementos de x. Determina o produto vectorial (externo) dos 2 vectores, x x y.

>> x=[5 -7 8] x= 5 -7 8 >> y=[4;6;2] y= 4 6 2 >> dot(x,y) ans = -6 >> sum(x) ans = 6 >> mean(x) ans = 2 >> sort(x) ans = -7 5 8 >> median(x) ans = 5 >> std(x) ans = 7.9373 >> x x= 5 -7 8 >> y=[1 4 6] y= 1 4 6 >> cross(x,y) ans = -74 -22 27

Por outro lado, de notar que na execuo das funo internas do Matlab quando o argumento de entrada uma matriz, a operao realizada em cada elemento dessa matriz. O resultado da execuo da funo uma nova matriz, cujos elementos so o resultado da aplicao da funo sobre cada um dos elementos da matriz inicial. A seguir mostra-se a aplicao da funo sind (x), em que x um vector com 5 elementos. O resultado um vector com 5 elementos, resultantes da aplicao da funo sind sobre cada um dos 5 elementos da matriz inicial. >> x=[30 60 -120 45 90] x= 30 60 -120 45 90

Introduo Programao >> sind(x) ans = 0.5000 0.8660 -0.8660 >>

39

0.7071 1.0000

Mostram-se de seguida outros exemplos de execuo de funes, com matrizes como argumentos de entrada: >> A = [4 1 5 9;6 4 1 8] A= 4 1 5 9 6 4 1 8 >> factorial(A) ans = 24 1 120 362880 720 24 1 40320 >> log10(A) ans = 0.6021 0 0.6990 0.9542 0.7782 0.6021 0 0.9031 >> sqrt(A) ans = 2.0000 1.0000 2.2361 3.0000 2.4495 2.0000 1.0000 2.8284 >>

Introduo Programao

40

3. OPERADORES Nos pontos anteriores apresentmos muitos exemplos de operaes matemticas que utilizavam operadores matemticos, que forma estudados com algum detalhe no ponto 1.2. Neste ponto estudam-se os operadores lgicos e relacionais, que permitem a comparao entre operandos, tendo como resultado respostas do tipo verdadeiro ou falso. No caso da comparao entre matrizes, deve-se ter o cuidado de verificar se tm o mesmo tamanho, porque caso contrrio, a operao resulta em erro. Estes operadores so de grande importncia na avaliao de expresses condicionais, para o controlo da ordem de execuo dos comandos Matlab. 3.1 OPERADORES RELACIONAIS Os operadores relacionais comparam expresses numricas ou cadeias de caracteres, sendo o resultado final, do tipo verdadeiro ou falso. Se o resultado verdadeiro o Matlab retorna o valor 1, se falso retorna o valor 0. Na tabela seguinte apresentam-se os operadores relacionais no Matlab: Operador Relacional == ~= > >= < <= Descrio Igual a Diferente de Maior que Maior ou igual que Menor que Menor ou igual que

O resultado da comparao entre 2 escalares, o valor de retorno 1 ou 0. No caso da comparao entre matrizes (vectores ou matrizes), a comparao feita elemento a elemento, e o resultado uma matriz de retorno de uns e zeros, com o mesmo tamanho das matrizes. Se a comparao feita entre um escalar e uma matriz, o escalar comparado com todos os elementos da matriz, tendo como resultado uma matriz de retorno de uns e zeros com o mesmo tamanho da matriz. De seguida apresentam-se alguns exemplos: >> 7>5 ans = 1 >> 7<=5 ans = 0 >> a = 7>5 a= 1 >> x x= 4 1 5 >> 4<=x

Introduo Programao ans = 1 0 1 1 >> A A= 3 5 -2 1 7 9 0 4 >> 4<=A ans = 0 1 0 0 1 1 0 1 >> B = [2 5 6 1;7 -4 0 8] B= 2 5 6 1 7 -4 0 8 >> A~=B ans = 1 0 1 0 0 1 0 1 >> C=A-B>=1 C= 1 0 0 0 0 1 0 0 >>

41

No ltimo exemplo a matriz A subtrada de B, e ento verifica se os elementos (da matriz A-B) so maiores ou iguais a um, constituindo assim a matriz C. Como vimos, o resultado de uma operao relacional entre matrizes uma matriz de uns e zeros chamada matriz lgica (ou vector lgico se tivermos a trabalhar com vectores), que pode ser utilizada no endereamento de outras matrizes. Quando uma matriz lgica (ou vector lgico) utilizado para tais finalidades, extrai da matriz endereada os elementos nas posies onde a matriz lgica (ou vector lgico) tem uns. De seguida apresentam-se alguns exemplos: >> A A= 3 5 -2 7 9 0 >> C=A<=3 C= 1 0 1 0 0 1 >> D = A(C) D= 3 -2 0 1 >> x

1 4 1 0

Introduo Programao x= 4 1 5 >> t=x>=4 t= 1 0 1 >> z = x(t) z= 4 5 9 >>

42

9 1

De notar que, as matrizes lgicas de uns e zeros podem ser utilizadas em operaes aritmticas. Uma vez utilizada em operaes aritmticas, a matriz lgica transforma-se em matriz numrica. >> A A= 3 5 -2 1 7 9 0 4 >> B B= 2 5 6 1 7 -4 0 8 >> (A~=B)/3+(A.*B) ans = 6.3333 25.0000 -11.6667 1.0000 49.0000 -35.6667 0 32.3333 >>

3.2 OPERADORES E FUNES LGICAS Os operadores lgicos podem ser utilizados em expresses matemticas juntamente com operadores aritmticos e relacionais. Os operadores lgicos do Matlab so: Opera dor Lgico & Descrio AND E lgico. Actua em dois operandos, A e B. Se ambos forem verdadeiros, o resultado verdadeiro (1), caso contrrio o resultado falso (0). OR OU lgico. Actua em dois operandos, A e B. Se pelo menos um dos operandos for verdadeiro, o resultado Exemplo
>> (8>7)&(0>-5) ans = 1 >> (10>5)&(4>7) ans = 0 >> (10~=5)|(4>7) ans = 1

Introduo Programao verdadeiro (1), caso contrrio (ambos falsos) o resultado falso (0). ~ NOT NO lgico. Actua num operando A, tendo o valor verdadeiro (1) se o operando for falso, e o valor falso (0) se o operando for verdadeiro.
>> (8<7)|(0<=-5) ans = 0 >> ~ ((10~=5)|(4>7)) ans = 0 >> ~ ((8<7)|(0<=-5)) ans = 1

43

Os operadores lgicos (como os relacionais) tanto actuam em escalares (nmeros) como em matrizes. Quando recebem nmeros como operandos, retornam o valor verdadeiro (1) quando o nmero diferente de zero e retornam o valor falso (0) quando o nmero zero. >> 5&0 ans = 0 >> 5|0 ans = 1 >> ~5 ans = 0 >> ~0 ans = 1 >> Os operadores lgicos AND e OR tanto podem agir em escalares, como em matrizes ou entre um escalar e uma matriz. Se os dois operandos so escalares, o resultado ser um escalar 0 ou 1. Se os dois operandos so matrizes, tm que ter obrigatoriamente o mesmo tamanho e a operao executada elemento a elemento. No caso de um dos operandos ser um escalar e o outro uma matriz, a operao realizada entre o escalar e cada um dos elementos da matriz, resultando numa matriz de uns e zeros com o tamanho da matriz. O operador lgico NOT tem apenas um operando, e quando o operando um escalar o resultado zero ou um; se o operando uma matriz, o resultado uma matriz de zeros e uns, resultante da negao de cada um dos elementos da matriz inicial. De seguida apresentam-se alguns exemplos: >> x = [4 -5 0 10] x= 4 -5 0 10 >> y = [1 0 4 3] y= 1 0 4 3

Introduo Programao >> x&y ans = 1 0 0 1 >> ~x ans = 0 0 1 0 >> 5&x ans = 1 1 0 1 >> ~y ans = 0 1 0 0 >> z = ((5&0)+4+(3|0)) z= 5 >> z = 8*((5&0)+4+(3|0)) z= 40 >>

44

O Matlab tem um conjunto de funes internas que se equivalem aos operadores lgicos AND, OR e NOT: Fun o and (A,B) Descrio Equivalente a A&B Exemplo
>> A=[5 0 1 -4] A= 5 0 1 -4 >> B=[-4 0 13 0] B= -4 0 13 0 >> and(A,B) ans = 1 0 1 0 >> or(A,B) ans = 1 0 1 1 >> not(A) ans = 0 1 0 0

or (A,B) not (A)

Equivalente a A|B Equivalente a ~A

O Matlab possui ainda um outro conjunto de funes lgicas, que retornam um (1) quando a condio que testam verdadeira e zero (0) quando falsa. De seguida listam-se as mais importantes: Funo xor (A,B) Descrio Ou exclusivo. Retorna o valor verdadeiro (1) se os operandos forem desiguais, ou seja, se um for verdadeiro e Exemplo
>> xor(3,0) ans = 1

Introduo Programao o outro for falso. all (A) Retorna o valor verdadeiro (1) se todos os elementos de um vector A forem verdadeiros (diferentes de zero). Retorna falso (0) se um ou mais elementos forem falsos (0). Se A for uma matriz, trata as colunas de A como vectores e retorna um vector de uns e zeros.
>> xor(3,1) ans = 0 >> x=[6 5 -8 1] x= 6 5 -8 1 >> all(x) ans = 1 >> y=[-4 0 5 8] y= -4 0 5 8 >> all(y) ans = 0 >> A=[x;y] A= 6 5 -8 1 -4 0 5 8 >> all(A) ans = 1 0 1 1 > x=[6 0 -8 1] x= 6 0 -8 1 >> any(x) ans = 1 >> y=[0 0 0 0] y= 0 0 0 0 >> any(y) ans = 0 >> x=[6 0 -8 0 5 0 2] x= 6 0 -8 0 5 >> find(x) ans = 1 3 5 >> find(x>1) ans = 1 5 7

45

any (A)

Retorna o valor verdadeiro (1) se qualquer elemento de um vector A for verdadeiro (diferente de zero). Retorna falso (0) se todos os elementos forem falsos (0). Se A for uma matriz, trata as colunas de A como vectores e retorna um vector de uns e zeros.

find (A) find (A>d)

Se A for um vector, retorna os ndices dos elementos diferentes de zero. Neste formato retorna o ndice dos 2 elementos maiores que d. De notar que, semelhana do operador >, qualquer operador relacional pode ser utilizado com a funo find.

A tabela seguinte, designada por tabela de verdade, mostra o resultado da aplicao dos operadores lgicos a duas variveis ou expresses lgicas A e B: ENTRADA A B V V AND A&B V OR A|B V SADA NOT ~A F NOT ~B F XOR xor (A,B) F

Introduo Programao V F F F V F F F F V V F F V V V F V V V F

46

3.3 ORDEM DE PRECEDNCIA As expresses matemticas podem conter simultaneamente operadores aritmticos, lgicos e relacionais. A ordem de precedncia dos operadores define a ordem pela qual uma expresso executada, quando diferentes operadores esto presentes. A ordem de precedncia seguida pelo Matlab : Precedncia 1 (Mais alta) 2 3 4 5 6 7 8 (Mais baixa) Operao Parntesis. Exponenciao. Operador lgico NOT. Multiplicao e diviso. Adio e subtraco Operadores relacionais (>, >=, <, <=, = =, ~=) Operador lgico AND (&). Operador lgico OR (|).

Se duas ou mais operaes tm precedncias diferentes realizada primeiro a operao de precedncia mais alta. Se possuem precedncias iguais, a operao mais esquerda executada primeiro, depois as restantes vo sendo realizadas uma a uma at ao fim seguindo o mesmo princpio. De notar que a precedncia aqui descrita foi adoptada pelo Matlab a partir da verso 6. Em verses anteriores do Matlab o operador lgico AND no precede o operador lgico OR. Em caso de dvida, estes problemas podem ser resolvidos facilmente com a utilizao sistemtica de parntesis, mesmo quando eles no sejam eventualmente necessrios. De seguida apresentam-se alguns exemplos de expresses matemticas, envolvendo parntesis, e operadores aritmticos, lgicos e relacionais: >> 5*4-6^2+8/4 ans = -14 >> 5*(4-6)^2+8/4 ans = 22 >> 4+5^3*6&-2+3+6/~0 ans = 1 >> 5*4*6>=3-10|8~=-2*~7+6\18 ans = 1 >> 5*4*((6>=3)-10|8~=-2*~7+6\18)

Introduo Programao ans = 20 >>

47

Introduo Programao

48

4. INSTRUES DE CONTROLO As instrues so as aces algortmicas elementares que constituem no seu conjunto o corpo principal do programa, e que normalmente, so executadas sequencialmente. Mas por vezes, h a necessidade desta ordem (sequencial) no ser seguida. O Matlab possui instrues que permitem controlar a ordem de execuo das instrues constituintes de um programa: As instrues de seleco if e switch possibilitam a escolha de uma ou vrias instrues para execuo, em funo de uma dada condio se cumprir ou no. As instrues de repetio for e while repetem a execuo de um conjunto de instrues um nmero fixo e predeterminado de vezes, ou at que se verifique uma determinada condio. Por outro lado, a instruo break permite interromper a execuo de um ciclo for ou while. 4.1 INSTRUES DE SELECO Estas estruturas permitem ao Matlab seleccionar instrues para execuo, conforme se verifiquem, ou no, determinadas condies. Podem ser seleccionadas vrias instrues, apenas uma, ou eventualmente nenhuma. 4.1.1 INSTRUO if A forma mais simples de utilizao da instruo if : if Expresso lgica Bloco de Instrues; end Se a expresso lgica de teste for verdadeira so executados os comandos entre if e end; se for falsa, o bloco de instrues entre if e end no executado, seguindo para a instruo a seguir a end. De seguida mostra-se um exemplo da utilizao da instruo if mais simples, em que se a nota introduzida pelo utilizador for superior ou igual a 10 escreve APROVADO: nota = input('Introduza a sua classificao: '); if nota>=9.5 disp('APROVADO'); end O Matlab permite a incluso de uma instruo if dentro de outra instruo if, ou seja, permite que uma instruo seja inicializada e terminada dentro de outra instruo if.
Introduza a sua classificao: 18 APROVADO

Introduo Programao

49

nota = input('Introduza classificao:'); if nota>=9.5 disp('APROVADO') if nota>=16 disp('COM DISTINO') end end

sua

Introduza a sua classificao:17 APROVADO COM DISTINO

Como se v no exemplo anterior, as palavras if e end aparecem no editor do Matlab a azul, e os comandos entre if e end aparecem indentados (alinhados), o que facilita a leitura e organizao do programa. No caso de se pretender executar instrues quando a expresso lgica tiver o valor falso, a estrutura a utilizar if-else-end, que tem a seguinte sintaxe: if Expresso lgica Bloco de Instrues 1 else Bloco de Instrues 2 end Se a expresso lgica de teste for verdadeira, o programa executar o bloco de instrues 1 e depois saltar para o comando end; se for falsa, o programa executar o bloco de instrues 2. De seguida mostra-se um exemplo de aplicao desta estrutura: nota = input('Introduza classificao:'); if nota>=9.5 disp('APROVADO') else disp('REPROVADO') end a sua
Introduza a sua classificao:17 APROVADO Introduza a sua classificao:8 REPROVADO

Finalmente a forma mais geral e completa da instruo if que permite seleccionar um de trs ou mais blocos de instrues, a seguinte: if Expresso lgica 1 Bloco de Instrues 1 elseif Expresso lgica 2 Bloco de Instrues 2 elseif Expresso lgica 3 Bloco de Instrues 3 . else Bloco de Instrues n

Introduo Programao

50

end Se a expresso lgica 1 for verdadeira, o programa executar o bloco de instrues 1 e depois saltar para o comando end; se for falsa, o programa vai testar a expresso lgica 2, e caso seja verdadeira, executar o bloco de instrues 2 e depois saltar para o comando end; se for falsa, o programa vai testar a expresso lgica 3, e caso seja verdadeira, executar o bloco de instrues 3 e depois saltar para o comando end. Se nenhuma das expresses lgicas for verdadeira, o programa executar o bloco de instrues a seguir ao comando else (se existir). De realar que possvel ter vrios comandos elseif numa estrutura if, o que possibilita testar vrias condies com uma nica instruo if. Por outro lado, o comando else opcional. No caso de no existir, e se tivermos vrios elseif na estrutura if, o programa executar o 1 bloco de instrues cuja expresso lgica seja verdadeira, e poder mesmo no executar qualquer comando, se todas as expresses lgicas tiverem o valor falso. De seguida mostra-se um exemplo de aplicao desta estrutura: mbom = 0; bom = 0; suf = 0; rep = 0; nota=input('Introduza a sua classificao:'); if nota>=18 disp('MUITO BOM') mbom = mbom+1 elseif nota>=14 disp('BOM') bom = bom+1 elseif nota>=10 disp('SUFICIENTE') suf = suf+1 else disp('REPROVADO') rep = rep+1 end
Introduza a sua classificao:17 BOM bom = 1

Neste exemplo, as variveis mbom, bom, suf e rep (que pretendem guardar os valores correspondentes ao nmero de alunos com Muito Bom, Bom, Suficiente e Reprovado) so inicializadas com o valor zero, depois solicitado ao utilizador uma nota sendo de seguida visualizado no ecr a classificao correspondente a esta nota, bem como o novo valor da varivel correspondente. 4.1.2 INSTRUO switch-case Esta instruo possibilita a seleco de uma entre muitas possibilidades (casos) a partir do valor de uma varivel ou expresso. A sua sintaxe a seguinte: switch Expresso case Valor 1

Introduo Programao Bloco de Instrues 1 case Valor 2 Bloco de Instrues 2 . otherwise Bloco de Instrues n end

51

Se o valor da expresso igual ao valor 1, o programa executa o bloco de instrues 1, e de seguida salta para o comando end. Do mesmo modo, se o valor da expresso diferente de valor 1 e igual a valor 2, executa o bloco de instrues 2 e depois salta para o comando end. A expresso pode ser um escalar, um carcter, uma string, ou uma expresso lgica. A instruo otherwise (opcional), se existir executada no caso do valor da expresso for diferente das vrias opes existentes valor 1, valor 2, , valor n; se a instruo otherwise no existir e o valor da expresso for diferente das vrias opes existentes, no ser executado nenhum bloco de instrues. De notar que a instruo otherwise na estrutura switch-case equivalente instruo else na estrutura if. De seguida mostra-se um exemplo de aplicao desta instruo: opcao = input('Quer continuar (s/n)?: ','s'); switch opcao case 's' disp('O programa vai continuar') case 'n' disp('O programa vai parar') otherwise disp('Digite ''s'' ou ''n''!!!') end
Quer continuar (s/n)?: n O programa vai parar Quer continuar (s/n)?: t Digite 's' ou 'n'!!!

A instruo switch pode eventualmente ter um ou vrios case com mltiplos valores. Neste caso, a lista de valores devem ser colocadas entre chavetas, tal como se ilustra no exemplo seguinte:

mbom = 0; bom = 0; suf = 0; rep = 0; nota = input('Introduza a sua classificao : '); switch nota case {18,19,20} disp('MUITO BOM') mbom = mbom+1 case {14,15,16,17} disp('BOM')

Introduza a sua classificao : 18 MUITO BOM mbom = 1 Introduza a sua classificao : 7 REPROVADO rep = 1

Introduo Programao bom = bom+1 case {10,11,12,13} disp('SUFICIENTE') suf = suf+1 otherwise disp('REPROVADO') rep = rep+1 end A expresso pode ser uma expresso lgica como se mostra no exemplo seguinte: nota=input('Introduza a sua classificao : '); switch nota>=9.5 case 1 disp('APROVADO') case 0 disp('REPROVADO') end
Introduza a sua classificao : 10 APROVADO Introduza a sua classificao : 9.4 REPROVADO

52

De referir que se houver mais do que um case com um determinado valor repetido, apenas o primeiro ser executado, passando de seguida a execuo do programa para a primeira instruo aps o end. 4.2 INSTRUES DE REPETIO As instrues de repetio permitem que uma ou um grupo de instrues sejam executadas repetidamente em ciclo, estando a respectiva paragem dependente de uma dada condio predeterminada. O Matlab tem dois tipos de ciclo: ciclo for e ciclo while. No ciclo for o nmero de repeties conhecido partida; no ciclo while repete um conjunto de instrues at que uma determinada condio seja satisfeita. Ambos os ciclos podem ser terminados a qualquer momento por meio do comando break. 4.2.1 CICLO for Neste tipo de ciclo uma ou um grupo de instrues repetido um nmero de vezes predeterminado partida. A sua sintaxe : for Varivel = Valor_inicial:Incremento:Valor_final Bloco de Instrues end

Introduo Programao

53

O nome da varivel arbitrrio, no entanto devem ser evitadas as letras i e j se o programa lida com nmeros complexos. Inicialmente a varivel toma o valor_inicial e o Matlab executa todas as instrues entre for e end. De seguida o programa retorna ao comando for, a varivel aumentada do valor incremento e comparada com o valor_final, e caso sejam diferentes, repetida a execuo das instrues entre for e end. Este processo repetido at que o valor_inicial seja igual ao valor_final. O incremento pode ser um nmero negativo, e caso seja omitido assume o valor 1. De notar, que se os valores valor_inicial, incremento e valor_final forem tais, que o valor da varivel no possa atingir valor_final, o ciclo repetido at que: se incremento>0, at ao ltimo valor da varivel menor do que valor_final; se incremento<0, at ao ltimo valor da varivel maior do que valor_final. O valor da varivel no deve ser redefinido dentro de um ciclo. A varivel sai do ciclo com o ltimo valor que lhe atribudo. De seguida mostrase um exemplo simples de aplicao do ciclo for envolvendo escalares, e em que mostrado tambm, o valor com que a varivel sai do ciclo for: t = 45; for p=1:5 t = t+2 end p
t= 47 t= 49 t= 51 t= 53 t= 55 p= 5

O ciclo repetido 5 vezes, assumindo p os valores 1, 2, 3, 4 e 5. Como no foi digitado um ponto e vrgula aps a expresso na terceira linha, os valores de t so exibidos um a um no ecr. No final, mostrado o valor de p no fim do ciclo. Um outro exemplo de utilizao do ciclo for mostrado a seguir no clculo da soma dos inteiros inferiores ao nmero introduzido pelo utilizador: % Inicializao da varivel soma % soma =0 % Valor a calcular pedido ao utilizador % n = input('Qual o valor a calcular ? '); % Clculo da soma utilizando um ciclo for % for i = 1:n soma = soma+i; end % Mostra o valor da soma % disp(soma)
Qual o valor a calcular ? 5 15

Introduo Programao

54

Mostra-se a seguir um exemplo envolvendo matrizes, e mostra os valores de p e da matriz b (soma da matriz a com o escalar p) em cada repetio do ciclo: a = [1 3 5 8 9;7 -6 0 8 4] for p = 1:2:5 p b = a+p end
a= 1 3 5 7 -6 0 p= 1 b= 2 4 6 8 -5 1 p= 3 b= 4 6 8 10 -3 3 p= 5 b= 6 8 10 12 -1 5 8 8 9 4

9 10 9 5

11 12 11 7

13 14 13 9

Para alm da sintaxe habitual o ciclo for pode assumir a forma de um vector com elementos declarados explicitamente. Neste caso, em cada repetio atribudo varivel o valor de um dos elementos do vector, como se mostra no exemplo seguinte: produto=1 for p = [1 5 8 9] p produto = produto*p end
produto = 1 p= 1 produto = 1 p= 5 produto = 5 p= 8 produto = 40 p= 9 produto = 360

4.2.2 CICLO while Esta ciclo repete uma ou um conjunto de instrues enquanto uma determinada condio for verdadeira. til quando se pretende realizar um ciclo, mas

Introduo Programao

55

em que se desconhece previamente o nmero de repeties. A sintaxe desta instruo : while Expresso Bloco de Instrues end O bloco de instrues entre while e end executado repetidamente, enquanto a expresso for verdadeira (1). Aps a execuo do bloco de instrues o programa passa novamente para o comando while onde novamente avaliada a expresso: se for verdadeira (1) executado novamente o bloco de instrues; se for falsa (0), o programa salta para a instruo a seguir instruo end. E assim sucessivamente. De seguida mostra-se um exemplo de aplicao do ciclo while, em que so pedidas a introduo das notas dos alunos de uma turma, considerando-se vlidas, apenas as que tenham valores entre zero e 20 valores. Quando introduzido um valor fora destes limites, o ciclo pra. Por fim, o programa mostra o nmero de alunos e a mdia dos alunos com nota vlida. % Inicializao das variveis num_alunos = 0; soma = 0; media = 0; nota = input ('Qual a classificao ? ') % Ciclo while, em que apenas so vlidas as notas entre zero e 20 valores while ((nota>=0)&(nota<=20)) num_alunos = num_alunos+1 soma = soma+nota media = soma/(num_alunos) nota = input ('Qual a classificao ? ') end % Escreve valores % fprintf(' Foram introduzidos %2.0f alunos com nota vlida\n', num_alunos); fprintf(' A mdia %3.1f valores', media)

No exemplo anterior, a sequncia \n obriga a que a execuo do programa passe para a linha seguinte. A execuo deste programa mostra os seguintes resultados na Janela de Comandos:

Qual a classificao ? 15 nota = 15 num_alunos = 1 soma = 15

Introduo Programao media = 15 Qual a classificao ? 12 nota = 12 num_alunos = 2 soma = 27 media = 13.5000 Qual a classificao ? -1 nota = -1 Foram introduzidos 2 alunos com nota vlida A mdia 13.5 valores>>

56

Se entrada do ciclo a expresso falsa (0), o ciclo no chega a ser executado nenhuma vez. Por outro lado, pelo menos uma das variveis da expresso de teste entrada do ciclo deve ser modificada dentro do ciclo, seno o programa entra em ciclo infinito, e ser necessrio digitar Ctrl+C para parar a execuo do programa. Por vezes h a necessidade de inserir um ciclo ou uma instruo de seleco, dentro de outro ciclo ou instruo de seleco. Neste caso, o ciclo ou a instruo de seleco inicializada e terminada dentro de outro ciclo ou instruo de seleco. O Matlab no coloca limites ao nmero de ciclos ou instrues de seleco que esto encadeados, mas todas as estruturas if, case, for e while nestas situaes devem terminar com o end correspondente. De seguida mostra-se um exemplo de um ciclo for dentro de um ciclo while. Partindo do exemplo mostrado atrs de clculo da soma de n valores, o programa permite nesta verso, que o clculo seja repetido at que o utilizador digite uma tecla que no o S ou s. Por fim e j fora do ciclo, mostrado o nmero de clculos que foram efectuados. % Inicializao da varivel resposta resposta = 's'; num_resp = 0; while ((resposta=='S') | (resposta=='s')) % Inicializao da varivel soma % soma = 0; num_resp = num_resp+1; % Valor a calcular pedido ao utilizador % n = input('Qual o valor a calcular ? '); % Clculo da soma utilizando um ciclo for % for i = 1:n soma = soma+i; end

Introduo Programao

57

% Mostra o valor da soma % fprintf('A soma dos %i elementos %i\n', n,soma); resposta = input('Quer continuar ? (s/n) ','s'); end fprintf('O nmero de clculos foram %i ',num_resp);

A execuo deste programa mostra os seguintes resultados na Janela de Comandos: Qual o valor a calcular ? 6 A soma dos 6 elementos 21 Quer continuar ? (s/n) s Qual o valor a calcular ? 8 A soma dos 8 elementos 36 Quer continuar ? (s/n) n O nmero de clculos foram 2 >> 4.2.3 INSTRUO break Este comando usa-se para terminar a execuo de um ciclo for ou while. Quando inserido num ciclo for ou while, passa a execuo do programa para a primeira instruo a seguir ao end desse ciclo. Normalmente, aparece dentro de instrues de seleco: no caso de uma determinada condio ser satisfeita, o ciclo parado. De seguida exemplifica-se a utilizao da instruo break a partir do exemplo anterior de clculo da soma dos n elementos. Nesta exemplo o ciclo parado quando a varivel num_resp igual a 5, saltando o programa para a instruo fprintf imediatamente a seguir ao comando end do ciclo while. % Inicializao da varivel resposta % resposta='s'; num_resp=0; while ((resposta=='S')|(resposta=='s')) % Inicializao da varivel soma % soma=0; num_resp=num_resp+1; % Valor a calcular pedido ao utilizador % n=input('Qual o valor a calcular ? '); % Clculo da soma utilizando um ciclo for % for i=1:n

Introduo Programao soma = soma+i; end % Mostra o valor da soma % fprintf('A soma dos %i elementos %i\n', n,soma); if num_resp==5 disp('TERMINOU !!! J FEZ 5 CLCULOS !!!') break end resposta=input('Quer continuar ? (s/n) ','s'); end fprintf('O nmero de clculos foram %i \n',num_resp);

58

A execuo deste programa mostra os seguintes resultados na Janela de Comandos: Qual o valor a calcular ? 2 A soma dos 2 elementos 3 Quer continuar ? (s/n) s Qual o valor a calcular ? 4 A soma dos 4 elementos 10 Quer continuar ? (s/n) s Qual o valor a calcular ? 6 A soma dos 6 elementos 21 Quer continuar ? (s/n) s Qual o valor a calcular ? 8 A soma dos 8 elementos 36 Quer continuar ? (s/n) s Qual o valor a calcular ? 10 A soma dos 10 elementos 55 TERMINOU !!! J FEZ 5 CLCULOS !!! O nmero de clculos foram 5 >> 4.3 INSTRUES DE ENTRADA E SADA DE DADOS 4.3.1 INSTRUO input Quando se pretende que o utilizador introduza dados, utiliza-se a funo input. A sintaxe do comando : Nome da varivel = input (Texto)

Introduo Programao

59

Quando o comando input executado, o Texto mostrado no ecr e solicitado ao utilizador que introduza um valor que atribudo varivel. De seguida mostramse a introduo de uma varivel numrica e de uma string. De referir que neste ltimo caso, possvel faz-lo de 2 maneiras: na primeira digitamos a string entre plicas (do mesmo modo que uma string atribuda a uma varivel sem o comando input), na segunda utiliza-se a cadeia s que declara os caracteres a serem digitados como uma string (ver exemplo seguinte). Nesse caso, ao aparecer a mensagem no prompt, o texto digitado sem as aspas e atribudo varivel como uma string.

>> preo = input('Qual o preo do litro do gasleo ? ') Qual o preo do litro do gasleo ? 0.92 preco = 0.9200 >> nome = input (' Qual o seu nome ? ','s') Qual o seu nome ? Jos nome = Jos >>

4.3.2 INSTRUO fprintf No ponto 1.4.1 foi estudado o comando disp que permite a escrita de variveis e texto, e tambm foi referido que, quando pretendssemos uma melhor formatao dos dados e texto o Matlab dispunha da funo fprintf. Ao contrrio do disp, o comando fprintf permite que a sada seja formatada pelo utilizador. Por exemplo, o texto e os dados numricos das variveis podem ser combinados e exibidos numa linha. Alm disso, o formato dos nmeros tambm pode ser controlado. A sintaxe mais geral do comando fprintf (string formatado,lista de variveis) O string formatado contm o texto a ser apresentado entre plicas, e tambm pode conter descritores para formatar as variveis listadas inseridas no string. Quando pretendemos apresentar apenas texto, a sintaxe mais simples: fprintf (string formatado) Para formatar o texto podemos utilizar vrios descritores: Smbol o \n \b \t \r Descrio Passa para a linha seguinte Retrocede uma casa Faz tabulao horizontal (TAB) Faz RETURN

Introduo Programao \\ \ %% Escreve o caractr \ Escreve o caractr Escreve o caractr %

60

Se um programa tiver mais do que um comando fprintf, as sadas sero mostradas medida que cada fprintf for executado. Este comando no inicia uma nova linha ao ser executado, pelo que se o quisermos fazer teremos de utilizar o descritor \n. O seguinte programa, fprintf ('Hoje sexta-feira. ') fprintf (' Amanh sbado.') fprintf (' Depois de amanh domingo.')

provoca o seguinte resultado na Janela de Comandos:

Hoje sexta-feira. Amanh sbado. Depois de amanh domingo.>> Se pretendssemos uma quebra de linha a seguir palavra sbado teramos: fprintf ('Hoje sexta-feira. ') fprintf ('Amanh sbado.\n') fprintf ('Depois de amanh domingo.') que teria a seguinte sada na Janela de Comandos: Hoje sexta-feira. Amanh sbado. Depois de amanh domingo.>> Normalmente no temos apenas sada de texto, mas sim uma combinao de texto e de nmeros. Neste caso, a sintaxe como vimos atrs: fprintf (string formatado,lista de variveis) O string formatado utiliza obrigatoriamente o caractr % e o descritor de formato (f, e, E, g, G, i) apresentados a seguir: Sm bolo f e Descrio Ponto fixo, ou nmero real com parte decimal. Ponto flutuante ou nmero real em notao cientfica com o e

Introduo Programao minsculo. E g G i Ponto flutuante ou nmero real em notao cientfica com o E maisculo. Usa a notao mais compacta f ou e. Usa a notao mais compacta f ou E. Nmero inteiro.

61

De seguida apresentam-se alguns exemplos simples: >> custo_litro=1.24; >> fprintf(' O custo do litro do gasleo %f ',custo_litro) O custo do litro do gasleo 1.240000 >> > fprintf(' O custo do litro do gasleo %e ',custo_litro) O custo do litro do gasleo 1.240000e+000 >> >> nota=16; >> fprintf(' A nota do Joo %i valores',nota) A nota do Joo 16 valores >> Alm do caractr % e do descritor de formato (f, e, E, g, G, i), pode apresentar outros caracteres de formatao de sada dos dados numricos: Smbolo + 0 Descrio Justifica o nmero dentro do campo. Mostra o sinal do nmero. Adiciona zeros (em vez de espaos em branco), se o nmero for menor do que o definido pelo utilizador.

Mostram-se de seguida um exemplo simples: printf(' O custo do litro do gasleo %+f ',custo_litro) O custo do litro do gasleo +1.240000 O nmero dos caracteres do nmero a apresentar pode ser definido pelo utilizador por meio de descritores. Descrevemos de seguida os descritores mais utilizados: %w.df f - Ponto fixo ou notao decimal. w Nmero total de caracteres (incluindo o ponto decimal e eventual sinal menos. d Nmero de casas decimais.

Introduo Programao

62

%w.de f - Ponto flutuante ou notao cientfica. w Nmero total de caracteres (incluindo o ponto decimal, eventual sinal e cinco casas para o expoente). d Nmero de dgitos na mantissa aps o ponto decimal. %w.dg Usa o menor dos formatos short ou short e, com o nmero total de caracteres w e d casas decimais. A seguir apresentam-se alguns exemplos: >> fprintf ('O litro de gasolina custa %4.2f euros',custo_litro) O litro de gasolina custa 1.24 euros >> >> fprintf('O valor de x %6.2f e o de y %7.4f\n',x,y) O valor de x -15.04 e o de y 41.0678 >> >> fprintf('O valor de x %11.3e e o de y %12.5e\n',x,y) O valor de x -1.504e+001 e o de y 4.10678e+001 >> De referir que o comando fprintf vectorizado, ou seja, se um vector ou matriz estiver includo no comando, haver repetio desse comando at que o ltimo elemento (da matriz ou vector) seja mostrado no ecr. Neste caso os dados sero utilizados coluna por coluna, como se mostra no exemplo seguinte: >> x=1:5 x= 1 2 3 4 5 >> y=sqrt(x) y= 1.0000 1.4142 1.7321 2.0000 2.2361 >> T=[x;y] T= 1.0000 2.0000 3.0000 4.0000 5.0000 1.0000 1.4142 1.7321 2.0000 2.2361 >> fprintf('Se o nmero %i, a sua raz quadrada %f\n',T) Se o nmero 1, a sua raz quadrada 1.000000 Se o nmero 2, a sua raz quadrada 1.414214 Se o nmero 3, a sua raz quadrada 1.732051 Se o nmero 4, a sua raz quadrada 2.000000 Se o nmero 5, a sua raz quadrada 2.236068 >> >> x=1:5

Introduo Programao x= 1 2 3 4 5 >> y=sqrt(x) y= 1.0000 1.4142 1.7321 2.0000 2.2361 >> T=[x;y] T= 1.0000 2.0000 3.0000 4.0000 5.0000 1.0000 1.4142 1.7321 2.0000 2.2361 >> fprintf('A raz quadrada de %i %f\n',T) A raz quadrada de 1 1.000000 A raz quadrada de 2 1.414214 A raz quadrada de 3 1.732051 A raz quadrada de 4 2.000000 A raz quadrada de 5 2.236068

63

O comando fprintf pode ser utilizado para gravar os resultados de sada num ficheiro. Estes dados podero posteriormente ser utilizados pelo Matlab ou noutras aplicaes. So necessrios trs passos para escrever dados num ficheiro utilizando o comando fprintf: 1. Abrir um ficheiro utilizando o comando fopen. 2. Escrever os dados no ficheiro aberto utilizando o comando fprintf . 3. Fechar o ficheiro utilizando o comando fclose. Passo 1: Antes dos dados serem gravados num ficheiro, esse ficheiro deve ser aberto com o comando fopen. Com este comando pode-se abrir um ficheiro j existente, ou criar um novo. A sintaxe do comando : fid = fopen (nome_do_ficheiro, parmetro de abertura) onde fid (file descriptor) uma varivel chamada identificadora do ficheiro. Um nmero atribudo varivel fid ao executar fopen. O parmetro de abertura um campo escrito entre plicas e que define como o ficheiro aberto. Os parmetros mais utilizados so: r Abre o ficheiro para leitura (modo de abertura por defeito) w Abre o ficheiro para escrita. Se o ficheiro j existir, o seu contedo ser apagado; se o ficheiro no existir, cria um novo ficheiro. a Idntico ao parmetro w, mas em que se o ficheiro j existir, os dados a escrever sero acrescentados no fim do ficheiro. Se no for especificado qualquer parmetro o ficheiro ser aberto na opo r. De referir que possvel escrever em vrios ficheiros diferentes, sendo ento necessrio abrir vrios ficheiros e atribuir-lhes diferentes fids (por exemplo, fid1, fid2, fid3, etc).

Introduo Programao Passo 2:

64

Depois do ficheiro estar aberto, podemos escrever nele com o comando fprintf. Neste caso, a sua sintaxe : fprintf (fid, string formatado, lista de variveis) Passo 3: Para concluir o processo de escrita, o ficheiro tem de ser fechado com o comando fclose. A sua sintaxe : fclose ( fid) De seguida mostra-se um exemplo que utiliza o comando fprintf para gravar os resultados de sada em dois ficheiros de texto (com extenso .txt, e abertos no Microsoft Word). Neste programa so gerados dois ficheiros, um com a raiz quadrada e outro com o quadrado de 1 a 5. % Este programa escreve a raiz quadrada e o quadrado de nmeros, % em dois ficheiros diferentes. clear all clc x=1:5; rq=sqrt(x); tab1=[x;rq]; q=x.^2; tab2=[x;q]; fid1=fopen('raiz_quad.txt','w'); fid2=fopen('quad.txt','w'); fprintf(fid1,' Tabela de Razes Quadradas\n\n'); fprintf(fid1,'Valor Raz Quadrada\n'); fprintf(fid1,' %i %4.2f\n',tab1); fprintf(fid1,' \n'); fprintf(fid2,' Tabela de Potncias\n\n'); fprintf(fid2,'Valor Quadrado\n'); fprintf(fid2,' %i %i\n',tab2); fclose(fid1); fclose(fid2); De seguida so mostrados em Microsoft Word os dois ficheiros gerados na execuo do programa.

Introduo Programao

65

FIGURA 4.1 Ficheiros gerados no Word

Introduo Programao

66

5. IMPORTAO E EXPORTAO DE DADOS Neste ponto vamos estudar apenas alguns comandos mais comuns utilizados na importao e exportao de dados numricos em Matlab. O Matlab disponibiliza uma grande diversidade de comandos utilizados para a transferncia de dados (consultar o Help), mas que esto fora do mbito deste curso. O modo mais simples de fazer a importao de dados numricos por meio do comando load a partir de um ficheiro de texto no formatado criado com um editor de texto qualquer (por exemplo o Notepad). A sintaxe do comando , load (dados.txt) No ficheiro dados.txt os nmeros so separados com espaos e as linhas terminam com ENTER. O exemplo seguinte tem por base o exemplo do ponto anterior, mas em que os valores do vector x so importados do ficheiro dados.txt. % Este programa escreve a raz quadrada e o quadrado de nmeros, % em dois ficheiros diferentes. clear all clc x=load('dados.txt') rq=sqrt(x); tab1=[x;rq]; q=x.^2; tab2=[x;q]; fid1=fopen('raiz_quad.txt','w'); fid2=fopen('quad.txt','w'); fprintf(fid1,' Tabela de Razes Quadradas\n\n'); fprintf(fid1,'Valor Raz Quadrada\n'); fprintf(fid1,' %i %4.2f\n',tab1); fprintf(fid1,' \n'); fprintf(fid2,' Tabela de Potncias\n\n'); fprintf(fid2,'Valor Quadrado\n'); fprintf(fid2,' %i %i\n',tab2); fclose(fid1); fclose(fid2); O ficheiro dados.txt criado no Notepad :

Introduo Programao

67

FIGURA 5.1 Ficheiro de texto no Notepad De notar que se podem dispensar os parntesis e as plicas se o nome do ficheiro no for atribudo a uma varivel string. Neste caso a matriz tem o mesmo nome do ficheiro (sem extenso), e a mesma dimenso dos dados no ficheiro. Uma nova verso do exemplo anterior mostrado a seguir: % Este programa escreve a raz quadrada e o quadrado de nmeros, % em dois ficheiros diferentes. clear all clc load dados.txt rq=sqrt(dados); tab1=[dados;rq]; q=dados.^2; tab2=[dados;q]; fid1=fopen('raiz_quad.txt','w'); fid2=fopen('quad.txt','w'); fprintf(fid1,' Tabela de Razes Quadradas\n\n'); fprintf(fid1,'Valor Raz Quadrada\n'); fprintf(fid1,' %i %4.2f\n',tab1); fprintf(fid1,' \n'); fprintf(fid2,' Tabela de Potncias\n\n'); fprintf(fid2,'Valor Quadrado\n'); fprintf(fid2,' %i %i\n',tab2); fclose(fid1); fclose(fid2);

Introduo Programao

68

De seguida vai-se estudar a importao e exportao de dados com a folha de clculo Microsoft Excel, que uma ferramenta muito utilizada na organizao e armazenamento de dados. A importao dos dados da folha de Excel feita com o comando xlsread, e a sua forma mais geral tem a seguinte sintaxe: Nome_varivel = xlsread (Nome_ficheiro) Quando o comando executado os dados da folha de clculo Nome_ficheiro.xls, so atribudos varivel Nome_varivel. Se a folha de clculo tiver mais do que uma folha, os dados sero importados apenas da primeira folha. A instruo xlsread ignora linhas ou colunas prvias com texto, contudo se uma clula (no prvia) estiver vazia ou com texto substituda por NaN (Not a Number). Se o ficheiro tiver mais do que uma folha, e se o utilizador pretender escolher a folha o comando ter o seguinte formato: Nome_varivel = xlsread (Nome_ficheiro,Nome_folha) Outra opo importante se, se pretende importar apenas uma parte dos dados contidos numa folha de clculo. Neste caso, a sintaxe do comando : Nome_varivel = xlsread (Nome_ficheiro,Nome_folha,Intervalo_de_dados) Por exemplo, A = xlsread(exemplo.xls,Folha2,C5:E13), atribui os dados contidos entre C5 e E13 (9 linhas e 3 colunas) na folha Folha2 do ficheiro exemplo.xls, matriz A. Quando se omite a folha o Matlab assume a folha 1. Se se pretender que o utilizador escolha a folha e o intervalo de dados durante a execuo da instruo, deve-se utilizar a instruo no seguinte formato: Nome_varivel = xlsread (Nome_ficheiro,-1) A escrita (exportao) de dados numa folha de clculo Excel feita por meio do comando xlswrite, que tem a seguinte sintaxe na sua forma mais geral: xlswrite (Nome_ficheiro,Nome_varivel) Nome_ficheiro o ficheiro do Excel em que vo ser escritos os dados; este ficheiro deve existir na directoria corrente de trabalho, mas se no existir, um novo ficheiro criado. Tal como para o comando xlsread, tambm se pode especificar uma folha especfica ou um intervalo especfico de uma folha para onde vo ser escritos os dados. Neste caso a sintaxe : xlswrite ('Nome_ficheiro', 'Intervalo_de_dados') Nome_varivel, Nome_Folha,

De seguida mostra-se um exemplo de aplicao, em que so calculados e escritos num ficheiro Excel area.xls os valores da rea de circunferncias, cujos raios so importados de um ficheiro Excel raio.xls.

% Este programa importa os valores do raio, calcula e % exporta o valor das areas, utilizando ficheiros em Excel. clear all clc

Introduo Programao x = xlsread('raio'); area = pi*x.^2; % Escreve os valores do raio e os respectivos valores da rea xlswrite('area',x,'A2:A6') xlswrite('area',area,'B2:B6')

69

Mostram-se de seguida os ficheiros Excel raio.xls (de importao de dados) e area.xls (de escrita), correspondentes ao programa anterior.

FIGURA 5.2 Ficheiros de importao e de escrita de dados no Excel

Introduo Programao

70

6. FUNES Nos pontos anteriores, nomeadamente no ponto 1.5, estudmos algumas das muitas funes originais existentes no Matlab. Para serem utilizadas em expresses matemticas, basta digitar o nome da funo com o(s) devido(s) argumento(s). Alguns exemplos destas funes: sin(x), cos(x), sqrt(x), etc. No entanto a maioria dos programas, requer a utilizao de funes que no existem originalmente no Matlab. Quando se necessita de uma funo apenas uma vez, pode-se digit-la como parte do programa. Porm, quando o programa faz vrias chamadas de uma funo para diferentes valores dos argumentos, conveniente criar uma nova funo no Matlab. Estas funes so criadas e salvas no editor de cdigo como ficheiros-M, e so usadas do mesmo modo que as funes originais do Matlab. As funes para alm de conterem uma sequncia de comandos Matlab, podem receber (parmetros de entrada) e devolver valores (parmetros de sada). Isto significa, que as operaes realizadas dentro da funo so desenvolvidas com base nos dados de entrada e os resultados de sada so transferidos para o programa principal. A entrada e a sada podem conter uma ou vrias variveis e cada varivel pode ser um escalar, um vector ou uma matriz. Uma funo executada num espao de dados fechado e apenas acessvel pela prpria funo. Todas as variveis criadas e manipuladas durante a execuo de uma funo residem nesse espao de dados privado, dizendo-se que so variveis locais, sendo eliminadas quando termina a execuo da funo, excepto se forem criadas especialmente como variveis globais.

6.1 ESTRUTURA DE UMA FUNO A estrutura tpica de uma funo mostrada na janela inferior da figura 6.1. Na figura 6.1 mostram-se duas janelas contendo o programa principal e a funo que vai calcular e mostrar a rea e o permetro do rectngulo. Esta funo (rectngulo) recebe como parmetros de entrada, o comprimento e a largura do rectngulo. A funo calcula a rea e o permetro do rectngulo. O cdigo da funo deve ser guardado num ficheiro com o nome da prpria funo e com a extenso m. Na realidade, o Matlab identifica uma funo com base no nome do ficheiro e no no nome utilizado na sua declarao. Uma vez localizado o ficheiro, executada a primeira funo declarada no mesmo.

Introduo Programao

71

FIGURA 6.1 Exemplo de um programa com chamada de uma funo A primeira linha deve ser a linha de declarao da funo. De outro modo, o Matlab trat-lo- como um ficheiro normal com uma sequncia de comandos Matlab (script). A linha de declarao de uma funo: - Define o ficheiro como uma funo (diferenciando-o de um programa) - Define o nome da funo - Define o nmero e a ordem das variveis de entrada, e as variveis de sada. A sintaxe geral da linha de declarao de uma funo : function [parmetros de sada] = nome_da_funo (parmetros de entrada) Como exemplo apresenta-se o da figura 6.1: function[ar,per]=rectangulo(lado1,lado2) A palavra function digitada em letras minsculas e deve preceder quaisquer outros comandos; antes da declarao da funo apenas so permitidos comentrios. De notar que ao ser digitada no Editor, a sua cor muda para azul. Os parmetros de entrada e de sada so utilizados na passagem de um ou mais parmetros (dados ou variveis) para a funo. Os parmetros de entrada aparecem logo aps o nome da funo. Normalmente, toda a funo tem pelo menos um parmetro de entrada, embora seja possvel declarar funes que no tm parmetros de entrada. De facto, o mais usual as funes terem vrios parmetros de entrada; nestes casos, os parmetros de entrada esto separados por vrgulas. Os parmetros

Introduo Programao

72

so em geral escalares, vectores ou matrizes genricas; no exemplo apresentado atrs, h dois parmetros de entrada lado1 e lado2, e nas expresses aritmticas so usados como escalares. O cdigo da funo deve ser escrito em termos dos parmetros de entrada, e tais parmetros devem ser inicializados numericamente antes que a funo seja chamada. Os valores verdadeiros dos parmetros de entrada de uma funo, so passados na chamada da funo pelo programa principal. Os parmetros de sada so listados dentro de parntesis rectos na linha de declarao da funo esquerda do operador de atribuio (=), e devem conter os parmetros cujos valores so devolvidos pela funo. De notar que no obrigatrio que as funes retornem valores, e se houver apenas um parmetro de sada pode-se digitar sem parntesis. No exemplo mostrado atrs, existem dois parmetros de sada ar e per. Se uma funo no tiver parmetros de sada o operador de atribuio (=) pode ser omitido. possvel passar strings para uma funo: basta digitar a string como parte das variveis de entrada (o texto deve aparecer entre aspas). Na tabela seguinte faz-se um resumo das linhas de declarao com diferentes combinaes dos parmetros de entrada e de sada, tal como acabmos de estudar: Linha de declarao da funo function[ar,per] rectangulo(lado1,lado2) function [T] = rect(x,y) function T = rect(x,y) function F(x,y,z) = Descrio Dois parmetros de entrada e dois parmetros de sada. Dois parmetros de entrada e um parmetro de sada. Mesma funo declarada acima. Trs parmetros de entrada e nenhum parmetro de sada.

Como se v atrs no exemplo mostrado na figura 6.1, a seguir declarao da funo aparece normalmente um pequeno texto opcional de ajuda, com a descrio da funo, parmetros de entrada/sada, exemplos de utilizao, etc. Este texto de ajuda constitudo por um conjunto de linhas de comentrios precedidas pelo caractere %, e ser apresentado sempre que for pedida ajuda sobre a funo. Uma funo no precisa de conter este texto, mas habitual utiliz-lo para tornar inteligvel o cdigo da funo. Na primeira linha da ajuda, designada por linha H1, recomenda-se que utilize o nome da funo e que descreva a sua funcionalidade. Quando o utilizador ao procurar ajuda digita lookfor palavra_chave, o Matlab procura a palavra-chave em todas as linhas H1 de todas as funes (as originais do Matlab e as criadas pelo utilizador), e, se a palavra procurada estiver em alguma linha H1, o Matlab mostrar o contedo dessa linha. De seguida mostra-se um exemplo referente funo mostrada na figura 6.1. >> lookfor rectangulo rectangulo calcula a rea e o permetro de um rectngulo >>

Introduo Programao

73

Todas as seguintes linhas de comentrios devem suceder a linha H1. Estas linhas de comentrios so mostradas conjuntamente com a linha H1, quando o utilizador digita help nome_da_funo. Por exemplo, >> help rectangulo rectangulo calcula a rea e o permetro de um rectngulo Argumentos de entrada: lado1,lado2=medida dos lados Argumentos de sada: ar=valor da rea per=valor do permetro >> Como lgico todas as linhas de comentrios existentes no corpo da funo so ignoradas pelo comando help. Aps estas linhas de comentrios aparece o corpo da funo constitudo pelas linhas de cdigo necessrias execuo da funo. 6.2 VARIVEIS LOCAIS E GLOBAIS Todas as variveis de uma funo so locais, ou seja, os parmetros de entrada e de sada so definidos e reconhecidos apenas dentro da estrutura da funo. Quando a funo chamada, o Matlab utiliza um espao de memria diferente do espao ocupado pela rea de trabalho (espao de memria onde executada a janela Command Window e os programas). Numa funo, as variveis de entrada so inicializadas cada vez que a funo chamada da linha de prompt. Assim, as variveis podem ser utilizadas em clculos dentro da funo. Terminada a execuo da funo, os valores dos parmetros de sada so passados s variveis utilizadas para chamar a funo. Logo, uma funo pode possuir variveis com nomes idnticos s variveis declaradas na janela Comando Window ou num programa. Concluindo, os valores atribudos s variveis internas das funes no sero modificados por nenhum tipo de atribuio feito fora do ambiente da funo. Todas as funes possuem um conjunto particular de variveis locais que no so compartilhadas com outras funes ou com a rea de trabalho da janela Command Window e/ou das rotinas. Mas, possvel tornar uma varivel comum (pblica) s vrias funes e, possivelmente a toda a rea de trabalho. Para declarar uma varivel global utiliza-se a seguinte sintaxe: global = Nome_da_varivel A declarao de vrias variveis como globais, pode ser feita listando e separando as variveis por meio de espaos aps um nico comando global. No exemplo seguinte declaram-se as variveis x, y e z como variveis globais: >> global X Y Dia_de_Pascoa >>

Introduo Programao

74

A varivel que se quer utilizar como global tem de ser declarada como global em todas as funes e em todas as partes do Matlab em que o utilizador quiser que ela seja reconhecida como tal. Desse modo, a varivel torna-se comum a essas funes. O comando global deve ser digitado na janela Command Window e/ou dentro do programa para para que a varivel seja reconhecida na rea de trabalho. Nas funes, o comando global deve aparecer antes da varivel ser utilizada; recomendado utilizar esse comando aps as linhas de ajuda (H1 e de comentrio). Para se diferenciarem das variveis locais, recomenda-se utilizar nomes extensos e letras maisculas para as variveis globais como se fez no exemplo anterior. 6.3 EXEMPLOS Neste ponto mostram-se exemplos simples de utilizao de funes.

Considere-se a funo y = f(x) =

( x 3 +5 x ) 2 x + 25

2 . Pretende-se calcular o valor da

funo para vrios valores de x. No editor define-se a seguinte funo exemplo_6_3_1: function y = exemplo_6_3_1(x) y=(sqrt(x^3+5*x)^2)/(2*x+25) Se quisesse saber o valor da funo, para por exemplo, x = 6 ou x = -1 o utilizador faria: >> exemplo_6_3_1(6) ans = 6.6486 >> exemplo_6_3_1(-1) ans = -0.2609 >> y = exemplo_6_3_1(6) y= 6.6486 >> y = exemplo_6_3_1(-1) y= -0.2609 >> z = exemplo_6_3_1(-1) z= -0.2609

Introduo Programao

75

Como se v no exemplo atrs, o resultado visualizado na forma padronizada (ans) ou ento atribudo a uma nova varivel (y ou z), conforme o que digitamos na chamada da funo. Se se quisesse trabalhar directamente na janela Command Window sem usar o editor: >> x=6 x= 6 >> y=(sqrt(x.^3+5*x).^2)./(2*x+25) y= 6.6486 >> No caso do argumento da funo (x) ser um vector (por exemplo [6 -1] ), ou seja quando pretendo trabalhar simultaneamente com vrios valores de x, tem que se considerar as operaes elemento a elemento do vector. Neste caso, obtm-se a funo exemplo_6_3_2 com as seguintes alteraes no cdigo da funo: function y = exemplo_6_3_2(x) y = (sqrt(x.^3+5*x).^2)./(2*x+25); Para o vector referido, obtm-se o seguinte resultado na janela Command Window: >> x = [6 -1] x= 6 -1 >> y = exemplo_6_3_2(x) y= 6.6486 -0.2609 >> De seguida mostra-se a funo hipotenusa que calcula a hipotenusa de um tringulo rectngulo sendo dados os outros dois lados: function y = hipotenusa(lado1,lado2) % hipotenusa calcula a hipotenusa de um triangulo dando os dois lados rectos y = sqrt(lado1.^2+lado2.^2);

Introduo Programao

76

De seguida mostram-se os resultados de vrios exemplos de execuo da funo hipotenusa na janela Command Window: >> hipotenusa(3,4) ans = 5 >> hipotenusa(5,6) ans = 7.8102 >> lado1=[3 5] lado1 = 3 5 >> lado2=[4 6] lado2 = 4 6 >> hipotenusa(lado1,lado2) ans = 5.0000 7.8102 >>

Introduo Programao
6.4
FUNES inline

77

Quando o valor de uma funo matemtica precisa de ser determinado dentro de um programa, o Matlab oferece o recurso das funes inline. Uma funo inline definida como parte da unidade de cdigo do programa que a contm (ou seja, no um arquivo .m em separado) e pode ser utilizada apenas dentro dessa unidade de cdigo. As funes inline podem ser declaradas em funes, em programas escritos em Matlab, nas declaraes de funes, ou na Janela de Comandos. Todas as funes inline so criadas por meio do comando inline, seguindo a sintaxe: Nome_funo = inline ('expresso matemtica') Mostra-se de seguida como exemplo, a definio da funo f(x) = x2-5x+12 como uma funo inline. >> f=inline('x^2-5*x+12') f= Inline function: f(x) = x^2-5*x+12 >> De notar que: A expresso matemtica pode ter uma ou mais variveis independentes. Quaiquer letras, excepto i e j, podem ser designadas variveis independentes na expresso. A expresso matemtica pode ter funes nativas ou personalizadas. As expresses no podem conter variveis previamente inicializadas. Uma vez definida uma funo inline possvel cham-la pelo nome, atribuindo-lhe valor(es) ao(s) argumento(s). Uma funo inline pode ser utilizada como argumento de outras funes. O comando inline para funes com duas ou mais variveis independentes pode ser escrito utilizando-se a mesma sintaxe, como se ilustra no exemplo seguinte: >> t=inline('x^2-5*x+12+z^4') t= Inline function: t(x,z) = x^2-5*x+12+z^4 >>

Para este caso, ou seja para funes com duas ou mais variveis independentes pode-se utilizar a sintaxe referida, ou ento a seguinte sintaxe: Nome_funo = inline ('expresso matemtica', 'arg1', 'arg2', 'arg3') A funo t seria ento definida do seguinte modo:

Introduo Programao

78

>> t=inline('x^2-5*x+12+z^4, 'x', 'z') t= Inline function: t(x,z) = x^2-5*x+12+z^4 >> Feita a declarao da funo, possvel test-la na Janela de Comandos, como por exemplo: >> t(2,3) ans = 87 >>

7. GRFICOS

Um dos pontos mais fortes do Matlab a sua capacidade de representao grfica dos dados. O Matlab possui muitos comandos capazes de criarem diferentes tipos de grficos bidimensionais (2D) ou tridimensionais (3D). Neste ponto, estudam-se apenas a forma de criar e formatar os grficos bidimensionais, j que, so os mais utilizados e de uma forma geral adequados para a representao de conjuntos de dados simples ou de mdia complexidade nas mais diversas reas cientficas. Os grficos bidimensionais so mais simples de criar e normalmente de mais fcil compreenso do que os grficos tridimensionais. Em comparao com os grficos bidimensionais, os grficos 3D tm uma aplicabilidade mais restrita. De referir que, os grficos existentes podem sempre ser modificados interactivamente, usando as ferramentas de edio de grficos. Na figura 7.1 mostra-se um grfico tpico muito simples, gerado na Janela Grfica pela seguinte sucesso de comandos:

>> x = [1 3 5 7 9] x= 1 3 5 7

Introduo Programao >> y = x.^2-10 y= -9 -1 15 39 71 >> plot(x,y)

79

O resultado das funes de representao grfica (no exempo anterior, a funo plot) apresentado numa janela especial (Janela Grfica), normalmente designada por figura. Como se v no exemplo da Figura 7.1, uma figura padro possui um ttulo situado na barra superior da janela, um menu, uma barra de ferramentas e a rea do grfico que ocupa a maior parte da janela. Neste caso (o mais simples), a figura contm apenas um grfico constitudo pelos dois elementos bsicos: o sistema de eixos e as linhas que representam os dados. Mas, o grfico pode conter ainda outros elementos: ttulo, legenda, etiquetas nos eixos e anotaes textuais.

FIGURA 7.1 Exemplo de grfico

As funes grficas bidimensionais esto agrupadas no pacote graph2d. Pode-se obter uma listagem destas funes digitando help graph2d.

Introduo Programao
7.1 FUNO plot

80

A funo plot a principal funo utilizada para criar grficos 2D. A sua sintaxe mais simples :
plot (x, y)

Os seus argumentos x e y devem ser vectores e devem ter o mesmo tamanho. Como se v na Figura 7.1, o comando plot produz uma nica curva, estando os valores de x dispostos na abcissa (eixo horizontal) e os valores de y na ordenada (eixo vertical). A curva construda a partir de segmentos de recta que ligam os pontos cujas coordenadas so definidas pelos elementos dos vectores x e y. O primeiro vector digitado no argumento da funo usado como eixo horizontal e, o segundo, como eixo vertical. A cor padro do grfico o azul que, logicamente, pode ser alterada. possvel controlar alguns aspectos da representao grfica adicionando outros argumentos ao comando plot para permitir definir a cor, o estilo de linha, a cor e o estilo dos marcadores. Neste caso, a sintaxe do comando :
plot (x, y, Especificadores de linha, Propriedade, Valor_da_propriedade)

em que: x e y so vectores Especificadores de linha Opcional, especifica o tipo e a cor da linha e os tipos de marcadores; Propriedade e Valor_da_Propriedade Opcionais, definem as propriedades adicionais usadas para definir a espessura da linha, o tamanho do marcador e da borda e a cor do preenchimento.

. Especificadores de linha:
Este campo opcional e pode ser utilizado para definir o estilo, a cor e o tipo de marcadores das linhas. Os especificadores para estilos de linhas so:
Estilo de linha Contnua (Por defeito) Tracejada Trao-ponto Ponteada Especificador --. :

Os especificadores de cores de linhas so:


Cor de linha Azul (Por defeito) Preto Vermelho Verde Ciano Magenta Amarelo Especificador b (ou blue) k (ou black)-r (ou red) g (ou green) c (ou cyan) m (ou magenta) y (ou yellow)

Introduo Programao Branco w (ou white)

81

Os especificadores de tipos de marcadores so:


Estilo de linha Ponto Crculo Marca x Marca + Estrela Quadrado Diamante Tringulo para baixo Tringulo para cima Tringulo esquerda Tringulo direita Pentgono Hexgono Especificador . o x + * s d v ^ <
>

p h

De notar que os especificadores so digitados entre plicas dentro do argumento do comando plot, e que so opcionais, ou seja, nenhum, um, dois ou todos os especificadores podem ser includos num comando, como se ilustra nos exemplos seguintes. Por fim, refira-se que os especificadores podem ser digitados por qualquer ordem. Alguns exemplos: >> plot (x,y,':') >> plot (x,y,'r') >> plot (x,y,'red') >> plot (x,y,'*') >> plot (x,y,'* g') >> plot (x,y,'* g -') >> plot (x,y,'- * g') Na figura 7.2 mostra-se a representao grfica da execuo do ltimo comando, em que uma linha contnua (-) verde (g) liga os pontos marcados com asterisco (*).

Introduo Programao

82

FIGURA 7.2 Exemplo de grfico

. Propriedades:
As propriedades tambm so opcionais e podem ser utilizadas na especificao da espessura da linha, do tamanho e das cores dos marcadores das linhas e para preenchimento. As propriedades so digitadas entre plicas, so separadas por vrgula e seguidas do valor da propriedade. De seguida mostram-se valores das propriedades:
Propriedade linewidth Descrio Especifica a espessura da linha em nmero de pontos. Por defeito toma o valor 0.5. Especifica o tamanho do marcador em nmero de pontos. Especifica a cor do marcador ou a cor da borda da linha que limita o marcador. A cor digitada entre plicas. Especifica a cor de preenchimento dos marcadores. A cor digitada entre plicas.

markersize markeredgecol or markeredgecol or Um exemplo:

>> plot(x,y,'--gp','linewidth',5, 'markersize',50,'markeredgecolor','y','markerfacecolor','g')

Introduo Programao

83

7.2 FUNO fplot

Outra forma de criar grficos utilizar a funo fplot. A sua sintaxe :


fplot (funo, limites, especificadores de linha) em que : funo a funo a ser gerada; limites os limites de x (domnio da funo) e, opcionalmente os limites do eixo y. especificadores de linha opcional, definem o tipo, cor da linha e marcadores.

A funo deve ser digitada directamente entre plicas. Os limites devem ser introduzidos como um vector de dois elementos que especifica o intervalo do domnio x [xmin, y min], ou um vector com quatro elementos que especifica o intervalo do domnio x e do contradomnio y onde se deseja visualizar o grfico da da funo [xmin, xmax, ymin, ymax]. Os especificadores de linha so os mesmos descritos no ponto anterior para o comando plot. No exemplo seguinte, a curva gerada apresentada na figura 7.3. >> fplot('sind(2*x)/(2*x)',[-1080,1080])

20

x 10

-3

15

10

-5 -1000

-500

500

1000

FIGURA 7.3 Grfico da funo y = sind(2x)/(2x)

De referir que este grfico foi copiado da Janela Grfica por meio da opo Copy Figure do menu Edit.

Introduo Programao

84

7.3 FORMATAO

Como vimos, os comandos plot e fplot permitem somente a criao de grficos. Mas, usual um grfico apresentar outro tipo de informao, como por exemplo: ttulos dos eixos, ttulo do grfico, legenda, grelhas, gamas de valores dos eixos, e caixas de texto. A formatao de grficos pode acontecer em dois momentos: aps os comandos plot e fplot utilizando vrios comandos de formatao, ou usando interactivamente, o editor das propriedades na Janela Grfica (Figure Window). Vamo-nos debruar sobre o primeiro modo, estudando vrios comandos de formatao de grficos.
7.3.1 COMANDO axis

Quando um grfico criado com o comando plot(x,y), o Matlab cria eixos cujos limites esto baseados nos valores mnimo e mximo dos vectores x e y. Para os alterar dever-se- utilizar o comando axis com a seguinte sintaxe:
axis ([xmin, xmax, ymin, ymax]) em que : xmin, xmax limites do eixo x; ymin, ymax limites do eixo y;

Para voltar aos valores usados no Matlab por defeito, digita-se axis auto. O comando axis permite tambm controlar a visibilidade dos eixos: axis on torna os eixos visveis e axis off torna-os invisveis. Outras formas possveis de utilizar o comando axis : axis equal configura escalas iguais para os eixos x e y; axis square configura as escalas x e y, de modo que a regio do grfico seja um quadrado.
7.3.2 COMANDO grid

A grelha, tal como os eixos, tem a finalidade de melhorar a visualizao de um grfico. O comando grid on torna visvel a grelha; o comando grid off torna-a invisvel. Por defeito, o Matlab coloca a grelha invisvel. No exemplo seguinte, apresentada a curva gerada na Figura 7.3 com grelha. >> fplot('sind(2*x)/(2*x)',[-1080,1080]) >> grid on

Introduo Programao
-3

85

20

x 10

15

10

-5

-1000 -800

-600

-400

-200

200

400

600

800

1000

FIGURA 7.4 Grfico com grelha da funo y = sind(2x)/(2x)

7.3.3 Texto

O Matlab tem um grande conjunto de comandos para a insero de texto em grficos. De entre elas, destacam-se os seguintes: Comando gtext Serve para inserir uma caixa de texto, na posio especificada pelo utilizador com o rato. Ao executar este comando, o Matlab abre a Janela de Comandos, e o utilizador especifica a posio da caixa de texto com o rato. A sintaxe deste comando :
gtext (texto)

Comando text Serve para inserir uma caixa de texto, de tal forma que o primeiro caractere inserido na posio indicada pelas coordenadas x e y (de acordo com os eixos da figura). A sintaxe deste comando :
text (x,y,texto)

Comando gtext Serve para adicionar um ttulo a um grfico no topo da figura. A sintaxe deste comando :

Introduo Programao
title (texto)

86

Comando xlabel Serve para rotular (atribuir um nome) o eixo dos XX. A sintaxe deste comando :
xlabel (texto)

Comando legend Serve para criar uma legenda para o(s) grfico(s). No caso de vrios grficos, os textos a serem colocados na legenda, devem entrar na ordem em que os grficos so criados, por forma a legend-los correctamente. A sintaxe deste comando :
legend (texto (1), texto (2), ,texto (n))

Por defeito coloca-a no canto superior direito. De seguida, vamos aplicar as funes de texto referidas atrs, no exemplo seguinte de execuo do grfico da funo y=x2+6. >> fplot('x^2+6',[0,6]) >> grid on >> gtext('Localizao escolha') >> text(4,15,'Texto no ponto 4,15') >> xlabel('Eixo dos XX') >> ylabel('Eixo dos YY') >> title('Grfico de x^2+6') >> legend('x^2+6')

Introduo Programao

87

Grfico de x 2+6 45 x 2+6 40 Localizao escolha 35

30 Eixo dos YY

25

20

15

Texto no ponto 4,15

10

3 Eixo dos XX

FIGURA 7.5 Grfico da funo y = x2+6 7.4

MLTIPLOS GRFICOS

Muitas vezes necessrio juntar vrios grficos numa mesma figura.


120 100 80 60 40 20 0 -20 -40 -2

-1

FIGURA 7.6 Mltiplos Grficos

Introduo Programao

88

A Figura 7.6 ilustra um desses exemplos. Existem 3 maneiras de imprimir vrios grficos juntos. A mais simples e a que vamos estudar - com o comando plot; as outras duas com o comando hold on e o comando line. Dois ou mais grficos podem ser colocados numa mesma sada digitalizando-se pares de vectores nos argumentos do comando plot. Por exemplo,
plot (x,y,u,v,t,h)

cria 3 grficos y versus x, v versus u e h versus t, todos na mesma figura. Os vectores em cada par devem ter o mesmo tamanho. O Matlab gera grficos automaticamente em 3 cores diferentes, para que se possam distinguir. Tambm possvel adicionar especificadores de linha aps cada par de variveis. Por exemplo,
plot (x,y,-b,u,v,--r,t,h,:g)

traa na mesma figura: o grfico y versus x com uma linha contnua azul o grfico v versus u com uma linha a tracejado vermelha o grfico t versus h com uma linha pontilhada verde De seguida apresenta-se um exemplo de aplicao com um programa que utiliza o comando plot para gerar mltiplos grficos numa mesma sada. >> x=[-3:0.01:5]; >> y=2*x.^3+2*x.^2-6*x+3; >> prim_deriv=6*x.^2+4*x-6; >> seg_deriv=12*x; >> plot(x,y,'-b',x,prim_deriv,'--r',x,seg_deriv,':k') Este conjunto de comandos traa numa mesma figura trs grficos da seguinte forma: Comea por declarar o vector x que contm o domnio da funo (define pontos entre -3 e 5 espaados por 0,01; Declara o vector y que contm os valores da funo 2x3+2x2-6x+3 (contradomnio); Declara o vector prim_deriv que contm os valores da 1 derivada; Declara o vector seg_deriv que contm os valores da 2 derivada; Cria 3 grficos na mesma figura: y versus x em linha contnua azul, prim_deriv versus x em linha a tracejado vermelho e seg_deriv versus x a trao pontilhado preto. De seguida mostra-se a figura gerada por este conjunto de comandos.

Introduo Programao

89

300

250

200

150

100

50

-50 -3

-2

-1

FIGURA 7.7 Mltiplos Grficos y = 2x3+2x2-6x+3, y e y

Вам также может понравиться