Vous êtes sur la page 1sur 13

LISTA DE EXERCÍCIOS - COMANDOS BÁSICOS DO MATLAB

Introdução
O MatLab é muito fácil de usar, sobretudo se tiver alguns conhecimentos de Fortran ou C.
Seguidamente, propomos uma série de exercícios que deve fazer cuidadosamente e com atenção, de
forma a familiarizar-se com os procedimentos do MatLab. FAÇA HELP SEMPRE QUE
NECESSITAR. Para interromper use Control-C. Pode usar as setas do teclado para repetir,
eventualmente com alterações, instruções dadas anteriormente. Deve usar o comando clear sempre que
tenha problemas de memória. Antes de começar, coloque uma disquete na unidade a: do seu
computador e faça cd a: na sua área de trabalho. Sempre que encontre um nome de uma função que
não conheça, faça help nome da função.
No final deste manual, encontrará uma listagem das funções que foi encontrando ao longo das sessões.
Complete a parte direita com o significado e/ou acção de cada uma.
1. OPERAÇÕES USUAIS

» x=3+5
» 4-10
» 4-10;
» x=3+5;
» x=5*9-3
» x=3/4+6-10
» x=log(8)
» x=exp(log(8))
» x=log(exp(8))
» x=cos(pi/4)
» x=log(sqrt(4))
» x=sqrt(8)
» x=8^(1/2)
» x=5^2
» sin(pi)
» eps
» realmin
» realmax
» realmax*1.1
» realmax+10
» eps
» format long

% execute os seguintes comandos e interprete os resultados


» a = 2500/20
» a = 2500/20;
» b = [1 2 3 4 5 6 7 8 9]
» c = [1 2 3 ; 4 5 6 ; 7 8 9]
» c = [c ; [10 11 12]
» c(2,2) = 0
» l = length(b)
» [m,n] = size(b)
» [m,n] = size(c)
» who
» whos
» clear
» who
» b = l + 2 + 3 + 4 + ...
»5+6-7
»x=1:2:9
» x = (0.8 : 0.2 : 1.4);
» y = sin(x)
» dir
» a = 2^3
» a = 4/3
» format long
» a = 4/3
» format short
» clear
» a=[1 2 3 ; 4 5 6 ; 7 8 9];
» b = a’
»c=a+b
»c=a-b
» a(l,:) = [-1 -2 -3]
» c = a(:,2)
» c = a(2:3, 2:3)
» x = [- 1 0 2];
» y = [-2 -1 1]’;
» x*y
»c=x+2
» a = [1 0 2; 0 3 4 ; 5 6 0];
» size(a)
» b = inv(a);
» c = b*a
» c = b/a
» c = b\a
» clear a b x y
» whos
2. MANIPULAÇÃO DE VECTORES

» x=[] inicialização de vectores


» x=[0 1 -1 3 4];
» x=[0 1 -1 3 4]
»x visualização
»z
» z=x*3;
»z
» z=x.*y produto componente a componente.
» sum(z) soma das componentes do vector
» z=x./y;
»z

» z=x*y; % dá erro, devido à falta do .

» x=[x y]; % criação de um vector a partir de outros pre-existentes.


»x
» x=x.*y; % dá erro, devido ao produto de dois conjuntos de cardinalidades diferentes.
» x=[x x x];
»x
» pi
» cos(pi/4)
» x=[x(5:8)]; % cria um vector com parte de outro.
» x=[ones(1,4),[2:2:11],zeros(1,3)] ; % cria um vector à custa de outros
» x=[ones(1,4),2:2:11,zeros(1,3)] ;
» x(3:7)
»% não faz nada; serve para pôr comentários
» r=rand(size(1:10))
% Os números complexos são fáceis de tratar. Faça, sucessivamente:
» z = 2 + 2j
» conj(z)
» abs(z)
» angle(z)
» real(z)
» imag(z)
» exp(i*pi)
» exp(j*[ pi/4 -pi/4 ])
» exp(j*[ pi/4:0.1:-pi/4 ])
» z^r
Exercício 1
a) Use as funções rand e size para gerar 1000 números pseudo-aleatórios com distribuição
uniforme (guarde o vector com os valores).
b) Confirme que se trata de uma distribuição uniforme, usando a função hist.
c) Repita as alíneas anteriores para uma distribuição gaussiana, usando a função randn.
(guarde o vector com os valores)
d) Com as funções da alínea a) e a função fix, faça a geração de 10 chaves do Totoloto.
e) Aproveite o resultado da alínea c e use a função sign para gerar um sinal binário.

