三次函式求近似解(牛頓迭代法 二分法)

2021-10-14 01:47:55 字數 2957 閱讀 2674

本人大一學生,學習c語言剛剛三個月,分享一下自己學習的題目和方法,歡迎大佬們批評指正!

首先解釋一下牛頓迭代法和二分法的原理:

(參考同濟大學高等數學第七版上冊 第三章第八節 方程的近似解)

首先根據切線的定義式,並通過近似逼近:

(f (x

)f(x)

f(x)

-f (x

0f(x_0

f(x0

​))/(x−x

0x-x_0

x−x0

​)=f1(

x)

f^1(x)

f1(x)令f(x

0f(x_0

f(x0

​)=0

移項得x=x

0−f(

x0)/

f1(x

0)

x=x_0-f(x_0)/f^1(x_0)

x=x0​−

f(x0

​)/f

1(x0

​)每一次的迭代都會逼近於真實解

(不明白的話可以去翻翻高數課本,各高校的教材應該都會有)

先上檔案和函式庫

#include

#include

//呼叫pow函式

#define epsilon 1e-6

//確定精度

using

namespace std;

再放原函式和導數的方程

//原函式 

doublef(

int a,

int b,

int c,

int d,

double x)

//導數

double

fderivable

(int a,

int b,

int c,

double x)

//epsilon為事先規定的精度

double

newton

(int a,

int b,

int c,

int d,

double x)

return x;

}

double

newton2

(int a,

int b,

int c,

int d,

double x)

else

}

顧名思義,通過函式的連續性,利用零點定理(介值定理)找到近似解。

doublebi(

int a,

int b,

int c,

int d,

double x1,

double x2)

else

}return s1;

}

double

bi2(

int a,

int b,

int c,

int d,

double x1,

double x2)

elseif(

(f(a,b,c,d,m)*f

(a,b,c,d,x1)

)<0)

else

}

最後放上全部**

#include

#include

//呼叫pow函式

#define epsilon 1e-6

//確定精度

using

namespace std;

//原函式

doublef(

int a,

int b,

int c,

int d,

double x)

//導數

double

fderivable

(int a,

int b,

int c,

double x)

//牛頓迭代法

double

newton

(int a,

int b,

int c,

int d,

double x)

return x;

}double

newton2

(int a,

int b,

int c,

int d,

double x)

else

}//二分法(迴圈)

doublebi(

int a,

int b,

int c,

int d,

double x1,

double x2)

else

}return s1;

}//用二分法解(遞迴)

double

bi2(

int a,

int b,

int c,

int d,

double x1,

double x2)

elseif(

(f(a,b,c,d,m)*f

(a,b,c,d,x1)

)<0)

else

}int

main()

1.在實際操作中,牛頓迭代法需要求出f(x

)f(x)

f(x)

的二階導,畫出f(x

)f(x)

f(x)

的大致影象,使指定區間內有且僅有乙個零點,判斷端點中哪個值為初始的x

0x_0

x0​。

2.同樣的,二分法在實操中,需要確定端點值,使指定區間內有且僅有乙個零點。

牛頓迭代法 二分法

牛頓迭代法 用牛頓迭代法求f x 0在x0附近的乙個實根的方法是 1 選乙個接近於x的真實根的近似根x1 2 通過x1求出f x1 在幾何上就是作x x1,交f x 於f x1 3 過f x1 作f x 的切線,交x軸於x2。可以用公式求出x2。由於f x1 f x1 x2 x1 故x2 x1 f ...

牛頓迭代法解一元三次方程

有形如 ax 3 bx 2 cx 1 dx 0 0ax3 bx2 cx1 dx0 0 這樣的乙個一元三次方程。給出該方程中各項的係數 a,b,c,da,b,c,d均為實數 並約定該方程存在三個不同實根 根的範圍在 100 100至100100之間 且根與根之差的絕對值 ge 1 1。要求由小到大依次...

二分法和牛頓迭代法

先說乙個面試題 問 1.2 0.2 1 答案是false!為什麼?其原因在於十進位制和二進位制的轉換上,計算機先要把十進位制的數轉化為二進位制,然後再計算。但是,在轉化中,浮點數轉化為二進位制,就出問題了,例如 十進位制的 0.1,轉化為二進位制是 0.00011001100110011001100...