本人大一學生,學習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...