求方程的根
描述
用二分法求下面 下麪方程在(-10,10)(−10,10)之間的根:
2x3-4x2+3x - 6 = 02x
3
−4x
2
+3x−6=0
輸入
沒有輸入
輸出
輸出方程在(-10,10)(−10,10)之間的根,結果精確到小數點後2位,如果有多個根,根之間請用空格隔開。
輸入樣例 1
無
輸出樣例 1
無
提示
題目說了用二分法,區間爲(-10,10),只需要一直將區間二分,直到求出答案。此題的區間較小,也可以之間暴力求解。
來源
江西中醫藥大學OJ http://172.17.4.116
設r是f(x) = 0的根,選取x0作爲r初始近似值,過點(x0,f(x0))做曲線y = f(x)的切線L,L的方程爲y = f(x0)+f’(x0)(x-x0),求出L與x軸交點的橫座標 x1 = x0-f(x0)/f’(x0),稱x1爲r的一次近似值。
先將方程寫成f(x)=0的形式,再按照如下步驟計算:
1.求出給出的兩個端點之間的值fx1,fx2.當fx1fx2<0,則表明x1和x2之間必存在一根
要麼就不存在,一直提示輸出x1和x2.
2.一旦fx1fx2<0,就表明在x1和x2之間有根,繼續判斷,求的x1和x2的中點值x0,求出fx0.
3.在判斷fx0*fx1>0,則在x0和x2中間去找根,此時x1不起作用,用x0代替x1,用fx0代替fx1.
要麼就在x0和x1中去找根,此時x2不起作用,用x0代替x2,用fx0代替fx2.
#include<stdio.h>
#include<math.h>
int main()
{
double x0,x1, f, fd;
x1=10;
do {
x0=x1;
f = 2 * x0 * x0 * x0 - 4 * x0 * x0 + 3 * x0 - 6;
fd = 6 * x0 * x0 - 8 * x0 + 3;
x1 = x0 - f / fd;
} while (fabs(x0-x1) >=1e-2);
printf("%.2f", x1);
return 0;
}