Buscar

06_rotinas

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

06_rotinas/newton.sci
//Método de Newton-Raphson
//
// Calcula a aproximação da solução
// de f(x)=0 no intervalo [a, b].
//
//Entrada
// f - função f(x)
// fl - derivada de f(x)
// p0 - aproximação inicial da solução
// TOL - tolerância
// N - número máximo de iterações
//
//Saída
// p - solução aproximada de f(x)=x
function [p] = newton(f, fl, p0, TOL, N)
 
 i = 1
 while (i <= N)
 p = p0 - f(p0)/fl(p0) //calcula p_i
 disp([i, p, abs(p-p0)])
 
 //condição de parada
 if (abs(p - p0) < TOL) then
 return p
 end
 
 i = i + 1
 p0 = p //atualiza p_0 
 end
 
 error ('Método falhou!')
endfunction
06_rotinas/ponto_fixo.sci
//Método do Ponto Fixo
//
// Calcula a aproximação do ponto fixo
// de f(x) no intervalo [a, b].
//
//Entrada
// f - função f(x)
// p0 - aproximação inicial do ponto fixo
// TOL - tolerância
// N - número máximo de iterações
//
//Saída
// p - solução aproximada de f(x)=x
function [p] = ponto_fixo(f, p0, TOL, N)
 
 i = 1
 while (i <= N)
 p = f(p0) //calcula p_i
 
 //imprime na tela
 disp ([i, p, p-p0])
 
 //condição de parada
 if (abs(p - p0) < TOL) then
 return p
 end
 
 i = i + 1
 p0 = p //atualiza p_0 
 end
 
 error ('Método falhou!')
endfunction
06_rotinas/bissec_tab.sci
//Método da bissecção (com tabela)
//
// Calcula a aproximação de uma solução
// de f(x) = 0 no intervalo [a, b].
//
//Entrada
// f - função f(x)
// a - limite inferior do intervalo [a, b]
// b - limite superior do intervalo [a, b]
// TOL - tolerância
// N - número máximo de iterações
// pe - solução exata f(pe) = 0
//
//Saída
// p - aproximação da solução de f(x) = 0
// tab - tabela com informações sobre a conv.
function [p, tabela] = bissec_tab(f, a, b, TOL, N, pe)
 //verifica condição de existência
 if (f(a) * f(b) >= 0) then
 error ('Condição de existência falhou!')
 end
 
 //verifica validade do intervalo
 if (a >= b) then
 error ('Intervalo [a, b] degenerado!')
 end
 
 i = 1
 fa = f(a)
 
 tabela = [];
 
 while (i <= N)
 p = a + (b-a)/2
 fp = f(p)
 
 //calcula o erro absoluto
 erro = abs(p - pe);
 
 //imprime tabela
 tabela = [tabela; ...
 i, a, b, p, erro]
 
 //condição de parada
 if ((fp == 0) | ((b-a)/2 < TOL)) then
 return p
 end
 
 //bissecta o intervalo
 i = i+1
 if (fa * fp > 0) then
 a = p
 fa = fp
 else
 b = p
 end
 end
 
 error ('Número máximo de iterações excedido!')
endfunction
06_rotinas/bissec.sci
//Método da bissecção
//
// Calcula a aproximação de uma solução
// de f(x) = 0 no intervalo [a, b].
//
//Entrada
// f - função f(x)
// a - limite inferior do intervalo [a, b]
// b - limite superior do intervalo [a, b]
// TOL - tolerância
// N - número máximo de iterações
//
//Saída
// p - aproximação da solução de f(x) = 0
function [p] = bissecsao(f, a, b, TOL, N)
 //verifica condição de existência
 if (f(a) * f(b) >= 0) then
 error ('Condição de existência falhou!')
 end
 
 //verifica validade do intervalo
 if (a >= b) then
 error ('Intervalo [a, b] degenerado!')
 end
 
 i = 1
 fa = f(a)
 
 while (i <= N)
 p = a + (b-a)/2
 fp = f(p)
 
 //condição de parada
 if ((fp == 0) | ((b-a)/2 < TOL)) then
 return p
 end
 
 //bissecta o intervalo
 i = i+1
 if (fa * fp > 0) then
 a = p
 fa = fp
 else
 b = p
 end
 end
 
 error ('Número máximo de iterações excedido!')
endfunction

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando