Você está na página 1de 18

UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO

DEPARTAMENTO DE TECNOLOGIA RURAL


PROGRAMA DE PS-GRADUAO EM ENGENHARIA AGRCOLA

EXERCCIO DE MATLAB

Marcela Thays Luna Barreto


Orientador: Prof Dr. Mrio Monteiro Rolim
Disciplina: Mtodos Numricos

RECIFE
NOVEMBRO/2010

INTRODUO
O Matlab um software destinado a fazer clculos com matrizes (Matlab =
MATrix LABoratory). MATLAB foi criada no fim dos anos 1970 por Cleve Moler,
ento presidente do departamento de cincias da computao da Universidade do Novo
Mxico. Ela logo se espalhou para outras universidades e encontrou um forte uso no
mbito da comunidade matemtica aplicada. Jack Little, um engenheiro, conheceu a
linguagem MATLAB, durante uma visita feita por Moler a Universidade de Stanford
em 1983. Reconhecendo o seu potencial comercial, ele juntou-se a Moler e Steve
Bangert. Eles reescreveram MATLAB em C, em 1984 fundaram a MathWorks e
prosseguiram no seu desenvolvimento. As bibliotecas reescritas ficaram conhecidas
como LAPACK.
De acordo com o tutorial do MATLAB, esse um "software" interativo de alta
performance voltado para o clculo numrico. O MATLAB integra anlise numrica,
clculo com matrizes, processamento de sinais e construo de grficos em ambiente
fcil de usar onde problemas e solues so expressos somente como eles so escritos
matematicamente, ao contrrio da programao tradicional.
Nesse sistema, o elemento bsico de informao uma matriz que no requer
dimensionamento.
Esse trabalho foi desenvolvido no MATLA Br2007b - Portable.

