第十一種乘法:卷積
最最平常的乘法,也是一種卷積。
例如,計(jì)算 123×456,可以這樣做:
制作如圖的兩個(gè)滑塊,123豎著往下寫(xiě),456倒著往上寫(xiě)。
然后,讓456從123的旁邊滑下來(lái)。

每滑動(dòng)一格,都把兩個(gè)數(shù)重疊的部分進(jìn)行點(diǎn)積運(yùn)算,結(jié)果記錄下來(lái)。每次結(jié)果的個(gè)位向后移動(dòng)一位。
當(dāng)滑動(dòng)結(jié)束以后,把那些結(jié)果加起來(lái),即可。
這種運(yùn)算就是卷積的直觀(guān)展示。

類(lèi)比乘法的卷積方法,可以定義兩個(gè)序列的乘積。讓一個(gè)序列從另一個(gè)序列旁邊滑過(guò),形成很多的點(diǎn)積,把這些點(diǎn)積加起來(lái),得到序列積。
序列可以是有限的,也可以是無(wú)限的。
無(wú)限的序列可以有生成函數(shù),生成函數(shù),就是類(lèi)似對(duì)等比數(shù)列求和的結(jié)果。用那結(jié)果,就可以生成等比數(shù)列。
序列乘積的時(shí)候,一個(gè)序列可以轉(zhuǎn)化成向量,另外一個(gè)轉(zhuǎn)化為矩陣。用矩陣,意味著乘法不可交換。
卷積常用在傅立葉分析。
第十二種乘法:印度乘法
印度乘法,是指普通的數(shù)字乘法,特別的地方有兩處。
其一是:格子乘法。

