1、打開Python開發(fā)工具IDLE,新建‘search.py’。
創(chuàng)新互聯(lián)公司是一家專業(yè)提供江孜企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、做網(wǎng)站、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為江孜眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
2、F5運行程序,list1被正確排序,寫這個的目的是說明二分法查找必須前提是一個有序的列表,如果一開始無序首先要排序,當(dāng)數(shù)據(jù)量大的時候,快速排序是一個很好的選擇,再進(jìn)行二分法查找。
3、用遞歸的思想,遞歸就一定有結(jié)束條件。
4、if len(li)==1: ? #li長度等于1,只比較這個列表元素與要查找到值return li[0]==item。
5、if len(li)==0: #li長度等于0,全部查找結(jié)束還是沒有這個值? return False。
6、為程序添加main方法。
7、F5運行程序,正確打印出二分法查找結(jié)果,F(xiàn)alse True。
/*
二分法,適用于原函數(shù)是單調(diào)遞增或單調(diào)遞減,即方程只有1個根,
或在指定區(qū)間只有1個根
*/
//函數(shù)y( x),直接按題目中的方程寫
double y(double x)
{
return 2*x*x*x -4*x*x +3*x -6;
}
//遞歸調(diào)用函數(shù),這種調(diào)用多少次不一定的函數(shù),
//用遞歸調(diào)用最簡單,但要掌握遞歸技巧
double f(double x1,double x2)
{
double xm = (x1+x2)/2.0;
if( (x2-x1) 0.0000001) //預(yù)先設(shè)定的很小的數(shù)值,控制計算精度
{
return xm; //遞歸調(diào)用出口
}
if(? y( xm ) 0 )//用xm 代替x2
{
f( x1,xm);
}
else ////否則 用xm 代替x1
{
f( xm,x2);
}
}
void main()
{
double x1,x2;
x1 = -100000;
x2 = +100000;//取+ - 2個較極端的數(shù),保證y(x1)0,且y(x2)0
printf("%7.3lf",f(x1,x2));
}
) 用二分法求下面方程在(-10,10)之間的根。 2x3-4x2+3x-6=0【提示】(1) 取兩個不同點x1、x2,如果f(x1)和f(x2)符號相反,則(x1,x2)區(qū)間內(nèi)必有一個根(曲線與x軸的交點)。如果f(x1)與f(x2)同符號,則應(yīng)改變x1、x2,直到f(x1)、f(x2)異號為止。注意x1、x2的值不應(yīng)相差太大,以保證(x1,x2)區(qū)間只有一根。
(2) x1和x2兩點之間的中點x=(x1+x2)/2,見圖4-1,再從x求出函數(shù)值f(x)。
(3) 若f(x)與f(x1)同符號,則根必在(x,x2)區(qū)間內(nèi),此時將x作為新的x1;如果f(x)與f(x2)同符號,則表示根在(x1,x)區(qū)間內(nèi),將x作為新的x2。
(4) 重復(fù)步驟(2)和(3),直到|f(x)|ε為止,ε為一個很小的數(shù)。此時認(rèn)為f(x)≈0,x即為根。
根據(jù)上述思路畫出N-S流程圖,如圖4-2所示。源程序命名為p5_8.c。
#include math.h
#include stdio.h
double fun(double x) { return 2 * x * x * x - 4 * x * x + 3 * x - 6; }
double root(double a, double b, double e)
{
double x1, x2, y1, x, y;
x1 = a; x2 = b;
do {
x = (x1 + x2)/2;
y = fun(x);
y1 = fun(x1);
if( ( y 0 y1 0) || (y 0 y1 0) )
x1 = x;
else
x2 = x;
/*end if*/
}while(fabs(y) e);
return x;
}
int main(void)
{
double x = root(-10.0f, 10.0f, 1e-8);
printf("%f\n", x);
return 0;
}
這段代碼是求解方程f(x)=0在區(qū)間[-10,10]上的根的數(shù)值解。
方法的思想就是:一直選取區(qū)間中間的數(shù)值,如果發(fā)現(xiàn)中間的函數(shù)值與一側(cè)函數(shù)值,異號,那么說明解在這個更小的區(qū)間中,采用eps=1e-5作為區(qū)間的極限大小,通過迭代的方法求解這個方程的數(shù)值解。
所以了解了上述思想,那么else if(f(a)*f(c)0) b=c; 說明的是 f(a)和f(c)異號,那么使用b=(a+b)/2縮小迭代區(qū)間,繼續(xù)迭代;同理else a=c;說明f(a)和f(c)同號,那么使用a(a+b)/2縮小迭代區(qū)間,繼續(xù)迭代!
二分法計算函數(shù)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); /*輸入含根區(qū)間a,b,循環(huán)次數(shù)n0 */
for(k=0;k=n0;k++)
{ x=(a+b)/2;
h=(b-a)/2;
y=f(x);
if(h10e-6||fabs(y)10e-6)
{ printf("k=%d,x=%f,y=%f",k,x,y);
break; } /*輸出分半次數(shù)k,函數(shù)的根x,及x對應(yīng)的函數(shù)值.*/
else
{if(f(a)*f(x)0)
b=x;
else a=x;
}
}
}
這段代碼是求解方程f(x)=0在區(qū)間[-10,10]上的根的數(shù)值解。
方法的思想就是:一直選取區(qū)間中間的數(shù)值,如果發(fā)現(xiàn)中間的函數(shù)值與一側(cè)函數(shù)值,異號,那么說明解在這個更小的區(qū)間中,采用eps=1e-5作為區(qū)間的極限大小,通過迭代的方法求解這個方程的數(shù)值解。
所以了解了上述思想,那么else
if(f(a)*f(c)0)
b=c;
說明的是
f(a)和f(c)異號,那么使用b=(a+b)/2縮小迭代區(qū)間,繼續(xù)迭代;同理else
a=c;說明f(a)和f(c)同號,那么使用a(a+b)/2縮小迭代區(qū)間,繼續(xù)迭代!
當(dāng)前名稱:c語言二分法求函數(shù)值,c語言二分法求解
瀏覽地址:http://jinyejixie.com/article40/dsecdho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站設(shè)計公司、動態(tài)網(wǎng)站、全網(wǎng)營銷推廣、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)