81
Introdução 1.1 Informações iniciais O Matlab (abreviatura de Matriz Laboratory - Laboratório de Matrizes) é um software de simulação matemática que realiza operações matriciais, constrói gráficos em duas ou três dimensões, auxilia no processamento de sinais, além de manipular outras funções especializadas. Ele trabalha com uma linguagem de programação de alto nível, em um ambiente interativo, para o desenvolvimento de algoritmos, análise e visualização de dados e computação numérica. Próprio para as áreas técnica e científica, o software tem funções de tratamento numérico de alto desempenho, capazes de resolver problemas computacionais técnicos de forma mais eficiente do que as tradicionais linguagens de programação. Além do ambiente interativo, outra facilidade do Matlab é a possibilidade de execução de arquivos texto, contendo uma seqüência de instruções definidas pelo usuário. Esses arquivos texto, que têm extensão ‘. m’, podem ser criados e editados dentro ou fora do seu ambiente. 1.2 Janelas Através de objetos gráficos denominados janelas, o usuário opera as funcionalidades do programa de forma interativa. A janela principal do Matlabr chama-se Command Window (Janela de Comando), onde os dados e instruções são digitados no prompt ‘>>’ pelo usuário e, após a tecla Enter ser pressionada, o programa os processa imediatamente e expõe na tela o resultado. Os comandos digitados são armazenados em um buffer de comandos, no qual se pode navegar usando as teclas seta-para-cima ‘"’ e seta-para- baixo ‘#’. Além disso, teclando-se o texto ‘str’, por exemplo, e usando-se as setas ‘"’ e ‘#’, navega-se por 1

Apostila de Matlab222

Embed Size (px)

Citation preview

Page 1: Apostila de Matlab222

Introdução

1.1 Informações iniciais

O Matlab (abreviatura de Matriz Laboratory - Laboratório de Matrizes) é um software de simulação matemática que realiza operações matriciais, constrói gráficos em duas ou três dimensões, auxilia no processamento de sinais, além de manipular outras funções especializadas.

Ele trabalha com uma linguagem de programação de alto nível, em um ambiente interativo, para o desenvolvimento de algoritmos, análise e visualização de dados e computação numérica. Próprio para as áreas técnica e científica, o software tem funções de tratamento numérico de alto desempenho, capazes de resolver problemas computacionais técnicos de forma mais eficiente do que as tradicionais linguagens de programação.

Além do ambiente interativo, outra facilidade do Matlab é a possibilidade de execução de arquivos texto, contendo uma seqüência de instruções definidas pelo usuário.

Esses arquivos texto, que têm extensão ‘. m’, podem ser criados e editados dentro ou fora do seu ambiente.

1.2 Janelas

Através de objetos gráficos denominados janelas, o usuário opera as funcionalidades do programa de forma interativa.

A janela principal do Matlabr chama-se Command Window (Janela de Comando), onde os dados e instruções são digitados no prompt ‘>>’ pelo usuário e, após a tecla Enter ser pressionada, o programa os processa imediatamente e expõe na tela o resultado. Os comandos digitados são armazenados em um buffer de comandos, no qual se pode navegar usando as teclas seta-para-cima ‘"’ e seta-para-baixo ‘#’. Além 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-vírgula não exibem as variáveis de resposta na tela.

O uso do ponto-e-vírgula é útil quando a impressão do resultado na tela não interessa, ou quando a impressão é muito extensa como, por exemplo, para uma matriz 1000 × 1000.

Deve-se ressaltar que, apesar da impressão ser suspensa, o comando é executado pelo programa.

Vários comandos podem ser digitados na mesma linha, desde que estejam separados por vírgula ou ponto-e-vírgula. Comandos muito longos para uma linha podem ser interrompidos por três pontos ‘... ’ e continuados na linha seguinte. O exemplo a seguir é ilustrativo quanto a esses detalhes.

>> a=1, b==... 2; c=a+bA =1

1

Page 2: Apostila de Matlab222

c =3

É importante apontar que a Janela de Comando normalmente é usada para testes de comandos e funções ou simples operações. 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. Após escrever o programa, pode-se executá-lo pela tecla de atalho F5.

Além da Janela de Comando e do Editor de Arquivo-M, há ainda as janelas Help, Command History, Current Directory e Workspace, que estão respectivamente relacionadas com ajuda, histórico dos últimos comandos digitados, diretório corrente do programa e o espaço de trabalho onde se visualizam dados e variáveis. Essas janelas podem ser mantidas fechadas ou abertas, dependendo da necessidade ou gosto do usuário. Essas outras janelas não são detalhadas nesse documento.

1.3 Ajuda

Através do comando help, o usuário pode consultar a ajuda do Matlab. Escrevendo se help e o nome da função, é mostrado um pequeno resumo da função (normalmente de uma linha) seguido de uma descrição mais detalhada da mesma.

>> help onesONES 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.

É possível, ainda, procurar por funções 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 série de comandos, operadores e funções primitivas, organizadas por categorias, assim como rotinas específicas de diversas áreas da engenharia, organizadas em bibliotecas denominadas Toolboxes. Estas categorias e bibliotecas são designadas por tópicos primários. Para a visualização de todos estes tópicos, basta digitarem o comando help.

Alguns desses tópicos primários são:• general - comandos gerais• ops - operadores e caracteres especiais• control - biblioteca de sistemas de controles

2

Page 3: Apostila de Matlab222

• signal - biblioteca de processamento de sinais• optim - biblioteca de otimizaçãoOutras bibliotecas abrangem campos variados como aquisição e processamento

de imagem, bio-informática, telecomunicações, lógica difusa e realidade virtual.Para se aprofundar mais em qualquer biblioteca, basta digitar o comando help

tópico.

1.5- Constantes e Variáveis

O MATLAB faz cálculos simples e científicos 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 multiplicação tem precedência sobre a adição.

Uma constante numérica no MATLAB é formada por uma seqüência de dígitos que pode estar ou não precedida de um sinal positivo (+) ou negativo (-) e pode conter um ponto decimal (.). Esta seqüência pode terminar ou não por uma das letras e, E, d ou D, seguida de outra seqüência de dígitos precedida ou não de um sinal de (+) ou de

(-). Esta segunda seqüência é a potência de 10 pela qual a primeira seqüência deve ser multiplicada. Por exemplo,

» 1.23e-1 significa 0, 123.

O formato em que uma constante numérica é mostrada no MATLAB segue, como opção default, os seguintes critérios: se um resultado é inteiro, o MATLAB mostra o número como inteiro; quando o resultado é real, o MATLAB mostra o número com quatro dígitos à direita do ponto decimal; se os dígitos do resultado estiverem fora desta faixa, o MATLAB mostra o resultado usando a notação científica. Este default pode, entretanto, ser modificado utilizando-se o Numeric Format do item Options na barra de menus. Usando-se a constante numérica (3,5), considere a tabela 5 a título de exemplo dos formatos numéricos do MATLAB:

1.6 Operadores aritméticos:

1.1- + Adição