Exercício 2
2
Considere o polinómio p1=x + 3x +2
a) Use a função roots para determinar as suas raízes.
b) A partir das raízes, reconstrua o polinómio usando a função poly.
c) Represente graficamente as raízes usando a função polar.

d) Considere outro polinómio p2=3x3 - 3x +1. Repita as questões anteriores.


e) Multiplique os dois polinómios. Para isso, use a função conv.
f) Use a função roots para confirmar o resultado da alínea anterior.

% A instrução seguinte abre o arquivo notas.dry e grava todas as instruções digitadas na sequência
» diary notas.dry
» x = [1 -2 3]
» y = [4 3 2]
» z = x.*y
» z = x.^y
» y.^2
» diary off % Encerra a gravação da instrução diary em notas.dry
» dir
» type notas.dry
» clear
» help diary

% RECURSOS DE GRAVAÇÃO (ARMAZENAGEM) DE DADOS

» help save
» help load
» a = [1 2 3 4 5 6 7 8];
» b = a*2;
» c = a - 1;
» save a b c
» dir
» clear
» whos
» load a b c
» whos

% RECURSOS GRÁFICOS 1

» y = [0 2 5 4 1 0];
» plot(y)
» t = 0:.4:4*pi
» y = sin(t)
» z = cos(t);
» plot(t, y, ‘.’, t, z "-.")
» title(‘Funções’)
» xlabel("t")
» ylabel("Seno e Co-seno")
» text(3, 0.5, ‘Seno’)
% Após o próximo comando, selecione a posição que deseja colocar o texto ‘Co-seno’ com rato
» gtext(‘Co-seno’)

Exercício 3
% AJUSTE DE CURVAS DE DADOS EXPERIMENTAIS
a) Faça a geração de 20 valores entre –1 e 1, usando a função linspace.
b) Com aqueles valores, construa os valores da função x=t2.
c) Suponha que os valores da função são observados com erro uniforme entre –0.1 e 0.1, xr=x+r.
d) Desenhe o sinal xr.
e) Use a função polyfit para ajustar um polinómio aos dados. Calcule os valores do polinómio nos
pontos considerados, usando a função polyval.
f) Com a função ginput, obtenha as coordenadas de 3 pontos seleccionados no gráfico com o rato
3. OPERAÇÕES COM MATRIZES

» v=1:4;
» A = [1 2 3; 3 -5 6; 6 7 9]
» eye(3)
» zero(3)
» zero(3,3)
» zeros(3,3)
» B = A'
» A*B
» A*B
» A.*B
» A+B
» A(2,3)
»A
» A(1,:)
» A([1,2],:)
» A([3 2],[2 1])
»A
» A*v
»A
»v
» size(A)
» length(A)
» sin(A)
» sqrtm(A)
» M=sqrtm(A)
» M*M
» real(M*M)
»A
» A^2
» A.*A
» A.^2
» inv(A)
» det(A)
» rank(A)
» eig(A)
» [V,D]=eig(A)
» eig(A)
» a = eye(4,5)
» r = rand(size(a))
» b = [2 0 0;0 3 0;0 0 -1];
» d = det(b)
» bi=inv(b)
» l = eig(b)
» c=[b b]
» d=[b;b]
» ci=pinv(c)
» di=pinv(d)
» c*ci
» ci*c
» di*d
» d*di

