二分法的基本思路是:任意兩個點(diǎn)x1和x2,判斷區(qū)間(x1,x2)內(nèi)有無一個實(shí)根,如果f(x1)與f(x2)符號相反,則說明有一實(shí)根。接著?。▁1,x2)的中點(diǎn)x,檢查f(x)和f(x2)是否同號,如果不同號,說明實(shí)根在(x,x2)之間,如果同號,在比較(x1,x),這樣就將范圍縮小一半,然后按上述方法不斷的遞歸調(diào)用,直到區(qū)間相當(dāng)?。ㄕ页龈鶠橹梗?/p>
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供德城企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、成都網(wǎng)站制作、HTML5建站、小程序制作等業(yè)務(wù)。10年已為德城眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
代碼如下(已調(diào)試):
#include "math.h"
main()
{
float x,x1,x2;
float F(float x,float x1,float x2);
printf("請輸入?yún)^(qū)間[x1,x2]\n");
scanf("%f%f",x1,x2);
printf("x=%f\n",F(x,x1,x2));
}
float F(float x,float x1,float x2)
{
float f,f1,f2;
do
{
f1=pow(x1,3)-x1-1.0;
f2=pow(x2,3)-x2-1.0;
}while(f1*f20); //確保輸入的x1,x2使得f1,f2符號相反
do
{
x=(x1+x2)/2; //求x1,x2的中點(diǎn)
f=pow(x,3)-x-1.0;
if(f1*f0) //當(dāng)f與f1符號相同時
{x1=x;f1=f;}
else if(f2*f0) //當(dāng)f與f2符號相同時
{x2=x;f2=f;}
}while(fabs(f)1e-6); //判斷條件fabs(f)1e-6的意思是f的值非常0
return x;
}
輸入:1 1.5
則輸出:x=1.324718
重點(diǎn)改動:
scanf("%lf,%lf",x1,x2);
#include stdio.h
#include math.h
int main()
{ double calculate(double y1,double y2,double fy1,double fy2);
double x1,x2,fx1,fx2;
double a;
printf("enter x1 x2:");
scanf("%lf,%lf",x1,x2);
fx1=(((x1+3)*x1-8)*x1+12)*x1-10;
fx2=(((x2+3)*x2-8)*x2+12)*x2-10;
printf("%f %f %f %f\n",x1,x2,fx1,fx2);
a=calculate(x1,x2,fx1,fx2);
printf("x=%lf\n",a);
return 0;
}
double calculate(double y1,double y2,double fy1,double fy2)
{ double fy0,y0;
double a;
y0=(y1+y2)/2;
fy0=(((y0+3)*y0-8)*y0+12)*y0-10;
printf("%f ",y0);
if(fabs(fy0)=1e-10)
{ if ((fy0*fy1)0)
{ y2=y0;
fy2=fy0;
}
else
{ y1=y0;
fy1=fy0;
}
a=calculate(y1,y2,fy1,fy2);
}
else
{ a=y0;
printf("%6.2f",a);
}
return(a);
}
#include cmath double func(double x){
return x * (x - 3.0) - 5.0;
}
double binary_search(double x1, double x2, double (*f)(double)){
static const double epsilon = 1.0e-14;
double y1 = f(x1); double y2 = f(x2);
bool b1 = (y1 0.0 y2 0.0);
bool b2 = (y1 0.0 y2 0.0);
while (b1 || b2)
{
double x = (x1 + x2) / 2;
double y = f(x);
if (fabs(y) = epsilon) { return x;}
((b1 == y 0.0) ? x1 : x2) = x;
}
return 0.0;
}
int main(int, char*[]){
double f = binary_search(1.5, 10, func);
return 0;
}
按照你的要求只實(shí)現(xiàn)了這個方程的,不能泛用,不過很容易修改,代碼如下:
#includestdio.h
#includemath.h
float?function(float?x)
{
float?result?=?0.0;
result?=?((x*x*x)?-?(3*x)?+?1);
return?result;
}
int?main()
{?
float?a?=?0;
float?b?=?1;
float?e?=?(float)0.001;
float?m?=?(a+b)/2;
while(1)
{
if?(fabs((function(m))?=?e))
{
printf("result?is?%lf???",?m);
return?1;
}
else?if?(function(m)??0)
{
a?=?m;
}
else?if?(function(m)??0)
{
b?=?m;
}
m?=?(a+b)/2;
}
return?1;
}
網(wǎng)頁題目:c語言二分法求函數(shù)近似解,二分法求方程解的方法c語言
文章網(wǎng)址:http://m.rwnh.cn/article34/dssdhse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、微信小程序、品牌網(wǎng)站設(shè)計、云服務(wù)器、網(wǎng)站收錄、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)