1.2- - Subtração

1.3- * Multiplicação

3

Page 4: Apostila de Matlab222

1.4- / Divisão

1.5- ^ 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 lógicos permitem a combinação ou negação das relações lógicas. Os operadores lógicos do MATLAB são:

&( E) Conjunção | (OU) Disjunção ~ (Não) Negação

1.9 Operador de atribuição ( =)

Representa a atribuição da expressão a sua direita a variável a sua esquerda.

Ex: 1- x= 200

2- y= 0.7

3- z= z+2

2.0 Comandos de entrada e saída:

2.1- Entrada

Variável = input (‘ Mensagem’ ) ;

Transfere os dados externos via teclado para as varáveis indicadas.

2.2- Saída

1- fprintf ( ‘ Mensagem % d’ , Variável)

4

Page 5: Apostila de Matlab222

2- fprintf (‘ Mensagem %f ’ , Variável)

3- fprintf (‘ Mensagem % d. 2\n ’ , Variável)

4-- fprintf (‘ Mensagem % g \n ’ , Variável)

5- disp ( variável) Mostra o conteúdo da variável na tela.

6- disp(‘ Mensagem’)

Mostra a mensagem na tela.

OBS: 1- ; Não mostra o conteúdo da variável na tela.

2- % Comentário.

3- clc Limpa a tela.

4- A mensagem vem entre apóstrofos.

5- clear variável. Apaga o conteúdo da variável.

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 opções

if Teste

comandos A ;

5

Page 6: Apostila de Matlab222

else Teste

comandos B ;

end

1.2. Mais de duas opções:

if teste

comandos a;

elseif teste

comandos b;

*

*

*

else comandos n;

end

Exercício:

1. Fazer um programa que leia quatro números 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

Page 7: Apostila de Matlab222

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 equação do 2º grau. Determine e escreva as raízes 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

Page 8: Apostila de Matlab222

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 ( ' não existem raízes 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 expressão_teste1

comandos1

case {expressão_teste2, expressão_teste3, expressão_teste4 }

comandos2

otherwise

comandos3

end

Se os testes de igualdade resultarem em falso para todos os casos, os comandos de otherwise (que é opcional) serão executados. O exemplo abaixo demonstra uma aplicação da estrutura switch-case.

clear all

num=input(’Escreva um inteiro: ’); % Exibe texto e lê valor para a variável.

switch num

case 1

8

Page 9: Apostila de Matlab222

y=1

case {2, 2.5}

y=2

case ’tres’

y=3

case {’quatro’, ’Quatro’, ’QUATRO’ }

y=4

otherwise

y=0

end

.

1) Faça um programa que o usuário possa digitar qualquer mês do ano e como resultado seja mostrado o número de dias do mês correspondente.

%Programa para saber quantos dias tem o mêsclear;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

Page 10: Apostila de Matlab222

Propósito: encerra a execução de comandos for ou while quando sãoencontrados.

Sintaxe: break

Exemplo: Fazer um programa que leia um número 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 Repetições :

6.1-A estrutura for:

1. for variável = início : fim Comandos; end

Obs. A variável varia de 1 em 1.

: significa “até”

1. for variável = início : variação : fim

Comandos ;

end

10

Page 11: Apostila de Matlab222

Exercício 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 média 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

Page 12: Apostila de Matlab222

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 não entrara tem idade igual a zero .Calcule e escreva a idade média 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

Page 13: Apostila de Matlab222

3. Fazer um programa que escreva a soma dos 20 primeiros termos da série :

2 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. Faça um programa q leia altura, sexo ,idade. O ultimo dado que não entrará tem altura igual a 0.Calcule a porcentagem de mulheres com altura entre 1,6 e 1,72 e idade inferior 28 anos

clcnm=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

Page 14: Apostila de Matlab222

end altura=input('digite altura e altura=0 exit'); endparm=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 são lidos.

clcs=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; endfprintf('soma=%f',s)

5. Faça um programa que escreva a soma dos 20 primeiros termos da serie.

2 9 10 17 18 25 clcn=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;endfprintf('soma=%f',soma2)

Obs:1- who % obtém-se uma lista das variáveis na área de trabalho.

2-whos % mostra mais detalhada ás variáveis correntes.

7. Funções Matemáticas.

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

14

Page 15: Apostila de Matlab222

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- cós(x). Cosseno de x.

7- cosh(x).Cosseno hiperbólico do x.

8- exp(x). Exponencial e*.

9- floor (x). Arredondamento em direção ao – infinito.

10- gcd(x,y).Máximo divisor comum de x e y.

11- lcm(x,y). Mínimo múltiplo 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 divisão de x por y.

15- round(x).Arredondamento para o número inteiro mais próximo.

16- sin(x). Seno de x.

17- sinh(x). Seno hiperbólico de x.

18- sqrt(x). Raiz quadrada de x.

19- tang(x).Tangente de x.

20- tanh(x). Tangente hiperbólica de x.

8. Vetores

1- x= inicio : fim % um vetor x começando do valor inicio ate o fim variando de 1 em 1.

2-x= inicio : variação : fim % vetor x começando do inicio até o fim com o valor da variação.

3- x=lindspace ( inicio,último,n) % vetor x começando do inicio até o fim,contendo n elementos linearmente espaçados.

4- logspace (inicio,fim,n) cria um vetor x com o valor 10 inicio e terminado no vetor 10 fim, contendo n elementos logaritmicamente espaçados.

15

Page 16: Apostila de Matlab222

Exs: A- x= 1:5

x= 1 2 3 4 5

B- x=1:6.5

x = 1 2 3 4 5 6

C- z= 6:-1:1

z = 6 5 4 3 2 1

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 transposição (‘) transforma um vetor linha para vetor coluna.

