數值作業 牛頓迭代法

2021-10-10 13:32:35 字數 1373 閱讀 3252

記錄學習過程

寫於2020.11.14

#include

//呼叫標準函式庫,使輸入輸出函式可用

#include

//呼叫數學函式庫

#define n 100

#define eps 1e-6

//定義全域性變數eps(根的容許誤差),delta(函式絕對值的容許誤差)

#define eta 1e-8

double a, b, c, d;

//定義全域性變數a,b,c,d

doublef1(

double x)

//定義double型子函式f1,傳入x值進行運算(寫在最前,則後續被呼叫時無需宣告)

doublef2(

double x)

//定義f1的導數為f2

void

main()

//定義void型主函式,無返回引數

z =fabs

(x1)

<

1? x1 - x0 :

(x1 - x0)

/ x1;

//?為條件運算子,當滿足fabs(x1)<1時,將x1-x0 的值賦給z;否則將(x1 - x0) / x1賦給z (追求迭代最快)

x0 = x1;

//迭代,將x1的值賦給xo

printf

("x(%d)=%f\t"

, t, x0)

;//輸出第t次牛頓迭代法結果x(t)

if(t %3==

0)printf

("\n");

//隔三列換行

}while

(fabs

(z)> eps &&

fabs(f1

(x1)

)> eta)

;//&&邏輯與,全真則真;z的絕對值小於根的容許誤差或函式值的絕對值小於其容許誤差eta,終止迴圈

printf

("方程的近似根為%lf"

,x1 )

;chong:

printf

("\n\n是否繼續輸入初值:\n");

//選擇是否繼續輸入初值進行計算

printf

("1.繼續輸入初值\t 2.結束程式\n");

printf

("請選擇:");

int w;

scanf_s

("%d"

,&w)

;switch

(w)//使用選擇及結構語句switch,根據w的值選擇方案

}}

結果圖

牛頓迭代法

創新工廠的筆試題 不用庫函式sqrt 求乙個整型數n的開方,要求精度達到0.001即可。在這裡首先介紹一下牛頓迭代法 假設乙個方程為 f x 0 那麼假設其解為x0,則用泰勒級數展開之後可得 f x f x0 f x0 x x0 0 其中x為其近似解。根據上式推導出 x x0 f x0 f x0 這...

牛頓迭代法

目前接觸到的牛頓迭代法主要應用於兩個方面 1 方程求根問題 2 最優化問題。1 求解方程。並不是所有的方程都有求根公式,或者求根公式很複雜,導致求解困難。利用牛頓法,可以迭代求解。原理是利用泰勒公式,在x0處展開,且展開到一階,即f x f x0 x x0 f x0 求解方程f x 0,即f x0 ...

牛頓迭代法

欲求某方程 f x 0 的根,按照以下步驟進行求解 令x0 1 也可以選擇其他值 i 0,1,2 1 求出 f xi 和 導數f xi 2 令 x i 1 xi f xi f xi 3 將 x i 1 帶入方程 f x 計算方程值,當方程值與目標值的誤差小於預定值時,退出演算法輸出 x i 1 即為...