Vous êtes sur la page 1sur 17

Universidade Federal de Itajub

UNIFEI

Clculo Numrico

Carlos Eduardo Teixeira


Acadmico em Engenharia Eltrica nfase em Eletrnica

SUMRIO
1.

MTODOS NUMRICOS EM MATLAB .................................................................................... 3


1.1.

Dicotomia ou Bisseo .................................................................................................. 3

1.2.

Eliminao de Gauss...................................................................................................... 4

1.3.

Falsa Posio ................................................................................................................. 6

1.4.

Newton-Raphson: ......................................................................................................... 8

1.5.

Newton Modificado ...................................................................................................... 9

1.6.

Newton Modificado para Sistemas ............................................................................. 10

1.7.

Newton-Raphson para Sistemas ................................................................................. 12

1.8.

Ponto Fixo Ou Iterao Linear ..................................................................................... 14

1.9.

Mtodo da Secante ..................................................................................................... 15

1. MTODOS NUMRICOS EM MATLAB


1.1.

Dicotomia ou Bisseo
clear all
clc

fprintf('%s\n','===============================');
fprintf('%s\n','Mtodo de Dicotomia ou Bisseo');
fprintf('%s\n','===============================');

fprintf('\nFuno:\n');
fx = input('f(x) = ', 's');
fprintf('\nLimite inferior do intervalo:\n');
a = input('a = ', 's');
fprintf('Limite superior do intervalo:\n');
b = input('b = ', 's');
fprintf('Tolerncia:\n');
E = input('E = ', 's');

a=str2num(a);
b=str2num(b);
E=str2num(E);

k = ceil((log(b-a) - log(E))/log(2) - 1);


j = k;

