Introducao Ao Matlab

download Introducao Ao Matlab

of 42

Transcript of Introducao Ao Matlab

INTRODUO AO CLCULO E PROGRAMAO EM MATLAB

Fernando Carreira e Pedro Silva

Dezembro, 2007

ndice1. 2.2.1. 2.2. 2.3. 2.4. 2.5. 2.6.

INTRODUO ...................................................................................................... 3 O AMBIENTE DE TRABALHO.......................................................................... 3Janela de comandos (Command Window).................................................................................4 Navegador de pastas (Current Directory)..................................................................................5 Espao de trabalho (Workspace) ................................................................................................5 Histrico de comandos (Command History)..............................................................................6 Editor de cdigo (Editor).............................................................................................................7 Janela de ajuda (Help) .................................................................................................................7

3.

VARIVEIS E OPERAES .............................................................................. 8

3.1. Variveis Numricas ..................................................................................................................10 3.1.1. Variveis numricas inteiras....................................................................................................10 3.1.2. Variveis numricas de virgula flutuante ................................................................................12 3.1.3. Arredondamentos ....................................................................................................................12 3.1.4. Operaes aritmticas..............................................................................................................13 3.1.5. Funes de clculo ..................................................................................................................14 3.1.6. Construo de matrizes ...........................................................................................................15 3.1.7. Dimenso e indexao de matrizes..........................................................................................16 3.1.8. Operaes com matrizes..........................................................................................................18 3.1.9. Adio e subtraco de matrizes .............................................................................................18 3.1.10. Multiplicao de matrizes........................................................................................................19 3.1.11. Diviso de matrizes .................................................................................................................20 3.2. 3.3. 3.4. 3.5. 3.6. Variveis lgicas.........................................................................................................................21 Variveis alfanumricas ............................................................................................................23 Funes de interaco com o utilizador ...................................................................................24 Matriz de Clulas (cell array) ...................................................................................................24 Estruturas (struct)......................................................................................................................25

3.7. Converso entre diferentes tipos de variveis..........................................................................25 3.7.1. Converso entre variveis numricas e alfanumricas ............................................................26 3.7.2. Converses entre bases numricas ..........................................................................................26 3.8. Formatao da apresentao dos resultados ...........................................................................26

4.

ESTRUTURAS ..................................................................................................... 27

4.1. Estruturas de repetio..............................................................................................................27 4.1.1. Ciclo for ..................................................................................................................................27 4.1.2. Ciclo while...............................................................................................................................28 4.2. Estruturas de inferncia ............................................................................................................28 4.2.1. Estrutura if ...............................................................................................................................28 4.2.2. Estrutura switch-case...............................................................................................................30

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 1

5.

FUNES ............................................................................................................. 31

BIBLIOGRAFIA .......................................................................................................... 34 WEBPAGES DE APOIO............................................................................................. 34 APNDICE A: RESUMO DE FUNES MATEMTICAS APNDICE B: RESUMO DE FUNES MATRICIAIS APNDICE C: RESUMO DE FUNES SOBRE OPERADORES APNDICE D: RESUMO DE FUNES SOBRE STRINGS

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 2

1. IntroduoO Matlab uma ferramenta com grandes capacidades de clculo numrico, destinada resoluo de clculos algbricos e de grandes problemas de engenharia. A palavra Matlab resultando da conjuno de Matrix e Laboratory, sugere a sua especificidade na manipulao dos dados, ou seja, as variveis so guardadas e manipuladas como matrizes. De facto, aquando do seu desenvolvimento no inicio dos anos 70, o Matlab destinava-se resoluo de problemas matriciais, clculos de lgebra e anlise numrica. Ao longo dos anos, foi sofrendo algumas evolues, ao nvel das capacidades computacionais, funcionalidades e do interface grfico que o tm tornado cada vez mais fcil de utilizar na resoluo de problemas complexos de engenharia. Assim, o Matlab tornou-se uma das ferramentas computacionais mais utilizadas na rea da Engenharia, no s pelas funes existentes e grande velocidade de processamento, mas tambm pela facilidade de apresentar resultados, seja por grficos bidimensionais ou tridimensionais, seja por tabelas de dados que podem ser facilmente exportadas para folhas de clculo ou bases de dados. Esta ferramenta contm um vasto leque de funes organizadas por reas de clculo cientfico ou de engenharia, as quais so chamas de toolboxes. Todas as funes existentes nas diversas toolboxes so ficheiros de texto (M-files) que contm linhas de programao em cdigo aberto. Deste modo, os utilizadores podem analisar e adaptar as linhas de programao das funes ou ampliar as potencialidades de clculo das tolboxes, construindo novas funes (M-files). Assim, possvel adaptar todas as potencialidades de clculo do Matlab s necessidades especficas de cada utilizador. O cdigo das funes existentes e a criar pelo utilizador desenvolvido numa linguagem de programao prpria e de simples aprendizagem, contendo todas as rotinas e estruturas de programao existentes nas restantes linguagens de programao.

2. O ambiente de trabalhoAo iniciar a aplicao do Matlab, o utilizador depara-se com o ambiente representado na Figura 2.1. Neste ambiente possvel visualizar vrias sub-janelas com caractersticas especficas e que podem ser activadas ou desactivadas atravs do menu Desktop: Janela de comandos (Command Window) Navegador de pastas (Current Directory) Espao de trabalho (Workspace) Histrico de comandos (Command History) Editor de cdigo (Editor) Janela de ajuda (Help)

O menu Start (Figura 2.1 - 7) permite aceder directamente a ajuda, demos e apoio da web sobre cada toolbox e aplicao interna do Matlab.

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 3

3

2

1 5

4

6

7

Figura 2.1: Ambiente de trabalho do Matlab

