Escreva, em Scilab, um algoritmo que determine a raíz da função
no intervalo [2,3].
Passo 1
O enunciado pede que a gente ache a raiz da função
no intervalo
.
Conteúdo: método numérico de bisseção para encontrar zeros de função.
Conteúdo: método numérico de bisseção para encontrar zeros de função.
Passo 2
Antes de usar a bisseção, verificamos a mudança de sinal em
e
. Calculamos
e observamos que
. Isso garante que há pelo menos uma raiz em
.
Passo 3
O método da bisseção funciona assim: definimos
,
e uma tolerância
, por exemplo
.
Enquanto , fazemos:
Enquanto
-
. - Calculamos
. - Se
, então a raiz está em , fazemos ; senão está em , fazemos .
No fim,é a aproximação da raiz.
Passo 4
A seguir o código em Scilab que implementa esse algoritmo:
// Definição da função P(x)
function y = P(x)
y \(=8\) - 4.5*(x - sin(x));
endfunction
// Método da bisseção
function r = \(raiz_bissecao\)(a, b, tol)
fa = P(a);
fb = P(b);
if fa*fb > 0 then
error("P(a) e P(b) devem ter sinais opostos");
end
while abs(b - a) > tol do
c = (a + b)/2;
fc = P\text{(c)};
if fa*fc < 0 then
b = c;
fb = fc;
else
a = c;
fa = fc;
end
end
r = (a + b)/2;
endfunction
// Uso do algoritmo
a \(=2\);
b \(=3\);
tol \(=1\)e-6;
raiz = \(raiz_bissecao\)(a, b, tol);
disp("Raiz aproximada de P(x) em [2,3]: " + string(raiz));
Resposta
// Definição da função P(x)
function y = P(x)
y \(=8\) - 4.5*(x - sin(x));
endfunction
// Método da bisseção
function r = \(raiz_bissecao\)(a, b, tol)
fa = P(a);
fb = P(b);
if fa*fb > 0 then
error("P(a) e P(b) devem ter sinais opostos");
end
while abs(b - a) > tol do
c = (a + b)/2;
fc = P\text{(c)};
if fa*fc < 0 then
b = c;
fb = fc;
else
a = c;
fa = fc;
end
end
r = (a + b)/2;
endfunction
// Uso do algoritmo
a \(=2\);
b \(=3\);
tol \(=1\)e-6;
raiz = \(raiz_bissecao\)(a, b, tol);
disp("Raiz aproximada de P(x) em [2,3]: " + string(raiz));