您的位置:首页 > 其它

牛顿迭代法(欧几里得算法(辗转相除),斐波那契算法)

2013-12-14 17:49 197 查看
牛顿迭代公式步骤:

设r是f(x)=0的根,选取作为r的初始近似值;

一、过点(x0, f(x0))做曲线y
= f(x)的切线L,L的方程为y=f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标x1=x0-f(x0)/f'(x0),称x1为r的一次近似值;

二、过点(x1, f(x1))做曲线y
= f(x)的切线,并求该切线与x轴交点的横坐标x2=x1-f(x1)/f'(x1),称x2为r的二次近似值;

三、重复一二,得到r的n+1次近似值序列,其中Xn+1
= Xn - f(Xn)/f'(Xn)称为r的n+1次近似值;

(重复次数可自己去尽量小的ε, 当两次求出的根之差|xn+1-xn|≤ε就认为
xn+1足够接近于真实根。)

迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。

形象举例:
军人在进攻时常采用交替掩护进攻的方式,若在数轴上的点表示A,B两人的位置,规定在前面的数大于后面的数,则是A>B,B>A交替出现。但现在假设军中有一个胆小鬼,同时大家又都很照顾他,每次冲锋都是让他跟在后面,每当前面的人占据一个新的位置,就把位置交给他,然后其他人再往前占领新的位置。也就是A始终在B的前面,A向前迈进,B跟上,A把自己的位置交给B(即执行B
= A),然后A 再前进占领新的位置,B再跟上,直到占领所有的阵地,前进结束。像这种两个数一前一后逐步向某个位置逼近的方法称为迭代法。

步骤:
一、确定迭代变量;
二、建立迭代关系;
三、对迭代过程进行控制;

举例:

//欧几里得算法(又称辗转相除法)
//求最大公约数
//循环
int gcd(int a, int b) {
//排错
if(a<=0 || b<=0)
return 0;
int temp;
while(b > 0) {
temp = a % b;
a = b;
b = temp;
}
return a;
}
//递归
int gcd(int a, int b) {
if(a==0)
return b;
if(b==0)
return a;
return gcd(b, a%b);
}

//斐波那契数列(Fibonacci)
//0、1、1、2、3、5、8、13、21、34。。。
//循环
int Fib(int n) {
//排错
if(n < 1)
return 0;
if(n==1 || n==2)
return 1;
int f1 = 1 f2=1, fn;
for(int i=3; i<=n; i++) {
fn = f1 + f2;
f1 = f2;
f2 = fn;
}
}
//递归剪枝
double a[10000];
double Fbi(int n) {
if(n < 2)
return n > 0 ? 1 : 0;
//剪枝,已经计算就不再计算
if(a
!= 0)
return a
;

a[i-1] = fbi(i-1);
a[i-2] = fbi(i-2);

return a[n-1]+[n-2];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息