2.1. Janela de comandos (Command Window)A janela de comandos (Figura 2.1 - 1) o principal interface entre o Matlab e o utilizador, pois atravs dela que este pode executar funes (M-files), introduzir e manipular variveis e executar comandos do Matlab ou programas nele desenvolvidos. As instrues so inseridas na linha onde aparece o smbolo >> seguido de um cursor a piscar esta linha designada por prompt. Durante a utilizao do Matlab, esta janela vai apresentado a sequncia de instrues introduzidas e os respectivos resultados de clculo ou mensagens de erro. Para repetir ou aceder a instrues j introduzidas o utilizador pode navegar pelo histrico de comandos atravs das teclas e , aparecendo as linhas de cdigo introduzidas na prompt. Para mover o cursor numa dada instruo o utilizador pode usar as teclas e e alter-la usando as teclas de edio conhecidas para digitao em editores de texto. Ao premir a tecla Enter, a instruo existente no prompt executada automaticamente e passa a fazer parte do histrico de comandos. Caso se pretenda executar dois ou mais comando de cada vez (na prtica as instrues sero executadas automaticamente de modo sequencial), o utilizador deve premir CTRL+Enter no fim de cada instruo intermdia, premindo Enter apenas aps a ltima instruo pretendida. Caso o utilizador no pretenda visualizar os resultados de uma instruo dever terminla com ponto e virgula ;

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 4

Para limpar a janela de comandos, o utilizador pode introduzir o comando clc ou clicar em Clear Command Window no menu Edit.

2.2. Navegador de pastas (Current Directory)Para poder executar uma funo (M-file) ou aceder a qualquer outro ficheiro, este dever encontrar-se na pasta de trabalho do Matlab (Figura 2.1 - 2) ou estar definido no conjunto de pastas presentes no path do Matlab. Caso o ficheiro que se pretende executar ou abrir no se encontre nestas situaes o Matlab no o reconhecer. Quando se pretende executar funes ou comandos especficos a uma determinada aplicao usual o utilizador definir a pasta onde se encontram os seus ficheiros como Current Directory. Para definir a pasta de trabalho o utilizador pode clicar no icon (Figura 2.1 - 3) e seleccionar a pasta conforme a Figura 2.2. Todos os ficheiros e pastas existentes na Current Directory aparecem na sub-janela respectiva (Figura 2.1 - 2). Os ficheiros com formatos reconhecidos pelo Matlab (*.m M-files; *.fig - figuras; *.mdl modelos de Simulink, *.mat - ficheiros de dados) podem ser abertos directamente nesta janela atravs de duplo clique com o rato.

Figura 2.2: Seleco da pasta de trabalho

2.3. Espao de trabalho (Workspace)O espao de trabalho onde ficam guardadas todas as variveis criadas numa sesso de Matlab. Nesta janela possvel visualizar as variveis criadas, os seus nomes e os respectivos valores se forem matrizes de pequena dimenso, caso contrrio apenas aparecer a dimenso da matriz (Figura 2.3). Atravs desta janela, o utilizador poderF. Carreira e P. Silva - Introduo ao clculo e programao em Matlab Pag. 5

gravar e abrir variveis guardadas em dispositivos de armazenamento de dados (Disco rgido, memria USB, carto de memria, etc) ou visualizar e imprimir os seus valores. importante que o utilizador grave num dispositivo de armazenamento os dados do espao de trabalho porque, uma vez que o espao de trabalho apenas uma memria voltil, todos os dados sero perdidos quando o Matlab encerrar. Para gravar todas as variveis da sesso, o utilizador pode clicar no icon (Save) e de seguida digitar o nome do ficheiro (*.mat) onde sero guardados as variveis. Quando s se pretende gravar algumas variveis, o utilizador deve premir a tecla CTRL enquanto se clica com o rato nas variveis que pretende guardar, seleccionando-as. O processo de gravar semelhante ao caso anterior. Para abrir os dados guardados num dispositivo de armazenamento, o utilizador dever clicar em (Load) e seleccionar o ficheiro de dados pretendido. Tambm possvel gravar e abrir ficheiros da pasta de trabalho atravs da janela de comandos com os comandos save e load respectivamente. O modo de utilizar estes comandos pode ser visualizado digitando help save ou help load. As variveis podem ser apagadas no espao de trabalho atravs da tecla delete do teclado ou usando o comando clear na prompt. Para apagar todas as variveis da sesso, o utilizador pode digitar na prompt a instruo clear all.

Figura 2.3: Visualizao das variveis no espao de trabalho

2.4. Histrico de comandos (Command History)O histrico de comandos (Figura 2.1 - 6) armazena todas as instrues executadas pelo Matlab agrupando-as por sesso, a qual identificada com a data e hora de incio.

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 6

O utilizador poder executar uma instruo fazendo duplo clique com rato, ou um conjunto de instrues seleccionando-as e premindo a tecla Enter. Ao realizar estas aces as instrues contidas no histrico so executadas automaticamente. Quando o utilizador pretende utilizar uma ou mais instrues do histrico para as alterar, poder copi-las para a janela de comandos seleccionando-as e usando os comandos do menu Copy (CTRL+c) e Paste (CTRL+v) existentes no menu Edit ou clicando com o boto direito do rato sobre as instrues do histrico seleccionadas e na prompt.

2.5. Editor de cdigo (Editor)Quando se pretende executar o mesmo conjunto de instrues diversas vezes, mais prtico gravar essas instrues em M-files do que estar constantemente a repeti-las. Quer essas instrues sejam parameterizveis ou no, podem ser construdas ou editadas atravs do editor de cdigo (Figura 2.4). Depois de gravado, o programa poder ser executado atravs da prompt, colocando o nome do ficheiro, ou fazendo clique com o rato no icon (Run) dentro editor. Para criar um novo M-file, o utilizador pode aceder ao editor digitando edit na prompt ou clicando no icon New M-file (Figura 2.1 - 5)

