Anda di halaman 1dari 67

Introduo 1.

1 Informaes iniciais

O Matlab (abreviatura de Matriz Laboratory - Laboratrio de Matrizes) um software de simulao matemtica que realiza operaes matriciais, constri grficos em duas ou trs dimenses, auxilia no processamento de sinais, alm de manipular outras funes especializadas. Ele trabalha com uma linguagem de programao de alto nvel, em um ambiente interativo, para o desenvolvimento de algoritmos, anlise e visualizao de dados e computao numrica. Prprio para as reas tcnica e cientfica, o software tem funes de tratamento numrico de alto desempenho, capazes de resolver problemas computacionais tcnicos de forma mais eficiente do que as tradicionais linguagens de programao. Alm do ambiente interativo, outra facilidade do Matlab a possibilidade de execuo de arquivos texto, contendo uma seqncia de instrues definidas pelo usurio. Esses arquivos texto, que tm extenso . m, podem ser criados e editados dentro ou fora do seu ambiente. 1.2 Janelas

Atravs de objetos grficos denominados janelas, o usurio opera as funcionalidades do programa de forma interativa. A janela principal do Matlabr chama-se Command Window (Janela de Comando), onde os dados e instrues so digitados no prompt >> pelo usurio e, aps a tecla Enter ser pressionada, o programa os processa imediatamente e expe na tela o resultado. Os comandos digitados so armazenados em um buffer de comandos, no qual se pode navegar usando as teclas seta-para-cima " e seta-para-baixo #. Alm disso, teclando-se o texto str, por exemplo, e usando-se as setas " e #, navega-se por todos os comandos iniciados com o texto str. A tecla Esc. limpa o que estiver escrito na linha do comando. Comandos terminados com ponto-e-vrgula no exibem as variveis de resposta na tela. O uso do ponto-e-vrgula til quando a impresso do resultado na tela no interessa, ou quando a impresso muito extensa como, por exemplo, para uma matriz 1000 1000. Deve-se ressaltar que, apesar da impresso ser suspensa, o comando executado pelo programa. Vrios comandos podem ser digitados na mesma linha, desde que estejam separados por vrgula ou ponto-e-vrgula. Comandos muito longos para uma linha podem ser interrompidos por trs pontos ... e continuados na linha seguinte. O exemplo a seguir ilustrativo quanto a esses detalhes. >> a=1, b==... 2; c=a+b A= 1

c= 3 importante apontar que a Janela de Comando normalmente usada para testes de comandos e funes ou simples operaes. Quando se deseja implementar algum programa, projeto ou trabalho utiliza-se o M-File Editor. Neste editor, cria-se um arquivo texto . m com os comandos desejados. Para abrir um novo arquivo-M, clique em File >New > M-file ou simplesmente digite o comando Edit. Aps escrever o programa, pode-se execut-lo pela tecla de atalho F5. Alm da Janela de Comando e do Editor de Arquivo-M, h ainda as janelas Help, Command History, Current Directory e Workspace, que esto respectivamente relacionadas com ajuda, histrico dos ltimos comandos digitados, diretrio corrente do programa e o espao de trabalho onde se visualizam dados e variveis. Essas janelas podem ser mantidas fechadas ou abertas, dependendo da necessidade ou gosto do usurio. Essas outras janelas no so detalhadas nesse documento. 1.3 Ajuda Atravs do comando help, o usurio pode consultar a ajuda do Matlab. Escrevendo se help e o nome da funo, mostrado um pequeno resumo da funo (normalmente de uma linha) seguido de uma descrio mais detalhada da mesma. >> help ones ONES Ones array. ONES(N) is an N-by-N matrix of ones. ONES(M,N) or ONES([M,N]) is an M-by-N matrix of ones. ONES(M,N,P,...) is an M-by-N-by-P-by-... array of ones. ONES(SIZE(A)) is the same size as A and all ones. See also ZEROS. possvel, ainda, procurar por funes cujos resumos contenham determinada palavrachave. Para isto, basta digitar o comando lookfor seguido da palavra desejada. Caso se queira interromper a busca, deve-se teclar CTRL+C. PETTele)) UFF 1.4. Bibliotecas do Matlab

1.4.1

Bibliotecas do Matlab

O Matlab apresenta uma srie de comandos, operadores e funes primitivas, organizadas por categorias, assim como rotinas especficas de diversas reas da engenharia, organizadas em bibliotecas denominadas Toolboxes. Estas categorias e bibliotecas so designadas por tpicos primrios. Para a visualizao de todos estes tpicos, basta digitarem o comando help. Alguns desses tpicos primrios so: general - comandos gerais ops - operadores e caracteres especiais control - biblioteca de sistemas de controles
2

signal - biblioteca de processamento de sinais optim - biblioteca de otimizao Outras bibliotecas abrangem campos variados como aquisio e processamento de imagem, bio-informtica, telecomunicaes, lgica difusa e realidade virtual. Para se aprofundar mais em qualquer biblioteca, basta digitar o comando help tpico. 1.5- Constantes e Variveis O MATLAB faz clculos simples e cientficos como uma calculadora. Para tal, os comandos devem ser digitados diretamente no prompt (>>) do MATLAB, j que este se trata de um software interativo. Por exemplo: >> 3*25 + 5*12 ans = 135 Observe que no MATLAB a multiplicao tem precedncia sobre a adio. Uma constante numrica no MATLAB formada por uma seqncia de dgitos que pode estar ou no precedida de um sinal positivo (+) ou negativo (-) e pode conter um ponto decimal (.). Esta seqncia pode terminar ou no por uma das letras e, E, d ou D, seguida de outra seqncia de dgitos precedida ou no de um sinal de (+) ou de (-). Esta segunda seqncia a potncia de 10 pela qual a primeira seqncia deve ser multiplicada. Por exemplo, 1.23e-1 significa 0, 123. O formato em que uma constante numrica mostrada no MATLAB segue, como opo default, os seguintes critrios: se um resultado inteiro, o MATLAB mostra o nmero como inteiro; quando o resultado real, o MATLAB mostra o nmero com quatro dgitos direita do ponto decimal; se os dgitos do resultado estiverem fora desta faixa, o MATLAB mostra o resultado usando a notao cientfica. Este default pode, entretanto, ser modificado utilizando-se o Numeric Format do item Options na barra de menus. Usando-se a constante numrica (3,5), considere a tabela 5 a ttulo de exemplo dos formatos numricos do MATLAB:

1.6 Operadores aritmticos: 1.11.21.3+ Adio - Subtrao * Multiplicao

1.41.5-

/ Diviso ^ Elevado

1.7 Operadores relacionais: 2.1- = = Igual 2.2- ~= Diferente 2.3- > Maior 2.4- > = Maior ou Igual 2.5- < Menor 2.6- < = Menor ou igual 1.8 Os operadores lgicos permitem a combinao ou negao das relaes lgicas. Os operadores lgicos do MATLAB so: &( E) Conjuno | (OU) Disjuno ~ (No) Negao

1.9 Operador de atribuio ( =)

Representa a atribuio da expresso a sua direita a varivel a sua esquerda. Ex: 1- x= 200 2- y= 0.7 3- z= z+2

2.0 Comandos de entrada e sada:

2.1- Entrada Varivel = input ( Mensagem ) ; Transfere os dados externos via teclado para as varveis indicadas. 2.2- Sada 1- fprintf ( Mensagem % d , Varivel)
4

2- fprintf ( Mensagem %f , Varivel) 3- fprintf ( Mensagem % d. 2\n , Varivel) 4-- fprintf ( Mensagem % g \n , Varivel) 5- disp ( varivel) Mostra o contedo da varivel na tela. 6- disp( Mensagem) Mostra a mensagem na tela. OBS: 1- ; No mostra o contedo da varivel na tela. 2- % Comentrio. 3- clc Limpa a tela. 4- A mensagem vem entre apstrofos. 5- clear varivel. Apaga o contedo da varivel. 6- , Separar comandos em uma mesma linha. 7- clear all .Apagar tudo.

3- Estruturas Condicionais :

3.1- Estrutura condicional simples: if Teste Comandos ; end

3.2- Estrutura condicional composta

1- Com duas opes

if Teste comandos A ;
5

else Teste comandos B ; end

1.2.

Mais de duas opes:

if teste comandos a; elseif teste comandos b; * * * else comandos n;

end

Exerccio:

1. Fazer um programa que leia quatro nmeros distintos. Determine e escreva o menor deles.

Dados { A,B,C,D}

clc a= input ( 'digite a'); b= input (' digite b'); c= input ('digite c'); d= input ('digite d');
6

if a<b & a<c & a<d men=a; elseif b<c & b<d

men= b; elseif c<d men = c; elese men = d;

end

fprintf(' menor= %d',men)

2. Fazer um programa que leia os coeficientes da equao do 2 grau. Determine e escreva as razes reais se houver.

Dados { a , b, c}

d=b^2 4x ^ xc x= ( -b + sqrt (d)) / ( 2 * a) x= ( -b sqrt(d)) / ( 2 * a)

clc a= input ('digite a') ; b= input ('digite b') ; c= input ('digite c') ;
7

if

d>= 0 x1=( -b + sqrt(d)) / ( 2 * a) ; x2=( -b sqrt(d))/ ( 2 * a ) ; fprintf ( ' x1 = % f /n ' , x1) fprintf ( ' x2 = % f 1', x2)

else disp ( ' no existem razes reais ' )

end 4. A estrutura switch-case Quando se faz uso repetido de testes de igualdade com apenas um argumento comum, costuma-se usar a estrutura switch-case. Essa estrutura tem a seguinte forma: switch var_teste case expresso_teste1 comandos1 case {expresso_teste2, expresso_teste3, expresso_teste4 } comandos2 otherwise comandos3 end

Se os testes de igualdade resultarem em falso para todos os casos, os comandos de otherwise (que opcional) sero executados. O exemplo abaixo demonstra uma aplicao da estrutura switch-case. clear all num=input(Escreva um inteiro: ); % Exibe texto e l valor para a varivel. switch num case 1

y=1 case {2, 2.5} y=2 case tres y=3 case {quatro, Quatro, QUATRO } y=4 otherwise y=0 end

. 1) Faa um programa que o usurio possa digitar qualquer ms do ano e como resultado seja mostrado o nmero de dias do ms correspondente.

%Programa para saber quantos dias tem o ms clear; clc; mes=input('digite o mes desejado: ');

switch mes case {'Janeiro','Marco','Maio','Julho','Agosto','Outubro','Dezembro'} disp('31 dias') case {'Fevereiro'} disp('28 ou 29 dias') case {'Abril','Junho','Setembro','Novembro'} disp('30 dias') 5. Comando break
9

Propsito: encerra a execuo de comandos for ou while quando so encontrados. Sintaxe: break Exemplo: Fazer um programa que leia um nmero inteiro positivo. Determine e escreva o segundo maior divisor de n. clc; n=input(Digite um num. Inteiro); For d=1:n IF REM(n,d)==0 Break; End End fprintf( %d ,d);

6. Estruturas de Repeties :

6.1-A estrutura for:

1. for varivel = incio : fim Comandos; end

Obs. A varivel varia de 1 em 1.

: significa at

1. for varivel = incio : variao : fim Comandos ; end


10

Exerccio Resolvidos:

1. Fazer um programa que leia a idade e s sexo de 10 pessoas .Calcule e escreva;

O numero de mulheres com idade entre 17 e 28 anos; A idade mdia dos homens.

Dados{ id, sexo 10 pessoas (np) }

Obs: sexo = 1

- masculino , sexo = 0 feminino

1.

nm 2. idmh = sidh / nh

clc nm = 0 ; sid = 0 ; nh = 0 ; for np = 1 : 10 id = input (' digite idade ' ) ; sexo = input ( ' digite sexo , sexo = i ne sexo = 0 f ' ) ; if sexo = = 0 & id > 17 & id< 28 nm = nm = 1 ;

end

if sexo = = 1 nh=nh + 1 ; sidh = sidh + id ;


11

end end idmh = sidh / nh ; fprintf ( ' idmh = % f /n , idmh ) fprintf (' nm = % d' , nm )

6.2 A Estrutura While :

while teste Comandos ;

end

2. Fazer um programa que leia a idade de um grupo de pessoas . O ltimo dado que no entrara tem idade igual a zero .Calcule e escreva a idade mdia do grupo. Dado{ id} I idha = sid / np clc np = 0 ; sid = 0 ; id = input ( ' digite idade ' ) ; while idn = 0 np = np + 1 ; sid = sid + id ; id = input ( ' digite idade e id = 0 exit ' ) ; end idm = sid / np ; fprintf ( ' idm = % . 2f ', idm )

12

3. Fazer um programa que escreva a soma dos 20 primeiros termos da srie :

7 8 13 14 19

clc so = 0 ; nu = 0 ; for nt = 1: 20 if rem ( nu , 2 ) = = 0 s o = s o + nu ; nu = nu + 5 ;

else so=so + nu ; nu = nu + 1 ;

end

end

fprintf ( ' soma = % d ' , s o )

3. Faa um programa q leia altura, sexo ,idade. O ultimo dado que no entrar tem altura igual a 0.Calcule a porcentagem de mulheres com altura entre 1,6 e 1,72 e idade inferior 28 anos clc nm=0; nh=0;tm=0;so2=0; altura=input('digite altura'); while altura~=0 id=input('digite idade '); sexo=input('digite sexo e sexo=1-m e sexo=0-f '); if sexo==0 tm=tm+1; if altura>1.6 & altura<1.72 & id<28 nm=nm+1; end
13

end altura=input('digite altura e altura=0 exit'); end parm=nm*100/tm; fprintf('parm=%f\n',parm) 4. Fazer um programa que escreva a soma dos n primeiros termos da serie, onde n e x so lidos. clc s=0;d=24;sinal=1;i=6; e=3; termo=input('digite termos'); x=input('digite x'); for nt= 1:termo s=s+x^e*sinal/d; i=i+2; d=d*i*(i-1); e=e*2; sinal=(-1)*sinal; end fprintf('soma=%f',s) 5. Faa um programa que escreva a soma dos 20 primeiros termos da serie. 2 9 10 17 18 25 clc n=2; soma=0; s=9; soma1=0; soma2=0; for nt= 1:10 soma=soma+n; n=n+8; soma1=soma1+s; s=s+8; soma2=soma1+soma; end fprintf('soma=%f',soma2)

Obs:1- who % obtm-se uma lista das variveis na rea de trabalho. 2-whos % mostra mais detalhada s variveis correntes.

7. Funes Matemticas.

1- abs(x). Valor absoluto de x.


14

2- acos(x).Arco cosseno de x. 3- asin(x).Arco seno de x. 4- atan(x). Arco tangente de x. 5- conj(x).Conjugado completo. 6- cs(x). Cosseno de x. 7- cosh(x).Cosseno hiperblico do x. 8- exp(x). Exponencial e*. 9- floor (x). Arredondamento em direo ao infinito. 10- gcd(x,y).Mximo divisor comum de x e y. 11- lcm(x,y). Mnimo mltiplo comum de x e y. 12-log(x).Logaritmo x na base c. 13-log10(x). Logaritmo x na base 10. 14- rem(x,y). Resto da diviso de x por y. 15- round(x).Arredondamento para o nmero inteiro mais prximo. 16- sin(x). Seno de x. 17- sinh(x). Seno hiperblico de x. 18- sqrt(x). Raiz quadrada de x. 19- tang(x).Tangente de x. 20- tanh(x). Tangente hiperblica de x.

8. Vetores

1- x= inicio : fim % um vetor x comeando do valor inicio ate o fim variando de 1 em 1. 2-x= inicio : variao : fim % vetor x comeando do inicio at o fim com o valor da variao. 3- x=lindspace ( inicio,ltimo,n) % vetor x comeando do inicio at o fim,contendo n elementos linearmente espaados. 4- logspace (inicio,fim,n) cria um vetor x com o valor 10 inicio e terminado no vetor 10 fim, contendo n elementos logaritmicamente espaados.

15

Exs: A- x= 1:5 x= 1 2 3 4 5 B- x=1:6.5 x=123456 C- z= 6:-1:1 z=654321 D- k= linspace ( 0,1,6) k= 0 0.2 0.4 0.6 0.8 1

E- x=logspace(0,2,5) x=1 3.1623 10 31.6225 100

5- Para criar um vetor coluna elemento for elemento estes devem estar separados por(;). Ex: v= [ 1.5 ; -3.2 ; 9) v= 1.5 -3.2 9 6- Operador de transposio () transforma um vetor linha para vetor coluna. Ex: y=(1:0.5:3 y =1 1.5 2 2.5 3

7- Endereamento de vetores: os elementos so acessados atravs de seu ndice. Ex: x= 1:10 x(3) % . Acessa o 3 elemento de x. x (6) % . Acessa o 6 elemento de x. c=linspace (10,40,7)
16

c= 10 15 20 25 30 35 40 c (3:5) % .Acessa o 3 ao 5 elemento de c. 30 20 10 C([ 4 , 1]) % .Acessa o 4 e 1 elementos de c. 25 10

9. Operaes Com Matrizes As operaes com matrizes no MATLAB so as seguintes: Transposta; Adio; Subtrao; Multiplicao; Diviso direita; Diviso esquerda; Exponenciao; 9.1 Transposta O caracter apstrofo, " ' " , indica a transposta de uma matriz. Considere os exemplos a seguir: >>A=[1 2 3; 4 5 6; 7 8 0] A= 1 4 7 >> B=A 1 4 2 3 >> x = [-1 0 2]' X = -1 0 2 9.2 Adio e Subtrao
17

2 5 8

3 6 0

7 5 6 8 0

A adio e subtrao de matrizes so indicadas, respectivamente, por "+" e "-". As operaes so definidas somente se as matrizes tiverem as mesmas dimenses. Por exemplo, a soma com as matrizes mostradas acima, A + x, no correta porque A 3x3 e X 3x1. Porm, >> C = A + B aceitvel, e o resultado da soma C= 2 6 10 6 10 10 14 13 0

A adio e subtrao tambm so definidas se um dos operadores um escalar, ou seja,uma matriz l x l. Neste caso, o escalar adicionado ou subtrado de todos os elementos do outro operador. Por exemplo: >> y = x - 1 resulta em Y = -1 1 9.3 Multiplicao A multiplicao de matrizes indicada por "*". A multiplicao x*y definida somente se a segunda dimenso de x for igual primeira dimenso de y. A multiplicao >> x'* y aceitvel, e resulta em Ans =4 evidente que o resultado da multiplicao y'*x ser o mesmo. Existem dois outros produtos que so transpostos um do outro. >> x*y' Ans = 2 1 -1 0 0 0 -4 -2 2

>> y*x' Ans = 2 0 -4

18

1 0 -2 -1 0 2 O produto de uma matriz por um vetor um caso especial do produto entre matrizes. Por exemplo A e X, >> b = A*x que resulta em B= 5 8 -7 Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz. >> pi*x Ans = -3.1416 0 6.2832 Alm da multiplicao matricial e escalar, podemos ter a multiplicao por elemento de matrizes de mesma dimenso. Esse tipo de operao feita utilizando-se um ponto (.)antes do perador de multiplicao ( * ). Ou seja, se A e B so matrizes definidas por A=[ a11a12... a1n; a21a22... a2n; ... ; am1am2... amn] e B=[ b11b12... b1n; b21b22... b2n; ... ; bm1bm2... bmn], entoA.*B =aij*bij. Por exemplo: >> A.*B ans = 1 8 8 21

25 48 0

21 48 9.4 Diviso

Existem dois smbolos para diviso de matrizes no MATLAB "\" e "/". Se A uma matriz quadrada no singular, ento A\B eB/A correspondem respectivamente multiplicao esquerda e direita da matriz B pela inversa da matriz A , ou inv(A)*B e B*inv(A), mas o resultado obtido diretamente. Em geral, X = A\B a soluo de A*X = B X = B/A a soluo de X*A = B Por exemplo, como o vetor b foi definido como A*x, a declarao >> z = A\b resulta em Z= -1
19

0 2 A diviso por elemento entre matrizes definida de maneira similar multiplicao por elemento, ou seja, A./B= aij/bij e A.\B= aij\bij, onde A e B tm mesma dimenso. 9.5 Exponenciao A expresso Ap eleva A p-sima potncia e definida se A matriz quadrada e p um escalar. Se P um inteiro maior do que um, a exponenciao computada como mltiplas multiplicaes. Por exemplo, >> A^3 Ans = 279 360 306 684 873 684 738 900 441 A exponenciao por elemento entre matrizes definida de maneira similar multiplicao por elemento, ou seja, A.B= aijbij,onde A e B tm mesma dimenso. De maneira similar, a potenciao por elemento entre uma matriz e um escalar apresenta as seguintes formas: A.c=aijc e c.A=caij 9.6 Elementos das Matrizes Um elemento individual da matriz pode ser indicado incluindo os seus subscritos entre parnteses. Por exemplo, dada a matriz A: A= 1 2 3 4 5 6 7 8 9 a declarao >> A(3,3) = A(1,3) + A(3,l) resulta em A= 1 2 3 4 5 6 7 8 10 >> A(1:3,2) Ans = 2 5 8 >> A(1:3,2:3) uma submatriz 3x2, que consiste das trs linhas e das ltimas duas colunas de A. Ans =
20

2 5 8

3 6 10

Utilizando os dois pontos no lugar de um subscrito denota-se todos elementos da linha ou coluna. Por exemplo, >> A(1:2,:) Ans = 1 5 2 6 3

uma submatriz 2x3 que consiste da primeira e segunda linhas e todas colunas da matriz A

Funes : O MATLAB possui algumas funes que se aplicam a matrizes como, por exemplo, as funes size (fornece o nmero de linhas e colunas de uma matriz) e length (fornece o maior valor entre o nmero de linhas e colunas). O MATLAB t em tambm funes que se aplicam individualmente cada coluna da matriz produzindo um vetor linha com os elementos correspondentes ao resultado de cada coluna. Se a funo for aplicada transposta de da matriz, os resultados sero relativos a cada linha da matriz. Se o argumento da funo for um vetor, o resultado ser um escalar. algumas dessas funes so: 9.7 Funes com descries: sum soma dos elementos prod produto dos elementos mean mdia aritmtica std desvio padro max maior elemento min menor elemento sort ordena em ordem crescente

9.8 Submatrizes Sendo B uma matriz 5x5 unitria, podemos defini-la atravs da seguinte funo: >> B = ones (5) B= 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Sendo C uma matriz de zeros 3x4, podemos defini-la como:


21

0 0 0 0 0 0 0 0 >> C=zeros(3,4) C 0 0 0 0 Para que o MATLAB gere uma matriz de nmeros aleatrios entre 0 e 1, utilizamos a funo rand (veja tambm a funo randn, utilizando o comando help). Exemplo: 0.2190 0.6789 0.9347 >> D=rand(2,3) D = 0.0470 0.6793 0.3835

10 Grficos no Matlab A construo de grficos no MATLAB mais uma das facilidades do sistema.. Atravs de comandos simples pode-se obter grficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenada 10.1 Grficos Bidimensionais Estes so os comandos para plotar Funes Grficas: Plot ------------------------------------------Plotar linear Loglog---------------------------------------Plotar em escala loglog Semilogx------------------------------------Plotar em semilog Semilogy------------------------------------Plotar em semilog Poolar--------------------------------------Plotar em coordenada polar Bar------------------------------------------Grfico de barras Stem----------------------------------------Sequncia discreta Stairs --------------------------------------Plotar em degrau Hist---------------------------------------Plotar histograma Rose---------------------------------------Plotar histograma em ngulo Compass----------------------------------Plotar em forma de bssola Feather------------------------------------Plotar em forma de pena Fplot---------------------------------------Plotar funo Comet------------------------------------Plotar com trajetria de cometa grficos bidimensionais: Tabela 11 comandos para grficos bidimensionais Se Y um vetor, plot(Y) produz um grfico linear dos elementos de Y versos o ndice dos elementos de Y. Por exemplo, para plotar os nmeros [0.0, 0.48, 0.84, 1.0, 0.91, 0.6,0,14], entre com o vetor e execute o comando plot: >> Y = [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0,14];
22

>> plot(Y)

Se X e Y so vetores com dimenses iguais, o comando plot(X,Y) produz um grfico bidimensional dos elementos de X versos os elementos de Y, por exemplo >> t = 0:0.05:4*pi; >> y = sin(t); >> plot(t,y) O MATLAB pode tambm plotar mltiplas linhas e apenas um grfico. Existem duas maneiras, a primeira usado apenas dois argumentos, como em plot(X,Y), onde X e/ou Y so matrizes. Ento: Se Y uma matriz e X um vetor, plot(X,Y) plota sucessivamente as linhas ou colunas de Y versos o vetor X. Se X uma matriz e Y um vetor, plot(X,Y) plota sucessivamente as linhas ou colunas de X versos o vetor Y. Se X e Y so matrizes com mesma dimenso, plot(X,Y) plota sucessivamente as colunas de X versos as colunas de Y. Se Y uma matriz, plot(Y) plota sucessivamente as colunas de Y versos o ndice de cada elemento da linha de Y. A segunda, e mais fcil, maneira de plotar grficos com mltiplas linhas usando o comando plot com mltiplos argumentos. Por exemplo: >> plot(t, sin(t), t, cos(t), t, sin(t + pi), t, cos(t + pi)) 10.2 Estilos de Linha e Smbolo Os tipos de linhas, smbolos e cores usados para plotar grficos podem ser controlados se os padres no so satisfatrios. Por exemplo, >> X = 0:0.05:1; >> subplot(l2l), plot(X,X.^2,k*)
23

>> subplot(l22), plot(X,X.^2,k --) Outros tipos de linhas, pontos e cores tambm podem ser usados:

TIPO DE PONTO ** * * * * * * * + ++++++++++ x x x x x x x CORES y amarelo m lils c azul claro r vermelho g verde b azul escuro w branco k preto

24

25

26

27

28

29

30

31

32

33

34

35

36

sum Prod Mean Std Max Min Sort Funes de Controle de Baixo Nvel

Soma dos elementos Produto dos elementos Mdia aritmtica Desvio padro Mximo Mnimo Ordem crescente

11 Manipulao de Arquivos
37

O Matlab possui funes para a manipulao de arquivos baseadas na linguagem C. Estas funes permitem a leitura e/ou gravao de dados formatados ou em modo binrio.

11.1 FUNES PARA ABERTURA E FECHAMENTO DE ARQUIVOS

ABERTURA

Antes de ler ou escrever em um arquivo, o mesmo deve ser aberto atravs do uso da funo fopen ( ). Esta funo tem a seguinte sintaxe:

<varivel> = fopen (nome, modo)

ou

[<varivel>,<mensagem>] = fopen (nome, modo)

onde:

modo : r para leitura w para escrita a para acrscimo r+ para leitura e/ou escrita

Se o arquivo for usado em modo binrio, deve-se acrescentar a letra b. Exemplo: rb, wb, etc...

38

11.2 FECHAMENTO

<varivel> = fclose (<varivel usada por fopen ()>)

LEITURA EM FORMATO BINRIO A funo fread () usada para leitura de dados armazenados no formato binrio.

Exemplo : arq = fopen ( 'dados.dat', 'rb' ); A = fread (arq) ; fecharq = fclose (arq);

Este bloco de comandos l todo o contedo do arquivo de nome dados.dat e transfere o contedo para a varivel A, fechando o arquivo a seguir.

Dois argumentos opcionais fornecem funo fread () controle sobre o nmero de valores lidos e a preciso de cada valor.

Exemplo :

arq = fopen ( 'dados.dat', 'rb' ); A = fread ( arq, 100 ); fecharq = fclose (arq);

Este bloco de comandos l os 100 primeiros valores contidos no arquivo "dados.dat" e os transfere para um vetor de nome A.

Trocando-se o vetor de nome A por uma matriz de dimenses 10 X 10, os mesmos dados sero armazenados em uma matriz.

39

arq = fopen ( 'dados.dat', 'rb' ); A = fread ( arq, [10,10] ); fecharq = fclose (arq);

A preciso com que os dados sero lidos dada usando-se os formatos :

char e uchar - para caracteres sinalizados ou no ( 8 bits ) short e long - para inteiros "curtos" ou "longos" ( 16 ou 32 bits ) float e double - para reais com preciso simples ou dupla ( 32 ou 64 bits )

Exemplo

A = fread ( arq, 10, 'float' );

l 10 valores reais e copia estes valores no vetor coluna A.

11.3 ESCRITA EM FORMATO BINRIO A funo fwrite () utilizada para escrever dados em um arquivo binrio. Exemplo :

arq = fopen ( 'magic5.bin', 'wb' ); contador = fwrite ( arq, magic (5), 'long' ); fecharq = fclose (arq);

Este bloco de comandos escreve em um arquivo de nome magic5.bin 25 elementos inteiros de uma matriz especial fechando o arquivo em seguida.

40

11.4 ACESSO DIRETO AO CONTEDO DE UM ARQUIVO

As funes fseek ( ) e ftell ( ) permitem o acesso direto aos elementos de um arquivo. A funo ftell ( ) fornece o deslocamento em bytes do indicador de posio em um arquivo especfico. A funo fseek ( ) reposiciona o indicador de posio permitindo o acesso direto um dos elementos do arquivo.

Ela recebe como argumento o nome do arquivo, dado por fopen () e um nmero positivo ou negativo, indicando avano ou retrocesso de posio. Opcionalmente pode-se passar como parmetro o incio (bof'), o fim ('eof') ou a posio corrente ('cof') do arquivo.

Exemplo: A = [ 1:5 ]; fid = fopen ( 'cinco.bin', 'wb' ); fwrite ( fid, A, 'short' ); status = fclose ( fid ); fid = fopen ( 'cinco.bin', 'rb' ); status = fseek ( fid, 6, 'bof' ); quatro = fread ( fid, 1, 'short' ); posicao = ftell ( fid ); status = fseek ( fid, -4, 'eof' ); tres = fread ( fid, 1, 'short' ); status = fclose ( fid );

11.5 Utilizao de Arquivos Formatados

41

A funo fprintf () juntamente com a funo fscanf () so utilizadas para escrita e leitura usando-se formatos especficos para cada tipo de dado. Os caracteres de controle usados na formatao mais comuns empregados so: %e - para valores reais em notao cientfica %f - para valores reais %d - para valores inteiros %s - para cadeias de caracteres Campos opcionais nos especificadores de formato controlam a quantidade de casas decimais.

Exemplo: x=0:0.1:1; y=[x;exp(x)]; a=fopen('tabelexp.dat',w); fprintf(a,'Funo Exponencial\n\n'); fprintf(a,'%6.2f %12.8f\n',y); b=fclose(a); Este exemplo cria um arquivo texto contendo uma tabela com valores da funo y=exp(x) no intervalo [0,1] A primeira chamada da funo fprintf escreve o ttulo no arquivo, saltando uma linha. A segunda chamada de fprintf escreve a tabela, previamente gravada na matriz y no arquivo. Esta escrita feita no formato real sendo 6 casas para a parte inteira e 2 casas para a parte real do primeiro valor de (x) e 12 casas para a parte inteira e 8 casas para a parte real do segundo valor (f(x)). Os elementos da matriz y so convertidos para a forma 2 colunas. A funo usa os formatos definidos (%6.2f e %12.8f) repetidamente at converter todos os componentes da matriz. Uma outra funo, sprintf (), faz a sada de dados para uma cadeia de caracteres em lugar de faze-la na tela ou em um arquivo. Exemplo: dados=sprintf('A raiz quadrada de %f %10.8e\n',2,sqrt(2)); 11.6 LEITURA DE DADOS GRAVADOS EM UM ARQUIVO TEXTO A funo fscanf(), similar a fprintf() utilizada para leitura de dados formatados gravados em arquivos. Exemplo: a=fopen('tabelexp.dat','r'); titulo=fscanf(a,'%[^\n]'); tabela=fscanf(a,'%6.2f %12.8f',[2 inf]); fecharq=fclose(a); disp(tabela);
42

A primeira linha gravada no arquivo, contendo o ttulo : 'Funo Exponencial\n\n', lida pela primeira chamada feita funo fscanf(). O formato utilizado %[^\n], faz a leitura dos caracteres contido na linha at encontrar um caractere \n. O dados so lidos para uma matriz de nome tabela. Esta varivel tem suas dimenses especificadas pelos parmetros [2 inf ], significando duas linhas e o nmero de colunas sendo estabelecido pela quantidade de elementos gravados no arquivo. O comando disp(tabela); exibir a tabela na linha de comando. O exemplo abaixo : B=fscanf(a,'%5d',100); l os 100 primeiros valores gravados em um arquivo para o vetor coluna B. Uma outra funo, chamada sscanf() utilizada para leitura de dados de um vetor de caracteres, ao invs de faze-lo de um arquivo. Exemplo: raiz=sscanf(dados,'A raiz quadrada de %f %f'); retorna um vetor de coluna contendo 2 e sua raiz quadrada. Exemplos de arquivos: %Exemplo de uso de arquivo do tipo binario %Programa para gravar em arquivo do tipo binario os 30 primeiros %termos da serie 1 5 9 13 ... clear clc arq = fopen('Serie.bin','wb'); termo = 1; for a = 1:30 fwrite(arq,termo,'long'); termo = termo + 4; end fprintf('arquivo criado') fclose(arq); %Exemplo de uso de arquivos do tipo texto %gravarem arquivo do tipo texto os 30 primeiros %termos da serie 1 5 9 13 ... clear clc arq = fopen('Serie.txt','w'); termo = 1; for a = 1:30 fprintf(arq,'%d\t',termo); termo = termo + 4; end fprintf('arquivo criado')
43

fclose(arq); %Exemplo de uso de arquivos do tipo binario %Leitura de arquivo do tipo binario clear clc arq = fopen('Serie.bin','rb'); x = fread(arq,'long'); fprintf('arquivo lido\n') fclose(arq); fprintf('Conteudo do arquivo\n') tam = length(x); for a = 1:tam fprintf('%d\t',x(a)); end %Exemplo de uso de arquivos do tipo texto %Leitura de arquivo do tipo texto clear clc arq = fopen('Serie.txt','r'); x = fscanf(arq,'%d'); fprintf('Arquivo lido\n') fclose(arq); fprintf('Conteudo do arquivo\n') tam = length(x); for a = 1:tam fprintf('%d\t',x(a)); end %Exemplo de uso de arquivos do tipo binario %leitura de arquivo do tipo binario usando % funcao para testar fim de arquivo clear clc fprintf('Conteudo do arquivo Serie.bin\n') arq = fopen('Serie.bin','rb'); x = fread(arq,1,'long'); while ~feof(arq) fprintf('%d\t',x); x = fread(arq,1,'long'); end fclose(arq); %Exemplo de uso de arquivos do tipo texto %leitura de arquivo do tipo texto usando % funcao para testar fim de arquivo clear clc fprintf('Conteudo do arquivo Serie.txt\n') arq = fopen('Serie.txt','r');
44

x = fscanf(arq,'%d',1); while ~feof(arq) fprintf('%d\t',x); x = fscanf(arq,'%d',1); end fclose(arq); %Exemplo de uso de arquivos do tipo binario %Copia o conteudo de um arquivo texto para outro arquivo clear clc arq = fopen('Serie.bin','rb'); mat = fopen('Matriz.bin','wb'); x = fread(arq,[5 6],'long'); fprintf('Arquivo Serie.bin lido\n') fclose(arq); for a = 1:5 for b = 1:6 fwrite(mat,x(a,b),'long'); end end fclose(mat); fprintf('Dados do arquivo Serie.bin copiados para o arquivo Matriz.bin\n') %Exemplo de uso de arquivos do tipo texto %Copia o conteudo de um arquivo texto para outro arquivo texto clear clc arq = fopen('Serie.txt','r'); mat = fopen('Matriz.txt','w'); x = fscanf(arq,'%d',[5 6]); fprintf('Arquivo Serie.txt lido\n') fclose(arq); for a = 1:5 for b = 1:6 fprintf(mat,'%d\t',x(a,b)); end fprintf(mat,'\n'); end fclose(mat); fprintf('Dados do arquivo Serie.txt copiados para o arquivo Matriz.txt\n') %Exemplo de uso de arquivos do tipo binario %escrever em arquivo do tipo binario uma %matriz 11X2 contendo uma tabela de valores %da funcao exponencial clear clc x = 0:0.1:1; y = [x; exp(x)];
45

arq = fopen('exp.bin','wb'); fwrite(arq,y,'double'); fclose(arq); fprintf('Arquivo criado')

%Exemplo de uso de arquivos do tipo texto %escrever em arquivo do tipo texto uma %matriz 11X2 contendo uma tabela de valores %da funcao exponencial clear clc x = 0:0.1:1; y = [x; exp(x)]; fid = fopen('exp.txt','w'); fprintf(fid,'%6.2f%12.8f\n',y); fclose(fid); fprintf('Arquivo criado')

%Exemplo de uso de arquivos do tipo texto %leitura de arquivo do tipo texto copiando %os dados lidos para uma matriz 11X2 contendo uma tabela de valores %da funcao exponencial e exibicao do grafico desta funcao clear clc arq = fopen('exp.bin','rb'); tabela = fread(arq,[2 11],'double'); fclose(arq); fprintf('Conteudo do arquivo\n') for a=1:2 for b = 1:11 fprintf('%f\t',tabela(a,b)) end fprintf('\n') end %Exemplo de uso de arquivos do tipo texto %leitura de arquivo do tipo texto copiando %os dados lidos para uma matriz 11X2 contendo uma tabela de valores %da funcao exponencial e exibicao do grafico desta funcao clear clc fid = fopen('exp.txt','r'); tabela = fscanf(fid,'%f',[2 11]); fclose(fid); fprintf('Conteudo do arquivo\n') for a=1:2 for b = 1:11 fprintf('%f\t',tabela(a,b))
46

end fprintf('\n') end x = tabela(1,:); y = tabela(2,:); plot(x,y) title('Grafico da funcao exeponencial y = e^x') grid

%Programa para ler uma matriz quadrada contendo valores inteiross %e imprimir a quantidade de elementos pares situados nas linhas impares %acima da diagonal secundaria, gravando esta informacao em um arquvo %binario clear clc ordem = input('Digite a ordem da matriz : '); mat = fix(100*rand(ordem,ordem)); quant = 0; for a = 1:ordem for b = 1:ordem if ((a+b) == (ordem + 1)) & (mod(mat(a,b),2) == 0 ) & (mod(a,2) == 1) quant = quant + 1; end end end fprintf('Matriz criada\n') for a = 1:ordem for b = 1:ordem fprintf('%d\t',mat(a,b)) end fprintf('\n') end fprintf('\nQuantidade de elementos pares situados nas linhas impares da diagonal secundaria : %d',quant) arq = fopen('quantparesacimadiagsec.bin','wb'); texto1 = 'Quantidade de elementos pares situados nas linhas impares da diagonal secundaria : '; fwrite(arq,texto1); fwrite(arq,quant,'long'); fclose(arq); %Programa para ler uma matriz quadrada contendo valores inteiros %e imprimir a quantidade de elementos pares situados nas linhas impares %acima da diagonal secundaria, gravando esta informacao em um arquvo texto clear clc ordem = input('Digite a ordem da matriz : '); mat = fix(100*rand(ordem,ordem)); quant = 0;
47

for a = 1:ordem for b = 1:ordem if ((a+b) < (ordem + 1)) & (mod(mat(a,b),2) == 0 ) & (mod(a,2) == 1) quant = quant + 1; end end end fprintf('Matriz criada\n') for a = 1:ordem for b = 1:ordem fprintf('%d\t',mat(a,b)) end fprintf('\n') end fprintf('\nQuantidade de elementos pares situados nas linhas impares acima da diagonal secundaria : %d',quant) arq = fopen('quantparesacimadiagsec.txt','w'); texto1 = 'Quantidade de elementos pares situados nas linhas impares acima da diagonal secundaria : '; fprintf(arq,'%s',texto1); fprintf(arq,'%d',quant); fclose(arq); %Programa para ler uma matriz quadrada contendo valores inteiross %e imprimir a quantidade de elementos menores que 20 situados %abaixo da diagonal secundaria, gravando estes elementos em um %arquivo binario clear clc ordem = input('Digite a ordem da matriz : '); mat = fix(100*rand(ordem,ordem)); quant = 0; arq = fopen('menores_20_abaixo_diag_sec.bin','wb'); for a = 1:ordem for b = 1:ordem if ((a+b) > (ordem + 1)) & (mat(a,b) < 20) quant = quant + 1; fwrite(arq,quant,'long'); end end end fclose(arq); fprintf('Matriz criada\n') for a = 1:ordem for b = 1:ordem fprintf('%d\t',mat(a,b)) end fprintf('\n') end fprintf('\nQuantidade dos elementos menores que 20 situados abaixo da diagonal secundaria : %d',quant)
48

%Programa para ler uma matriz quadrada contendo valores inteiros %e imprimir a quantidade de elementos menores que 20 situados %abaixo da diagonal secundaria clear clc ordem = input('Digite a ordem da matriz : '); mat = fix(100*rand(ordem,ordem)); quant = 0; for a = 1:ordem for b = 1:ordem if ((a+b) > (ordem + 1)) & (mat(a,b) < 20) quant = quant + 1; end end end fprintf('Matriz criada\n') for a = 1:ordem for b = 1:ordem fprintf('%d\t',mat(a,b)) end fprintf('\n') end fprintf('\nQuantidade dos elementos menores que 20 situados abaixo da diagonal secundaria : %d',quant) %Exemplo de uso de arquivos do tipo binario %leitura de uma matriz 11x2 contendo valores reais, criacao de %uma matriz transposta 2x11 e gravacao destas duas matrizes %em arquivo do tipo binario clear clc mat = 100*rand(11,2); transposta = zeros(2,11); for a=1:11 for b = 1:2 transposta(b,a) = mat(a,b); end end arqmat = fopen('Matriz_e_sua_Transposta.bin','wb'); for a=1:11 for b = 1:2 fwrite(arqmat,mat(a,b),'double'); end end for a=1:2 for b = 1:11 fwrite(arqmat,transposta(a,b),'double'); end end fclose(arqmat);
49

fprintf('Arquivo criado')

%Exemplo de uso de arquivos do tipo texto %leitura de uma matriz 11x2 contendo valores reais, criacao de %uma matriz transposta 2x11 e gravacao destas duas matrizes %em arquivo do tipo texto clear clc mat = 100*rand(11,2); transposta = zeros(2,11); for a=1:11 for b = 1:2 transposta(b,a) = mat(a,b); end end arqmat = fopen('Matriz_e_sua_Transposta.txt','w'); fprintf(arqmat,'Matriz criada\n'); for a=1:11 for b = 1:2 fprintf(arqmat,'%f\t',mat(a,b)); end fprintf(arqmat,'\n'); end fprintf(arqmat,'Matriz transposta\n'); for a=1:2 for b = 1:11 fprintf(arqmat,'%f\t',transposta(a,b)); end fprintf(arqmat,'\n'); end fclose(arqmat); fprintf('Arquivo criado') %Exemplo de uso de arquivos do tipo binario %leitura de um arquivo binario contendo uma matriz 11x2 e %sua matriz transposta 2x11 clear clc mat = zeros(11,2); transposta = zeros(2,11); x = fopen('Matriz_e_sua_Transposta.bin','rb'); for a=1:11 for b = 1:2 mat(a,b) = fread(x,1,'double'); end end for a=1:2 for b = 1:11 transposta(a,b) = fread(x,1,'double');
50

end end fclose(x); fprintf('Matriz criada\n') mat fprintf('Matriz transposta\n') transposta

%Exemplo de uso de arquivos do tipo texto %leitura de um arquivo texto contendo uma matriz 11x2 e %sua matriz transposta 2x11 clear clc mat = zeros(11,2); transposta = zeros(2,11); x = fopen('Matriz_e_sua_Transposta.txt','r'); titulo1=fscanf(x,'%[^\n]'); for a=1:11 for b = 1:2 mat(a,b) = fscanf(x,'%f',1); end end z=fscanf(x,'%f'); espaco=fscanf(x,'%[^\n]'); titulo2=fscanf(x,'%[^\n]'); for a=1:2 for b = 1:11 transposta(a,b) = fscanf(x,'%f',1); end end fclose(x); fprintf('Matriz criada\n') mat fprintf('Matriz transposta\n') transposta

12.0 ESTRUTURAS OU REGISTROS Uma estrutura uma construo de dados cujo agrupamento denominado Campo. Diferentes campos podem conter diferentes tipos de dados, mas um nico campo deve conter dados do mesmo tipo. Uma estrutura um registro. Um registro (estrutura) pode conter uma informao (dados) sobre vrios assuntos de diferentes ttulos (campos). Por exemplo, voc poderia manter um livro de registros com uma pgina dedicada a cada um de seus parentes. Voc poderia listar informaes para cada um deles sob os ttulos: grau de parentesco, nome, telefone, filhos (quantos), filhos (nomes), etc. Embora os ttulos sejam os mesmos em cada registro, an informao
51

contida nos ttulos diferente para cada registro. Implementar esse registro no MATLAB montar uma estrutura. O melhor que no h limites para a quantidade de registros dentro do livro de registros. Vejamos um exemplo de estrutura. Est sendo feita uma estrutura chamada Turma com os campos curso, professor e notas. Deseja-se registrar os nomes dos cursos, de seus professores correspondentes e sua performance no curso: Turma.curso = eletrica2003; Turma.prof = Paulo; Turma.notas = [80 75 95];

Assim, campos so indicados adicionando seus nomes aps o nome da estrutura, separados por um ponto (.). Os campos so valores designados simplesmentecomo uma outra varivel no MATLAB. No exemplo acima, os campos curso e notas contm um vetor de nmeros. Agora, como pode ser gerado um registro para o prximo curso? Estruturas so bem como seus campos: multidimensionais. Portanto, pode-se geraro prximo registro de diferentes maneiras: Mltiplos registros em um vetor de estrutura Pode-se fazer com que a estrutura Turma seja um vetor (neste exemplo, um vetor ser o bastante), ento armazene um registro completo como um elemento do vetor: >>Turma.curso = 'eletrica2003'; Turma.prof = 'Paulo'; Turma.notas = [80 75 95]; Turma Turma = curso: 'eletrica2003' prof: 'Paulo' notas: [80 75 95]

Cria uma estrutura Turma com 3 campos:curso, prof, notas;

Quando requisitado, o MATLAB mostra a estrutura.

Turma(2).curso = 'Fsica'; Turma(3).curso = 'Computao'; Turma(2).prof = 'Mauro'; Turma(3).prof = 'Karen'; Turma(2).notas = [72 75 78]; Turma(3).notas = [85 35 66]; Turma
52

Aps adicionar mais 2 registros, Turmatorna-se um vetor, e, quando requisitado, oMATLAB mostra informaes sobre aestrutura;

Turma =1x3 struct array with fields: Curso prof notas

Turma(2).curso

Usa o ndice do vetor na estrutura para acessar os seus elementos.

ans =Fsica

Turma(3).notas(1) Pode-se usar a notao de ndices para a estrutura assim como para os seus campos. ans =85

Turma.notas ans = 80 75 95 ans = 72 75 78 ans = 85 35 66 for k = 1:3, all_notas(k,:) = Turma(k).notas; end Assim, foi criado o arranjo de estrutura Turma 1 x 3. Cada elemento de Turma pode ser acessado assim como se acessa um elemento de um vetor comum faz Turma(2) ou Turma(1), etc. Digitando Turma(1), obtm-se 2 valores de todos os campos junto com os nomes do campo. Pode-se tambm acessar campos individuais(Turma(1).prof ou Turma(1).notas(3)). Obs.: Em um vetor de estrutura, cada elemento deve ter o mesmo nmero de campos. Cada campo, entretanto, poder conter dados de diferentes tamanhos. Para acessar os valores a partir de um campo de muitas gravaes use um lao. Quando nenhum ndice especificado para a estrutura, o MATLAB mostra na tela os valores do campo de todos os registros at agora executados.

53

Portanto,Turma(1).notas pode um vetor linha de 3 espaos enquanto que Turma(2).notas um vetor coluna de 5 espaos. Mltiplas gravaes em campos de vetores. Para o exemplo escolhido, pode-se armazenar mltiplos registros em uma nica estrutura (ou seja, guarda Turma 1 x 1) fazendo com que os campos sejam de tamanhos apropriados para acomodar os registros: Turma.curso = char(eletrica2003, Fsica, Computao); Turma.prof = char(Paulo, Mauro, Karen); Turma.notas = [80 75 95; 72 75 78; 85 35 66]; Neste exemplo, a funo char usada para criar de caracteres string separadamente das variveis de entrada. Aqui, Turma uma estrutura 1 x 1, mas o campo curso um arranjo de caracteres 3 x 7, prof de tamanho 3 x 10 e notas um vetor de nmeros 3 x 3. Bem, este exemplo funciona muito bem porque se poderia criar um vetor coluna de nomes de curso, outra de nomes de professores, e uma matriz de notas onde cada linha corresponde a um curso diferente. O que aconteceria se o terceiro registro tivesse uma matriz para cada curso? Poder-se-ia ainda armazenar o registro por ambos os caminhos mencionados anteriormente. Enquanto o primeiro mtodo de criao de um vetor de estrutura parece ser o caminho mais fcil, pode-se tambm usar o segundo mtodo e obter o terceiro campo notas sendo uma matriz 3-D. Criando Estruturas Nos exemplos anteriores, j se tinha visto como criar estruturas por designao direta. Assim como se pode criar uma matriz digitando seu nome e designando valores para ela A = [1 2 3 4] pode-se criar uma estrutura digitando seu nome junto a um campo e designando valores ao campo, assim como feito nos exemplos anteriores. O outro caminho para criar uma estrutura com a funo struct. A sintaxe geral de struct : str_name = struct(nome do campo1,campo1,nome do campo2,campo2,...) Assim, a estrutura criada Turma poderia ser criada como se segue: Como uma simples estrutura:

Turma = struct(curso,char(eletrica2003,Fsica,Computao), . . . prof,char(Paulo, Mauro, Karen), . . . notas,char( [80 75 95; 72 75 78; 85 35 66]); Como um vetor de estrutura:
54

Vet_Turma = [struct(curso,eletrica2003,prof,Paulo, . . . notas, [80 75 95]);struct(curso,Fsica,prof,Mauro, . . . notas, [72 75 78]);struct(curso,Computao,prof,Karen, . . . notas, [85 35 66])];

Manipulando estruturas Manipulao de estruturas similar manipulao de arranjos em geral acessar elementos de estrutura pelo prprio ndice e manipular seus valores. H, porm,uma grande diferena: no se pode designar todos os valores de um campo atravs de um vetor de uma estrutura a uma varivel com 2 pontos variveis e especificadores. Assim, se Vet_Turma um arranjo de estrutura 3 x1 ento: vlido e mostra o elemento das notas oriundo do primeiro registro de Vet_Turma

Vet_Turma(1).notas(2)

Vet_Turma(1).notas(:)

mostra todos os elementos de notas vindos deVet_Turma(1).notas

invlido, no designa notas vindos de todos os registros Vet_Turma(:).notas para, embora o comando Vet_Turma(:).notasou (Vet_Turma.notas) mostra notas de todos os registros.

Ento, embora se possa ver na tela os valores de campo atravs de mltiplosregistros com Vet_Turma(:).notas, deve-se usar um loop para designar os valores varivel: For k=1:3, todas_notas (k,:) = Vet_Turma(k).notas; end A designao no pode ser feita diretamente com o operador de coluna porque os valores dos campos de muitos registros so tratados como entidades diferentes.Os contedos de campo so tambm so permitido serem de diferentes tamanhos.Portanto, embora se possa usar um lao for para designao, deve tomar cuidado extra para assegurar que a designao faz sentido. Por exemplo, no lao for citado, se

55

Vet_Turma(2),notas tem somente 2 notas de teste, ento a designao produzir um erro. Est claro, dos exemplos mostrados, que se pode usar ndices para a estrutura tanto como campos para acessar informao. At agora, tm-se usado somente arranjos de carter e de nmeros nos campos. Pode-se, entretanto, haver tambm estruturas dentro de estruturas. Porm, o nvel de ordenao torna-se completamente envolvido erequer cuidado extra quando se tm estruturas entrelaadas. H tambm vrias funes que ajudam na manipulao das estruturas fieldnames, setfield, getfield, rmfield, is field, etc. Os nomes da maioria dessas funes j sugere seu papel.

Roteiro e Funo no Matlab O Matlab, como outras linguagens de programao, possui duas formas de criao de programas: roteiro (script) e funo (function). Na aula passada, vimos um exemplo prtico de criao de um roteiro que executava uma seqncia de comandos Matlab para o ajuste de curvas (linear polinomial e no-linear). Quando um programa executa uma seqncia de comandos que pode ou no retornar parmetros na janela de comandos do Matlab, ento esse programa denomina se roteiro no Matlab. Em ingls, roteiro chamado script, termo esse que tambm usado na lngua portuguesa para descrever uma seqncia de eventos. Entretanto, muitas vezes necessitamos de um programa na forma de funo. Uma funo um roteiro que retorna um valor (ou parmetro). Por exemplo, quando realizamos o clculo de valores numricos de funes trigonomtricas no Matlab utilizamos funes intrnsecas (isto , funes j existentes no Matlab). Por exemplo, para calcular o seno de um ngulo de 5 radianos, utilizamos o comando: >> y = sin(5) y= -0.9589 O valor de sen 5 gravado na varivel y. Note a sintaxe da funo matemtica sin(5), na qual se utiliza a sintaxe na lngua inglesa (sin) da funo seno, por se tratar de uma funo intrnseca do Matlab e segundo, o argumento da funo, isto , o valor de x para o qual queremos determinar o valor do seno est colocado entre parntesis. Quando desejamos um programa que funcione como uma funo, ento o roteiro chamado function. Para ilustrar a diferena entre roteiro e funo, vamos calcular a funo ex na forma de roteiro (aula2c): % aula2c Calculo da funo exponencial por serie de Taylor x = input('Valor de x: '); n = input('Numero de termos: '); funcao = 0; for k = 1:n termo = x.^k/fatorial(k); funcao = funcao + termo; end disp(['exp(' num2str(x) ') = ' num2str(funcao) ' com ' num2str(n) ' termos']);
56

Neste roteiro, o valor de x informado atravs de uma instruo input. O mesmo ocorre para o nmero n de termos da srie. Lembrando que a funo exponencial na forma de srie de Taylor descrita pela equao: ex=k=0 x/kk! observamos que o lao for-end executa o clculo de cada termo da srie (varivel termo) para depois ser somada na varivel soma. No final do roteiro, o resultado exibido na janela de comando do Matlab usando a instruo disp. Observar que utilizamos no clculo do termo da srie de Taylor, uma funo extrnseca chamada fatorial que no existe no Matlab, que foi criada na aula prtica e reproduzida a seguir: function f = fatorial(n) f = 1; for k = 1:n f = f*k; end Observar que numa funo, a primeira linha deve obrigatoriamente conter a declarao function f = fatorial(n) e que o nome declarado nesta declarao deve ser o mesmo do programa Matlab, ou seja, fatorial.m. Se quisermos criar uma funo para o clculo da funo exponencial, ela ser constituda pelas seguintes instrues (func0): function f = func0(x,n) % Funcao para o calculo de exp x por serie de Taylor % Devem ser fornecidos dois argumentos: x e o numero de termos n f = 0; for i = 1:n k = i - 1; f = f + x^k/fatorial(k); end Observe as diferenas entre a funo func0 e o roteiro aula2c. Ambos os programas calculam a funo ex por srie de Taylor. A funo func0 tem dois parmetros de entrada: a varivel x e o nmero de termos n, por isso eles so passados dentro do parntese separados por vrgula: func0(x,n). O valor da funo ex retorna pela varivel f declarada no cabealho do programa. A vantagem da funo que ela pode ser usada como uma funo intrnseca do Matlab. Como exemplo da aplicao da funo func0, vamos calcular o valor do nmero de Euler e1 utilizando essa funo com nmero de termos variando de um a dez e comparando o resultado com o valor exato dado pela funo intrnseca do Matlab exp(1): % aula3 Roteiro para o calculo do numero de Euler por serie de Taylor
57

% com numero de termos de um a dez e calculo do respectivo erro de % truncamento x = 1; for i = 1:10 exprox(i) = func0(x,i); end erro = abs(exprox - exp(1)); result = [exprox' erro']; disp([' exp erro']) disp(result)

Lista de exerccios: 1 - Faa um programa que some os nmeros pares de 0 (zero) at 100 e imprima o resultado.

2 - Fazer um programa que leia um nmero indeterminado de cartes contendo cada um a idade de um indivduo. O ltimo carto, que no entrar nos clculos, contm o valor de idade igual zero. Calcule e imprima a idade mdia deste grupo de indivduos.

3- Tem-se um conjunto de dados contendo a altura e o sexo (masculino ou feminino) de 50 pessoas. Fazer um programa que calcule e imprima: - A maior e a menor altura do grupo; - A mdia de altura das mulheres; - O nmero de homens

4 - Um comerciante deseja fazer o levantamento do lucro das mercadorias que ele comercializa. Para isto, mandou perfurar em cares (um para cada mercadoria) o nome, preo de compra e preo de venda das mesmas. Fazer um programa que: - Determine e escreva quantas mercadorias proporcionam: lucro < 10% 10% < = lucro < = 20% lucro > 20% - Determine e escreva o valor total de compra e de venda de todas as mercadorias assim como o lucro total.

obs.: O aluno deve adotar um flag.


58

5 - Uma firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou no de um novo produto lanado no mercado. Para isto, perfurou-se em cartes o sexo do entrevistado e sua resposta (sim ou no). Sabendo-se que foram entrevistadas 200 pessoas, fazer um programa que calcule e imprima; - O nmero de pessoas que responderam sim; - O nmero de pessoas que responderam no; - A porcentagem de homens que responderam no; - A porcentagem de mulheres que responderam sim;

7 - Fazer um programa que calcule e escreva o seguinte somatrio S = 1 + 3/2 + 5/3 + 7/4 + . . . +99/50; 8 - Fazer um programa que calcule e escreva o seguinte somatrio: S = 1 + 3 + 5 + 7 + 9 + 11 + . . . + 199

9 - Uma companhia de teatro planeja dar um srie de espetculos. A direo calcula que, a R$50,00 o ingresso, sero vendidos 120 ingressos, e as despesas montaro em R$200,00. A diminuio de R$5,00 no preo do ingresso, espera-se que haja um aumento de 26 ingressos vendidos. Fazer um programa que escreva uma tabela de valores do lucro esperado em funo do preo do ingresso, fazendo variar este preco de R$5,00 a R$1,00 de R$0,50 em R$0,50. Escreva ainda, o lucro mximo esperado, o preo e o nmero de ingressos correspondentes.

13 - Elabore um programa para ler do teclado um nmero inteiro e positivo n e um nmero real x, calcular e escrever a soma dos n prime rios termos da serie:

12

15

Z = X/1! - X/2! + X/4! - X/6! + X/8! - X/10! + . . .

14 - Fazer um programa que calcule e escreva o valor de S:

S = 1/1 + 3/2 + 5/3 + 7/4 + . . . + 99/50

59

15 - Fazer um programa que calcule e escreva o valor da soma:

50

S = 2/50 + 2/49 + 2/48 + 2/47 + . . . + 2/1

16 - Fazer um programa que calcule e escreva o valor de S onde:

S = 37*38/1 + 36*37/2 + 35*36/3 + . . . +1*2/37

17 - Fazer um programa que calcule e escreva o valor de S onde:

S = 1/1 - 2/4 + 3/9 - 4/16 + . . . + 10/100

18 - Fazer um programa que calcule e escreva a soma dos 30 primeiros termos da srie:

S = 1000/1 - 997/2 + 994/3 - 991/4 + . . .

19 - Fazer um algoritmo que calcule e escreva a soma dos 50 primeiros termos da srie:

S = 480/10 - 470/11 + 460/12 - 450/13 + . . .

20 - Escreva um programa para gerar e escrever uma tabela com os valores do seno de um ngulo em radianos, utilizando a srie de Mca-Laurin truncada, apresentada a seguir:

Sen = - /6 + /120 - /5040


60

Obs.: Os valores dos ngulos devem variar de 0,0 a 6,3 inclusive 0 e 6,3 de 0,1 em 0,1.

21 - Fazer um programa para calcular e escrever o valor do nmero (pi), com preciso de 0.0001, usando a srie:

PI = 4 - 4/3 + 4/5 - 4/7 + 4/9 - . . .

Para obter a preciso desejada, adicionar apenas os termos cujo valor absoluto seja maior ou igual a 0.0001.

22 - Fazer um programa que: - leia o valor de x de uma unidade de entrada; - calcule e escreva o valor do seguinte somatrio:

25

24

23

22

S = X/1 - X/2 + X/3 - X/4 + . . . + X/25

23 - Fazer um programa que calcule e escreva o valor de S no seguinte somatrio:

S = 1/225 - 2/196 + 4/169 - 8/144 + . . . + 16384/1

24 - Fazer um programa que calcule e escreva a soma dos 30 primeiros termos da srie:

100/0! + 99/1! + 98/2! + 97/3! + . . .

25 - Fazer um programa que: - calcule e escreva o valor da srie abaixo com preciso menor que um dcimo de milsimo (0.0001);
61

- indique quantos termos forma usados.

S = 63+61/1! + 59/2! + 57/3! + . . .

26 - Fazer um programa que calcule e escreva a soma dos 50 primeiros termos da srie:

S = 1!/1 - 2!/3 + 3!/7 - 4!/15 + 5!/31 - . . .

27 - Fazer um programa para determinar e escrever soma dos n primeiros termos da srie:

S = X - X/3! + X/5! - X/7! + . . . onde: x e n so lidos.

28 - Fazer um programa que: - calcule o valor do co-seno de X atravs de 20 termos da srie abaixo:

Cassino X = 1 - X/2! + X/4! - X/6! + X/8! - . . .

- calcule a diferena entre o valor calculado no item anterior e o valor fornecido pela funo Cos(X); - escreva o que foi calculado nos itens anteriores.

29 - Fazer um programa que: - leia um conjunto de linhas contendo cada uma um nmero inteiro, na base 10 de at cinco dgitos. A ltima linha contm o valor zero. - transforme esse nmero da base 10 para a base 2;
62

- escreva o nmero na base 10 e na base 2.

Varivel Composta

1 - Fazer um programa que: - Leia 100 valores numricos e armazene numa varivel composta unidimensional A; - Calcule e escreva:
100

S = i/a[i], onde i o i-simo valor armazenado na varivel A;


i=1

- Calcule e escreva quantos termos da srie tem o valor do numerador inferior ao denominador.

Exemplo: A 2 5 6 1 5 7 2 7 .. . 8 3 100 8

somatrio = 1/25 + 2/56 + 3/77 + . . . + 100/88

2 - Fazer um programa que: - Leia duas variveis compostas unidimensional, contendo, cada uma 200 elementos numricos; - Intercale os elementos destes dois conjuntos formando uma nova varivel composta unidimensional de 400 elementos; - Escreva o novo conjunto, assim obtido.

3 - Em uma cidade do interior, sabe-se que de janeiro a abril de 1.976 (121 dias) no ocorreu temperatura inferior a 15 graus centgrados nem superior a 40 graus centgrados. As temperaturas verificadas em cada dia esto disponveis em uma unidade de entrada de dados.
63

- Fazer um programa que calcule e imprima:


a menor temperatura ocorrida; a maior temperatura ocorrida; a temperatura mdia; o numero de dias nos quais a temperatura foi inferior a temperatura

mdia. 4 - Fazer um programa que: a) leia uma frase de 80 caracteres, incluindo brancos; b) conte quantos brancos existem na frase; c) conte quantas vezes letra aparece; d) conte quantas vezes ocorre um mesmo par de letras na frase e quais so elas e) imprima o que foi calculado nos itens b, c e d.