Exercício 4
a) Faça a geração de L=100 pontos de uma sinusoide de frequência f=3/8, sinal x.
b) Calcule a Transformada de Fourier Discreta, X, usando a fft com uma dimensão igual a 1024.
c) Trace o gráfico do módulo de X no 1º terço da área gráfica. Normalize o eixo de frequências
entre 0 e 1. Identifique a localização do pico.
d) Seja y um sinal que se obtem de x juntando-lhe ruido branco gaussiano de forma a que a
relação sinal ruído seja de 20 dB.
e) Repita as alíneas b) e c). Trace o gráfico do módulo de Y no 2º terço da área gráfica.
f) Calcule a função de autocorrelação de y definida pela expressão seguinte e implementada com
1 L-|k|
L-|k| ∑
a ajuda da função xcorr. Rx(k) = x(n).x(n+|k|) para |k| < L
0
g) Com a função de autocorrelação calculada, implemente a matriz de correlação C gerada de
forma a que Ci,j=Ry(|i-j|), para i,j=0, ..., 8;
h) Faça a decomposição em valores e vectores próprios (auto-decomposição) e crie uma matriz V
com os vectores próprios correspondentes aos menores valores próprios.
i) Seja v o vector correspondente à primeira linha de V. Calcule w=V.vH e a sua Transformada
de Fourier W. Repita c) e trace o gráfico do módulo de W no 3º terço da área gráfica. Extraia
algumas conclusões.
4. PROGRAMANDO COM O MATLAB

4.1. Criação de funções e subrotinas.

% Abra um arquivo a partir do Matlab (File, New, M-File)

% Digite os seguintes comandos e grave o arquivo com o nome teste1.m no seu directório de trabalho.

n=3;
m = 3;
for i = 1: m
for j= 1 : n
a(i, j) = i + j;
end;
end
disp(‘Matriz A’)
disp(a)

%final do programa teste1.m


Acabou de criar um “script” que pode chamar sempre que queira mesmo a partir de outros programas.

% CRIANDO UMA SUBROTINA


% Abra outro arquivo, salvando-o com nome de teste2.m
% Digite os seguintes comandos neste arquivo
v = 1:1:10;
m = media(v);
s = sprintf(‘\n A média é: %4.2f’, m);
disp(s);
% final do programa teste2.m

Agora crie o seguinte arquivo, com o nome de media.m


function x = media(u)
% function x = media(u) calcula a média do vector u, colocando o resultado em x
x = sum(u)/length(u);
% final da subrotina media.m

Nota existe uma função que faz isto: a função mean


Para calcular a média de um dado vector b, basta fazer bm=media(b) ou bm=mean(b).
Recursos gráficos 2
% CRIANDO UM PROGRAMA EXEMPLO DE GRÁFICO 3D
% Abra outro arquivo, salvando-o com nome de teste3.m
% Digite os seguintes comandos neste arquivo
clear
n = 30;
m = 30;
for i = 1:m
for j = 1:n
a(i,j) = sqrt(i+j);
end
end
b = [a+0.5 a’-0.5;
(a.^2)/5 ((a’-0.1).^2)/2];
mesh(b)

% RECURSOS DE GRAVAÇÃO (ARMAZENAGEM) DE DADOS


% Por exemplo os comandos seguintes
x = 0:.1:1; y = [x; exp(x)];
fid = fopen('exp.txt','w');
fprintf(fid,'%6.2f %12.8f\n',y);
fclose(fid);
% permitem criar um ficheiro exp.txt com uma tabela da função exponencial:
0.00 1.00000000
0.10 1.10517092
...
1.00 2.71828183

% de notar a semelhança entre as funções usadas e semelhantes usadas na linguagem C.


Para ler a tabela pode usar a função:

function [s]=ler(nome)

fid1=fopen(nome,'r');
[s]=fread(fid1,'int16');

plot(s)

chamando-a da forma seguinte:


s=ler(‘exp.txt’)
4.2. Uso de ciclos

