第 7 章 函數的平移、伸縮與變化¶
本章重點:
- 理解圖形平移:$y = f(x) + k$, $y = f(x-h)$ 對圖形的影響。
- 理解圖形伸縮:$y = a f(x)$(垂直)、$y = f(bx)$(水平)的效果。
- 了解反射:$y = -f(x)$、$y = f(-x)$ 的圖形對稱關係。
- 以參數控制圖形形狀,觀察參數變化和函數圖形之間的關係。
- 使用 SymPy/ Python 動手實驗各種變換,培養「看式子想圖形、看圖形猜式子」的能力。
這些技巧在高中課程中常被用來快速畫出新的圖形,也是在微積分中理解「函數族」與模型調整的重要工具。
7.1 基本準備:以 $f(x) = x^2$ 為例¶
在本章中,我們多半會以一個簡單的基礎函數 $f(x) = x^2$ 或 $f(x) = \sin x$ 作為例子,然後對它做各種變換。
先在 SymPy 中定義:
import sympy as sp
sp.init_printing()
x = sp.symbols('x', real=True)
f = x**2
f
接著,可以畫出其圖形(在支援 sp.plot 的環境中):
sp.plot(f, (x, -4, 4), title='y = x^2')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7fe218b5da90>
7.2 垂直平移:$y = f(x) + k$¶
若已知 $y = f(x)$ 的圖形,則:
- $y = f(x) + k$ 會把整個圖形向上平移 $k$ 個單位(若 $k>0$)。
- 若 $k<0$,則向下平移 $|k|$ 個單位。
例:以 $f(x)=x^2$ 為例,考慮 $g(x) = x^2 + 2$。
g = f + 2
sp.plot(f, g, (x, -4, 4), legend=True, title='y = x^2 and y = x^2 + 2')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7fe21691e990>
你可以觀察到兩條拋物線的形狀完全一樣,只是其中一條向上平移了。
7.3 水平平移:$y = f(x-h)$¶
這個部分常讓人混淆:
- $y = f(x-h)$:圖形向右平移 $h$(若 $h>0$)。
- $y = f(x+h)$:圖形向左平移 $h$。
例:以 $f(x) = x^2$ 為例,考慮 $g(x) = (x-2)^2$。
g_shift = (x-2)**2
sp.plot(f, g_shift, (x, -1, 5), legend=True, title='y = x^2 and y = (x-2)^2')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7fe216891310>
這裡 $y=(x-2)^2$ 是把原本的拋物線向右平移 2 個單位。 你可以試著改成 $(x+2)^2$,看看圖形會向哪邊移動。
7.4 垂直伸縮與反射:$y = a f(x)$¶
給定 $y=f(x)$,若考慮 $y = a f(x)$:
- 若 $|a|>1$,圖形會沿著 $y$ 軸方向「拉長」,變得更窄(拋物線例子)。
- 若 $0<|a|<1$,圖形會「壓扁」,變得更寬。
- 若 $a<0$,圖形會相對於 $x$ 軸上下翻轉(反射)。
以 $f(x)=x^2$ 為例,畫出 $y = x^2$、$y = 2x^2$、$y = \frac{1}{2}x^2$:
sp.plot(x**2, 2*x**2, sp.Rational(1,2)*x**2,
(x, -4, 4), legend=True,
title='y = x^2, 2x^2, (1/2)x^2')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7fe2167aa5d0>
再看看 $y = -x^2$ 的情況:
sp.plot(x**2, -x**2, (x, -4, 4), legend=True, title='y = x^2 and y = -x^2')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7fe2166c3b10>
7.5 水平伸縮與反射:$y = f(bx)$¶
給定 $y = f(x)$,考慮 $y = f(bx)$:
- 若 $|b|>1$,圖形在水平方向被壓縮(變窄)。
- 若 $0<|b|<1$,圖形在水平方向被拉寬。
- 若 $b<0$,圖形相對於 $y$ 軸左右翻轉(反射)。
這點常與垂直伸縮混淆,可以透過例子加深印象。
例:以 $f(x) = \sin x$,比較 $\sin x$ 與 $\sin(2x)$、$\sin(\frac{x}{2})$。
f_sin = sp.sin(x)
sp.plot(f_sin, sp.sin(2*x), sp.sin(x/2),
(x, -2*sp.pi, 2*sp.pi), legend=True,
title='sin(x), sin(2x), sin(x/2)')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7fe216474e10>
你會發現:
- $\sin(2x)$ 的波形在 $x$ 軸上「擠」在一起(週期變為原來的一半)。
- $\sin(\frac{x}{2})$ 的波形被拉長(週期變為原來的兩倍)。
7.6 綜合變換:$y = a\, f(b(x-h)) + k$¶
一般來說,我們可以把各種變換組合在一起,形成:
$y = a\, f(b(x-h)) + k$。
- $h$:控制水平平移(右移 $h$)。
- $k$:控制垂直平移(上移 $k$)。
- $a$:控制垂直伸縮與上下反射。
- $b$:控制水平伸縮與左右反射。
例:以 $f(x) = x^2$,考慮:
$g(x) = -2\, (x-1)^2 + 3$。
這代表:
- 將基礎拋物線 $x^2$ 向右平移 1。
- 垂直方向放大 2 倍並上下翻轉。
- 再向上平移 3。
我們可以畫出 $y = x^2$ 與 $y = -2(x-1)^2 + 3$:
g = -2*(x-1)**2 + 3
sp.plot(x**2, g, (x, -3, 5), legend=True,
title='y = x^2 and y = -2(x-1)^2 + 3')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7fe219099450>
試著改變係數與常數(例如改成 -1/2、+1 等),觀察圖形如何變化,
逐漸建立「看式子就能 roughly 想到圖形長相」的能力。
7.7 參數動畫的概念(文字說明)¶
在 Jupyter Notebook 中,有時會搭配 ipywidgets 做參數滑桿,
讓你可以動態調整 $a, h, k$ 等參數並即時看到圖形變化。
下面提供一個基礎框架(需先安裝 ipywidgets):
# 以下程式在支援 ipywidgets 的環境中可使用
from ipywidgets import interact
def plot_quadratic(a=1.0, h=0.0, k=0.0):
x = sp.symbols('x')
f = a*(x-h)**2 + k
sp.plot(f, (x, -10, 10), ylim=[-10, 10])
interact(plot_quadratic, a=(-3, 3, 0.5), h=(-5, 5, 1), k=(-5, 5, 1));
interactive(children=(FloatSlider(value=1.0, description='a', max=3.0, min=-3.0, step=0.5), IntSlider(value=0,…
若無法使用互動工具,也可以手動改動參數、多畫幾張圖, 效果同樣是訓練你對「參數 → 圖形」之間關係的直覺。
7.8 啟發性例子一:音樂中的頻率與 $\sin(bx)$¶
在聲音與音樂中,純音可近似為正弦波:$A\sin(\omega t)$, 其中 $\omega$ 與「頻率」有關。
- 當 $\omega$ 變大,波形在時間軸上被「擠」在一起,聲音的頻率變高(音調變高)。
- 當 $\omega$ 變小,波形被「拉長」,頻率變低(音調變低)。
這與我們在本章看到的 $y = \sin(bx)$ 水平伸縮變換相同。
以下用 SymPy 畫出不同頻率的正弦波(把 $x$ 當作時間 $t$):
sp.plot(sp.sin(x), sp.sin(2*x), sp.sin(4*x),
(x, 0, 2*sp.pi), legend=True,
title='Sine waves of different frequencies: sin(x), sin(2x), sin(4x)')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7fe214b53c50>
你可以聯想到:
- $\sin(x)$:基準音。
- $\sin(2x)$:頻率加倍(高一個八度的感覺)。
- $\sin(4x)$:頻率再加倍。
這樣,數學中的「水平伸縮」就與生活中的聲音高度直接關聯起來。
7.9 啟發性例子二:影像亮度調整與垂直變換¶
在影像處理中,灰階影像的每個像素有一個亮度值(例如 0 ~ 255)。 如果我們把亮度視為函數 $I(x)$ 的輸出,則:
- 讓整體變亮:$I_{new}(x) = I(x) + c$(垂直平移)。
- 增加對比:$I_{new}(x) = a I(x)$(垂直伸縮)。
雖然我們這裡不直接處理影像,但可以用簡單的函數模擬: 假設某條亮度曲線 $L(x) = 50 + 20\sin x$,調亮 30 的效果是 $L_{new}(x) = L(x) + 30$。
L = 50 + 20*sp.sin(x)
Ln = L + 30
sp.plot(L, Ln, (x, 0, 2*sp.pi), legend=True,
title='Brightness Curve: Original and Increased Brightness')
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7fe214a4e490>
雖然實際影像是二維的,但這個一維例子讓我們看到: 圖形的垂直平移與伸縮在各種調整「輸出值」的應用中都扮演相似角色。
7.10 啟發性例子三:統計中的標準化(平移 + 伸縮)¶
在統計學中,我們常常要把一組資料 $X$ 轉換成「標準化」的變數 $Z$:
$Z = \dfrac{X - \mu}{\sigma}$,
其中 $\mu$ 是平均數,$\sigma$ 是標準差。
這其實就是:
- 先做水平平移(在隨機變數軸上視角):減去平均 $\mu$,
- 再做水平伸縮(縮放):除以 $\sigma$。
如果把某個機率密度函數 $f_X(x)$ 畫出來, 那麼對應的 $Z$ 變數密度函數會經歷「平移 + 伸縮」的圖形變換。
以下用一個簡單的二次函數模型示意:
mu = 1
sigma = 2
f_X = - (x-mu)**2 + 4 # 只是示意用的「山形」函數
z = sp.symbols('z', real=True)
f_Z = f_X.subs(x, sigma*z + mu) # 將 x = sigma*z + mu 代入
f_X, f_Z
若在同一張圖上畫出 $f_X$ 與「重新命名後的」$f_Z$,可以看見圖形平移與伸縮後的關係。 雖然嚴格的機率密度還需要正規化等條件,但這個例子讓我們理解: 統計中的標準化,其實就是函數圖形的幾何變換的一種。
7.11 本章小結¶
本章你學到了:
- $y = f(x) + k$、$y = f(x-h)$ 對圖形的垂直與水平平移效果。
- $y = a f(x)$、$y = f(bx)$ 對圖形的垂直與水平伸縮與反射效果。
- 綜合變換 $y = a f(b(x-h)) + k$ 可以表示相當廣泛的圖形變化。
- 利用 SymPy 繪圖,觀察參數如何改變圖形的形狀與位置。
- 這些變換在聲音頻率、影像亮度、統計標準化等現實應用中,都扮演類似角色。
若能熟練地在腦中想像「函數變形」的效果,你在後續學習微積分、常微分方程、甚至機器學習模型時, 都會有很大的直觀優勢。
7.12 練習題¶
請在本 Notebook 中新增儲存格,試著完成以下練習:
垂直平移
(a) 以 $f(x) = x^2$,畫出 $y = f(x)$ 與 $y = f(x) - 3$。
(b) 找出兩條拋物線的頂點座標,並說明它們之間的關係。水平平移
(a) 以 $f(x) = x^2$,畫出 $y = f(x)$、$y = f(x-1)$、$y = f(x+2)$。
(b) 分別寫出這三條拋物線的頂點座標,並描述它們的變化規律。垂直伸縮與反射
以 $f(x) = x^2$:
(a) 畫出 $y = f(x)$ 與 $y = 3f(x)$,並比較圖形開口的「寬窄」。
(b) 畫出 $y = f(x)$ 與 $y = -f(x)$,觀察圖形如何相對於 $x$ 軸翻轉。水平伸縮(以三角函數為例)
(a) 畫出 $y = \sin x$ 與 $y = \sin(2x)$,在同一張圖上。
(b) 找出它們在 $x$ 軸上的週期(相鄰兩個相同點的距離),並比較之。
(c) 試著畫出 $y = \sin(\frac{x}{2})$,觀察週期如何改變。綜合變換
令 $f(x) = x^2$,考慮 $g(x) = -2(x-1)^2 + 3$。
(a) 寫出 $g(x)$ 的頂點與開口方向。
(b) 用程式畫出 $f(x)$ 與 $g(x)$,並用文字解釋:從 $f$ 變到 $g$ 經過了哪些步驟(先平移再伸縮、還是相反?)。應用題:音調與正弦波
(a) 以 $f(x) = \sin x$ 為基準,畫出 $\sin x$ 與 $\sin(3x)$。
(b) 數一數在 $[0, 2\pi]$ 內各自完成了幾個完整週期。
(c) 用文字說明「頻率變成 3 倍」如何在圖形上呈現。加分題:用眼睛看出變換順序
觀察兩個函數圖形:$y_1 = x^2$ 與 $y_2 = -\frac{1}{2}(x+1)^2 + 2$(請先用程式畫出)。
(a) 試著用語言描述:從 $y_1$ 變成 $y_2$ 可以拆成哪幾個簡單步驟(平移、伸縮、反射)。
(b) 寫下兩種不同的「變換順序」,並用數學式子說明它們其實表示同一個結果。