Método das secantes: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Desfeitas as edições de 189.60.137.220: não há necessidade de mais do que um exemplo do algoritmo (ver também WP:Esplanada/propostas/Mover "implementações de algoritmos" para o domínio "Anexo" (15abr2011)); ​→‎Exemplos Computacionais: {{Sem fontes}}; Remoção de links para site criado pouco antes de ser inserido nos artigos, e que já não existe; +Ligação externa para o Rosetta Code
Linha 3:
 
==O método==
[[Ficheiro:Secant method.svg|thumb|300px|As duas primeiras iterações do método das secantes. A curva vermelha mostra a função ''f'' e as linhas azuis são as secantes.<ref>{{Citar web|url=http://omonitor.io/?q=vermetododesecantes|titulo=Faça exemplos com <b>O Monitor</b>|acessodata=2016-03-19|obra=omonitor.io}}</ref>]]
O método das secantes é definido pela [[relação de recorrência]]
 
Linha 34:
 
==Exemplos Computacionais==
{{Sem fontes|Esta seção}}
Eis implementações do método das secantes em algumas linguagens de programação.
Eis implementações do método das secantes em [[Matlab]]. Neste exemplo, o método das secantes é aplicado para encontrar uma raiz da função ''f(x) = x<sup>3</sup> −10x<sup>2</sup> -400''. Os valores iniciais são ''x<sub>0</sub>=20'' e ''x<sub>1</sub>=30''; o número de iterações é ''n=8''. Espera-se que a iteração irá convergir para ''x=12,5426'' após um número suficiente de iterações.
===[[Matlab]]===
Neste exemplo<ref name=":0">{{Citar web|url=http://omonitor.io/?q=iteradossecantes|titulo=Confira este exemplo e faça outros com <b>O Monitor</b>|acessodata=2016-03-19|obra=omonitor.io}}</ref> o método das secantes é aplicado para encontrar uma raiz da função ''f(x) = x<sup>3</sup> −10x<sup>2</sup> -400''.<br />
Os valores iniciais são ''x<sub>0</sub>=20'' e ''x<sub>1</sub>=30''; o número de iterações é ''n=8''.<br />
Espera-se que a iteração irá convergir para ''x=12,5426'' após um número suficiente de iterações.
<syntaxhighlight lang=Matlab>
f=@(x) x^3 -10*x^2 -400;
Linha 49 ⟶ 46:
end
root=x(j)
</syntaxhighlight>
 
=== [[Python|Python 3.x]] ===
Pode-se implementar o método das secantes no Python usando a definição da função para a qual se deseja encontrar uma raiz , cujo valor acredita-se estar próximo de ''x0'' e ''x1''. A raiz, a ser retornada por ''func()'', é aprimorada para o valor ''x2'' até atingir uma acurácia próxima de ''tolerancia'' dentro de um laço ''while''. Neste exemplo, determina-se a raiz da função ''f(x) = x<sup>3</sup> −10x<sup>2</sup>-400,'' cuja solução deve convergir para ''x=12.542628.''
 
<syntaxhighlight lang="python3" line="1">
# função de interesse
def func(x):
y = x**3 -10*x**2 - 400
return y
# intervalo de busca inicial
x0 = 20
x1 = 30
f0 = func(x0)
# dados de acurária
tolerancia = 1e-6
erro = 100
# loop principal
while erro > tolerancia:
f1 = func(x1)
x2 = ((x0*f1)-(x1*f0))/(f1-f0)
erro = abs(x2-x1)
# atualização
x0 = x1
x1 = x2
f0 = f1
print('A raiz é dada por:', x2)
</syntaxhighlight>
 
=== [[Linguagem C]] ===
Uso do método das secantes para encontrar uma raíz da função ''func'' cujo valor acredita-se estar próximo de ''x1'' e ''x2''.<br />
A raíz, a ser retornada por ''secantes()'', é aprimorada até atingir uma acurácia próxima de ''tolerancia''.
<syntaxhighlight lang=C>
#include <math.h>
#define MAX_ITERACOES 30
float secantes(float (*func)(float), float x0, float x1, float tolerancia) {
void nrerror(char error_text[]);
int j;
float x2,f0,f1;
f0=(*func)(x0);
for (j=1; j<=MAX_ITERACOES; j++) {
f1=(*func)(x1);
x2=x1-(x1-x0)*f1/(f1-f0);
if (fabs(x2-x1) < tolerancia || f == 0.0) return x2;
x0=x1;
x1=x2;
f0=f1;
}
nrerror("Número máximo de iterações excedido!");
return 0.0; //não é executado
}
</syntaxhighlight>
 
===[[Scilab]]===
A função ''Secante'' recebe como parâmetro uma função ''f'' e procura uma raíz próxima de ''x0'' e ''x1'', até que seja atingida uma tolerância ''tol'' ou um número máximo de iterações ''N''.<br />
A variável ''controle'' evita que reduções temporárias na tolerância sejam consideradas.
<syntaxhighlight lang="scilab">
function x2=Secante(f,x0,x1,tol,N)
if f(x0)==f(x1) then
mprintf('A primeira secante é horizontal')
pause;
end
k=0
controle=0
f0=f(x0)
f1=f(x1)
while controle<3 &k<N &x0~=x1
k=k+1
x2=(x0*f1-x1*f0)/(f1-f0)
delta=abs(x2-x1)
if delta<tol*abs(x2) then
controle=controle+1
else
controle=0
end
x0=x1
x1=x2
f0=f1
f1=f(x1)
mprintf('k=%d,\ x=%.12f\n',k,x2)
end
endfunction
</syntaxhighlight>
 
Linha 159 ⟶ 74:
}}
 
==Ligações Externasexternas==
* [http://catc.ac.ir/mazlumi/jscodes/secant.php Buscador Online de Raízes de Polinômios - Métodos das Secantes] por Farhad Mazlumi (em inglês)
* [https://rosettacode.org/wiki/Roots_of_a_function#Secant_Method Roots of a function - Secant Method], no [[Rosetta Code]]
 
{{Portal3|Tecnologias de informação}}