5 - Fazer um programa que: a) leia o valor de N (N < = 1000) e os n valores de uma varivel A composta de valores numricos, ordenados de forma crescente; b) determine e imprima para cada nmero que se repete no conjunto quantidade de vezes que ele aparece repetido; c) elimine os elementos repetidos formando um novo conjunto; d) imprima o conjunto obtido no item C.

6 - Dado um conjunto de 100 valores numricos disponveis num meio de entrada qualquer, fazer um a programa para armazen-los numa varivel composta B, calcular e imprimir o valor do somatrio dado a seguir:

Exemplo: B 2 10 60 1 1 .. 2 . 3 3 7 3 100 9

S = (210-97) + (160-33) + . . .
64

7 - Fazer um programa que: - leia o valor de M (M < = 30) e os M valores de uma varivel composta A; - leia o valor de N (N < = 20) e os N valores de uma varivel composta B; - determine o conjunto C=A B (unio de A com B), onde C no dever conter elementos repetidos (A e B no contm elementos repetidos); - escreva os elementos contidos em A, B e C.

7 - Seja

P = anxn + an-1xn-1 + an-2xn-2 + . . . + a1x + a0

Escrever um programa que: - leia o valor de n, sendo n < = 20; - leia os coeficientes ai, i = 0,1,2, . . ., n; - calcule o valor de p para 10 valores de x, lidos em cartes; - escreva o valor de x e o valor de p correspondente.

