目前某葉編的最難的程式了......感覺算是跨越吧,之前最難的是一元二次方程求解,雖然是最「難」的,只是因為最長,但是寫起來還是很輕鬆的
解法思路:
先把求與x軸交點座標公式放著免得忘記了
x= x1f(x2)-x2f(x1)/f(x2)-f(x1)
之後比較x1的y1值和x2的y2值,如果兩個為異號,那麼兩個x之間一定有方程的根
如果同號,那麼繼續輸入直到異號為止
這個時候用求交點座標公式求出交點座標x,它的y值同樣代入求出
再次比較y與y1值,如果異號那麼x與x1之間必有方程根
如果同號那麼x與x2之間必有方程根
迴圈以上直到y的絕對值小於乙個非常小的數,也就近似為0的時候,輸出x值既為方程根......
理好了解法思路就不怕了,因為這個程式的關鍵就是我沒學過解法,現在解法清楚了就開始編了
寫了很多的函式,對我來說很複雜,所以注釋比較多,省的以後自己都看不懂了......
書上給的例子方程式x^3-5x^2+16x-80=0給出的乙個解x=5,圖2反應出來了......
#include
#include
#include
float a,b,c,d; //定義外部變數,使全域性可以呼叫
float f(float x) //x函式
float xpoint(float x1,float x2) //求弦與x軸交點座標
float root(float x1,float x2) //求根函式
else
x2=x; }
while(fabs(y)>=0.00001); //設定精度
return(x); }
void main() //主函式
while(f1*f2>=0);
//do...while函式為了得到x1與x2的函式值為異號,這樣x1 x2中才有根
x=root(x1,x2); //將x1 x2送到求根函式中返回值賦到x中
printf("方程中的乙個根為%g\n",x);
getch(); }
執行截圖:
附:兩分法解方程
求乙個實根
演算法:用兩分法求方程
y=f(x) = 0
的近似根。
找兩個近似根x1和
x2,使有
y1和y2
異號,如
y1< 0,y2
> 0
求新的近似根
, x =(x
1+ x
2)/2
若y=f(x)<0,則x
1= x; y
1= f(x);
否則,x
2= x; y
2= f(x);
根所在的區間縮小一半。
重複計算新的近似根並估計偏差
直至| x2
– x1
|<1e-10。
牛頓法解方程
求乙個實根
演算法:方程y=f(x)=0
求在x0
附近的乙個實根。
選乙個近似根
x0,求
y0 =f(x0)
; 過
y0作f(x)
的切線,交橫軸於x1,
以x1為新的近似根,重複上述步驟...
2031 求一元三次方程的解
time limit 3 second memory limit 2 mb 有形如ax 3 bx 2 cx d 0的乙個一元三次方程。給出該方程中各項的係數 a,b,c,d均為實數 並約定該方程存在三個不同實根 根的範圍在 100至100之間 且根與根之差的絕對值 1。要求由小到大依次在同一行輸出這...
三分求一元三次方程的極值 hdu 4355
二分法作為分治中最常見的方法,在各種比賽中經常出現 如 poj 1434 但只適用於單調函式,若遇到凸 凹 函式求解極值,可採取三分的方法求解。凸 凹 函式在高數中的定義是 若函式的 二階導數在區間上恆大於0,則該函式在區間為凸函式 反之,小於0為凹函式。在比賽中面對乙個問題而推出的求解函式f,求解...
c語言求一元二次方程的根 C語言程式的測試
c語言程式的測試 程式除錯的任務是排除程式中的錯誤,使程式能順利地執行並得到預期的效果。程式的除錯階段不僅要發現和消除語法上的錯誤,還要發現和消除邏輯錯誤和執行錯誤。除了可以利用編譯時提示的 出錯資訊 來發現和改正語法錯誤外,還可以通過程式的測試來發現邏輯錯誤和執行錯誤。程式的測試任務是盡力尋找程式...