def erfen(low,high):
在湘鄉(xiāng)等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營(yíng)銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),湘鄉(xiāng)網(wǎng)站建設(shè)費(fèi)用合理。
while low high:
mid=(low+high)/2
if f(low)*f(mid)0:
high=mid
elif f(mid)*f(high )0:
low=mid
return mid
這個(gè)函數(shù)沒有結(jié)束 檢查一下如何設(shè)置退出條件
代碼有兩個(gè)地方有問題
1:19行的return縮進(jìn)有問題,19行的return不應(yīng)該出現(xiàn)在一個(gè)非方法的地方
2:?代碼有可能出現(xiàn)死循環(huán),在我輸入a:10,?b:10,?c:10,?d:10的時(shí)候出現(xiàn)死循環(huán),請(qǐng)檢查代碼邏輯
我已經(jīng)調(diào)整好了
def?f(x):
s=(a*x)**3+(b*x)**2+(c*x)+d
return?s
a=int(input("a"))
b=int(input("b"))
c=int(input("c"))
d=int(input("d"))
mid?=?0
for?i?in?range(-100,100,1):
x1=int(i)
x2=int(i+1)
if?f(x1)*f(x2)0:
lo,hi=x1,x2
while?hi-lo0.01:
mid=(lo+hi)/2
if?f(lo)*f(mid)0:
hi=mid
else:
lo=mid
else:
pass
print?mid
首先二分法肯定需要一個(gè)“不斷”二分的過程, 你的代碼里面連一個(gè)循環(huán)都沒有,肯定是不對(duì)的吧?
其次按照你的代碼的思路,如果當(dāng)前估算值guess的平法比x大,那就往0那邊靠,否則就往1那邊靠,這個(gè)好像也不對(duì)吧?
二分法的實(shí)現(xiàn)方法應(yīng)該是,在區(qū)間[left, right]里面找x的開方,令估算值為guess等于區(qū)間的中點(diǎn),如果guess比實(shí)際的大,那就把區(qū)間縮小一半,令到右端點(diǎn)移動(dòng)到中點(diǎn),如果guess比實(shí)際的小,也是將區(qū)間縮小一半,但是是令左端點(diǎn)移動(dòng)到中點(diǎn)。這樣每次縮小一半的區(qū)間,直到區(qū)間的長(zhǎng)度非常非常小,那就認(rèn)為區(qū)間的兩個(gè)端點(diǎn)是相等的了,這個(gè)時(shí)候就得到了答案。
import?math
def?main():
x?=?input('x=')
n?=?0
if?x?=?1?and?x?=?0:
left?=?0.
right?=?1.
while?right?-?left?=?0.0000001:
guess?=?(left?+?right)?/?2.
if?guess?**?2?-?x?=?0.0000001:
right?=?guess
else:
left?=?guess
#return?guess
print?'sqrt(x)?is',?left
else:
print?'x?should?be?in?[0,1]'
if?__name__?==?'__main__':
main()
我按照你的思路又寫了另外一種方法:
def?second():
x?=?input('x=')
n?=?0
if?x?=?1?and?x?=?0:
movelen?=?(1?+?0)?/?4.
guess?=?(1?+?0)?/?2.
while?abs(guess?**?2?-?x)?=?0.0000001:
if?(guess?**?2?-?x)?=?0.0000001:
guess?=?guess?-?movelen
else:
guess?=?guess?+?movelen
movelen?=?movelen?/?2.
print?'sqrt(x)?is',?guess
else:
print?'x?should?be?in?[0,1]'
因?yàn)樗呀?jīng)把middle位置上的數(shù)字已經(jīng)檢查過了,第一個(gè)if條件就是判斷middle位置山的數(shù)字是不是想要的,既然這個(gè)條件不滿足,那么就肯定不需要他,所以從他的上一位或下一位重新開始
新聞標(biāo)題:python二分法函數(shù),函數(shù)的二分法
URL標(biāo)題:http://chinadenli.net/article16/hdoodg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站改版、域名注冊(cè)、云服務(wù)器、網(wǎng)站設(shè)計(jì)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)