Você está na página 1de 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

Você também pode gostar