牛頓迭代法求方程解

2021-06-01 10:06:59 字數 1477 閱讀 5030

牛頓迭代法(newton's method)又稱為牛頓-拉夫遜方法(newton-raphson method),它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。方法使用函式f(x)的泰勒級數的前面幾項來尋找方程f(x) = 0的根。牛頓迭代法是求方程根的重要方法之一,其最大優點是在方程f(x) = 0的單根附近具有平方收斂,而且該法還可以用來求方程的重根、復根。另外該方法廣泛用於計算機程式設計中。

設r是f(x) = 0的根,選取x0作為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的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),稱為r的n+1次近似值,上式稱為牛頓迭代公式。

解非線性方程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)=f(x)=0 設f'(x0)≠0則其解為x1=x0-f(x0)/f'(x0) 這樣,得到牛頓法的乙個迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。

給你一點提示。 

牛頓迭代法要計算 

(1) y1=f(x) 在 x 的函式值 

(2) d1=f(x) 的一階導數 在 x 的值 

你可以寫兩個函式,分別計算y1,d1 

如果一階導數有解析解,則可用賦值語句,否則要寫數值解子程式。 

步驟: 

設解的精度,例 float eps=0.000001; 

設x初值,x1; 

算y1=f(x1); 

迭代迴圈開始 

算一階導數 在 x1 的值 d1 

用牛頓公式 算出 x2; [x2 = x1 - y1 / d1] 

如果 fabs(x2-x1) > eps 則從新迭代 -- 用新的函式值和一階導數值推下乙個 新x.

牛頓迭代法: 

#include

#include

#include

#define maxrept 1000 

float f(float x) 

float df(float x) 

float iterate(float x) 

void main() 

while((d>=eps)&(k

printf("\n the iteration is failed!\n"); 

getch(); 

}

瑞格 牛頓迭代法求方程

input輸入資料有多組,每組第一行為方程的序號。序號必須是1,2,3中的乙個。下面一行是兩個雙精度的實數,第乙個數是求解的初始值 初始值分別為 如果選方程 1 初始值在1.5附近,如果選方程 2 初始值在0.3附近,如果選方程 3 初始值在0.5附近 第二個數為求解精度,精度應在0.00001 0...

1 6 牛頓迭代法求方程的根

問題描述 編寫用牛頓迭代法求方程根的函式。方程為 a x 3 b x 2 c x d 0,係數a,b,c,d由主函式輸入。求x在1附近的乙個實根。求出根後,由主函式輸出。如下 include float slove int modulus 0pow,int modulus 1pow,int modu...

牛頓迭代法求多元方程近似根

問題.牛頓迭代法求ax 3 bx 2 cx d 0在1附近的根。係數由使用者自己輸入 因為此方法本身是數學問題這裡不做討論也無須討論。進入我們程式設計的主題。記住此法核心的公式 x x0 f x0 f x0 我們令x1 f x0 x2 f x0 這樣寫起來簡潔明瞭。步驟 1 在1附近任意找乙個實數作...