1 Questo:
%arquivo script: marcela.m
clear
disp('Fator de correo de perda de carga')
fprintf ('\n')
N=input ('Informe o nmero de emissores na linha
lateral: ');
m=input ('expoente de descarga: ');
f1=1/N^(m+1);
for i=1:N
sum=i^m;
end
resp=f1*sum;
disp (resp)

2 Questo:
function fnewton(func,dfunc,x,tol)
%fnewton encontra a raiz de f(x)=0 usando o metodo
de newton
%ativao da funo: fnewton(func,dfunc,x,tol) a
definio da funo func
%a funo f(x)
%a definio da funo dfunc df/dx.
%x, um valor inicial e tol preciso requerida.
clc
fprintf('\n\n')
it=0;
x0=x;
d=feval(func,x0)/feval(dfunc,x0);
disp('============================================
=====')
disp('resultados das iteraes, aprocimaes e
erros')
disp('============================================
=====')
while abs(d)>tol
x1=x0-d;
it=it+1;
x0=x1;
d=feval(func,x0)/feval(dfunc,x0);
fprintf('iterao: k=%d aproximao: xk= %6.4f
erro=%4.2e\n',it,x1,d)
end
disp('============================================
====')
fprintf('aproximao final: xk=%6.4f\n',x1)
fprintf('preciso requerida: tol=%4.2e\n',tol)
disp('============================================
====')

3 Questo:
function fsecantes(func,x0,x,tol)
%fnewton encontra a raiz de f(x)=0 usando o metodo
de newton
%ativao da funo: fnewton(func,dfunc,x,tol) a
definio da funo func
%a funo f(x)
%a definio da funo dfunc df/dx.
%x, um valor inicial e tol preciso requerida.
clc
fprintf('\n\n')
it=0;
x0=x;x=1;
d=feval(func,x1);c=feval(dfunc,x0);
K=(d*x0-c*x1)/(d-c)
disp('============================================
=====')
disp('resultados das iteraes, aproximaes e
erros')
disp('============================================
=====')
while abs(d)>tol
x2=x1-K;
it=it+1;
x1=x2;
k=feval(func,x1);c=feval(dfunc,x0);
fprintf('iterao: k=%d aproximao: xk= %6.4f
erro=%4.2e\n',it,x2,K)
end
disp('============================================
====')
fprintf('aproximao final: xk=%6.4f\n',x2)
fprintf('preciso requerida: tol=%4.2e\n',tol)
disp('============================================
====')

4 Questo:
A) NEWTON (x+3x-1)

%arquivo script: newton1.m


clc
clear
disp('Metodo iterativo equaes polinomiais')
disp('x+3x-1')
fprintf ('\n')
x0=input ('valor do chute: ');
tol=0.0001;
f=x0^3+3*x0^2-1;
fn=3*x0^2+6*x0;
x2=x0-(f/fn);
f2=x2^3+3*x2^2-1;
while (abs(f2))>=(abs(tol));
fprintf ('\n')
x1=x2;
f=x1^3+3*x1^2-1;
fn=3*x1^2+6*x1
x2=x1-(f/fn);
f2=x2^3+3*x2^2-1
end
tabela = [ x2];%resultados aqui
fprintf ('\n')
disp
('-------------------------------------------')
disp ('
raiz')
disp
('-------------------------------------------')
disp (tabela)
disp
('-------------------------------------------')
B)NEWTON (x-cosx)
%arquivo script: newton2.m
clc
clear
disp('Metodo iterativo equaes polinomiais')
disp('x-cos(x)')
fprintf ('\n')

x0=input ('valor do chute: ');


tol=0.0001;
f=x-cos(x);
fn=1+sin(x);
x2=x0-(f/fn);
f2=x0-cos(x0);
while (abs(f2))>=(abs(tol));
fprintf ('\n')
x1=x2;
f=x0-cos(x0);
fn=1+sin(x)
x2=x1-(f/fn);
f2=x2-cos(x2)
end
tabela = [ x2];%resultados demonstrados
fprintf ('\n')
disp
('-------------------------------------------')
disp ('
raiz')
disp
('-------------------------------------------')
disp (tabela)
disp
('-------------------------------------------')
A) SECANTES (x+3x-1)
clear
disp('Metodo iterativo equaes polinomiais')
disp('x+3x-1')
fprintf ('\n')
x0=input ('valor do chute: ');
x1=input ('valor do chute: ');
tol=0.0001;
f=x0^3+3*x0^2-1;
f1=x1^3+3*x1^2-1;
x2=(f1*x0-f*x1)/(f1-f);
f2=x2^3+3*x2^2-1;
while (abs(f2))>=(abs(tol));
fprintf ('\n')
x0=x1;
x1=x2;
f=x0^3+3*x0^2-1;
f1=x1^3+3*x1^2-1;

x2=(f1*x0-f*x1)/(f1-f);
f2=x2^3+3*x2^2-1;
end
tabela = [ x2];%os resultados vo ser
mostrados aqui
fprintf ('\n')
disp
('-------------------------------------------')
disp ('
raiz')
disp
('-------------------------------------------')
disp (tabela)
disp
('-------------------------------------------')
B) SECANTES (x-cosx)
clear
disp('Metodo iterativo equaes polinomiais')
disp('x+3x-1')
fprintf ('\n')
x0=input ('valor do chute: ');
x1=input ('valor do chute: ');
tol=0.0001;
f=x-cos(x);
f1= x1-cos(x1);
x2=(f1*x0-f*x1)/(f1-f);
f2= x2-cos(x2);
while (abs(f2))>=(abs(tol));
fprintf ('\n')
x0=x1;
x1=x2;
f= x-cos(x);
f1= x1-cos(x1);
x2=(f1*x0-f*x1)/(f1-f);
f2= x2-cos(x2);
end
tabela = [ x2];%os resultados vo ser
mostrados aqui
fprintf ('\n')
disp
('-------------------------------------------')
disp ('
raiz')

disp
('-------------------------------------------')
disp (tabela)
disp
('-------------------------------------------')

5 Questo:
function [X,delta,Z]=jacobi(A,b,X0,eps,max)
n=length(b);%comprimento do vetor b
eps=input('qual a tolerncia que deseja? ');
max=input('Nmero de max de iteraes: ');
n=length(b);
Xant=X0;
x=X0;
Z=X0';
for k=1:max
for j=1:n
if j==1
Sum=b(1)-A(1,2:n)*Xant(2:n);
elseif j==n
Sum=b(n)-A(n,1:n-1)*x(1:n-1);
else
Sum=b(j)-A(j,1:j-1)*Xant(j+1:n);
end
x(j)=Sum/A(j,j);
end
Z=[Z;x'];
delta=norm(x-Xant,1);
if delta<eps
break
end
Xant=x;
end
disp (Z)

6 Questo:
function [X,delta,Z]=gseidel(A,b,X0,eps,max)
%metodo de gauss-Seidel
n=length(b);%comprimento do vetor
eps=input('qual a tolerncia? ');
max=input('Nmero de iteraes max: ');
n=length(b);
Xant=X0;
x=X0;
Z=X0';
for k=1:max
for j=1:n
if j==1
Sum=b(1)-A(1,2:n)*Xant(2:n);
elseif j==n
Sum=b(n)-A(n,1:n-1)*x(1:n-1);
else
Sum=b(j)-A(j,1:j-1)*x(1:j-1)A(j,j+1:n)*Xant(j+1:n);
end
x(j)=Sum/A(j,j);
end
Z=[Z;x'];
delta=norm(x-Xant,1);
if delta<eps
break
end
Xant=x;
end
disp (Z)

7 Questo:
JACOBI
function [X,delta,Z]=jacobi(A,b,X0,eps,max)
%metodo de jacobi
A=[4 0.24 -0.08;0.09 3 -0.15;0.04 -0.08 4]
b=[8 9 20]'
X0=[0 0 0]'
eps=input('indique a tolerncia desejada? ');
max=input('Nmero max de iteraes: ');
n=length(b);
Xant=X0;
x=X0;
Z=X0';
for k=1:max
for j=1:n
if j==1
Sum=b(1)-A(1,2:n)*Xant(2:n);
elseif j==n
Sum=b(n)-A(n,1:n-1)*x(1:n-1);
else
Sum=b(j)-A(j,1:j-1)*x(1:j-1)A(j,j+1:n)*Xant(j+1:n);
end
x(j)=Sum/A(j,j);
end
Z=[Z;x'];
delta=norm(x-Xant,1);
if delta<eps
break
end
Xant=x;
end
disp (Z)
GAUSS-SEIDEL
function [X,delta,Z]=gseidel(A,b,X0,eps,max)
%metodo de gauss-Seidel
A=[4 0.24 -0.08;0.09 3 -0.15;0.04 -0.08 4]
b=[8 9 20]'

X0=[0 0 0]'
eps=input('qual a tolerncia desejada? ');
max=input('Nmero max de iteraes: ');
n=length(b);
Xant=X0;
x=X0;
Z=X0';
for k=1:max
for j=1:n
if j==1
Sum=b(1)-A(1,2:n)*Xant(2:n);
elseif j==n
Sum=b(n)-A(n,1:n-1)*x(1:n-1);
else
Sum=b(j)-A(j,1:j-1)*x(1:j-1)A(j,j+1:n)*Xant(j+1:n);
end
x(j)=Sum/A(j,j);
end
Z=[Z;x'];
delta=norm(x-Xant,1);
if delta<eps
break
end
Xant=x;
end
disp (Z)

8 Questo:
EZPLOT

FZERO
>> p=[1 3 0 -1]
p=
1 3 0 -1
>> roots (p)
ans =
-2.8794
-0.6527
0.5321
>> ezplot('x^3+3*x^2-1')
>> r=fzero('x^3+3*x^2-1',0.5)
r=
0.5321
>> r=fzero('x^3+3*x^2-1',-0.5)
r=
-0.6527
>> r=fzero('x^3+3*x^2-1',-3)
r=
-2.8794
>> ezplot('x-cos(x)')
>> r=fzero('x-cos(x)',1)
r=
0.7391 (em radiano)

9 Questo:
>> gseidelQ7
A=
4.0000 0.2400 -0.0800
0.0900 3.0000 -0.1500
0.0400 -0.0800 4.0000
b=
8
9
20
X0 =
0
0
0
qual a tolerncia? 5e-5
Nmero de iteraes max: 20
0
0
0
2.0000 2.9400 5.0388
1.9244 3.1942 5.0446
1.9092 3.1950 5.0448
1.9092 3.1950 5.0448
1.9092 3.1950 5.0448
>> jacobQ7
A=
4.0000 0.2400 -0.0800
0.0900 3.0000 -0.1500
0.0400 -0.0800 4.0000
b=
8
9
20
X0 =
0
0
0
qual a tolerncia? 5e-5
Nmero de iteraes max: 20
0
0
0
2.0000 3.0000 5.0400
1.9208 2.8488 5.0378
1.9298 2.8489 5.0377

1.9298 2.8489 5.0377


>> A=[4 0.24 -0.08;0.09 3 -0.15;0.04 -0.08 4]
A=
4.0000 0.2400 -0.0800
0.0900 3.0000 -0.1500
0.0400 -0.0800 4.0000
>> b=[8 9 20]'
b=
8
9
20
>> x=A\b
x=
1.9092
3.1950
5.0448
>> x=inv(A)*b
x=
1.9092
3.1950
5.0448

BIBLIOGRAFIA
Tutorial
de
Matlab
(UFMS).
Disponvel
em
<http://www.del.ufms.br/tutoriais/matlab/apresentacao.htm> Acesso em 08 nov 2010
Tutorial em Matlab. Disponvel em http://www.descobre.com/forum/showthread.php?
t=717 Acesso em 08 nov 2010