開(kāi)根號(hào)的小妙招
提前聲明,這個(gè)投稿幾乎沒(méi)有價(jià)值,因?yàn)檎嬗龅搅寺闊┑拈_(kāi)方,你一定會(huì)用計(jì)算器而不是手算,也就是說(shuō),事實(shí)上我這個(gè)投稿沒(méi)什么大的價(jià)值。
平常的時(shí)候,我會(huì)把一些奇怪的想法記下來(lái),如果是涉及到數(shù)學(xué)/物理的問(wèn)題,有時(shí)候我會(huì)動(dòng)手算算,記下來(lái),僅供娛樂(lè)而已。(說(shuō)實(shí)話,備考期間,除了備考什么都有意思? ?嘿嘿)
大概有一年多了,一年前看到一個(gè)關(guān)于如何快速開(kāi)平方的視頻,于是我動(dòng)手研究了一下。這份手稿完成之后壓在其他手稿中,直到今天。閑話少說(shuō),開(kāi)始正題吧。(我還是不會(huì)用高端的符號(hào)插入和公式插入,難受)
本文研究的內(nèi)容是:快速開(kāi)平方的評(píng)價(jià)以及使用范圍。
核心思想是:
當(dāng)x足夠大而Δx相對(duì)足夠小時(shí),便可忽略不計(jì),這樣我們的計(jì)算方法就來(lái)了,操作如下:
首先針對(duì)你要開(kāi)方的對(duì)象,比如數(shù)字 N,你需要先找到 [
](其中 [x]函數(shù)定義為:向下取整數(shù)),將其記為
。
計(jì)算
,將其記為
,那么最終的結(jié)果可記為:
舉個(gè)例子,由計(jì)算器可知=10.39230485,帶入上述式子中得到:
對(duì)比可得,確實(shí)如此,10.4≈10.39......,通過(guò)計(jì)算器計(jì)算,二者誤差為0.074%,很不錯(cuò)的精度。
以上就是開(kāi)方的使用方法。
下面討論開(kāi)方的使用范圍。由于我們假定了,那么在
差距不大的時(shí)候會(huì)出現(xiàn)明顯的誤差。那么問(wèn)題來(lái)了,假定我需要一個(gè)精度,那么上述的快速開(kāi)方法的使用下線在哪里呢?我們現(xiàn)在來(lái)研究研究。
為了方便研究,我們需要事先定義幾個(gè)量。
為開(kāi)方對(duì)象,
,
,如此便能表示為:
。
我們?cè)俣x:,
。如此便有
定義一個(gè)精度函數(shù),其含義為:快速開(kāi)方的約數(shù)與開(kāi)方的精準(zhǔn)的數(shù)之比。顯然,
即為相對(duì)誤差。
很好,前置工作已經(jīng)完成,現(xiàn)在我們的問(wèn)題在于:假如我現(xiàn)在需要一個(gè)精度,比如最多1%的誤差,那么對(duì)應(yīng)的或
最小為多少?
現(xiàn)在取誤差為1%,即
現(xiàn)在我們需要對(duì)精度函數(shù)進(jìn)行一個(gè)展開(kāi):
這里需要提一嘴,由于快速開(kāi)方的特性,所以有,各位有興趣的小伙伴可以自己去想想為什么哦。所以對(duì)應(yīng)于誤差1%,我們?nèi)?img type="latex" class="latex" src="http://api.bilibili.com/x/web-frontend/mathjax/tex?formula=D(N)%5Cleq%201.01" alt="D(N)%5Cleq%201.01">(極限條件)。
解得
由于,所以舍去后面一個(gè)答案。
故
而我們也知道,
可得:
然后就得到了:
很顯然,當(dāng),即左逼近時(shí),誤差會(huì)到達(dá)最大,也就是說(shuō),這又是一個(gè)極限情況,令
,此時(shí)
解得,取個(gè)整數(shù)吧,還要考慮到
是個(gè)平方數(shù),就取
。
也就是說(shuō),當(dāng)時(shí),我們能保證快速開(kāi)方法的誤差保持在1%內(nèi)。
讓我們來(lái)演算一下吧,
%
%
%
和我們的結(jié)論有點(diǎn)點(diǎn)小出入,但是問(wèn)題不大,就目前來(lái)看在時(shí),確實(shí)能夠保持1%(左右)內(nèi)的誤差,能用就行要啥自行車??!
好的,問(wèn)題又來(lái)了,0.1%的精度呢?更好的精度呢?我也能解決!
假設(shè)目標(biāo)精度為10^t,其中t=-n, n為大于零的整數(shù),也就是10^(-n)的誤差。
取到小數(shù)點(diǎn)后n位,wtm直接帶入!(為什么我要繞個(gè)圈子呢?因?yàn)橹笖?shù)符號(hào)后面只能帶一個(gè)符號(hào),而 -n 不會(huì)把n帶上,就很難受)
解得
極限條件下,令,有
代入中,有
得到:
則在精度10^(-n),即取小數(shù)點(diǎn)后n位的要求下,
開(kāi)方數(shù),
或者說(shuō)
其中t=-n,n為大于0的整數(shù)。
很好,最重要的工作已經(jīng)完成,現(xiàn)在就是需要代入具體的數(shù)字來(lái)一波演算(懶得算,直接給結(jié)果)。
n=2時(shí),,取7,和上面的結(jié)論是一致的。
n=3時(shí),,取22
現(xiàn)在你想要的精度你可以直接得到了,有意思吧
至于開(kāi)立方么,我這寫完平方之后就沒(méi)寫下去了,估計(jì)感覺(jué)煩了就不寫了吧。但是我應(yīng)該可以給出一個(gè)好的“指導(dǎo)”:
是開(kāi)立方的整數(shù),
,則估算值就是
如果是開(kāi)k次方呢?簡(jiǎn)單!
/[
^
]? ?(還是和上面一樣的問(wèn)題,我搞不來(lái)??!)
在開(kāi)k次方的情況下要求誤差小于(t=-n,n為正整數(shù))呢?簡(jiǎn)單!
直接取極限條件,令,化簡(jiǎn)可得:


可見(jiàn),我們得到了一個(gè)一元k次方程,有億點(diǎn)難度......
我的某個(gè)m開(kāi)頭數(shù)學(xué)軟件罷工了,表示算不出來(lái),那算了,我這里探討一下解的存在性問(wèn)題。
令
導(dǎo)一下,并令導(dǎo)數(shù)為0,解得:。
如果觀察導(dǎo)函數(shù),會(huì)發(fā)現(xiàn)這應(yīng)該是個(gè)單調(diào)遞增有零點(diǎn)的函數(shù),顯然:
由于題設(shè)k為正整數(shù),所以一定有
又有?以及?
,所以得到結(jié)論:
至少有兩個(gè)不同的實(shí)數(shù)解。考慮到導(dǎo)函數(shù)的單調(diào)性,得到最終結(jié)論:
有且僅有兩個(gè)不同的實(shí)數(shù)解。(當(dāng)然,我這里并不想考慮復(fù)數(shù)解的存在的意義)。這一結(jié)論與前面的推導(dǎo)是一致的。值得注意的是,由于α>1,所以解一定取的是右邊的那個(gè)解。
所以,解是肯定存在的,但是我算不出來(lái)而已。
那我就束手無(wú)策了嗎?
大錯(cuò)特錯(cuò)!我不是還有python嗎?。。?!
編程目的:找到一個(gè)整數(shù)N,使得在使用快速開(kāi)方法后滿足誤差在10^-n以內(nèi)而整數(shù)N-1不滿足。
核心思想:上面提到的算式。
輸入有:開(kāi)方根次k,誤差度n。
以上就是代碼,但是有一個(gè)問(wèn)題:經(jīng)過(guò)試驗(yàn),當(dāng)你輸入的n和k稍微大一點(diǎn)點(diǎn)的時(shí)候,10000的循環(huán)上線就不夠用了,你要是加大數(shù)量的話,那必然運(yùn)行半年都出不來(lái)。
突然想到,這個(gè)結(jié)果是滿足單調(diào)性的,因?yàn)橹灰獫M足了某一個(gè)值,那么后面的值都會(huì)滿足,那么這個(gè)可以用二分枚舉?。『?!來(lái)!(我不是學(xué)計(jì)算機(jī),也不是專門學(xué)算法的,如果名字叫錯(cuò)了請(qǐng)見(jiàn)諒)
完成辣!但是有一個(gè)小毛病,我遇到一點(diǎn)bug:開(kāi)二次根號(hào)任意精度都不會(huì)出問(wèn)題,但是只要開(kāi)三次根號(hào)就出問(wèn)題,沒(méi)有輸出,我也不知道是為什么。
我去,從10:30碼字到14:32(中間吃了個(gè)飯,代碼也是現(xiàn)碼的),整整四個(gè)小時(shí)的跨度,真刺激,午睡去了。