當前位置:首頁 » 編程語言 » 二分法求根c語言

二分法求根c語言

發布時間: 2022-07-10 03:19:38

『壹』 c語言用二分法求根

while里的判斷不應該用!=0這種方式,因為精度的限制極有可能是一個很小的數但也不為0,應該用abs(……)<1e-5這種判斷方式

『貳』 C語言二分法求方程的根

沒聽說過二分法能夠求根,二分法只是對於有序數組的查找方法,並不能去求解任意方程的根(只可以求解在某個區間單調遞增或遞減的函數曲線對應方程的根),較為通用的方程求根方法是牛頓法。

『叄』 二分法求平方根 C語言

這應該是演算法的偽代碼,至少可以肯定,這不是C語言的代碼,C語言里就沒有<-這種語法。
二分法求解的方法,就是拿一個可能的結果,去試驗、比較,看結果大還是小了,二分結果的區間,重復,直到得到滿足精度要求的結果。
比如要求解2的平方根,x=2,給定區間[0,10],a=0,b=10。
第一次循環,c給定中點值5,5把區間[0,10]二分成兩部分。試算5的平方,結果非小於x,可知最終的結果在[0,5),不是在(5,10],求解區間變成[0,5]
第二次循環,c給定中值2.5,然後循環重復,直到done=1或者c==c_old,即找到一個c的平方正好完成等於x即找到一個正好結果,或者兩次計算結果完成一致的數,這個數的精度已經很高,劃分的區間足夠小,不能再分了,循環完成,得到結果c。

『肆』 C語言編程 二分法求方程的根

前面自定義函數funx(r)的返回值與funx(n)的返回值相乘如果小於零的話那麼m就等於r,不然的話n就等於r,
就是先把r當做實際參數傳入給funx進行計算,在funx函數內,x的值為r,再把n當做實際參數傳入給funx進行計算,在funx函數內,x的值為n,
總的運算:[2*((m+n)/2)*((m+n)/2)*((m+n)/2)-4*((m+n)/2)*((m+n)/2)+3*((m+n)/2)-6]*[2*n*n*n-4*n*n+3*n-6]<0的話,m=r,不然n=r.
不知道看明白了沒有......

『伍』 C語言:用二分法求方程的根,求具體可用程序;

樓主你好~

提供以下代碼。
Fedora10下gcc4.3.2編譯通過,手動測試通過。。

#include <stdio.h>
#include <math.h>

#define DEFAULT_UPPER (10)
#define DEFAULT_LOWER (-10)
#define DEFAULT_E (0.00000001)

#define _MID(x,y) ((x+y)/2)
#define _VALUE(x) (2*x*x*x-4*x*x+3*x-6)

double _e;

int getRoot(double lower, double upper, double *result);

main()
{
double root;
printf("Enter a deviation:");
scanf("%lf",& _e);
if(_e == 0.0)
_e = DEFAULT_E;
if(getRoot(DEFAULT_LOWER, DEFAULT_UPPER, &root))
printf("Root:%2.8lf\n", root);
else
printf("Root:No Solution.\n");
}

int getRoot(double lower, double upper, double *result)
{
*result = _MID(lower,upper);
if(upper - lower <= _e)
return 1;
if(_VALUE(lower)*_VALUE(*result) <= 0)
return getRoot(lower, *result, result);
else if(_VALUE(*result)*_VALUE(upper) <= 0)
return getRoot(*result, upper, result);
else
return 0;
}

很簡單的遞歸。

不過對於樓主的這道題,還要說一點,提示中的二分法求根,只能適用於在給定函數在給定區間中呈單調連續情況下才行得通哦~我也是按照給定的提示來寫的上述代碼。

如果連續函數在給定區間不單調,很有可能中值*下界值和中值*上界值都大於0,那麼會跳出認為沒有根,而事實上很有可能這個中值點靠近函數極點。

而真正用二分法求給定區間的思路是:
首先為函數求導,算出導函數的零點,然後再判斷零點性質,最後將函數區間分為單調遞增和單調遞減間隔的形式,對每一段進行二分法求根。

請追問~

『陸』 C語言 二分法求三次方程根

二分法的基本思路是:任意兩個點x1和x2,判斷區間(x1,x2)內有無一個實根,如果f(x1)與f(x2)符號相反,則說明有一實根。接著取(x1,x2)的中點x,檢查f(x)和f(x2)是否同號,如果不同號,說明實根在(x,x2)之間,如果同號,在比較(x1,x),這樣就將范圍縮小一半,然後按上述方法不斷的遞歸調用,直到區間相當小(找出根為止)!
比如用二分法求f(x)=x^3-6x-1=0的實根。
代碼如下(已調試):
#include
"math.h"
main()
{
float
x,x1,x2;
float
F(float
x,float
x1,float
x2);
printf("請輸入區間[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)-6*x1-1.0;
f2=pow(x2,3)-6*x2-1.0;
}while(f1*f2>0);
//確保輸入的x1,x2使得f1,f2符號相反
do
{
x=(x1+x2)/2;
//求x1,x2的中點
f=pow(x,3)-6*x-1.0;
if(f1*f>0)
//當f與f1符號相同時
{x1=x;f1=f;}
else
if(f2*f>0)
//當f與f2符號相同時
{x2=x;f2=f;}
}while(fabs(f)>1e-6);
//判斷條件fabs(f)>1e-6的意思是f的值非常0
return
x;
}
輸入:1
5
則輸出:x=2.528918
輸入:-10
10
則輸出:x=2.528918

『柒』 C語言中二分法求根

if(c*d<0)
{
a=m;
c=n;
}
else
{
b=m;
d=n;
}
改為
if(m*d<0)
{
a=m;
c=m;
}
else
{
b=m;
d=m;
}

『捌』 c語言二分法求根

二分法計算函數f(x)=x*x*x*x+2*x*x*x-x-1;

本程序在turbo c或c++下編譯:

#include "stdio.h"

#include <math.h>

float f(float x)

{float y;

y=x*x*x*x+2*x*x*x-x-1;

return y;

}

void main()

{float a=0,b=0,h,y,x;

int k,n0;

printf("please input qujian a and b");

scanf("%f%f%d",&a,&b,&n0); /*輸入含根區間a,b,循環次數n0 */

for(k=0;k<=n0;k++)

{ x=(a+b)/2;

h=(b-a)/2;

y=f(x);

if(h<10e-6||fabs(y)<10e-6)

{ printf("k=%d,x=%f,y=%f",k,x,y);

break; } /*輸出分半次數k,函數的根x,及x對應的函數值.*/

else

{if(f(a)*f(x)<0)

b=x;

else a=x;

}

}

}

『玖』 求用c語言編寫一個函數二分法求根的演算法

二分法計算函數f(x)=x*x*x*x+2*x*x*x-x-1;

本程序在turbo c或c++下編譯

#include "stdio.h"

#include <math.h>

float f(float x)

{float y;

y=x*x*x*x+2*x*x*x-x-1;

return y;

}

void main()

{float a=0,b=0,h,y,x;

int k,n0;

printf("please input qujian a and b");

scanf("%f%f%d",&a,&b,&n0); /*輸入含根區間a,b,循環次數n0 */

for(k=0;k<=n0;k++)

{ x=(a+b)/2;

h=(b-a)/2;

y=f(x);

if(h<10e-6||fabs(y)<10e-6)

{ printf("k=%d,x=%f,y=%f",k,x,y);

break; } /*輸出分半次數k,函數的根x,及x對應的函數值.*/

else

{if(f(a)*f(x)<0)

b=x;

else a=x;

}

}

}

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:235
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726