Em exemplos anteriores já usámos ciclos, embora sem prestar muita atenção às suas concepção
e implementação. Alguns exemplos mostram com eles funcionam.
Geração de uma soma de sinusóides
% frequências, amplitudes e fases das sinusoides
f=[0.1 0.15 0.4];
a=[0.9 0.95 0.99];
ph=pi*rand(size(1:3));

function xx=ger_sin(f,a,ph,np)

ns=length(f) % número de sinusoides


x=eye(ns,np)*0; % inicialização da matrix x

% cada linha contém os valores de uma sinusóide

for i=1:ns
for k=1:np

x(i,k)=(a(i)^t(k))*cos(2*pi*f(i)*t(k)+ph(i));

end
end

% soma das sinusóides


v=[1 1 1];
xx=v*x;

figure(1)
plot(xx)

Exercício 5
Considere um sinal x(t) qualquer. Pretende-se efectuar o cálculo numérico do seu integral num dado
intervalo [a, b], a partir N+1 das suas amostras uniformemente espaçadas, x(nT); T é o intervalo de
amostragem definido por: T=(b-a)/N. Use a seguinte notação: t0 =a, t1=t0+T, t2=t0 +2T ..., tN=b. O
cálculo do integral baseia-se na equivalência entre o integral e a área.

Faça 3 subrotinas diferentes correspondentes às 3 seguintes situações:

a) Interpolação rectangular da função usando o valor à esquerda.


b) Interpolação rectangular da função usando o valor à direita.
c) Interpolação linear que corresponde a “ligar” os pontos por segmentos de recta (Aproximação
trapezoidal).
d) Use a função f(t) = t2, para teste, calculando o valor exacto do integral.
Considere o intervalo [-1,1].
e) Modifique o método trapezoidal para contemplar a situação em que, em vez do valor de um
integral, pretende a função primitiva. Teste com uma sinusóide.
O ciclo for é, efectivamente, o mais utilizado. No exemplo seguinte, observa-se uma implementação
usando o ciclo while.
Exercício 7
Considere uma sucessão de pulsos triangulares de período 2:
p(t) = 1 - |t| , p(t+2)=p(t).
Vamos exemplificar a reconstrução de um sinal periódico à custa das correspondentes harmónicas.
Para isso, vamos fazer usar a série:
∞ 2π
s(t) = X0 + 2.∑ An.cos( nt + ϕn)
T
1

Partindo de s0(t) = X0, vamos calculando a função sn(t) por adição de uma harmónica:

sn(t) = sn-1(t) + 2.An.cos( nt + ϕn)
T
Quando a potência do erro p(t) - sn(t) for suficientemente pequeno, paramos o algoritmo, visto os
termos da série serem insignificantes.
a) Use subrotina de integração trapezoidal, atrás desenvolvida, para calcular os coeficientes de Fourier
do sinal periódico:

jϕn 1 T/2 -j nt
x(t).e T dt
T⌠

Xn= Ane = n=0, 1, ..., 20;
-T/2

b) Para fazer a reconstrução, pretende-se uma implementação usando while, tendo como variável de
teste a potência do erro. Com pause deverá parar-se o algoritmo para visualizar na mesma figura: a)
sinal original, b) sinal sintetizado, c) hamónica actual.
CRIIntrodução ao MatLab

Teste - 29 de dezembro de 2000

Duração 1h 30m

Exercício 1 - Resolva o circuito dado na figura abaixo (encontre i1 e i2 ) utilizando a inversão de


matrizes do MATLAB. Faça um programa para isto. Faça R1 = 5Ω , R2 = 10Ω , R3 = 5Ω , R4 = l5Ω , R5
= 20Ω , V1 = 10,0 V, V2 = 20,0 V.

Resp.: i1 = 0,01026 A e i2 = 0,4615 A.

Exercício 2 - Numa sala estão 8 pessoas, reunidas em torno de uma mesa circular. Cada uma escolhe
um número aleatoriamente e soma-o aos números das pessoas ao lado, à sua esquerda e direita. Você
recolhe as 8 somas. Como é que você descobre o número que cada pessoa escolheu ?

Exercício 3 – shift-register

Vous aimerez peut-être aussi