Figura 2.4: Editor de funes

2.6. Janela de ajuda (Help)Sempre que o utilizador tiver dvidas sobre as toolboxes, funes ou comandos do Matlab poder recorrer ajuda do Matlab (Figura 2.5) premindo a tecla F1, acedendo ao menu Help ou executando a comando helpdesk na janela de comando. Mais informaes encontram-se disponveis em http://www.mathworks.com/support.

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 7

No entanto, o Matlab tambm dispe de informaes de ajuda de rpido acesso na janela de comandos atravs do comando help. Assim, ao executar apenas o comando help, ser apresentado na janela de comandos a listagem de todas as toolboxes. Para visualizar as funes existentes em cada toolbox, dever ser executado help , enquanto que para aceder ajuda de cada funo ou comando dever ser executado help . A partir da verso 7, o Matlab disponibiliza a possibilidade de navegar entre funes e toolboxes atravs de hiperligaes.

Figura 2.5: Visualizao das variveis no espao de trabalho

3. Variveis e operaesO Matlab, para alm de ser uma ferramenta de clculo computacional extremamente poderosa, pode tambm executar operaes aritmticas, trigonomtricas, etc como se tratasse de uma simples calculadora cientfica. De facto, a construo de complexos programas de clculo computacional no mais do que uma sequncia de pequenas operaes. Interessa, portanto, a um programador compreender como que o Matlab executa operaes de clculo e como se pode guardar e manipular os seus resultados. Sempre que se executa um programa de computador necessrio, medida que este vai realizando operaes aritmticas ou lgicas, proceder atribuio de constantes (valor fixo ou o resultado da operao) que devem ser manipuladas ou guardadas na memria enquanto este est a ser executado. Desta forma, surge o conceito de varivel: Uma varivel identifica uma localizao especfica na unidade de memria de um determinado valor do algoritmo que pode ser modificado durante a execuo do mesmo. Assim, os resultados de uma operao aritmtica so automaticamente guardados numa varivel do espao de trabalho. Se o utilizador apenas introduzir na prompt as operaesF. Carreira e P. Silva - Introduo ao clculo e programao em Matlab Pag. 8

ou funes de clculo, o resultado ser guardado na varivel ans (abreviatura de answer). O valor desta varivel temporrio e mudar quando for introduzida outra operao sem a instruo de gravar o resultado numa varivel especfica. Para guardar o resultado numa determinada varivel o utilizador deve introduzir na prompt a instruo = . importante referir que o Matlab case-sensitive, pelo que as variveis com maisculas so diferentes das minsculas. Assim, o utilizador ter de respeitar sempre o nome da varivel quando quiser utilizar os seus valores. No Matlab os dados podero ser armazenados e acedidos em diferentes tipos de variveis: numricas; alfanumricas; lgicas, struct e cell arrays (Tabela 3.1). Em qualquer dos tipos de variveis, a forma geral das variveis uma matriz. A matriz pode conter apenas um elemento no caso do resultado ser apenas um nmero ou ser de dimenso superior. No entanto, importante que o programador retenha o conceito de que as variveis do Matlab so matrizes, e que todas as operaes aritmticas realizadas entre elas devem respeitar as propriedades algbricas do clculo matricial. Tipo de varivel Lgicas Numricas (double por defeito) Dados armazenados Variveis que podem armazenar o resultado de operaes lgicas e apenas contm valores booleanos true ou false. Este o tipo de varivel de defeito do Matlab e armazena os resultados das operaes aritmticas executadas. Estas variveis podem apenas armazenar nmeros inteiros ou de virgula flutuante conforme o tipo de varivel numrica definida (por defeito atribudo o tipo double). So representadas por vectores e matrizes, que podem conter blocos de dados designados por campos. Tabelas em que as clulas podem conter outras tabelas com diferentes tipos de variveis. As variveis alfanumricas so vectores cujas clulas representam o cdigo numrico (cdigo ASCII) para cada carcter.

Estruturas (struct) Matrizes de clulas (cell array) Alfanumricas

Tabela 3.1: Diferente tipos de variveis disponveis no Matlab

A forma de criar os diferentes tipos de varivel no Matlab, depende da forma como se definem os dados e da sintaxe ou funo utilizada (Figura 3.1). a = 10 % varivel X numrica de dupla preciso qual foi atribuda a constante 10. b = true % varivel X lgica qual foi atribuda o valor lgico verdade. c = Nome % varivel X alfanumrica qual foi atribuda a constante Nome. d = int8(10) % varivel X qual foi atribuda a constante inteira com oito bits de representao 10. e.valor = 10 % varivel tipo estrutura onde ao campo valor foi atribudo a constante 10. f = {Nome,20} % varivel do tipo cell array com duas clulas onde a primeira clula foi atribudo a constante Nome e segunda a constante 20.Figura 3.1: Exemplo de diferentes tipos de variveisF. Carreira e P. Silva - Introduo ao clculo e programao em Matlab Pag. 9

Ao executar estas instrues, os diferentes tipos de variveis (conhecidas no Matlab como Class) podem ser visualizadas na janela do Workspace, assim como o respectivo valor atribudo (Figura 3.2).

Figura 3.2: Visualizao de diferentes tipos de variveis no Matlab