y = zeros(j,1);
k=0;
fprintf('%s\n',' ');
fprintf('%s\n','-----------------------------------------------------------------------');
fprintf('%s\n',' iterao

f(x)

');

fprintf('%s\n','-----------------------------------------------------------------------');
c=(b-a)/2;

while c>=E
c=(b-a)/2;
y(k+1,1) = (a+b)/2;
x = y(k+1,1);
fx1 = eval (fx);

fprintf('

%2d

x = a;
fa = eval (fx);
x = b;
fb = eval (fx);

if (fa*fx1<0)

%10.8f %10.8f %10.8f %10.8f %10.8f\n',k,a,b,y(k+1,1),fx1,c);

4
b = y(k+1,1);
end;
if (fx1*fb<0)
a = y(k+1,1);
end;

k = k+1;

end;

fprintf('\nRaz aproximada => x(%d) = %10.8f\n', j, y(k,1));


fprintf('%s\n','-----------------------------------------------------------------------');

1.2.

Eliminao de Gauss
clear all
clc

fprintf('%s\n','=============================');
fprintf('%s\n','Mtodo da Eliminao de Gauss');
fprintf('%s\n','=============================');

fprintf('\n Sitema AX = B\n');

fprintf('\nNmero de Variveis:\n');
n = input('

n = ', 's');

n = str2num(n);

fprintf('\nMonte a Matriz de Coeficientes do Sistema:\n');


for i=1:n
for j=1:n
A(i,j)=str2num(input(['a' num2str(i) num2str(j) ':'],'s'));
end
end

fprintf('\nMonte a Matriz de Termos Independentes do Sistema:\n');


for i=1:n
B(i,1)=str2num(input(['b' num2str(i) ':'],'s'));
end

fprintf('\n Sitema Original\n\n');

for j=1:n
for i=1:n

if i==1
fprintf('| ')
end
fprintf('%10.5f ', A(j,i))
if i==n

5
fprintf('|')
end

if i==n
fprintf(' | x(%d) |

| %10.5f |',j,B(j,1))

end
end
fprintf('\n')
end

detA = det(A);
fprintf('\nDeterminante >> detA = %10.4f\n',detA);

if (detA == 0)
fprintf('\nDeterminante igual a ZERO!\n');
fprintf('Podem existir infinitas solues ou ainda nenhuma soluo!\n');

else
for j=1:(n-1)
fprintf('\nEliminao %d:\n',j);
for i=(j+1):n
if A(j,j)== 0 && j<n
troca

= A(j,:);

A(j,:) = A(j+1,:);
A(j+1,:) = troca;
troca

= B(j,1);

B(j,1) = B(j+1,1);
B(j+1,1) = troca;
fprintf('\nPiv igual a ZERO. Troca-se a linha "i" com a linha "i+1":\n');

for k=1:n
for l=1:n
if l==1
fprintf('| ')
end
fprintf('%10.5f ', A(k,l))
if l==n
fprintf('|')
end

if l==n
fprintf(' | x(%d) |
end
end
fprintf('\n')
end
end
m = (A(i,j)/A(j,j));
A(i,:) = A(i,:) - m*A(j,:);
B(i,1) = B(i,1) - m*B(j,1);

| %10.5f |',k,B(k,1))

6
fprintf('\n m(%d,%d) = %10.4f',i,j,m);

end
fprintf('\n Piv =

%10.4f\n\n',A(j,j));

for j=1:n
for i=1:n

if i==1
fprintf('| ')
end
fprintf('%10.5f ', A(j,i))
if i==n
fprintf('|')
end
if i==n
fprintf(' | x(%d) |

| %10.5f |',j,B(j,1))

end
end
fprintf('\n')
end
end

X = B;
X(n,1) = B(n,1)/A(n,n);

for i=(n-1):-1:1
soma=0;
for j=(i+1):n
soma = soma + A(i,j)*X(j,1);
end
X(i,1)=(B(i,1)-soma)/A(i,i);
end

fprintf('\nRazes:\n\n');
for i=1:n
fprintf('

x(%d) = %10.4f\n',i,X(i,1));

end
end

1.3.

Falsa Posio
clear all
clc

fprintf('%s\n','=======================');
fprintf('%s\n','Mtodo da Falsa Posio');
fprintf('%s\n','=======================');

fprintf('\nFuno:\n');

7
fx = input('f(x) = ', 's');
fprintf('\nLimite inferior do intervalo:\n');
a = input('a = ', 's');
fprintf('Limite superior do intervalo:\n');
b = input('b = ', 's');
fprintf('Tolerncia:\n');
E = input('E = ', 's');

a=str2num(a);
b=str2num(b);
E=str2num(E);

fprintf('%s\n',' ');
fprintf('%s\n','-------------------------------------------------------------------------');
fprintf('%s\n',' iterao

f(x)

b-a

');

fprintf('%s\n','-------------------------------------------------------------------------');

k=0;
x = a;
fa = eval (fx);
x = b;
fb = eval (fx);

x = (a*fb-b*fa)/(fb-fa);
fx1 = eval(fx);
c = b-a;
fprintf('

%2d

%10.8f %10.8f %10.8f %10.8f %10.8f\n',k,a,b,x,fx1,c);

while abs(fx1)>=E

if (fa*fx1<0)
b = x;
end;
if (fx1*fb<0)
a = x;
end;

k = k+1;

x = a;
fa = eval (fx);
x = b;
fb = eval (fx);

x = (a*fb-b*fa)/(fb-fa);
fx1 = eval(fx);

c = b-a;
fprintf('

%2d

%10.8f %10.8f %10.8f %10.8f %10.8f\n',k,a,b,x,fx1,c);

8
end;

fprintf('\nRaz aproximada => x(%d) = %10.8f\n', k, x);


fprintf('%s\n','-------------------------------------------------------------------------');

1.4.

Newton-Raphson:
clear all
clc

fprintf('%s\n','========================');
fprintf('%s\n','Mtodo de Newton-Raphson');
fprintf('%s\n','========================');
fprintf('\nFuno:\n');
fx = input('f(x) = ', 's');
fprintf('Tolerncia de |f(x)|:\n');
delta = input('? = ', 's');
fprintf('Tolerncia de |x(k) - x(k-1)|:\n');
E = input('E = ', 's');
fprintf('Aproximao inicial:\n');
x0 = input('x(0) = ', 's');

delta=str2num(delta);
x0=str2num(x0);
E=str2num(E);

dx = diff(fx);
k=0;
x = x0;
fx1 = eval (fx);
dx1 = eval (dx);

if (abs(fx1)<delta)
fprintf('\nRaz aproximada => x(%d) = %10.8f\n', k, x);
else
fprintf('%s\n','-------------------------------------------------------------------------');
fprintf('%s\n',' iterao

f(x)

df(x)/dx

|x(k)-x(k-1)|

');

fprintf('%s\n','-------------------------------------------------------------------------');

fprintf(' %2d

%10.8f

%10.8f

%10.8f

x1 = x - fx1/dx1;
c = x1 - x;
k=1;

while ((abs(fx1)>=delta) && (abs(c)>=E))

x = x1;
fx1 = eval(fx);
dx1 = eval (dx);

\n',k,x0,fx1,dx1);

fprintf(' %2d

%10.8f

%10.8f

%10.8f

%10.8f \n',k,x,fx1,dx1,c);

x1 = x - fx1/dx1;

c = (x1 - x);
k = k+1;
end;

k = k-1;
fprintf('\nRaz aproximada => x(%d) = %10.8f\n', k, x);
fprintf('%s\n','-------------------------------------------------------------------------');

end

1.5.

Newton Modificado
clear all
clc

fprintf('%s\n','===========================');
fprintf('%s\n','Mtodo de Newton Modificado');
fprintf('%s\n','===========================');

fprintf('\nFuno:\n');
fx = input('f(x) = ', 's');
fprintf('Tolerncia de |f(x)|:\n');
delta = input('d = ', 's');
fprintf('Tolerncia de |x(k) - x(k-1)|:\n');
E = input('E = ', 's');
fprintf('Aproximao inicial:\n');
x0 = input('x(0) = ', 's');

delta=str2num(delta);
x0=str2num(x0);
E=str2num(E);

dx = diff(fx);
k=0;
x = x0;
fx1 = eval (fx);
dx0 = eval (dx);

if (abs(fx1)<delta)
fprintf('\nRaz aproximada => x(%d) = %10.8f\n', k, x);
else
fprintf('%s\n','---------------------------------------------------------');
fprintf('%s\n',' iterao

f(x)

|x(k)-x(k-1)|

');

fprintf('%s\n','---------------------------------------------------------');

10
fprintf(' %2d

%10.8f

%10.8f

\n',k,x0,fx1);

x1 = x - fx1/dx0;
c = x1 - x;
k=1;

while ((abs(fx1)>=delta) && (abs(c)>=E))

x = x1;
fx1 = eval(fx);

fprintf(' %2d

%10.8f

%10.8f

%10.8f \n',k,x,fx1,abs(c));

x1 = x - fx1/dx0;
c = (x1 - x);
k = k+1;
end;

k = k-1;
fprintf('\nRaz aproximada => x(%d) = %10.8f\n', k, x);
fprintf('%s\n','---------------------------------------------------------');

end

1.6.

Newton Modificado para Sistemas


clear all
clc

fprintf('%s\n','=========================================');
fprintf('%s\n','Mtodo de Newton Modificado para Sistemas');
fprintf('%s\n','=========================================');

x = sym('x');
y = sym('y');

fprintf('\n1 Funo:\n');
fxy = input('

f(x,y) = ', 's');

fprintf('2 Funo:\n');
gxy = input('

g(x,y) = ', 's');

fprintf('\nTolerncia de |f(x,y)| e |g(x,y)|:\n');


delta = input('

? = ', 's');

fprintf('Tolerncia de |x(k) - x(k-1)|:\n');


E = input('

E = ', 's');

fprintf('\nAproximao inicial:\n');
x0 = input('

x(0) = ', 's');

y0 = input('

y(0) = ', 's');

11

dfx = diff(fxy);
dfy = diff(fxy,y);
dgx = diff(gxy);
dgy = diff(gxy,y);

delta=str2num(delta);
x0=str2num(x0);
y0=str2num(y0);
E=str2num(E);

x = x0;
y = y0;

fxy0 = eval (fxy);


gxy0 = eval (gxy);
dfx0 = eval (dfx);
dfy0 = eval (dfy);
dgx0 = eval (dgx);
dgy0 = eval (dgy);

k = 0;
X = [x0 ; y0];
FX = [fxy0 ; gxy0];
JX = [dfx0 dfy0 ; dgx0 dgy0]
J = inv(JX);

if (abs(fxy0)<delta && abs(gxy0)<delta)


fprintf('\nRaz aproximada => x(%d) = % 10.8f, y(%d) = % 10.8f \n', k, x0, k , y0);
else
fprintf('\n%s\n','--------------------------------------------------------------------------------------------------');
fprintf('%s\n',' iterao

f(x,y)

g(x,y)

|x(k)-x(k-1)|

|y(k)-y(k-1)|');

fprintf('%s\n','----------------------------------------------------------------------------------------------------');

fprintf(' %2d

% 10.8f

% 10.8f

% 10.8f

X1 = X - J*FX;
c = X1(1,1)-X(1,1);
d = X1(2,1)-X(2,1);
k=k+1;

while (abs(fxy0)>=delta || abs(gxy0)>=delta)

x = X1(1,1);
y = X1(2,1);

fxy0 = eval (fxy);


gxy0 = eval (gxy);

% 10.8f\n',k,x0,y0,fxy0,gxy0);

12

X = [X1(1,1) ; X1(2,1)];
FX = [fxy0 ; gxy0];

fprintf(' %2d

% 10.8f

% 10.8f

% 10.8f

% 10.8f

% 10.8f

% 10.8f\n',k,x,y,fxy0,gxy0,c,d);

X1 = X - J*FX;

c = X1(1,1)-X(1,1);
d = X1(2,1)-X(2,1);
k=k+1;

end;

k = k-1;
fprintf('\nRaz aproximada => x(%d) = %10.8f', k, x);
fprintf('\n

=> y(%d) = %10.8f\n', k, y);

fprintf('%s\n','----------------------------------------------------------------------------------------------------');

end

1.7.

Newton-Raphson para Sistemas


clear all
clc

fprintf('%s\n','======================================');
fprintf('%s\n','Mtodo de Newton-Raphson para Sistemas');
fprintf('%s\n','======================================');

x = sym('x');
y = sym('y');

fprintf('\n1 Funo:\n');
fxy = input('

f(x,y) = ', 's');

fprintf('2 Funo:\n');
gxy = input('

g(x,y) = ', 's');

fprintf('\nTolerncia de |f(x,y)| e |g(x,y)|:\n');


delta = input('

? = ', 's');

fprintf('Tolerncia de |x(k) - x(k-1)|:\n');


E = input('

E = ', 's');

fprintf('\nAproximao inicial:\n');
x0 = input('

x(0) = ', 's');

y0 = input('

y(0) = ', 's');

dfx = diff(fxy);
dfy = diff(fxy,y);
dgx = diff(gxy);

13
dgy = diff(gxy,y);

delta=str2num(delta);
x0=str2num(x0);
y0=str2num(y0);
E=str2num(E);

x = x0;
y = y0;

fxy0 = eval (fxy);


gxy0 = eval (gxy);
dfx0 = eval (dfx);
dfy0 = eval (dfy);
dgx0 = eval (dgx);
dgy0 = eval (dgy);

k = 0;
X = [x0 ; y0];
FX = [fxy0 ; gxy0];
JX = [dfx0 dfy0 ; dgx0 dgy0];
J = inv(JX);

if (abs(fxy0)<delta && abs(gxy0)<delta)


fprintf('\nRaz aproximada => x(%d) = % 10.8f, y(%d) = % 10.8f \n', k, x0, k , y0);
else
fprintf('\n%s\n','----------------------------------------------------------------------------------------------------');
fprintf('%s\n',' iterao

f(x,y)

g(x,y)

|x(k)-x(k-1)|

|y(k)-y(k-1)|');

fprintf('%s\n','----------------------------------------------------------------------------------------------------');

fprintf(' %2d

% 10.8f

% 10.8f

% 10.8f

X1 = X - J*FX;
c = X1(1,1)-X(1,1);
d = X1(2,1)-X(2,1);
k=k+1;

while (abs(fxy0)>=delta || abs(gxy0)>=delta)

x = X1(1,1);
y = X1(2,1);

fxy0 = eval (fxy);


gxy0 = eval (gxy);
dfx0 = eval (dfx);
dfy0 = eval (dfy);
dgx0 = eval (dgx);
dgy0 = eval (dgy);

% 10.8f\n',k,x0,y0,fxy0,gxy0);

14
X = [X1(1,1) ; X1(2,1)];
FX = [fxy0 ; gxy0];
JX = [dfx0 dfy0 ; dgx0 dgy0];
J = inv(JX);

fprintf(' %2d

% 10.8f

% 10.8f

% 10.8f

% 10.8f

% 10.8f

% 10.8f\n',k,x,y,fxy0,gxy0,c,d);

X1 = X - J*FX;

c = X1(1,1)-X(1,1);
d = X1(2,1)-X(2,1);
k=k+1;

end;
k = k-1;
fprintf('\nRaz aproximada => x(%d) = %10.8f', k, x);
fprintf('\n

=> y(%d) = %10.8f\n', k, y);

fprintf('%s\n','----------------------------------------------------------------------------------------------------');

end

1.8.

Ponto Fixo Ou Iterao Linear


clear all
clc

fprintf('%s\n','=======================================');
fprintf('%s\n','Mtodo do Ponto Fixo ou Iterao Linear');
fprintf('%s\n','=======================================');

fprintf('\nFuno:\n');
fx = input('f(x) = ', 's');
fprintf('Funo equivalente:\n');
fix = input('x = ?(x) = ', 's');
fprintf('Tolerncia de |f(x)|:\n');
delta = input('d = ', 's');
fprintf('Tolerncia de |x(k) - x(k-1)|:\n');
E = input('E = ', 's');
fprintf('Aproximao inicial:\n');
x0 = input('x(0) = ', 's');

delta=str2num(delta);
x0=str2num(x0);
E=str2num(E);

k=0;
x = x0;
fx1 = eval (fx);
fix1 = eval (fix);

15

if (abs(fx1)<delta)
fprintf('\nRaz aproximada => x(%d) = %10.8f\n', k, x);
else
fprintf('%s\n','-------------------------------------------------------------------------');
fprintf('%s\n',' iterao

f(x)

fi(x)

|x(k)-x(k-1)|

');

fprintf('%s\n','-------------------------------------------------------------------------');

fprintf(' %2d

%10.8f

%10.8f

%10.8f

\n',k,x0,fx1,fix1);

c = x-fix1;
k=1;

while ((abs(fx1)>=delta) && (abs(c)>=E))


x = fix1;
fx1 = eval (fx);
fix1 = eval (fix);
fprintf(' %2d

%10.8f

%10.8f

%10.8f

%10.8f \n',k,x,fx1,fix1,c);

c = (x-fix1);
k = k+1;
end;

x = fix1;
fx1 = eval (fx);
fix1 = eval (fix);

fprintf(' %2d

%.8f

%.8f

%.8f

%.8f \n',k,x,fx1,fix1,c);

fprintf('\nRaz aproximada => x(%d) = %10.8f\n', k, x);


fprintf('%s\n','-------------------------------------------------------------------------');

end

1.9.

Mtodo da Secante
clear all
clc

fprintf('%s\n','=================');
fprintf('%s\n','Mtodo da Secante');
fprintf('%s\n','=================');

fprintf('\nFuno:\n');
fx = input('f(x) = ', 's');
fprintf('Tolerncia de |f(x)|:\n');
delta = input('d = ', 's');
fprintf('Tolerncia de |x(k) - x(k-1)|:\n');
E = input('E = ', 's');
fprintf('Aproximao inicial:\n');
x0 = input('x(0) = ', 's');
x1 = input('x(1) = ', 's');

16
delta=str2num(delta);
x0=str2num(x0);
x1=str2num(x1);
E=str2num(E);

k=0;
x = x0;
fx0 = eval (fx);
x = x1;
fx1 = eval (fx);

if (abs(fx1)<delta)
k=0;
fprintf('\nRaz aproximada => x(%d) = %10.8f\n', k, x0);
elseif (abs(fx0)<delta)
k=1;
fprintf('\nRaz aproximada => x(%d) = %10.8f\n', k, x1);
else
fprintf('%s\n','---------------------------------------------------------');
fprintf('%s\n',' aproximao

f(x)

|x(k)-x(k-1)|

');

fprintf('%s\n','---------------------------------------------------------');
fprintf(' %2d

% 10.8f % 10.8f

\n',k,x0,fx0);

fprintf(' %2d

% 10.8f % 10.8f

\n',(k+1),x1,fx1);

xk = x1 - fx1*(x1-x0)/(fx1-fx0);

x = xk;
fxk = eval (fx);
k=2;
c = (xk-x1);
fprintf(' %2d

% 10.8f % 10.8f

% 10.8f \n',k,x,fxk,abs(c));

while (abs(fxk)>=delta) && (abs(c)>=E)

x0 = x1;
x1 = xk;
x = x0;
fx0 = eval (fx);
x = x1;
fx1 = eval (fx);
xk = x1 - fx1*(x1-x0)/(fx1-fx0);
c = abs(xk - x1);
x = xk;
fxk = eval (fx);
k=k+1;
fprintf(' %2d

%10.8f %10.8f

%10.8f \n',k,x,fxk,abs(c));

end
fprintf('\nRaz aproximada => x(%d) = %10.8f\n', k, x);
fprintf('%s\n','---------------------------------------------------------');

17

end

Vous aimerez peut-être aussi