某葉C語言學習上重大的一步 一元三次方程求解

2021-06-21 09:14:37 字數 1666 閱讀 9918

目前某葉編的最難的程式了......感覺算是跨越吧,之前最難的是一元二次方程求解,雖然是最「難」的,只是因為最長,但是寫起來還是很輕鬆的

解法思路:

先把求與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語言程式的測試 程式除錯的任務是排除程式中的錯誤,使程式能順利地執行並得到預期的效果。程式的除錯階段不僅要發現和消除語法上的錯誤,還要發現和消除邏輯錯誤和執行錯誤。除了可以利用編譯時提示的 出錯資訊 來發現和改正語法錯誤外,還可以通過程式的測試來發現邏輯錯誤和執行錯誤。程式的測試任務是盡力尋找程式...