如何用方程闖作(3):函數上的漣漪

很長一段時間裡我都以為,數學圖像當中的「色塊」只能用「方程」來得到,也就是說,我們不可能得到一個心形的「函數」。終於在2012年1月12日,我看到了這張圖:

Aha!在小時候畫畫的時候,我們都用了這樣的方法給畫出的區域上色。而現在,我們要做的就是圈定上下限,用正弦函數給這個區域「塗色」

這就像是水面上的波浪:我們求出上下限的中值作為「靜水面」,用上下限的差值作為正弦函數「水波」的振幅。這裡我們可以順便引出一個結論:

max(a,b)=frac{a+b}{2}+frac{|a-b|}{2},min(a,b)=frac{a+b}{2}-frac{|a-b|}{2}

按照這個思路,我聯想到了一個心形「函數」:

y=x^{frac{2}{3}}pmsqrt{4-x^2}

很容易想到將前半段的x^{frac{2}{3}}作為基底,後半段的sqrt{4-x^2} 作為振幅,用正弦函數sin(10pi x)填充後得到:

y=x^{frac{2}{3}}+sqrt{4-x^2}sin(10pi x)

圖像是這樣的:

怎麼樣,這個心形函數大家覺得算數嗎?

我們還可以用方波畫虛線

y=x^{frac{2}{3}}+frac{left|sin(10pi x)
ight| }{sin(10pi x)}  sqrt{4-x^2}

不過注意到根式對定義域的限制,這是很令人不快的。只要有根式對定義域的限制,就意味著我們無法在其他地方放上想要的構造,換句話說,就是沒辦法在心形的兩邊放上「I」和「U」(其實文章開頭的圖中的函數就因為根式定義域的限制,實際上是畫不出來的,作者還加了許多sqrt{5},應該是要湊黃金比例)。一個很平凡的想法是,把帶有定義域限制下的自變數x替換為f(x),使其滿足在根式的定義域內滿足f(x)=x而在定義域之外滿足f(x)=c,常數c是一個位於定義域限制內的、不搗亂」的實數。方便起見我們往往將常數c設置為定義域的端點值。這樣,對於上面例子中的定義域限制[-2,2]很容易想到利用絕對值函數的組合:

f(x)=frac{|x+2|-|x-2|}{2}

把根式當中的x換掉得到的圖像是

y=x^{frac{2}{3}}+ sqrt{4-left(frac{|x+2|-|x-2|}{2} 
ight)^2} sin(10pi x)

而利用這樣替換的方法,我們還可以「截取」任何函數的一部分,例如用上面的f(x)截取y=sinx[-2,2]的部分,可以寫為:

y=sinleft(frac{|x+2|-|x-2|}{2}
ight)

兩端的數值不為 0 怎麼辦呢?我們可以乘上一個函數g(x),使其滿足在截取的範圍內g(x)equiv 1,而在範圍外有g(x)equiv 0,根據之前推導的符號函數我們很容易想到:

g(x)=frac{1}{2} left(frac{|4-x^2|}{4-x^2}+1
ight)

(損失了x=pm 2兩個點,但對於圖像整體而言沒有影響)

這時y=g(x)cdot sinx的圖像是:

我們也可以加上h(x),使其在截取的範圍滿足h(x)equiv 0,左側滿足h(x)equiv sin2,右側滿足h(x)equiv -sin2,這個也很容易:

h(x)=-frac{sin2}{2} left(frac{|x-2|}{x-2}+frac{|x+2|}{x+2} 
ight)

結果看起來是一樣的。

類似的,我們可以運用絕對值函數和分式的組合製造出各種各樣的基底和振幅函數,最後用正弦函數將其填充就完成了!而在這些過程當中還有許多的技巧,我會在後面的文章中儘可能多的介紹。現在,我們嘗試修正文章開頭的函數。

(接下來為了方便討論會定義許多函數,來方便記憶和避免冗長的表達式。不習慣編程的同學可能會覺得有點暈,但是相信我,不定義這些函數你會更暈……)

字母「I」比較簡單,基底可以是一條水平線,振幅在需要的位置上「跳躍」至長度的一半就行了。一個簡單的例子,長度為 6 的字母「I」:

I(x)=0+frac{3}{2} left(1-frac{|x(x-1)|}{x(x-1)}
ight) sin(10pi x)

而對於字母「U」,我們先設法列出其形狀的上下限。我們把兩邊的水平線設置在「U」形底部圓弧的兩端,整體寬度設為 3,那麼下限y=p(x)可以表示為:p(x)=-frac{1}{2} sqrt{9-(|x|-|x-3|)^2}

上限y=q(x)可以看做是一個「跳躍」加上一個圓弧:q(x)=2left(1-frac{|x(x-1)(x-2)(x-3)|}{x(x-1)(x-2)(x-3)}
ight)-frac{1}{2} sqrt{1-(|x-1|-|x-2|)^2}

基底就是base(x)=frac{p(x)+q(x)}{2} ,振幅則是amplitude(x)=(pm) frac{p(x)-q(x)}{2} 。畫出來的U(x)=base(x)+amplitude(x)cdot sin(10pi x)的圖像是:

兩個函數「元素」在其部分定義域之外取值皆是常數,所以我們將兩個函數平移一下再相加就能將二者結合起來。y=I(x+4)+U(x-4)的圖像是:

咦?沒有對齊?我們加上一個修正fix(x)=frac{|x-4|-|x+3|}{14}

這裡其實還可以換成加一個「跳躍」。其實還有許多的技巧,我會在後面的文章里儘可能介紹。至於加心形什麼的,各位自己來吧!

能做出這兩個字母啟發了我:我們是不是可以做出一整套字母表呢!?而把所有字母列出來之後,大部分都可以被輕鬆列出來,有幾個也可以妥協一下效果強行寫出來:

但是剩下的一群「熊孩子」擺到了我面前,很是犯難:CDEG。類似於文章開頭的「虛線心形函數」,我可以把這幾個表示出來,但這種表示不是稠密的。

哈哈,大家都已經看到了題圖,沒錯 ~ 一周之前突然得到了一個靈感:我可以用(-1)^x呀!嗯,當然,Mathematica 同學已經在這個函數面前陣亡了……GrapEq 同學艱難地接過了班……

嗯……這樣我們就可以構造上下對稱的「雙層」函數啦!例如題圖當中的「A」:

那麼可不可以繼續利用(-1)^x來得到上下不對稱的結構呢?從數學上來講是可行的,例如f(x)+frac{1+(-1)^x}{2}(g(x)-f(x))就能使函數曲線「分裂」成g(x)f(x)兩支。不過很遺憾,在分式和複數冪的雙重壓迫下,GrapEq 也陣亡了……

咱還是就這麼將就著點,做個字母表吧T_T……

P.S.修正版的 I?U :

另外,字母表這事挖個坑,遲(yí)早(dìng)有(huì)一(wàng)天(diào)做出個函數生成器來的!


推薦閱讀:

《詩人之愛,王小波情書選》里喜歡的句子
「醒來覺得甚是愛你」如何優雅地翻譯成英文?
很多人說《史蒂夫·喬布斯傳》里的情書翻譯得差,那應該怎麼翻譯才好?
男友放不下前女友,分手後還是懷念。?

TAG:趣味数学 | 情书 | 函数 |