Ex: y=(1:0.5:3

y =1

1.5

2

2.5

3

7- Endereçamento de vetores: os elementos são acessados através 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

Page 17: Apostila de Matlab222

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. Operações Com Matrizes

As operações com matrizes no MATLAB são as seguintes:· Transposta;· Adição;· Subtração;· Multiplicação;· Divisão à direita;·

Divisão à esquerda;· Exponenciação;

9.1 Transposta

O caracter apóstrofo, " ' " , indica a transposta de uma matriz. Considere os exemplos a seguir:

>>A=[1 2 3; 4 5 6; 7 8 0]

A=

1 2 3

4 5 6

7 8 0

>>

B=A’

1 4 7

2 5 8

3 6 0

>> x = [-1 0 2]'

X = -1

0

2

9.2 Adição e Subtração

17

Page 18: Apostila de Matlab222

A adição e subtração de matrizes são indicadas, respectivamente, por "+" e "-". As operações são definidas somente se as matrizes tiverem as mesmas dimensões. Por exemplo, a soma com as matrizes mostradas acima,

A + x, não é correta porque A é 3x3 e X é 3x1. Porém,>> C = A + Bé aceitável, e o resultado da soma éC =

2 6 106 10 1410 13 0

A adição e subtração também são definidas se um dos operadores é um escalar, ou seja,uma matriz l x l. Neste caso, o escalar é adicionado ou subtraído de todos os elementos do outro operador. Por exemplo:

>> y = x - 1resulta emY = -1

1

9.3 Multiplicação

A multiplicação de matrizes é indicada por "*". A multiplicação x*y é definida somente se a segunda dimensão de x for igual à

primeira dimensão de y.

A multiplicação

>> x'* y é aceitável, e resulta emAns =4

É evidente que o resultado da multiplicação y'*x será o mesmo. Existem dois outros produtos que são transpostos um do outro.

>> x*y'

Ans =

2 1 -1

0 0 0

-4 -2 2

>> y*x'

Ans =

2 0 -4

1 0 -2

18

Page 19: Apostila de Matlab222

-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 emB = 5 8 -7

 Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz.

>> pi*x

Ans =

-3.1416

0

6.2832

Além da multiplicação matricial e escalar, podemos ter a multiplicação por elemento de matrizes de mesma dimensão. Esse tipo de operação é feita utilizando-se um ponto (.)antes do perador de multiplicação ( * ). Ou seja, se A e B são matrizes definidas por 

A=[ a11a12... a1n; a21a22... a2n; ... ; am1am2... amn] e B=[ b11b12... b1n; b21b22... b2n; ... ; bm1bm2... bmn], entãoA.*B =aij*bij. Por exemplo:

>> A.*B

ans =

1 8 21

8 25 48

21 48 0

9.4 Divisão

Existem dois símbolos para divisão de matrizes no MATLAB "\" e "/". Se A é uma matriz quadrada não singular, então A\B eB/A correspondem respectivamente à multiplicação à 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 solução de A*X = B • X = B/A é a solução de X*A = B

Por exemplo, como o vetor  b foi definido como A*x, a declaração>> z = A\b resulta em Z = -1 0

19

Page 20: Apostila de Matlab222

2A divisão por elemento entre matrizes é definida de maneira similar à multiplicação

por elemento, ou seja, A./B= aij/bij e A.\B= aij\bij, onde A e B têm mesma dimensão.

9.5 Exponenciação

A expressão Ap eleva A à p-ésima potência e é definida se A é matriz quadrada e p um escalar. Se P é um inteiro maior do que um, a exponenciação é computada como múltiplas multiplicações. Por exemplo,

>> A^3 Ans =

279 360 306684 873 684738 900 441

A exponenciação por elemento entre matrizes é definida de maneira similar à multiplicação por elemento, ou seja, A.B= aijbij,onde A e B têm mesma dimensão. De maneira similar, a potenciação 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 parênteses. Por exemplo, dada a matriz A:

A = 1 2 3 4 5 6 7 8 9a declaração >> 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 três linhas e das últimas duas colunas de A.Ans =

20

Page 21: Apostila de Matlab222

2 3

5 6

8 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 2 34 5 6

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

 Funções : O MATLAB possui algumas funções que se aplicam a matrizes como,

por exemplo, as funções size (fornece o número de linhas e colunas de uma matriz) e length (fornece o maior valor entre o número de linhas e colunas).

O MATLAB t em também funções que se aplicam individualmente à cada coluna da matriz produzindo um vetor linha com os elementos correspondentes ao resultado de cada coluna. Se a função for aplicada à transposta de da matriz, os resultados serão relativos a cada linha da matriz. Se o argumento da função for um vetor, o resultado será um escalar. algumas dessas funções são:

9.7 Funções com descrições:

sum soma dos elementos prod  produto dos elementos mean média aritmética std desvio padrão max maior elemento min menor elemento sort ordena em ordem crescente

9.8 Submatrizes

 Sendo B uma matriz 5x5 unitária, podemos defini-la através da seguinte função:>> 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

Page 22: Apostila de Matlab222

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 números aleatórios entre 0 e 1, utilizamos a função rand (veja também a função randn, utilizando o comando help). Exemplo:

0.2190 0.6789 0.9347

>> D=rand(2,3) D = 0.0470 0.6793 0.3835

 10 Gráficos no Matlab

A construção de gráficos no MATLAB é mais uma das facilidades do sistema.. Através de comandos simples pode-se obter gráficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenada

10.1 Gráficos Bidimensionais

Estes são os comandos para  plotar Funções Gráficas:

Plot ------------------------------------------Plotar linear Loglog---------------------------------------Plotar em escala loglog Semilogx------------------------------------Plotar em semilog Semilogy------------------------------------Plotar em semilog Poolar--------------------------------------Plotar em coordenada polar Bar------------------------------------------Gráfico de barras Stem----------------------------------------Sequência discreta Stairs --------------------------------------Plotar em degrau Hist---------------------------------------Plotar histograma Rose---------------------------------------Plotar histograma em ângulo Compass----------------------------------Plotar em forma de bússola Feather------------------------------------Plotar em forma de pena Fplot---------------------------------------Plotar função Comet------------------------------------Plotar com trajetória de

cometa gráficos bidimensionais: 

Tabela 11 – comandos para gráficos bidimensionais Se Y é um vetor, plot(Y) produz um gráfico linear dos elementos de Y versos o índice dos elementos de Y.

Por exemplo, para plotar os números [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

Page 23: Apostila de Matlab222

>> plot(Y)

Se X e Y são vetores com dimensões iguais, o comando plot(X,Y) produz um gráfico 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 também plotar múltiplas linhas e apenas um gráfico. Existem duas maneiras, a primeira é usado apenas dois argumentos, como em plot(X,Y), onde X e/ou Y são matrizes. Então:

• 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 são matrizes com mesma dimensão, 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 fácil, maneira de plotar gráficos com múltiplas linhas é usando o comando plot com múltiplos argumentos. Por exemplo:

>> plot(t, sin(t), t, cos(t), t, sin(t + pi), t, cos(t + pi))

10.2 Estilos de Linha e Símbolo Os tipos de linhas, símbolos e cores usados para plotar gráficos podem ser controlados se os padrões não são satisfatórios. Por exemplo,

>> X = 0:0.05:1; >> subplot(l2l), plot(X,X.^2,’k*’)

23

Page 24: Apostila de Matlab222

>> subplot(l22), plot(X,X.^2,’k --‘)

Outros tipos de linhas, pontos e cores também podem ser usados:

TIPO DE PONTO ** * * * * * * * ° ° ° ° ° ° ° ° ° ° + ++++++++++ x x x x x x x

CORES y amarelo m lilás c azul claro r vermelho g verde b azul escuro w branco k preto

24

Gráficos de uma funçãoA construção de gráficos no MATLAB é mais uma das facilidades do sistema. Através de comandos simples pode-se obter gráficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenada.Exemplo:Suponha que desejássemos plotar um gráfico para os seguintes valores.[0.1,0.3,0.9,1,0.8,0.4,0.2]. Teríamos simplesmente que atribuir a uma variável esses valores e executar o comando plot.»y=[0.1,0.3,0.9,1,0.8,0.4,0.2]»plot(y)

Page 25: Apostila de Matlab222

25

Gráficos de uma funçãoCaso x e y forem vetores com dimensões iguais, o comando plot(x,y) produz um gráfico bidimensional dos elementos de x versos os elementos de y.»t=linspace(0,2*pi,30)»y=sin(t)»plot(t,y)

Page 26: Apostila de Matlab222

26

Gráficos de uma função

O MATLAB possui comandos de fácil utilização para adicionar informações em um gráfico:

Podemos também inserir dados ao longo do gráfico.» text(1,1,'aqui e a posição 1,1 do gráfico');» text(0,0, 'aqui e a posição 0,0 do gráfico');» text(3,-0.2, 'aqui e a posição 3,-0.2 do gráfico');» text(t(10),y(10),num2str(sin(t(10))))Obs.: a função num2str transforma um numero em um stringPode-se também incluir uma notação ao clicar do mouse. Digite o comando, vá até a área do gráfico escolha um local e clique com o mouse.» gtext('cliquei aqui')Incluir o não o grid no gráfico» gridPara retirar o grid digite novamente grid

Coloque o titulo para o gráfico» title(‘Onda senoidal’)» xlabel(‘eixo do x’)» ylabel(‘seno’)

Page 27: Apostila de Matlab222

27

Caso x e y forem vetores com dimensões iguais, o comando plot(x,y) produz um gráfico bidimensional dos elementos de x versos os elementos de y.» t=linspace(0,2*pi,30)»y=sin(t)»z=cos(t)»plot(t,y,t,z)»title(‘Seno e Co-seno’)Caso queira inserir legenda» legend(‘Sen(x)’,’Cos(x)’)

Page 28: Apostila de Matlab222

28

GráficosEstilos de linha, marcadores e coresPadrão: estilo de linha contínuo, cor azulTabela:

Exemplo de utilização: as três classes de símbolos podem ser utilizados juntos ouseparadamente. A ordem não interfere.» plot(t,z,‘r')» plot(t,z,‘r--')» plot(t,z,‘r--s')» plot(t,z,‘s--r')

Page 29: Apostila de Matlab222

29

Gráficos

Personalização dos Eixos

Através do comando axis pode-se definir os valores dos eixos.Sintaxe:axis([xmim xmax ymim ymax])axis auto % retorna o escalonamento dos eixos para o padrão

Mude a escala do gráfico de modo que o eixo do x varie de -10 a 10 e o eixo do y varie de -2 a 2

» axis([-10 10 -2 2])

Para voltar ao padrão

» axis auto

Page 30: Apostila de Matlab222

30

Gráficos Múltiplos

Acrescentando novos gráficos aos já existentes.Comando hold.hold on % não remove o grafico anterior e aloca o novohold off % libera para que o próximo gráfico seja único na janela.» x=linspace(0.2*pi,30);» y=sin(x);» z=cos(x);» plot(x,y)» hold on» plot(x,z,’m’)» hold off» title(‘Uso do comando hold’)» plot(x,y,’kd--’)Para determinar escalas fixas independente do gráfico podemos utilizar o comando axis manual, isto faz com que os dados de escala permaneçam fixos para os novos gráficos com hold on» axis manual

Page 31: Apostila de Matlab222

31

Gráficos MúltiplosPara determinar escalas fixas independente do gráfico podemos utilizar o comando axis manual, isto faz com que os dados de escala permaneçam fixos para os novos gráficos com hold on

» x=linspace(0.2*pi,30);» y=sin(x);» z=cos(x);» plot(x,y)» hold on» axis manual» axis([-10 20 -1 1])

» plot(x,z,’m’)» hold off» axis auto

» plot(x,y,’kd--’)

Page 32: Apostila de Matlab222

32

Gráficos em janelas É possível criar varias janelas Figure e fazer gráficos deferentes em cada uma.Para criar uma nova janela utilize o comando figure. A cada nova figura formada é associado um número que a identifica (handle). Para acessar a figura que se deseja plotar deve-se ativa-la com o comando figure(n) onde n é o numero da figura criada.

» x=linspace(0.2*pi,30);» y=sin(x);» z=cos(x);» plot(x,y)» figure(2)» plot(x,z,’m’)» figure(3)» plot(x,y,’kd--’)Para retornar a figura basta indicar o seu handle – os comandos seguinte refletirão na figura ativa» figure(1)» grid» clf %limpa a janela Figure ativa e restaura as propriedades ao padrão» close %fecha a janela figure ativa

Page 33: Apostila de Matlab222

33

Subgráficos Em uma mesma janela Figure é possive ter mais de um conjunto de eixos. O comando subplot(m,n,p) subdivide a janela Figure atual em uma matriz com m por n regiões. São referenciados da esquerda para direita de cima para baixo

» x=linspace(0.2*pi,30);» y=sin(x);» z=cos(x);» a=2*sin(x).*cos(x);» b=sin(x)./cos(x);

» subplot(2,2,1);%cria 4 posições para gráficos (1 esquerda)» plot(x,y),title(‘sen(x)’)» subplot(2,2,2);%(1 a direita)» plot(x,z),title(‘cos(x)’)» subplot(2,2,3);%(2 a esquerda)» plot(x,a),title(‘2sen(x)cos(x)’)» subplot(2,2,4);%(2 a direita)» plot(x,b),title(‘sen(x)/cos(x)’)

Apenas aquele subgrafico ativo receberá os comandos. Para retornar ao valor default subplot(1,1,1)

Page 34: Apostila de Matlab222

34

Gráficos estilizadosDesenho de polígonos:Função fill(x,y,c) preenche o polígono bidimensional definido pelos vetores x e y com a cor definida em c.Exemplo: desenho de um quadrado.» a=[2 3 3 2];» b=[2 2 3 3];» fill(a,b,‘g');» %alterando a escala dos eixos» axis([1 5 1 5])Faça então o desenho abaixo:

Page 35: Apostila de Matlab222

35

GráficosTipo pizza» a=[0.6 1 1.7 1.3 0.9 2.2]» pie(a)» pie(a,a==max(a)) %maior valor será explodido» pie3(a)» b=[0 0 1 0 0 1]» pie3(a,b)%valores em b que são diferentes de 1 farão explodir os setores de a

Tipo barra» x=[5 7 10 2 8]» subplot(2,2,1)» bar(x,’g’),title(‘barras bidimensional’)» subplot(2,2,2)» bar3(x,'c'),title(‘barras tridimensional’)» subplot(2,2,3)» stairs(x),title(‘Em escada’)» subplot(2,2,4)» barh(x,‘b'),title(‘barras horizontal’)

Page 36: Apostila de Matlab222

36

Gráficos Tridimensionais e Contornos

Exemplo utilizando a função pré-definida do Peaks MATLAB.A função peaks é uma função de duas variáveis que faz parte de funções deamostras do MATLAB. Esta função é obtida pela translação e mudança de escala de uma distribuição Gaussiana, a qual é útil para demonstrar funções como: MESH, SURF, CONTOUR.Exemplo:» [x,y,z] = peaks;»mesh (x,y,z);

Page 37: Apostila de Matlab222

sum Soma dos elementosProd Produto dos elementosMean Média aritméticaStd Desvio padrãoMax MáximoMin MínimoSort Ordem crescente

Funções de Controle de Baixo Nível

11 Manipulação de Arquivos

37

Gráficos Tridimensionais e Contornos

O comando contour, mostra a projeção da superfície no plano com n iso-linhas.Exemplo: »contour(peaks,4)

Page 38: Apostila de Matlab222

O Matlab possui funções para a manipulação de arquivos baseadas na linguagem C. Estas funções permitem a leitura e/ou gravação de dados formatados ou em modo binário.

11.1 FUNÇÕES PARA ABERTURA E FECHAMENTO DE ARQUIVOS

ABERTURA

Antes de ler ou escrever em um arquivo, o mesmo deve ser aberto através do uso da função fopen ( ). Esta função tem a seguinte sintaxe:

<variável> = fopen (‘nome’, ’modo’)

ou

[<variável>,<mensagem>] = fopen (‘nome’, ’modo’)

onde:

modo : ‘r’ para leitura

‘w’ para escrita

‘a’ para acréscimo

‘r+’ para leitura e/ou escrita

Se o arquivo for usado em modo binário, deve-se acrescentar a letra b. Exemplo:

‘rb’, ‘wb’, etc...

38

Page 39: Apostila de Matlab222

11.2 FECHAMENTO

<variável> = fclose (<variável usada por fopen ()>)

LEITURA EM FORMATO BINÁRIO

A função fread () é usada para leitura de dados armazenados no formato binário.

Exemplo :

arq = fopen ( 'dados.dat', 'rb' );

A = fread (arq) ;

fecharq = fclose (arq);

Este bloco de comandos lê todo o conteúdo do arquivo de nome dados.dat e transfere o conteúdo para a variável A, fechando o arquivo a seguir.

Dois argumentos opcionais fornecem à função fread () controle sobre o número de valores lidos e a precisão 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 dimensões 10 X 10, os mesmos dados serão armazenados em uma matriz.

39

Page 40: Apostila de Matlab222

arq = fopen ( 'dados.dat', 'rb' );

A = fread ( arq, [10,10] );

fecharq = fclose (arq);

A precisão com que os dados serão lidos é dada usando-se os formatos :

char e uchar - para caracteres sinalizados ou não ( 8 bits )

short e long - para inteiros "curtos" ou "longos" ( 16 ou 32 bits )

float e double - para reais com precisão 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 BINÁRIO

A função fwrite () é utilizada para escrever dados em um arquivo binário. 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

Page 41: Apostila de Matlab222

11.4 ACESSO DIRETO AO CONTEÚDO DE UM ARQUIVO

As funções fseek ( ) e ftell ( ) permitem o acesso direto aos elementos de um arquivo.

A função ftell ( ) fornece o deslocamento em bytes do indicador de posição em um arquivo específico.

A função fseek ( ) reposiciona o indicador de posição permitindo o acesso direto à um dos elementos do arquivo.

Ela recebe como argumento o nome do arquivo, dado por fopen () e um número positivo ou negativo, indicando avanço ou retrocesso de posição.

Opcionalmente pode-se passar como parâmetro o início (´bof'), o fim ('eof') ou a posição 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 Utilização de Arquivos Formatados

41

Page 42: Apostila de Matlab222

A função fprintf () juntamente com a função fscanf () são utilizadas para escrita e leitura usando-se formatos específicos para cada tipo de dado. Os caracteres de controle usados na formatação mais comuns empregados são:

%e - para valores reais em notação científica%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,'Função 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 função y=exp(x) no intervalo [0,1]

A primeira chamada da função fprintf escreve o título 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 são convertidos para a forma 2 colunas. A função usa os formatos definidos (%6.2f e %12.8f) repetidamente até converter todos os componentes da matriz.

Uma outra função, sprintf (), faz a saída 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 função 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

Page 43: Apostila de Matlab222

A primeira linha gravada no arquivo, contendo o título : 'Função Exponencial\n\n', é lida pela primeira chamada feita à função fscanf(). O formato utilizado %[^\n], faz a leitura dos caracteres contido na linha até encontrar um caractere \n. O dados são lidos para uma matriz de nome tabela. Esta variável tem suas dimensões especificadas pelos parâmetros [2 inf ], significando duas linhas e o número 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 função, chamada sscanf() é utilizada para leitura de dados de um vetor de caracteres, ao invés 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 ...clearclcarq = fopen('Serie.bin','wb');termo = 1;for a = 1:30fwrite(arq,termo,'long');termo = termo + 4;endfprintf('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 ...clearclcarq = fopen('Serie.txt','w');termo = 1;for a = 1:30fprintf(arq,'%d\t',termo);termo = termo + 4;endfprintf('arquivo criado')fclose(arq);

43

Page 44: Apostila de Matlab222

%Exemplo de uso de arquivos do tipo binario%Leitura de arquivo do tipo binarioclearclcarq = 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:tamfprintf('%d\t',x(a));end

%Exemplo de uso de arquivos do tipo texto%Leitura de arquivo do tipo textoclearclcarq = 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:tamfprintf('%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 arquivoclearclcfprintf('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');endfclose(arq);

%Exemplo de uso de arquivos do tipo texto%leitura de arquivo do tipo texto usando % funcao para testar fim de arquivoclearclcfprintf('Conteudo do arquivo Serie.txt\n')arq = fopen('Serie.txt','r');x = fscanf(arq,'%d',1);while ~feof(arq)

44

Page 45: Apostila de Matlab222

fprintf('%d\t',x);x = fscanf(arq,'%d',1);endfclose(arq);

%Exemplo de uso de arquivos do tipo binario%Copia o conteudo de um arquivo texto para outro arquivoclearclcarq = 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:5for b = 1:6fwrite(mat,x(a,b),'long');end endfclose(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 textoclearclcarq = 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:5for b = 1:6fprintf(mat,'%d\t',x(a,b));end fprintf(mat,'\n');endfclose(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 exponencialclearclcx = 0:0.1:1;y = [x; exp(x)];arq = fopen('exp.bin','wb');fwrite(arq,y,'double');

45

Page 46: Apostila de Matlab222

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 exponencialclearclcx = 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 funcaoclearclcarq = fopen('exp.bin','rb');tabela = fread(arq,[2 11],'double');fclose(arq);fprintf('Conteudo do arquivo\n')for a=1:2for b = 1:11fprintf('%f\t',tabela(a,b))endfprintf('\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 funcaoclearclcfid = fopen('exp.txt','r');tabela = fscanf(fid,'%f',[2 11]);fclose(fid);fprintf('Conteudo do arquivo\n')for a=1:2for b = 1:11fprintf('%f\t',tabela(a,b))endfprintf('\n')

46

Page 47: Apostila de Matlab222

endx = 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%binarioclearclcordem = input('Digite a ordem da matriz : ');mat = fix(100*rand(ordem,ordem));quant = 0;for a = 1:ordemfor b = 1:ordemif ((a+b) == (ordem + 1)) & (mod(mat(a,b),2) == 0 ) & (mod(a,2) == 1)quant = quant + 1;endendendfprintf('Matriz criada\n')for a = 1:ordemfor b = 1:ordemfprintf('%d\t',mat(a,b))endfprintf('\n')endfprintf('\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 textoclearclcordem = input('Digite a ordem da matriz : ');mat = fix(100*rand(ordem,ordem));quant = 0;for a = 1:ordemfor b = 1:ordem

47

Page 48: Apostila de Matlab222

if ((a+b) < (ordem + 1)) & (mod(mat(a,b),2) == 0 ) & (mod(a,2) == 1)quant = quant + 1;endendendfprintf('Matriz criada\n')for a = 1:ordemfor b = 1:ordemfprintf('%d\t',mat(a,b))endfprintf('\n')endfprintf('\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 binarioclearclcordem = 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:ordemfor b = 1:ordemif ((a+b) > (ordem + 1)) & (mat(a,b) < 20)quant = quant + 1;fwrite(arq,quant,'long');endendendfclose(arq);fprintf('Matriz criada\n')for a = 1:ordemfor b = 1:ordemfprintf('%d\t',mat(a,b))endfprintf('\n')endfprintf('\nQuantidade dos elementos menores que 20 situados abaixo da diagonal

secundaria : %d',quant)

%Programa para ler uma matriz quadrada contendo valores inteiros%e imprimir a quantidade de elementos menores que 20 situados

48

Page 49: Apostila de Matlab222

%abaixo da diagonal secundariaclearclcordem = input('Digite a ordem da matriz : ');mat = fix(100*rand(ordem,ordem));quant = 0;for a = 1:ordemfor b = 1:ordemif ((a+b) > (ordem + 1)) & (mat(a,b) < 20)quant = quant + 1;endendendfprintf('Matriz criada\n')for a = 1:ordemfor b = 1:ordemfprintf('%d\t',mat(a,b))endfprintf('\n')endfprintf('\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 clearclcmat = 100*rand(11,2);transposta = zeros(2,11);for a=1:11for b = 1:2transposta(b,a) = mat(a,b);end endarqmat = fopen('Matriz_e_sua_Transposta.bin','wb');for a=1:11for b = 1:2fwrite(arqmat,mat(a,b),'double');endendfor a=1:2for b = 1:11fwrite(arqmat,transposta(a,b),'double');endendfclose(arqmat);fprintf('Arquivo criado')

49

Page 50: Apostila de Matlab222

%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 clearclcmat = 100*rand(11,2);transposta = zeros(2,11);for a=1:11for b = 1:2transposta(b,a) = mat(a,b);end endarqmat = fopen('Matriz_e_sua_Transposta.txt','w');fprintf(arqmat,'Matriz criada\n');for a=1:11for b = 1:2fprintf(arqmat,'%f\t',mat(a,b));endfprintf(arqmat,'\n');endfprintf(arqmat,'Matriz transposta\n');for a=1:2for b = 1:11fprintf(arqmat,'%f\t',transposta(a,b));endfprintf(arqmat,'\n');endfclose(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 clearclcmat = zeros(11,2);transposta = zeros(2,11);x = fopen('Matriz_e_sua_Transposta.bin','rb');for a=1:11for b = 1:2mat(a,b) = fread(x,1,'double');endendfor a=1:2for b = 1:11transposta(a,b) = fread(x,1,'double');endend

50

Page 51: Apostila de Matlab222

fclose(x);fprintf('Matriz criada\n')matfprintf('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 clearclcmat = zeros(11,2);transposta = zeros(2,11);x = fopen('Matriz_e_sua_Transposta.txt','r');titulo1=fscanf(x,'%[^\n]');for a=1:11for b = 1:2mat(a,b) = fscanf(x,'%f',1);endendz=fscanf(x,'%f');espaco=fscanf(x,'%[^\n]');titulo2=fscanf(x,'%[^\n]');for a=1:2for b = 1:11transposta(a,b) = fscanf(x,'%f',1);endendfclose(x);fprintf('Matriz criada\n')matfprintf('Matriz transposta\n')transposta

12.0 ESTRUTURAS OU REGISTROS  

Uma estrutura é uma construção 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 informação (dados) sobre vários assuntos de diferentes títulos (campos). Por exemplo, você poderia manter um livro de registros com uma página dedicada a cada um de seus parentes. Você poderia listar informações para cada um deles sob os títulos: grau de parentesco, nome, telefone, filhos (quantos), filhos (nomes), etc. Embora os títulos sejam os mesmos em cada registro, an informação contida nos títulos é diferente para cada registro. Implementar esse registro no

51

Page 52: Apostila de Matlab222

MATLAB é montar uma estrutura. O melhor é que não 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 são indicados adicionando seus nomes após o nome da estrutura, separados por um ponto (.). Os campos são valores designados simplesmentecomo uma outra variável no MATLAB. No exemplo acima, os campos curso e notas contêm um vetor de números. Agora, como pode ser gerado um registro para o próximo curso? Estruturas são bem como seus campos: multidimensionais. Portanto, pode-se geraro próximo registro de diferentes maneiras:

Múltiplos registros em um vetor de estrutura

Pode-se fazer com que a estrutura Turma seja um vetor (neste exemplo, um vetor será o bastante), então 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]

» Turma(2).curso = 'Física'; Turma(3).curso = 'Computação';

» Turma(2).prof = 'Mauro'; Turma(3).prof = 'Karen';

» Turma(2).notas = [72 75 78]; Turma(3).notas = [85 35 66];

» Turma

Turma =1x3 struct array with fields:

52

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

Quando requisitado, o MATLAB mostra a estrutura.

Após adicionar mais 2 registros, Turmatorna-se um vetor, e, quando requisitado, oMATLAB mostra informações sobre aestrutura;

Page 53: Apostila de Matlab222

Curso

prof 

notas

» Turma(2).curso

ans =Física

» Turma(3).notas(1)

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), obtêm-se 2 valores de todos os campos junto com os nomes do campo. Pode-se também acessar campos individuais(Turma(1).prof ou Turma(1).notas(3)).

Obs.: Em um vetor de estrutura, cada elemento deve ter o mesmo número de campos. Cada campo, entretanto, poder conter dados de diferentes tamanhos. Portanto,Turma(1).notas pode um vetor linha de 3 espaços enquanto que Turma(2).notas um vetor coluna de 5 espaços.

53

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

Pode-se usar a notação de índices para a estrutura assim como para os seus campos.

Quando nenhum índice é especificado para a estrutura, o MATLAB mostra na tela os valores do campo de todos os registros até agora executados.

Para acessar os valores a partir de um campo de muitas gravações use um laço.

Page 54: Apostila de Matlab222

Múltiplas gravações em campos de vetores.

Para o exemplo escolhido, pode-se armazenar múltiplos 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’, ‘Física’, ‘Computação’);Turma.prof = char(‘Paulo’, ‘Mauro’, ‘Karen’);Turma.notas = [80 75 95; 72 75 78; 85 35 66];

Neste exemplo, a função char é usada para criar de caracteres string separadamente das variáveis 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 números 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 método de criação de um vetor de estrutura parece ser o caminho mais fácil, pode-se também usar o segundo método e obter o terceiro campo notas sendo uma matriz 3-D.

Criando Estruturas

Nos exemplos anteriores, já se tinha visto como criar estruturas por designação 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 função 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’,’Física’,’Computação’), . . .’prof’,char(’Paulo’, ’Mauro’, ’Karen’), . . .’notas’,char( [80 75 95; 72 75 78; 85 35 66]);

Como um vetor de estrutura:Vet_Turma = [struct(‘curso’,’eletrica2003’,’prof’,’Paulo’, . . .’notas’, [80 75 95]);struct(‘curso’,’Física’,’prof’,’Mauro’, . . .

54

Page 55: Apostila de Matlab222

’notas’, [72 75 78]);struct(‘curso’,’Computação’,’prof’,’Karen’, . . .’notas’, [85 35 66])];

Manipulando estruturas

Manipulação de estruturas é similar à manipulação de arranjos em geral –acessar elementos de estrutura pelo próprio índice e manipular seus valores. Há, porém,uma grande diferença: não se pode designar todos os valores de um campo através de um vetor de uma estrutura a uma variável com 2 pontos variáveis e especificadores.

Assim, se Vet_Turma é um arranjo de estrutura 3 x1 então:

Vet_Turma(1).notas(2)

Vet_Turma(1).notas(:)

Vet_Turma(:).notas

Então, embora se possa ver na tela os valores de campo através de múltiplosregistros com Vet_Turma(:).notas, deve-se usar um loop para designar os valores à variável:

For k=1:3, todas_notas (k,:) = Vet_Turma(k).notas; end

A designação não pode ser feita diretamente com o operador de coluna porque os valores dos campos de muitos registros são tratados como entidades diferentes.Os conteúdos de campo são também são permitido serem de diferentes tamanhos.Portanto, embora se possa usar um laço for para designação, deve tomar cuidado extra para assegurar que a designação faz sentido. Por exemplo, no laço for citado, se Vet_Turma(2),notas tem somente 2 notas de teste, então a designação produzirá um erro.

55

é válido e mostra o elemento das notas oriundo do primeiro registro de Vet_Turma

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

É inválido, não designa notas vindos de todos os registros

para, embora o comando Vet_Turma(:).notasou (Vet_Turma.notas)

mostra notas de todos os registros.

Page 56: Apostila de Matlab222

Está claro, dos exemplos mostrados, que se pode usar índices para a estrutura tanto como campos para acessar informação. Até agora, têm-se usado somente arranjos de caráter e de números nos campos. Pode-se, entretanto, haver também estruturas dentro de estruturas. Porém, o nível de ordenação torna-se completamente envolvido erequer cuidado extra quando se têm estruturas “entrelaçadas”.

Há também várias funções que ajudam na manipulação das estruturas –fieldnames, setfield, getfield, rmfield, is field, etc. Os nomes da maioria dessas funções já sugere seu papel.

Roteiro e Função no MatlabO Matlab, como outras linguagens de programação, possui duas formas de

criação de programas: roteiro (script) e função (function). Na aula passada, vimos um exemplo prático de criação de um roteiro que executava uma seqüência de comandos Matlab para o ajuste de curvas (linear polinomial e não-linear). Quando um programa executa uma seqüência de comandos que pode ou não retornar parâmetros na janela de comandos do Matlab, então esse programa denomina se “roteiro” no Matlab. Em inglês, roteiro é chamado script, termo esse que também é usado na língua portuguesa para descrever uma seqüência de eventos.

Entretanto, muitas vezes necessitamos de um programa na forma de função. Uma função é um roteiro que retorna um valor (ou parâmetro). Por exemplo, quando realizamos o cálculo de valores numéricos de funções trigonométricas no Matlab utilizamos funções intrínsecas (isto é, funções já existentes no Matlab). Por exemplo, para calcular o seno de um ângulo de 5 radianos, utilizamos o comando:

>> y = sin(5)y =-0.9589O valor de sen 5 é gravado na variável y. Note a sintaxe da função matemática

sin(5), na qual se utiliza a sintaxe na língua inglesa (sin) da função seno, por se tratar de uma função intrínseca do Matlab e segundo, o argumento da função, isto é, o valor de x para o qual queremos determinar o valor do seno está colocado entre parêntesis.

Quando desejamos um programa que funcione como uma função, então o roteiro é chamado function. Para ilustrar a diferença entre roteiro e função, vamos calcular a função ex na forma de roteiro (aula2c):

% aula2c Calculo da função exponencial por serie de Taylorx = input('Valor de x: ');n = input('Numero de termos: ');funcao = 0;for k = 1:ntermo = x.^k/fatorial(k);funcao = funcao + termo;enddisp(['exp(' num2str(x) ') = ' num2str(funcao) ' com ' num2str(n) ' termos']);Neste roteiro, o valor de x é informado através de uma instrução input. O mesmo

ocorre para o número n de termos da série. Lembrando que a função exponencial na forma de série de Taylor é descrita pela equação:

56

Page 57: Apostila de Matlab222

ex=∑∞k=0 x/kk!

observamos que o laço for-end executa o cálculo de cada termo da série (variável termo) para depois ser somada na variável soma. No final do roteiro, o resultado é exibido na janela de comando do Matlab usando a instrução disp. Observar que utilizamos no cálculo do termo da série de Taylor, uma função extrínseca chamada fatorial que não existe no Matlab, que foi criada na aula prática e é reproduzida a seguir:

function f = fatorial(n)f = 1;for k = 1:nf = f*k;end

Observar que numa função, a primeira linha deve obrigatoriamente conter a declaração

function f = fatorial(n)e que o nome declarado nesta declaração deve ser o mesmo do programa Matlab,

ou seja,fatorial.m.

Se quisermos criar uma função para o cálculo da função exponencial, ela será constituída pelas seguintes instruções (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 nf = 0;for i = 1:nk = i - 1;f = f + x^k/fatorial(k);end

Observe as diferenças entre a função func0 e o roteiro aula2c. Ambos os programas calculam a função ex por série de Taylor. A função func0 tem dois parâmetros de entrada: a variável x e o número de termos n, por isso eles são passados dentro do parêntese separados por vírgula: func0(x,n). O valor da função ex retorna pela variável f declarada no cabeçalho do programa.

A vantagem da função é que ela pode ser usada como uma função intrínseca do Matlab.

Como exemplo da aplicação da função func0, vamos calcular o valor do número de Euler e1 utilizando essa função com número de termos variando de um a dez e comparando o resultado com o valor exato dado pela função intrínseca do Matlab exp(1):

% aula3 Roteiro para o calculo do numero de Euler por serie de Taylor% com numero de termos de um a dez e calculo do respectivo erro de% truncamentox = 1;for i = 1:10

57

Page 58: Apostila de Matlab222

exprox(i) = func0(x,i);enderro = abs(exprox - exp(1));result = [exprox' erro'];disp([' exp erro'])disp(result)

Lista de exercícios:1 - Faça um programa que some os números pares de 0 (zero) até 100 e

imprima o resultado.

2 - Fazer um programa que leia um número indeterminado de cartões contendo cada um a idade de um indivíduo. O último cartão, que não entrará nos cálculos, contém o valor de idade igual à zero. Calcule e imprima a idade média deste grupo de indivíduos.

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 média de altura das mulheres;

- O número de homens

4 - Um comerciante deseja fazer o levantamento do lucro das mercadorias que ele comercializa. Para isto, mandou perfurar em carões (um para cada mercadoria) o nome, preço de compra e preço 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.

5 - Uma firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou não de um novo produto lançado no mercado. Para isto, perfurou-se em cartões o

58

Page 59: Apostila de Matlab222

sexo do entrevistado e sua resposta (sim ou não). Sabendo-se que foram entrevistadas 200 pessoas, fazer um programa que calcule e imprima;

- O número de pessoas que responderam sim;

- O número de pessoas que responderam não;

- A porcentagem de homens que responderam não;

- A porcentagem de mulheres que responderam sim;

7 - Fazer um programa que calcule e escreva o seguinte somatório

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

8 - Fazer um programa que calcule e escreva o seguinte somatório:

S = 1 + 3 + 5 + 7 + 9 + 11 + . . . + 199

9 - Uma companhia de teatro planeja dar um série de espetáculos. A direção calcula que, a R$50,00 o ingresso, serão vendidos 120 ingressos, e as despesas montarão em R$200,00. A diminuição de R$5,00 no preço 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 função do preço 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 máximo esperado, o preço e o número de ingressos correspondentes.

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

0 3 6 9 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

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

59

Page 60: Apostila de Matlab222

1 2 3 4 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 série:

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

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

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 série de Mca-Laurin truncada, apresentada a seguir:

3 5 7

Sen = - /6 + /120 - /5040

60

Page 61: Apostila de Matlab222

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 número (pi), com precisão de 0.0001, usando a série:

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

Para obter a precisão 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 somatório:

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 somatório:

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 série:

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

25 - Fazer um programa que:

- calcule e escreva o valor da série abaixo com precisão menor que um décimo de milésimo (0.0001);

- indique quantos termos forma usados.

61

Page 62: Apostila de Matlab222

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

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

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 série:

2 4 6

S = X - X/3! + X/5! - X/7! + . . .

onde: x e n são lidos.

28 - Fazer um programa que:

- calcule o valor do co-seno de X através de 20 termos da série abaixo:

2 4 6 8

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

- calcule a diferença entre o valor calculado no item anterior e o valor fornecido pela função Cos(X);

- escreva o que foi calculado nos itens anteriores.

29 - Fazer um programa que:

- leia um conjunto de linhas contendo cada uma um número inteiro, na base 10 de até cinco dígitos. A última linha contém o valor zero.

- transforme esse número da base 10 para a base 2;

- escreva o número na base 10 e na base 2.

62

Page 63: Apostila de Matlab222

Variável Composta

1 - Fazer um programa que:

- Leia 100 valores numéricos e armazene numa variável composta unidimensional A;

- Calcule e escreva:

100

S = i/a[i], onde i é o i-ésimo valor armazenado na variável A;

i=1

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

Exemplo:

A

25

56

77

. . .

88

1 2 3 100

somatório = 1/25 + 2/56 + 3/77 + . . . + 100/88

2 - Fazer um programa que:

- Leia duas variáveis compostas unidimensional, contendo, cada uma 200 elementos numéricos;

- Intercale os elementos destes dois conjuntos formando uma nova variável 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) não ocorreu temperatura inferior a 15 graus centígrados nem superior a 40 graus centígrados. As temperaturas verificadas em cada dia estão disponíveis em uma unidade de entrada de dados.

- Fazer um programa que calcule e imprima:

63

Page 64: Apostila de Matlab222

a menor temperatura ocorrida; a maior temperatura ocorrida; a temperatura média; o numero de dias nos quais a temperatura foi inferior a temperatura

média.

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 são 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 variável A composta de valores numéricos, ordenados de forma crescente;

b) determine e imprima para cada número 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 numéricos disponíveis num meio de entrada qualquer, fazer um a programa para armazená-los numa variável composta B, calcular e imprimir o valor do somatório dado a seguir:

Exemplo:

B

210

160

. . .

33

97

1 2 3 100

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

64

Page 65: Apostila de Matlab222

7 - Fazer um programa que:

- leia o valor de M (M < = 30) e os M valores de uma variável composta A;

- leia o valor de N (N < = 20) e os N valores de uma variável composta B;

- determine o conjunto C=A B (união de A com B), onde C não deverá conter elementos repetidos (A e B não contém 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 cartões;

- 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 freqüência absoluta e a freqüência relativa de cada nota;

c) imprima uma tabela contendo os valores das notas (de 0 a 10) e suas respectivas freqüências absoluta e relativa;

Obs.: 1 - freqüência absoluta de uma nota e o número de vezes que ela aparece no conjunto de dados;

2 - freqüência relativa é a freqüência absoluta dividida pelo numero total de dados.

9 - Uma grande firma deseja saber quais os três empregados mais recentes. Fazer um programa para ler um número indeterminado de cartões no máximo de 300,

65

Page 66: Apostila de Matlab222

contendo o numero do empregado e o número de meses de trabalho deste empregado e escrever os três mais recentes.

10 - Fazer um programa que:

- leia uma variável composta A com 30 valores numéricos;

- leia outra variável composta B com 30 valores numéricos;

- leia o valor de X;

- verifique qual elemento de A que é igual a X;

- escreva o elemento de B de posição correspondente a do elemento de A igual a X;

11 -Dados as variáveis compostas A e B abaixo:

A

2 5 7 9

5 1 6 9

B

0 2 3 7

2 6 8 9

Calcular o conjunto C=A+B

12 - Fazer um prog. em c++ que leia duas variáveis compostas de dimensão m*n(m<=20,n<=30). Onde os valores de m e n são lidos. Calcule e escreva:

- a soma dos elementos das matrizes.

13 - Fazer um prog. em c++ que leia uma matriz numérica Am*n(m<=20,n<=10). Onde m e n são lidos. Calcule e escreva:

- a matriz transposta de A.

66

Page 67: Apostila de Matlab222

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

Exemplo:

A

2 3

4 5

B

2 3 6

4 5 20

15 - Fazer um programa que leia uma matriz inteira Am*m.

Onde m e n são lidos. Calcule e escreva:

- o maior elemento par da diagonal secundária;

- a média dos elementos divisíveis por 3 da penúltima coluna da matriz;

- o produto dos elementos ímpares abaixo da diagonal principal da matriz.

67