3.1. Variveis NumricasAs variveis numricas podem conter nmeros reais ou inteiros, podendo ser utilizados diferentes nmeros de bits para proceder ao armazenamento de cada nmero de uma determinada matriz. Assim, as variveis numricas podem ser agrupadas em 2 grupos, sendo o nmero de bits definido pela funo de declarao utilizada: Inteiras. o int8 8 bits para representar 1 nmero inteiro o int16 16 bits para representar 1 nmero inteiro o int32 32 bits para representar 1 nmero inteiro o int64 64 bits para representar 1 nmero inteiro o uint8 8 bits. 1 bit para representar o sinal e 7 para 1 nmero inteiro o uint16 16 bits. 1 bit para representar o sinal e 15 para 1 nmero inteiro o uint32 32 bits. 1 bit para representar o sinal e 31 para 1 nmero inteiro o uint64 64 bits. 1 bit para representar o sinal e 63 para 1 nmero inteiro Virgula flutuante. o single 32 bits. 1 bit para o sinal, 8 bits para o expoente, 23 bits para a mantissa o double 64 bits. 1 bit para o sinal, 11 bits para o expoente, 52 bits para a mantissa

3.1.1. Variveis numricas inteirasAs variveis numricas inteiras apenas armazenam valores inteiros dentro de uma determinada gama, conforme o tipo de varivel escolhida (Tabela 3.2). Este tipo de variveis pode ser utilizado quando os valores de uma varivel so inteiros dentro das gamas mencionadas. Neste tipo de variveis, as gamas para as variveis com sinal e sem sinal so iguais (2(n bits) nmeros inteiros), verificando-se apenas diferena nos valores mximos e mnimos armazenados.

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 10

Nas variveis inteiras sem sinal, todos os bits so dedicados ao armazenamento do nmero, sendo gravado na memria a converso directa numrica para binria do nmero pretendido. Assim, o nmero mnimo (zero na numerao decimal) corresponde a todos os bits igual a zero (0) enquanto que o nmero mximo (2n bits-1) corresponde todos os bits igual a um (1). Relativamente s variveis inteiras com sinal o modo de armazenamento semelhante, com a ressalva de que 1 bit dedicado a armazenar o sinal. Tipo de dados Inteiro de 8 bits sem sinal Inteiro de 16 bits sem sinal Inteiro de 32 bits sem sinal Inteiro de 64 bits sem sinal Inteiro de 8 bits com sinal Inteiro de 16 bits com sinal Inteiro de 32 bits com sinal Inteiro de 64 bits com sinal Gama de valores Funo de converso uint8 uint16 uint32 uint64 int8 int16 int32 int64

[0,2 [0,2 [0,2 [0,2 [ 2 [ 2 [ 2 [ 27 15 31

8

1

16 32 64

] 1] 1] 1] ] 1] 1] 1]

,2 7 1 ,215 ,2 31 ,2 63

63

Tabela 3.2: Gamas de valores admitidas nas variveis numricas inteiras

Quando numa destas atribuies a variveis inteiras se ultrapassa o valor permitido pelo nmero de bits, atribudo varivel o valor mnimo ou mximo da gama em questo, conforme o limite que foi ultrapassado (Figura 3.3). importante salientar que qualquer operao aritmtica realizada com nmeros inteiros tem sempre como resultado um nmero inteiro (varivel f da Figura 3.3). % Declarao de varivel inteira de 8 bits com sinal a = int8(20) % Retorna a=20 % Declarao de varivel inteira de 8 bits com sinal b = int8(200) % Retorna b=127 % Declarao de varivel inteira de 8 bits sem sinal c = uint8(200) % Retorna c=200 % Declarao de varivel inteira de 16 bits com sinal d = int16(-200) % Retorna d=-200 % Declarao de varivel inteira de 16 bits sem sinal e = uint16(-20) % Retorna e=0 % Clculo com varivel inteira de 16 bits sem sinal f = uint16(20)*1.54435e2 % Retorna f= 3089Figura 3.3: Exemplo de declarao para variveis numricas inteiras

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 11

3.1.2. Variveis numricas de virgula flutuantePara declarar variveis do tipo vrgula flutuante, possvel utilizar 32 e 64 bits, sendo estas designadas por variveis de preciso simples e de dupla preciso respectivamente. Por defeito, as variveis numricas que no so devidamente declaradas (inteiras ou de preciso simples), conforme a varivel a da Figura 3.4, assumem o tipo dupla preciso (varivel de virgula flutuante de 64 bits 8 bytes por elemento da matriz). As variveis de dupla preciso utilizam 64 bits para representar o valor armazenado, sendo 1 bit para o sinal, 11 bits para o expoente e 52 bits para a mantissa, obtendo-se assim uma gama bastante alargada para a definio de um determinado nmero real, [- 1.79769e + 308, - 2.22507e - 308] e [2.22507e - 308, 1.79769e + 308] . Para declarar uma varivel de preciso simples necessrio utilizar a funo single (ver variveis b e c da Figura 3.4). Este tipo de varivel utiliza 32 bits, 1 bit para o sinal, 8 bits para o expoente e 23 bits para a mantissa, para armazenar nmeros reais entre [- 1.1754944e - 038,-3.4028235e + 038] e [1.1754944e - 038,3.4028235e + 038] . Sempre que o valor a atribuir a uma varivel superior ao limite mximo ou inferior ao mnimo (conforme a gama), utilizada a expresso Inf ou Inf, definindo, deste modo, a noo de + ou , respectivamente, de uma plataforma de clculo computacional (ver variveis c e d da Figura 3.4). preciso notar que a preciso real obtida depende da capacidade de processamento do hardware, ou seja, do nmero de bits disponveis no hardware para fazer a representao de um nmero. Esta falta de resoluo que por vezes pode surgir na representao de um nmero, pode gerar pequenos erros no valor obtido conforme pode ser visualizado nas variveis e, f e g da Figura 3.4. Na primeira instruo, devido falta de capacidade de representar o nmero real 4/3 utilizando os 64 bits, o resultado final no zero, mas sim uma aproximao. Outros exemplos podem ser demonstrados quando a converso de um nmero real para um determinado conjunto de bits no feita com a preciso desejada (ver variveis f e g da Figura 3.4). Sempre que um determinado clculo numrico produz um resultado que no numrico, como o caso da varivel h da Figura 3.4, atribuda varivel a expresso NaN (Not a Number). a = 1e100 b = single(123e15) c = single(1e100) d = -a*1e300 e = 1-3*(4/3-1) f = sin(pi) g = cos(pi/2) h = 0/0 % Retorna a=1.0000e+100 % Retorna b=1.2300e+017 % Retorna c=Inf % Retorna d=-Inf % Retorna e=2.2204e-016 em vez de e=0 % Retorna f=1.2246e-016 em vez de f=0 % Retorna g=6.1232e-017 em vez de g=0 % Retorna h=NaN - indeterminao do tipo 0/0