格子乘法最早記載在1150年印度數(shù)學(xué)家婆什迦羅的《麗羅娃提》一書(shū),后來(lái)傳到阿拉伯,再后來(lái)傳到歐洲,由意大利人傳到中國(guó),中國(guó)數(shù)學(xué)家程大位給起了個(gè)好聽(tīng)的名字,叫“鋪地錦”。
但中國(guó)人還是習(xí)慣用珠算,用“一口清”來(lái)計(jì)算乘法。
其二是:大九九。
中國(guó)傳統(tǒng)的大九九乘法口訣,只是把普通的小九九擴(kuò)充一倍,例如“三九二十七”成為兩句口訣“三九二七”與“九三二七”。而印度的大九九則更大,要求背誦所有的兩位數(shù)乘以?xún)晌粩?shù),背誦以后,計(jì)算速度無(wú)疑會(huì)大大提升。
當(dāng)然,背誦是有技巧的。不是單純的死記硬背。例如十幾乘以十幾,方法就是,把乙的個(gè)位數(shù)加在甲的末尾,添零,再加上兩數(shù)個(gè)位與個(gè)位相乘,得結(jié)果。
例如:18×13,(18+3)=21,添零以后是210,個(gè)位乘積是8×3=24,結(jié)果就是210+24=234。
第十三種乘法:俄羅斯農(nóng)民乘法
俄羅斯農(nóng)民的乘法,直觀(guān)思想十分樸素,舉個(gè)特殊例子來(lái)看:
16×17=8×34=4×68=2×136=1×272=272
指導(dǎo)思想就是,不斷的把被乘數(shù)減半,把乘數(shù)加倍,直到被乘數(shù)變?yōu)?,結(jié)果就出來(lái)了。
上面的例子,碰巧被乘數(shù)減半的過(guò)程中,一直是偶數(shù),如果是奇數(shù),怎么辦呢?如果是奇數(shù),就單獨(dú)記錄下那一步的乘數(shù),把被乘數(shù)減一,繼續(xù)運(yùn)算,在最后,把記錄的結(jié)果加上去即可。
例如:
35×37
=34×37+37
=17×74+37
=16×74+74+37
=8×148+111
=4×296+111
=2×592+111
=1×1184+111
=1295
這種運(yùn)算,表面上看,步驟很多,很笨拙。但正應(yīng)了中國(guó)的古訓(xùn)“大巧若拙”,其實(shí)這種算法,是極其迅速的。尤其到了計(jì)算機(jī)的時(shí)代,到了二進(jìn)制的時(shí)代。
俄羅斯農(nóng)民的算法,可以用極快的速度完成大數(shù)的乘法。所謂大數(shù),就是幾百位或者幾千位的數(shù)字相乘。
用普通的乘法是很慢的,要做多次的乘法和加法,復(fù)雜程度一般是N的平方;而俄羅斯農(nóng)民算法的復(fù)雜度是N×(log N)。因此,是及其迅速的。并且,計(jì)算機(jī)中,除以2或者乘以2,很多時(shí)候是不需要計(jì)算的,只需要移動(dòng)一位,因?yàn)橛?jì)算機(jī)經(jīng)常使用2進(jìn)制。
俄羅斯農(nóng)民算法可以擴(kuò)展為使用4進(jìn)制,16進(jìn)制都可以,64進(jìn)制等都可。
在大數(shù)乘法中,能比俄羅斯農(nóng)民的乘法更快的算法并不多。
第十四種乘法:用快速傅立葉變換作乘法
離散傅立葉變換,可以用來(lái)計(jì)算乘法。
但如果不是快速傅立葉變換,復(fù)雜度仍然是N的平方。
如果用快速傅立葉變換,就可以超越俄羅斯農(nóng)民算法。
僅僅因?yàn)?,傅立葉變換應(yīng)用太廣泛,人們針對(duì)傅立葉變換,研究了各種快速算法,使得快速傅立葉變換可以達(dá)到N(log N)的復(fù)雜度。
本質(zhì)上講,快速傅立葉變換的速度并沒(méi)有超過(guò)俄羅斯農(nóng)民的算法。僅僅因?yàn)?,它已?jīng)有了各種成熟的庫(kù),各種優(yōu)化的算法,因此,應(yīng)用更廣泛,就得到更多的優(yōu)化,速度更快了。
如果對(duì)俄羅斯農(nóng)民算法進(jìn)行適當(dāng)?shù)膬?yōu)化,也可以達(dá)到快速傅立葉變換的速度。
日常如果要做大數(shù)乘法,用俄羅斯農(nóng)民算法足矣。如果有更高的要求,可以用GNU的庫(kù)函數(shù),其中各種算法的實(shí)現(xiàn)都有,尤其是用快速傅立葉變換來(lái)計(jì)算乘法。
大數(shù)的乘法有什么用處呢?一般的,還真沒(méi)什么用處。無(wú)聊的時(shí)候,可以把圓周率計(jì)算個(gè)幾萬(wàn)位,就只有這種用處。
而幾萬(wàn)位的圓周率,本身就沒(méi)有什么用處。50位以?xún)?nèi)的小數(shù),足夠地球上的天文學(xué)家和物理學(xué)家用了。
大數(shù)乘法的其它用處包括:彰顯科技,比拼電腦的計(jì)算速度,RSA加密,破解RSA加密等。
傅立葉變換怎樣做乘法,以及為什么能做乘法,需要專(zhuān)門(mén)來(lái)討論。
第十五種乘法:利用三角函數(shù)計(jì)算乘法
在沒(méi)有計(jì)算器的年代里,三角函數(shù)專(zhuān)門(mén)有一個(gè)表,叫做三角函數(shù)表。已知角度,可以查詢(xún)?nèi)呛瘮?shù)值。已知三角函數(shù)值,如正弦值,也可以查到角度。
利用這個(gè)表,可以進(jìn)行乘法運(yùn)算。把需要相乘的兩個(gè)數(shù)字,通過(guò)適當(dāng)?shù)囊莆?,變成三角函?shù)可以表示的范圍。然后查到對(duì)應(yīng)的兩個(gè)角度,用積化和差公式來(lái)計(jì)算。最后,對(duì)結(jié)果重新移位恢復(fù)。
例如,計(jì)算 4766×8848
先變成 0.4766×0.8848,
然后假設(shè)這是兩個(gè)角度的正弦,查表的到兩個(gè)角度:
28.463575度
62.22692度
根據(jù)公式
sinA × sin B = [cos (A-B) - cos(A+B)]/2
需要查計(jì)算:
兩個(gè)角度的差是33.763344度,差表得余弦為 0.83134;
兩個(gè)角度的和是90.6905度,差表得余弦為 -0.01205;
兩者做差,平均以后,為0.421695。
按照這個(gè)結(jié)果,移位,原來(lái)乘積就是 42169500。
實(shí)際上,前面的部分都很精確,只有最后兩位不同。
真實(shí)的結(jié)果是42169568。
在精確程度允許的情況下,足夠了。
關(guān)鍵是,這種方法,只用加減法來(lái)計(jì)算乘法。
第十六種乘法:利用對(duì)數(shù)計(jì)算乘法
對(duì)數(shù)非常神奇,甚至可以說(shuō)吊詭:
(1)對(duì)數(shù),先于指數(shù)被發(fā)明;
(2)自然對(duì)數(shù)(接近),先于常用對(duì)數(shù)被發(fā)明
對(duì)數(shù)最自然的底,竟然就是自然對(duì)數(shù)底。一開(kāi)始,人們各種嘗試,就使得底非常接近自然對(duì)數(shù)底。
自然對(duì)數(shù)底,無(wú)疑是神秘的,歐拉對(duì)此剖析的最透徹,關(guān)于e的故事,三天三夜也說(shuō)不完。
后來(lái),有了常用對(duì)數(shù),對(duì)數(shù)用來(lái)做乘法就更方便了。
外國(guó)人,有一種精神,是我們所沒(méi)有的:在沒(méi)有對(duì)數(shù)表格的情況下,他們可以經(jīng)過(guò)幾代人的努力,來(lái)編制長(zhǎng)長(zhǎng)的表格,做這樣的苦功,枯燥且乏味。然后印刷下來(lái),供大家使用,世界人民共享勞動(dòng)成果。在有了表格的情況下,他們又嘗試發(fā)明各種儀器,來(lái)簡(jiǎn)化運(yùn)算,終于把計(jì)算尺,計(jì)算器和計(jì)算機(jī)搞出來(lái)了,還是大家都能用。這里,既有厚德載物的精神,又有自強(qiáng)不息的精神。
我們,卻還在培養(yǎng)珠心算,用“一口清”這些高端乘法技術(shù)。盡量的,連筆和紙都不使用,來(lái)完成計(jì)算。這些技術(shù),只能適用于少數(shù)有天賦的兒童,而且要經(jīng)過(guò)辛苦的訓(xùn)練才能掌握。并且,這種技能的傳承非常困難。并且,如果不經(jīng)常使用,很快就會(huì)退化。
有工具,為什么不用呢?人類(lèi)最高超的技能,不就是制造和使用工具嗎?其實(shí),根本不用擔(dān)心加減乘除的技能退化。
現(xiàn)在,沒(méi)有多少人會(huì)手動(dòng)開(kāi)平方。加減乘除并不比開(kāi)平方重要。所以,就算大多數(shù)人不懂口算,也沒(méi)什么關(guān)系。
能機(jī)械運(yùn)算的,就用機(jī)械運(yùn)算。能查表的,就查表。這樣,才是真正的解放生產(chǎn)力,發(fā)展生產(chǎn)力。
數(shù)學(xué)需要運(yùn)算。但運(yùn)算不是數(shù)學(xué)的本質(zhì)。
我們常常嘲笑外國(guó)人太笨,但他們才是真正的大智若愚啊!他在菜市場(chǎng)或者超市不會(huì)口算,是因?yàn)樗麄儾恍枰?jì)算,所以不需要會(huì)算。
中國(guó)古人,鄙視會(huì)算術(shù)的人,認(rèn)為這些是屬于底層人民的東西。屬于“奇擠淫巧”一類(lèi)。上層社會(huì)的人完全不懂得算術(shù)。這樣的做法似乎也不妥。
理想的狀態(tài)應(yīng)該是:不同職業(yè)的人都得到應(yīng)有的尊重,有體面的收入。職業(yè)平等,不分高低貴賤。