Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Métodos Numéricos em Matlab, Notas de estudo de Engenharia Elétrica

Programas em Matlab de alguns métodos numéricos.

Tipologia: Notas de estudo

2011

Compartilhado em 05/10/2011

carlos-teixeira-24
carlos-teixeira-24 🇧🇷

5

(2)

1 documento

1 / 17

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Universidade Federal de Itajubá
UNIFEI
Cálculo Numérico
Carlos Eduardo Teixeira
Acadêmico em Engenharia Elétrica – Ênfase em Eletrônica
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Pré-visualização parcial do texto

Baixe Métodos Numéricos em Matlab e outras Notas de estudo em PDF para Engenharia Elétrica, somente na Docsity!

Universidade Federal de Itajubá

UNIFEI

Cálculo Numérico

Carlos Eduardo Teixeira

Acadêmico em Engenharia Elétrica – Ênfase em Eletrônica

SUMÁRIO

    1. MÉTODOS NUMÉRICOS EM MATLAB
    • 1.1. Dicotomia ou Bisseção
    • 1.2. Eliminação de Gauss......................................................................................................
    • 1.3. Falsa Posição
    • 1.4. Newton-Raphson:
    • 1.5. Newton Modificado
    • 1.6. Newton Modificado para Sistemas
    • 1.7. Newton-Raphson para Sistemas
    • 1.8. Ponto Fixo Ou Iteração Linear
    • 1.9. Método da Secante

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

k = k+1;

end;

fprintf('\nRaíz aproximada => x(%d) = %10.8f\n', j, y(k,1)); fprintf('%s\n','-----------------------------------------------------------------------');

1.2. Eliminação de Gauss

clear all clc

fprintf('%s\n','============================='); fprintf('%s\n','Método da Eliminação de Gauss'); fprintf('%s\n','=============================');

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

fprintf('\nNúmero de Variáveis:\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== 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

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

if (detA == 0) fprintf('\nDeterminante igual a ZERO!\n'); fprintf('Podem existir infinitas soluções ou ainda nenhuma solução!\n');

else for j=1:(n-1) fprintf('\nEliminação %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== fprintf('| ') end fprintf('%10.5f ', A(k,l)) if l==n fprintf('|') end

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

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('Tolerância:\n'); E = input('E = ', 's');

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

fprintf('%s\n',' '); fprintf('%s\n','-------------------------------------------------------------------------'); fprintf('%s\n',' iteração a b x f(x) b-a '); fprintf('%s\n','-------------------------------------------------------------------------');

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

x = (afb-bfa)/(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 (fafx1<0) b = x; end; if (fx1fb<0) a = x; end;

k = k+1;

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

x = (afb-bfa)/(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);

end;

fprintf('\nRaíz aproximada => x(%d) = %10.8f\n', k, x); fprintf('%s\n','-------------------------------------------------------------------------');

1.4. Newton-Raphson:

clear all clc

fprintf('%s\n','========================'); fprintf('%s\n','Método de Newton-Raphson'); fprintf('%s\n','========================'); fprintf('\nFunção:\n'); fx = input('f(x) = ', 's'); fprintf('Tolerância de |f(x)|:\n'); delta = input('? = ', 's'); fprintf('Tolerância de |x(k) - x(k-1)|:\n'); E = input('E = ', 's'); fprintf('Aproximação 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('\nRaíz aproximada => x(%d) = %10.8f\n', k, x); else fprintf('%s\n','-------------------------------------------------------------------------'); fprintf('%s\n',' iteração x f(x) df(x)/dx |x(k)-x(k-1)| '); fprintf('%s\n','-------------------------------------------------------------------------');

fprintf(' %2d %10.8f %10.8f %10.8f \n',k,x0,fx1,dx1);

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

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

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

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('\nRaíz 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','Método de Newton Modificado para Sistemas'); fprintf('%s\n','=========================================');

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

fprintf('\n1ª Função:\n'); fxy = input(' f(x,y) = ', 's'); fprintf('2ª Função:\n'); gxy = input(' g(x,y) = ', 's');

fprintf('\nTolerância de |f(x,y)| e |g(x,y)|:\n'); delta = input('? = ', 's'); fprintf('Tolerância de |x(k) - x(k-1)|:\n'); E = input(' E = ', 's'); fprintf('\nAproximação inicial:\n'); x0 = input(' x(0) = ', 's'); y0 = input(' y(0) = ', 's');

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('\nRaíz aproximada => x(%d) = % 10.8f, y(%d) = % 10.8f \n', k, x0, k , y0); else fprintf('\n%s\n','--------------------------------------------------------------------------------------------------'); fprintf('%s\n',' iteração x y 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 % 10.8f\n',k,x0,y0,fxy0,gxy0);

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);

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('\nRaíz aproximada => x(%d) = % 10.8f, y(%d) = % 10.8f \n', k, x0, k , y0); else fprintf('\n%s\n','----------------------------------------------------------------------------------------------------'); fprintf('%s\n',' iteração x y 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 % 10.8f\n',k,x0,y0,fxy0,gxy0);

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);

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('\nRaíz 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 Iteração Linear

clear all clc

fprintf('%s\n','======================================='); fprintf('%s\n','Método do Ponto Fixo ou Iteração Linear'); fprintf('%s\n','=======================================');

fprintf('\nFunção:\n'); fx = input('f(x) = ', 's'); fprintf('Função equivalente:\n'); fix = input('x = ?(x) = ', 's'); fprintf('Tolerância de |f(x)|:\n'); delta = input('d = ', 's'); fprintf('Tolerância de |x(k) - x(k-1)|:\n'); E = input('E = ', 's'); fprintf('Aproximação 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);

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('\nRaíz aproximada => x(%d) = %10.8f\n', k, x0); elseif (abs(fx0)<delta) k=1; fprintf('\nRaíz aproximada => x(%d) = %10.8f\n', k, x1); else fprintf('%s\n','---------------------------------------------------------'); fprintf('%s\n',' aproximação x 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('\nRaíz aproximada => x(%d) = %10.8f\n', k, x); fprintf('%s\n','---------------------------------------------------------');

end