Figura 3.4: Exemplo de converso para variveis numricas inteiras

3.1.3. ArredondamentosSempre que introduzido uma constante no inteira numa varivel numrica inteira (varivel a da Figura 3.5), ou utilizada uma varivel deste tipo para realizar uma operao aritmtica (varivel b da Figura 3.5), produzido um arredondamento para oF. Carreira e P. Silva - Introduo ao clculo e programao em Matlab Pag. 12

nmero inteiro mais prximo. Tal acontece porque a forma como os bits so utilizados para armazenar no permite o armazenamento da parte fraccionria. O arredondamento efectuado com a converso do valor de vrgula flutuante para uma varivel inteira semelhante ao efectuado pela funo round. No entanto, esta funo apenas faz o arredondamento ao inteiro mais prximo sem efectuar qualquer converso do tipo de varivel (varivel c da Figura 3.5). Existem funes que fazem outros tipos de arredondamentos: fix, ceil e floor que so utilizadas para arredondamentos em direco a zero, a mais infinito e menos infinito, respectivamente. Estas funes, semelhana da funo round, tambm executam um arredondamento para um nmero inteiro, sem fazer qualquer tipo de converso do tipo de varivel (variveis d, e, e f da Figura 3.5). Se o utilizador pretender armazenar o resultado do arredondamento numa varivel numrica ter que efectuar, uma funo de converso (variveis g, h e i da Figura 3.5). importante salientar que todas as funes de arredondamento apenas arredondam para nmeros inteiros. No entanto, juntando algumas operaes aritmticas s potencialidades destas funes, possvel fazer arredondamentos com casas decimais, como o caso da varivel j da Figura 3.5 que armazena um arredondamento s dcimas. a = uint8(22.1) % Retorna a=22 b = a + 0.6 % Retorna b=23 c = round(22.1) % Retorna c=22 d = fix(0.8) % Retorna d=0 e = ceil(-22.9) % Retorna e=-22 f = floor(0.9) % Retorna f=0 g = uint8(fix(-0.2)) % Retorna g=0 h = uint16(ceil(22.1)) % Retorna h=23 i = int8(floor(-0.2)) % Retorna i=-1 j = round(2.234*10)/10 % Retorna j=2.2 (class uint8) (class uint8) (class double) (class double) (class double) (class double) (class uint8) (class uint16) (class int8) (class double)

Figura 3.5: Exemplo de converso para variveis numricas inteiras

3.1.4. Operaes aritmticasAs operaes aritmticas so executadas atravs dos operadores de clculo apresentados na Tabela 3.3 segundo as regras de prioridade da multiplicao e adio. Nestas operaes tambm podem ser utilizados parntesis ( e ) para estabelecer prioridades de clculo. Operador + * / ^ Descrio Adio Subtraco Multiplicao Diviso Potenciao

Tabela 3.3: Operaes aritmticas bsicas

Na Figura 3.6 possvel visualizar alguns exemplos de operaes aritmticas simples e com manipulao de variveis. Como se pode visualizar, algumas das operaes noF. Carreira e P. Silva - Introduo ao clculo e programao em Matlab Pag. 13

guardam o resultado em nenhuma varivel, ficando temporariamente guardados na varivel ans, enquanto que outras guardam os resultados nas variveis A, x, Cd, b, r e area. % Soma de dois algarismos 2+3 % Soma de 6 ao resultado anterior ans + 6 % Guardar o resultado anterior numa varivel A = ans % Incremento de 1 unidade a uma varivel x=0; x = x + 1 % Operaes aritmticas Cd = 32*9 + 1/10 + 3 a = 12*(2+1)/6 + 4 % Operaes de exponenciao 3^3 5^(1/2) % Clculo da rea de um circulo r=5 % Raio do circulo area = pi * r^2 % rea do circuloFigura 3.6: Exemplo de operaes aritmticas

3.1.5. Funes de clculoO Matlab possui um vasto leque de funes de clculo que podem ser utilizadas isoladamente ou em conjunto com operadores aritmticos, podendo o seu resultado ser guardado em variveis especficas ou na varivel de resultados temporria (Figura 3.2). Algumas destas funes podem ser visualizadas nos Apndices A, B, C e D, constando as funes da Figura 3.7 no Apndice A. % Operaes com funes trigonomtricas x = pi/3; ang = sin(x)/cos(x) % Operaes com funes trigonomtricas x = pi/3; ang = sin(x)/cos(x) % Arredondar para inteiro mais prximo de A A = 3.654; round(A) % Parte inteira de 3.7 fix(3.7) % Logaritmo decimal de 20 log10(20) % Raiz quadrada de 4 sqrt(4)Figura 3.7: Exemplos de funes matemticas

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 14