8 - Fazer um programa que: a) leia um conjunto de valores inteiros correspondentes a 80 notas dos alunos de uma turma, notas estas que variam de 0 a 10; b) calcule a freqncia absoluta e a freqncia relativa de cada nota; c) imprima uma tabela contendo os valores das notas (de 0 a 10) e suas respectivas freqncias absoluta e relativa;

Obs.: 1 - freqncia absoluta de uma nota e o nmero de vezes que ela aparece no conjunto de dados; 2 - freqncia relativa a freqncia absoluta dividida pelo numero total de dados.

65

9 - Uma grande firma deseja saber quais os trs empregados mais recentes. Fazer um programa para ler um nmero indeterminado de cartes no mximo de 300, contendo o numero do empregado e o nmero de meses de trabalho deste empregado e escrever os trs mais recentes.

10 - Fazer um programa que: - leia uma varivel composta A com 30 valores numricos; - leia outra varivel composta B com 30 valores numricos; - leia o valor de X; - verifique qual elemento de A que igual a X; - escreva o elemento de B de posio correspondente a do elemento de A igual a X;

11 -Dados as variveis compostas A e B abaixo: A

2 5 7 9 5 1 6 9

0 2 3 7 2 6 8 9

Calcular o conjunto C=A+B

12 - Fazer um prog. em c++ que leia duas variveis compostas de dimenso m*n(m<=20,n<=30). Onde os valores de m e n so lidos. Calcule e escreva:

- a soma dos elementos das matrizes. 13 - Fazer um prog. em c++ que leia uma Am*n(m<=20,n<=10). Onde m e n so lidos. Calcule e escreva:
66

matriz

numrica

- a matriz transposta de A.

14 - Fazer um prog. que leia uma matriz numrica Am*n(m<=20,n<=10). Onde m e n so lidos. Calcule e escreva uma matriz modificada B(m*n+1), sendo que os elementos de (n+1)-s ima coluna so formados com o produto dos elementos da mesma linha.

Exemplo: A

2 3 4 5

B 2 3 6 4 5 2 0

15 - Fazer um programa que leia uma matriz inteira Am*m. Onde m e n so lidos. Calcule e escreva:

- o maior elemento par da diagonal secundria; - a mdia dos elementos divisveis por 3 da penltima coluna da matriz; - o produto dos elementos mpares abaixo da diagonal principal da matriz.

67