RELATÓRIO CCI - 22
Relatório de Laboratório 2 – Zeros de Função
Ryan Campos Pereira
Lucas Alencar Sampaio
Prof. Elton Sbruzzi
1. Resultados
Tabela 1- Resultados para até 6 iterações
Bissecção Falsa Ponto fixo Newton- Secante
Posição Raphson
x̄ 0.35937500 0.3705885 0.3705561 0.3705580837 0.36992525391
0000 22880 13761 61 5
Número de 6 6 5 3 6
interações
1. Pelo Método da Bissecção:
format long
f=@(x) 4*sin(x) - exp(x);
a=0; b=1; epsilon=0.00001; maxIteracoes=6;
Bisseccao(f,a,b,epsilon,maxIteracoes);
function [r, k] = Bisseccao(f, a, b, epsilon, maxIteracoes)
k=0;
while k < maxIteracoes
r = (a + b) / 2;
k = k + 1;
if abs(b-a) < epsilon
r=(a+b)/2;
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
break;
end
if f(a)*f(r)>0
a = r;
else
b = r;
end
end
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iteraçoes.\n',r,k);
end
Resultado:
2. Pelo Método da Falsa Posição:
format long
f = @(x) 4*sin(x) - exp(x);
a=0;
b=1;
epsilon1=0.00001;
epsilon2=0.00001;
maxIteracoes=6;
FalsaPosicao(f,a,b,epsilon1, epsilon2,maxIteracoes);
function [r, k] = FalsaPosicao(f, a, b, epsilon1, epsilon2, maxIteracoes)
k=0;
while k < maxIteracoes
r=(a*f(b)-b*f(a))/(f(b)-f(a));
k = k + 1;
yr = f(r);
if abs(b-a) < epsilon1 || abs(yr) < epsilon2
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
break;
end
if f(a)*yr>0
a = r;
else
b = r;
end
end
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
end
Resultado:
3. Pelo Método do Ponto-Fixo
format long
f= @(x) 4*sin(x) - exp(x);
phi = @(x) x - 2*sin(x) + 0.5*exp(x);
maxIteracoes=6;
a=0;
b=1;
epsilon1=0.00001;
epsilon2=0.00001;
x0=0.5;
Pontop=r;
r=phi(r);
if abs(f(r))<epsilon1 || abs(r-tmp)<epsilon2
break;
end
k=k+1;
end
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
endFixo(f,phi,x0,epsilon1, epsilon2, maxIteracoes);
function [r, k] = PontoFixo(f, phi, x0, epsilon1, epsilon2, maxIteracoes)
k=0;
if abs(f(x0))<epsilon1
r=x0;
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
return;
end
k=1;
r=x0;
tmp=r;
while k<maxIteracoes
tm
Resultado:
4. Pelo Método da Newton-Raphson:
format long
f = @(x) 4*sin(x) - exp(x);
df = @(x) 4*cos(x) - exp(x);
a=0;
b=1;
epsilon1=0.00001;
epsilon2=0.00001;
maxIteracoes=6;
x0=0.5;
NewtonRaphson(f, df, x0, epsilon1, epsilon2, maxIteracoes);
function [r, k] = NewtonRaphson(f, df, x0, epsilon1, epsilon2, maxIteracoes)
r=x0; tmp=0; k=0;
if abs(f(x0))<epsilon1
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
return;
end
while k < maxIteracoes
tmp = r;
r = r - (f(r)/df(r));
k = k+1;
if abs(f(r)) < epsilon1 || abs(r-tmp)<epsilon2
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
break;
end
end
end
Resultado:
5. Pelo Método da Secante
format long
f = @(x) 4*sin(x) - exp(x);
a=0;
b=1;
epsilon1=0.00001;
epsilon2=0.00001;
maxIteracoes=6;
x0=a;
x1=b;
Secante(f, x0, x1, epsilon1, epsilon2, maxIteracoes);
function [r, k] = Secante(f, x0, x1, epsilon1, epsilon2, maxIteracoes)
tmp=x0;
r=x1;
k=0;
if abs(f(tmp))<epsilon1
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',tmp,k);
return;
end
if abs(f(r)) < epsilon1 || abs(r-tmp) < epsilon2
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
return;
end
while k < maxIteracoes
tmp2=r;
r=r-(f(r)/(f(r)-f(tmp)))*(r-tmp);
k=k+1;
if abs(f(r))< epsilon1 || abs(r-tmp2)< epsilon2
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
break;
end
tmp=tmp2;
end
end
Resultado:
Tabela 2- Resultados para até 100 iterações
Bissecção Falsa Ponto fixo Newton- Secante
Posição Raphson
x̄ 0.3705558 0.37055882 0.37055611 0.37055808 0.37055809
77686 8355 3761 3761 8277
Número de 18 8 5 3 7
interações
6. Pelo Método da Bissecção:
format long
f=@(x) 4*sin(x) - exp(x);
a=0; b=1; epsilon=0.00001; maxIteracoes=100;
Bisseccao(f,a,b,epsilon,maxIteracoes);
function [r, k] = Bisseccao(f, a, b, epsilon, maxIteracoes)
k=0;
while k < maxIteracoes
r = (a + b) / 2;
k = k + 1;
if abs(b-a) < epsilon
r=(a+b)/2;
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
break;
end
if f(a)*f(r)>0
a = r;
else
b = r;
end
end
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iteraçoes.\n',r,k);
end
Resultado:
7. Pelo Método da Falsa Posição:
format long
f = @(x) 4*sin(x) - exp(x);
a=0;
b=1;
epsilon1=0.00001;
epsilon2=0.00001;
maxIteracoes=100;
FalsaPosicao(f,a,b,epsilon1, epsilon2,maxIteracoes);
function [r, k] = FalsaPosicao(f, a, b, epsilon1, epsilon2, maxIteracoes)
k=0;
while k < maxIteracoes
r=(a*f(b)-b*f(a))/(f(b)-f(a));
k = k + 1;
yr = f(r);
if abs(b-a) < epsilon1 || abs(yr) < epsilon2
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
break;
end
if f(a)*yr>0
a = r;
else
b = r;
end
end
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
end
Resultado:
8. Pelo Método do Ponto-Fixo
format long
f= @(x) 4*sin(x) - exp(x);
phi = @(x) x - 2*sin(x) + 0.5*exp(x);
maxIteracoes=100;
a=0;
b=1;
epsilon1=0.00001;
epsilon2=0.00001;
x0=0.5;
Pontop=r;
r=phi(r);
if abs(f(r))<epsilon1 || abs(r-tmp)<epsilon2
break;
end
k=k+1;
end
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
endFixo(f,phi,x0,epsilon1, epsilon2, maxIteracoes);
function [r, k] = PontoFixo(f, phi, x0, epsilon1, epsilon2, maxIteracoes)
k=0;
if abs(f(x0))<epsilon1
r=x0;
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
return;
end
k=1;
r=x0;
tmp=r;
while k<maxIteracoes
tm
Resultado:
9. Pelo Método da Newton-Raphson:
format long
f = @(x) 4*sin(x) - exp(x);
df = @(x) 4*cos(x) - exp(x);
a=0;
b=1;
epsilon1=0.00001;
epsilon2=0.00001;
maxIteracoes=100;
x0=0.5;
NewtonRaphson(f, df, x0, epsilon1, epsilon2, maxIteracoes);
function [r, k] = NewtonRaphson(f, df, x0, epsilon1, epsilon2, maxIteracoes)
r=x0; tmp=0; k=0;
if abs(f(x0))<epsilon1
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
return;
end
while k < maxIteracoes
tmp = r;
r = r - (f(r)/df(r));
k = k+1;
if abs(f(r)) < epsilon1 || abs(r-tmp)<epsilon2
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
break;
end
end
end
Resultado:
10. Pelo Método da Secante
format long
f = @(x) 4*sin(x) - exp(x);
a=0;
b=1;
epsilon1=0.00001;
epsilon2=0.00001;
maxIteracoes=100;
x0=a;
x1=b;
Secante(f, x0, x1, epsilon1, epsilon2, maxIteracoes);
function [r, k] = Secante(f, x0, x1, epsilon1, epsilon2, maxIteracoes)
tmp=x0;
r=x1;
k=0;
if abs(f(tmp))<epsilon1
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',tmp,k);
return;
end
if abs(f(r)) < epsilon1 || abs(r-tmp) < epsilon2
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
return;
end
while k < maxIteracoes
tmp2=r;
r=r-(f(r)/(f(r)-f(tmp)))*(r-tmp);
k=k+1;
if abs(f(r))< epsilon1 || abs(r-tmp2)< epsilon2
fprintf('O valor da raiz aproximada é %.12f, obtido em %d iterações.\n',r,k);
break;
end
tmp=tmp2;
end
end
Resultado:
Análise dos resultados
Analisando os resultados, concluímos que, conforme esperado no caso
em que a quantidade de iterações possíveis é maior, uma parcela maior
dos métodos empregados consegue chegar ao valor da raíz com
aproximação da ordem de grandeza inicialmente desejada. Já no
primeiro caso, limitou-se a quantidade de iterações de tal forma que
três dos cinco métodos não chegaram a efetuar todas as iterações
necessárias para que obtivessem a precisão esperada na aproximação
da raíz. Já nos métodos do ponto fixo e de Newton-Raphson, foram
necessárias menos do que 6 iterações para que fossem concluídos,
então o resultado obtido com esses métodos foi o mesmo nas duas
situações. Assim, no segundo caso percebe-se também que os valores
finais encontrados estão mais próximos, porque nesse caso os valores
estão sendo aproximados com as margens de erro corretas.