牛頓迭代法(含輾轉相除法原理):近似求解方程的根
阿新 • • 發佈:2018-12-14
結論:迭代序列: x (n+1)= x (n)- f ( x(n) ) / f '( x(n) )
(附C++程式碼)
(通過不斷作切線找切線與x軸交點重複,交點不斷向根逼近)
牛頓迭代法:在實數和複數域求方程的近似根,由泰勒級數前幾項尋找
計算方法:
設 x 是 f(x) = 0的根,選取 x0 作為 x 初始近似值,過點( x0, f(x ) )做曲線y = f(x)的切線L,則L的方程為y = f(x0)+f '(x0)(x-x0),求出L與x軸交點的橫座標 x1 = x0-f(x0) / f '(x0),稱 x1為x的一次近似值。過點(x1 , f(x1))做曲線y = f(x)的切線,並求該切線與x軸交點的橫座標 x2 = x1-f(x1)/ f '(x1)
解非線性方程f(x)=0的牛頓法是把非線性方程線性化的一種近似方法。把f(x)在x0點附近展開成泰勒級數 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其線性部分(一次),作為非線性方程f(x) = 0的近似方程,即泰勒展開的前兩項,則有f(x0)+f'(x0)(x-x0)=0 設f'(x0)≠0則其解為x1=x0-f(x0)/f'(x0) 這樣,得到牛頓法的一個迭代序列:x(n+1)= x(n)-f(x(n) ) / f '(x(n) )。
//求3元一次方程ax^3+bx^2+cx+d=0的解 //比如 x^3-27=0,我們就可以輸入1 0 0 -27,這樣我們就可以得到一個解 #include<iostream> #include<cmath> using namespace std; double diedai(double a,double b,double c,double d,double x) { while(abs(a*x*x*x+b*x*x+c*x+d)>0.000001) x=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c); return x; } int main() { double a,b,c,d; double x=10000.0; cout<<"請依次輸入方程四個係數:"; cin>>a>>b>>c>>d; x=diedai(a,b,c,d,x); cout<<x<<endl; return 0; }
迭代法:又稱輾轉法,通過變數的舊值 推導新值的方法
如輾轉相除法:最大公因數:gcd(a,b)=gcd(b,a mod b);
證:設a=kb+r,則r=a-kb,設m為a,b的公因數,則a%m=b%m=0;所以r%m=0,所以m為a%b的公因數。
反之,設m為b,a mod b的公因數,則a%m=0,所以m為a的公因數。
所以a,b的公因數與b,a mod b的公因數相同,所以最大公因數也相同