3.1.6. Construo de matrizesAs variveis do Matlab so definidas como matrizes embora possam conter apenas 1 clula (conforme foi abordado na seco anterior), 1 linha ou 1 coluna (tomando o nome de vector linha ou vector coluna, respectivamente) ou ter uma dimenso de n linhas por m colunas. As matrizes tambm podem ter o mesmo nmero de linhas e de colunas tomando o nome de matrizes quadradas de ordem n. A definio de vectores e matrizes feita com parntesis rectos [ e ], sendo as clulas separadas por espao , virgula , (separar os elementos da mesma linha) ou ponto e virgula ; (separar elementos de colunas diferentes). Assim, a separao de elementos numa linha feita com espao ou virgula , (variveis a e b da Figura 3.9), enquanto que a separao de elementos de coluna feita com ponto e virgula ; (varivel c da Figura 3.9). Sendo uma matriz de ordem m x n um conjunto de elementos agrupados em m linhas e n colunas:

a11 a a = 21 ... a m1

a12 a 22 ... a m1

... a1n ... a 2 n ... ... ... a mn

A construo de uma matriz no Matlab uma sequncia de vectores linha separados por ponto e virgula ;(variveis e e f da Figura 3.8). A construo de uma matriz implica que todas as linhas tenham obrigatoriamente a mesma dimenso, nem que contenham clulas nulas. Uma matriz pode ser definida com base em variveis (vectores ou matrizes), desde que tenham o mesmo nmero de colunas (varivel g da Figura 3.8). A operao de transposio de uma matriz onde os elementos coluna so transformados em linha e vice-versa feita colocando uma apstrofe (varivel d da Figura 3.8). % Vector linha a = [1 3 5 7 9] % Vector linha b = [2, 4, 6, 8, 10] % Vector coluna c = [2; 4; 6; 8; 10] % Transposio de um vector coluna d = c' % Matriz 2x2 e = [1 3; 2 4] % Matriz 3x2 f = [1, 2, 3; 2, 4, 0] % Matriz 5x3 escrita com base em a e b g = [a; b; 1 2 3 4 5]Figura 3.8: Construo de vectores e matrizes

Existe a possibilidade de construir um vector com elementos escalonados, especificando o intervalo e a diferena entre os vrios elementos. A varivel x da Figura 3.9 apresenta

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 15

a construo de um vector com elementos compreendidos entre 0 e 1, com um intervalo de 0.2 entre si. O retorno desta expresso ser x = [0 0.2 0.4 0.6 0.8 1]. % Vector com algarismos do intervalo [0,1] escalonados em intervalos de 0.2 x = [0:0.2:1]Figura 3.9: Construo de vector com passo constante

Para alm destas, existem outras formas de construir matrizes que podero ser teis em alguns casos. O Matlab permite construir uma matriz m x n com todos os elementos nulos utilizando a funo zeros(m,n) (varivel h da Figura 3.10), ou unitrios usando a funo ones(m,n) (varivel i da Figura 3.10). Atravs destas funes tambm possvel construir matrizes quadradas introduzindo apenas 1 argumento: zeros(m) ou ones(m). Para se construir matrizes com valores aleatrios existem 2 funes: rand e randn. A funo rand gera uma matriz com valores aleatrios normalizados entre 0 e 1, enquanto que a randn constri uma matriz com valores segundo uma distribuio normal de mdia igual a zero (0) e desvio padro igual a um (1). Da mesma forma que as funes anteriores as rand e randn tambm podem ser utilizadas com 1 ou 2 argumentos, construindo uma matriz quadrada ou rectangular, respectivamente (variveis j e k da Figura 3.10). A funo eye constri uma matriz identidade quadrada ou rectangular conforme se usem 1 ou 2 argumentos (variveis l e m da Figura 3.10). Um resumo de funes sobre matrizes pode ser visualizado no Apndice B. % Matriz 3 x 4 de zeros (0) h = zeros(3, 4) % Matriz 4 x 2 de uns (1) i = ones(4, 2) % Matriz 2 x 2 com elementos aleatrios segundo uma distribuio uniforme j = rand(2) % Matriz 3 x 2 com elementos aleatrios segundo uma distribuio normal k = randn(3, 2) % Matriz identidade de dimenso 3 x 3 l = eye(3) % Matriz identidade de dimenso 2 x 3 m = eye(2, 3)Figura 3.10: Funes para construo de matrizes

3.1.7. Dimenso e indexao de matrizesA dimenso de uma matriz pode ser calculada atravs da funo size, onde o retorno 1 vector com 2 elementos m e n, indicando o nmero de linhas e de colunas respectivamente (varivel d ou [m,n] da Figura 3.11). Atravs desta funo tambm possvel determinar apenas o nmero de linhas ou de colunas, introduzindo um segundo argumento (1 ou 2) conforme o que se pretende (determinao de m ou n da Figura 3.11).

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 16

% Determinao da dimenso da matriz a (linhas e colunas) d = size(a) % d um vector linha com 2 elementos (m e n) % Determinao da dimenso da matriz a (linhas e colunas) [m,n] = size(a) % Determinao do nmero de linhas da matriz a m = size(a,1) % Determinao do nmero de colunas da matriz a n = size(a,2)Figura 3.11: Determinao da dimenso de uma matriz

O acesso a um determinado elemento de um vector ou de uma matriz feito com base no seu ndice. Considerando o seguinte vector e matriz:

a = [1 4 3 2]4 7 2 b= 5 1 3 O acesso aos valores do vector a definido por a(i), onde i o ndice do elemento do vector. Esta expresso igual quer se trate de um vector linha ou coluna. Sendo o acesso aos valores da matriz b definido por b(i,j), onde i o nmero da linha e j da coluna. O Matlab permite aceder a um conjunto de valores de um vector ou de uma matriz atravs da utilizao de dois pontos :. Assim, a expresso a(c:d) retorna um vector com todos os elementos compreendidos ente os ndices c e d, enquanto que a colocao de : significa todos os elementos da coluna ou da linha (Figura 3.12). % Acesso a 1 elemento do vector a a(1) % retorna ans=1 % Acesso a 2 elemento do vector a a(2) % retorna ans=4 % Acesso ao elemento da 2 linha e 1 coluna da matriz b b(2,1) % retorna ans=5 % Acesso ao elemento da 1 linha e 2 coluna da matriz b b(1,2) % retorna ans=7 % Acesso ao elemento da 2 linha e 3 coluna da matriz b b(2,3) % retorna ans=3 % Acesso aos elementos do vector a, entre os ndices 2 e 4 a(2:4) % retorna um vector ans=[4 3 2] % Acesso penltimo e ltimo elementos do vector a a(end-1:end) % retorna um vector ans=[3 2] % Acesso a todos os elementos da 2 linha da matriz b b(2,:) % retorna um vector ans=[5 1 3] % Acesso aos elementos da 1 2 linha e da 2 3 coluna da matriz b b(1:2,2:3) % retorna uma sub-matriz ans=[7 2; 1 3] % Acesso aos elementos de todas as linhas e da 2 3 coluna da matriz b b(:,2:3) % retorna uma sub-matriz ans=[7 2; 1 3] % Acesso aos elementos de todas as linhas e da 1 e 3 colunas da matriz b b(:,[1 3]) % retorna uma sub-matriz ans=[4 2; 5 3]Figura 3.12: Indexao dos elementos de um vector e de uma matrizF. Carreira e P. Silva - Introduo ao clculo e programao em Matlab Pag. 17

Atravs da indexao de vectores e matrizes tambm possvel alterar os valores dos seus elementos, especificando o ndice do elemento, vector ou sub-matriz para o qual se quer dar uma nova atribuio. Para fazer uma nova atribuio importante que a expresso utilizada tenha uma dimenso matricial igual quer se trate de um elemento simples, um vector ou uma matriz. As regras para a alterao de matrizes so as mesmas das utilizadas para a sua construo. A Figura 3.13 apresenta algumas formas de fazer a alterao dos elementos de um vector e de uma matriz. Neste caso o vector e a matriz formam alterados, atravs da atribuio de nmeros, vectores ou matrizes especficas. Tambm se poderia fazer a alterao com base no retorno de uma funo. Para isso, o utilizador teria de saber qual a dimenso da matriz de retorno da funo de modo a dar a indexao correcta. % Alterao do 1 elemento do vector a para 2 a(1) = 2 % Alterao do elemento da 2 linha e 1 coluna da matriz b para 10 b(2,1) = 10 % Alterao dos elementos do vector a, entre os ndices 2 e 4 para [2 3 4] a(2:4) = [2 3 4] % Alterao de todos os elementos da 2 linha da matriz b para [1 5 3] b(2,:) = [1 5 3] % Alterao dos elementos da 1 2 linha e da 2 3 coluna da matriz b para a sub-matriz [1 3; 2 7] b(1:2,2:3) = [1 3; 2 7] % Alterao dos elementos de todas as linhas e da 2 3 coluna da matriz b para a sub-matriz [7 1; 2 3] b(:,2:3) = [7 1; 2 3] % Apagar a 2 coluna da matriz b b(:,2) = []Figura 3.13: Alterao dos elementos de um vector e de uma matriz

3.1.8. Operaes com matrizes 3.1.9. Adio e subtraco de matrizesAs operaes aritmticas entre vectores ou matrizes devem respeitar as regras algbricas para operaes matriciais. Assim, para operaes de adio ou subtraco de vectores ou matrizes, estes devem ter o mesmo nmero de linhas e de colunas. Estas operaes podem tambm ser realizadas entre escalares, sendo aplicada a operao com o escalar a todos os elementos do vector ou matriz (operaes realizadas com as matrizes a e b apresentadas na Figura 3.14).

1 2 4 3 2 1 8 9 5 ; b = 7 9 6 a= 3 7 6 5 8 4

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 18

% Soma de matrizes a + b % Retorna ans=[4 4 5; 15 18 11; 8 15 10] % Diferena de matrizes a b % Retorna ans=[-2 0 3; 1 0 -1; -2 -1 2] % Soma entre escalar e matriz b + 5 % Retorna ans=[8 7 6; 12 14 11; 10 13 9] % Subtraco entre escalar e matriz a - 2 % Retorna ans=[-1 0 2; 6 7 3; 1 5 4]Figura 3.14: Adio e subtraco de matrizes

Enquanto que para a adio e subtraco de matrizes as regras de operao matriciais so de simples compreenso, para a multiplicao e diviso de matrizes, as regras so um pouco mais complexas, especialmente porque o Matlab permite, para alm da multiplicao e diviso matricial, realizar estas operaes elemento a elemento de cada matriz, bem como operaes de diviso esquerda e direita. Estas operaes podem ser feitas com os caracteres de operao apresentados na Tabela 3.4 ou com funes especficas (Apndice C) Operador * .* / ./ \ .\ Descrio Multiplicao matricial Multiplicao elemento a elemento Diviso matricial direita Diviso direita elemento a elemento Diviso matricial esquerda Diviso esquerda elemento a elemento

Tabela 3.4: Operaes de multiplicao e diviso

Para uma melhor compreenso destas operaes, considere 2 matrizes de ordem m x n:

a11 a a = 21 ... a m1

a12 a 22 ... a m1

... a1n b11 ... a 2 n e b = b21 ... ... ... ... a mn bm1

b12 b22 ... bm1

... b1n ... b2 n ... ... ... bmn

3.1.10. Multiplicao de matrizesA multiplicao matricial, segundo as regras de operaes matriciais, define que o nmero de colunas da matriz da esquerda seja igual ao nmero de linhas da matriz da direita, sendo o resultado definido por:

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 19

k a1 j b j1 jk=1 a b a * b = 2 j j1 j =1 k ... a b j =1 mj j1

a aj =1 j =1 k

k

1j

bj2 b j2

2j

aj =1

k

...mj

b j2

b jn j =1 k ... a 2 j b jn j =1 ... ... k ... a mj b jn j =1 ...

a

k

1j

Enquanto que na multiplicao elemento a elemento, apenas realizada a operao de multiplicao entre clulas com o mesmo ndice:

a11b11 a b a. * b = 21 21 ... a m1bm1

a12 b12 a 22 b22 ... a m 2 bm 2

... a1n b1n ... a 2 n b2 n ... ... ... a mn bmn

Considerando as matrizes a e b construdas na seco 3.1.8.1., a Figura 3.15 ilustra possveis operaes de multiplicao realizveis entre matrizes e escalares. % Multiplicao de matrizes a*b % Retorna ans=[37 52 29; 112 137 82; 88 117 69] % Multiplicao elemento a elemento a .* b % Retorna ans=[3 4 4; 56 81 30; 15 56 24] % Multiplicao da matriz a por escalar 2 a*2 % Retorna ans=[2 4 8; 16 18 10; 6 14 12] % Multiplicao da 1 linha da matriz a por escalar 2 a(1,:) * 2 % Retorna ans=[2 4 8]Figura 3.15: Multiplicao de matrizes

3.1.11. Diviso de matrizesA diviso no Matlab pode ser realizada de dois modos: diviso direita (a / b) ou diviso esquerda (a \ b). No primeiro caso, a operao a/b apenas pode ser possvel se a matriz b for invertvel e o nmero de colunas de a for igual ao nmero de linhas de b, sendo o resultado definido por:a / b = a * (b )1

De modo anlogo, a operao a\b ser possvel se a matriz a for invertvel e o nmero de linhas de b for igual ao nmero de colunas de a, sendo o resultado definido por: a \ b = (a ) * b Do mesmo modo que a multiplicao, ambos os modos de diviso, direita ou esquerda, permitem ser operadas elemento a elemento:1

F. Carreira e P. Silva - Introduo ao clculo e programao em Matlab

Pag. 20

a11 / b11 a /b a. / b = 21 21 ... a m1 / bm1

a12 / b12 a 22 / b22 ... a m 2 / bm 2

... a1n / b1n ... a 2 n / b2 n ... ... ... a mn / bmn ... b1n / a1n ... b2 n / a 2 n ... ... ... bmn / a mn

b11 / a11 b12 / a12 b / a b22 / a 22 a. \ b = 21 21 ... ... bm1 / a m1 bm 2 / a m 2

A Figura 3.16 ilustra as operaes de diviso possveis, sendo os resultados apresentados arredondados s centsimas para simplificar a visualizao dos resultados.

% Diviso de matrizes direita a/b % Retorna ans=[-1.71 2 -1.57; 1.1 0.33 0.48; -2.1 1.67 -0.48] % Diviso de matrizes esquerda a\b % Retorna ans=[0.57 -0.38 0.16; -0.09 1.39 0.57; 0.65 -0.1 -0.07] % Diviso direita elemento a elemento a ./ b % Retorna ans=[0.33 1 4; 1.14 1 0.83; 0.6 0.87 1.5] % Diviso esquerda elemento a elemento a .\ b % Retorna ans=[3 1 0.25; 0.87 1 1.2; 1.67 1.14 0.67] % Diviso da matriz a por escalar 2 a/2 % Retorna ans=[0.5 1 2; 4 4.5 2.5; 1.5 3.5 3] % Diviso da 1 linha da matriz a por escalar 2 a(1,:) / 2 % Retorna ans=[0.5 1 2]Figura 3.16: Multiplicao de matrizes

3.2. Variveis lgicasO Matlab permite realizar operaes relacionais utilizando a lgica booleana, onde o retorno das operaes de true (1) se o resultado for verdade e de false (0) caso seja falso. O resultado destas operaes armazenado em variveis lgicas. A comparao entre as variveis numricas feita atravs dos operadores relacionais apresentados na Tabela 3.5, retornando o estado de verdade da operao realizada (Figura 3.17).

a = 2; b = 5; c = 7.5; d = 5 e = a==b % Retorna e=0 f = b <

Descrio Igual a No igual a Maior que Menor que Menor ou igual que Maior ou igual que

Tabela 3.5: Operadores relacionais

Sempre que existir uma lgica de raciocnio que contenha mais que um operador relacional, esta tem de ser implementada com recurso s operaes and ou or entre cada operao. O Matlab dispe de caracteres especiais e algumas funes (ver Apndice C) para realizar as operaes lgicas and, or e not (ver Tabela 3.6) Caracter & | ~ Operao lgica E lgico operao and OU lgico operao or Negao lgica operao not

Tabela 3.6: Operadores lgicos

Segundo a lgica booleana, as operaes apresentadas na Tabela 3.4, quando operadas entre elementos que podem ser verdadeiros (V) ou falsos (F), determinam um resultado que poder ser verdadeiro ou falso (Tabela 3.7). Nesta tabela aparece a operao xor (OU Exclusivo) que realizada atravs de uma funo especfica xor(a,b) e no atravs dos operadores lgicos atrs analisados. A 0 0 1 1 b 0 1 0 1 ~a 1 1 0 0 a&b 0 0 0 1 a|b 0 1 1 1 xor(a,b) 0 1 1 0

Tabela 3.7: Tabela de verdade das operaes lgicas

As equaes lgicas podem simples, contendo apenas uma relao entre 2 variveis, ou mais complexas, envolvendo vrias variveis e operaes relacionais e lgicas, podendo-se utilizar parntesis para determinar a prioridade das operaes (Figura 3.18). Sero condies deste tipo que sero utilizadas mais adiante nas estruturas if e while.

a=1; b=2; c=1;d=2;e=4; f = a==b f = a==c f = b