第 4 章 不等式與絕對值¶

本章重點:

  • 了解不等式的意義與解集的表示方式(區間、數線)。
  • 使用 SymPy 解一元一次、二次及簡單分式不等式。
  • 處理絕對值方程與不等式,理解「分段討論」的觀念。
  • 認識 solve_univariate_inequality 與 solveset 的差異與用途。
  • 透過圖形與數線,連結「解」與「範圍」的直覺。

不等式在現實生活中十分常見,例如:溫度需低於某值、成本不得超過預算、 機率必須介於 0 與 1 之間等等。本章希望讓你把代數技巧與這些直覺連結起來。

4.1 匯入 SymPy 與基本設定¶

先匯入 SymPy 並建立一個實數變數 $x$:

In [1]:
import sympy as sp
sp.init_printing()

x = sp.symbols('x', real=True)
x
Out[1]:
$\displaystyle x$

4.2 一元一次不等式¶

考慮不等式:

$2x - 3 > 1$。

手算時,我們會把 3 移到右邊,得到 $2x > 4$,再除以 2 得 $x > 2$。

在 SymPy 中,可以使用 solve_univariate_inequality:

In [2]:
from sympy import solve_univariate_inequality

ineq1 = 2*x - 3 > 1
solution_ineq1 = solve_univariate_inequality(ineq1, x)
ineq1, solution_ineq1
Out[2]:
$\displaystyle \left( 2 x - 3 > 1, \ 2 < x\right)$

solve_univariate_inequality 的結果通常是一個區間或區間聯集, 例如 (2, oo) 表示 $x > 2$,其中 oo 代表 $+\infty$。

4.3 一元二次不等式¶

考慮:

$x^2 - 5x + 6 \ge 0$。

手算時,我們通常先因式分解:$x^2 - 5x + 6 = (x-2)(x-3)$, 再用號線分析或圖形觀察。SymPy 可以直接求解:

In [3]:
ineq2 = x**2 - 5*x + 6 >= 0
solution_ineq2 = solve_univariate_inequality(ineq2, x)
ineq2, solution_ineq2
Out[3]:
$\displaystyle \left( x^{2} - 5 x + 6 \geq 0, \ 3 \leq x \vee x \leq 2\right)$

若想先觀察根與因式分解,也可以搭配 factor:

In [4]:
expr = x**2 - 5*x + 6
sp.factor(expr), sp.solve(sp.Eq(expr, 0), x)
Out[4]:
$\displaystyle \left( \left(x - 3\right) \left(x - 2\right), \ \left[ 2, \ 3\right]\right)$

你可以想像這個二次函數的圖形是一條開口向上的拋物線, 在 $x=2$ 與 $x=3$ 處與 $x$ 軸相交,因此「大於等於 0」的區域會落在兩側。

4.4 分式不等式與定義域¶

考慮:

$\dfrac{1}{x-1} > 0$。

這類不等式除了符號判斷外,還要注意分母不能為 0 的限制。 SymPy 在解不等式時也會自動把這些點排除在解集中。

In [5]:
ineq3 = 1/(x-1) > 0
solution_ineq3 = solve_univariate_inequality(ineq3, x)
ineq3, solution_ineq3
Out[5]:
$\displaystyle \left( \frac{1}{x - 1} > 0, \ 1 < x\right)$

你可以自己畫出 $y = 1/(x-1)$ 的圖形(在 $x=1$ 有垂直漸近線), 並確認在哪些區間上函數值為正。

4.5 絕對值的定義與基本操作¶

絕對值 $|x|$ 定義為:

[ |x| = \begin{cases} x, & x \ge 0 \\ -x, & x < 0 \end{cases} ]

在 SymPy 中,絕對值用 sp.Abs 表示:

In [6]:
from sympy import Abs

expr_abs = Abs(x - 3)
expr_abs
Out[6]:
$\displaystyle \left|{x - 3}\right|$

可以代入具體數值觀察:

In [7]:
expr_abs_1 = expr_abs.subs(x, 5)
expr_abs_2 = expr_abs.subs(x, 1)
expr_abs_1, expr_abs_2
Out[7]:
$\displaystyle \left( 2, \ 2\right)$

4.6 絕對值方程:$|x-a| = b$¶

經典問題:

$|x-3| = 2$。

從幾何上來看,$x$ 與 3 的距離為 2,因此解為 $x = 1$ 或 $x = 5$。

用 SymPy 解:

In [8]:
eq_abs1 = sp.Eq(Abs(x-3), 2)
sp.solve(eq_abs1, x)
Out[8]:
$\displaystyle \left[ 1, \ 5\right]$

也可以用分段的想法手動處理:

  • 當 $x-3 \ge 0$,則 $|x-3| = x-3$。
  • 當 $x-3 < 0$,則 $|x-3| = -(x-3)$。

這個觀念在絕對值不等式中會更重要。

4.7 絕對值不等式:$|x-a| < b$¶

例如:

$|x-1| < 3$。

在數學上,這表示「$x$ 與 1 的距離小於 3」,也就是:

$-3 < x-1 < 3$,進一步得到 $-2 < x < 4$。

用 SymPy:

In [9]:
ineq_abs = Abs(x-1) < 3
solution_abs = solve_univariate_inequality(ineq_abs, x)
ineq_abs, solution_abs
Out[9]:
$\displaystyle \left( \left|{x - 1}\right| < 3, \ -2 < x \wedge x < 4\right)$

對於 $|x-a| \le b$ 的情況,也會得到封閉區間 [a-b, a+b]。

你可以試著改變數字(a, b),看看解集區間如何隨之平移與縮放。

4.8 使用 Piecewise 顯式寫出絕對值的分段定義¶

SymPy 的 Piecewise 可以幫助我們練習「分段討論」的觀念。以 $|x-3|$ 為例:

In [10]:
pw = sp.Piecewise((x-3, x-3 >= 0), (-(x-3), True))
pw
Out[10]:
$\displaystyle \begin{cases} x - 3 & \text{for}\: x \geq 3 \\3 - x & \text{otherwise} \end{cases}$

我們可以比較 Abs(x-3) 與 Piecewise 是否在各點相同:

In [11]:
for val in [-1, 0, 3, 5]:
    print("x =", val)
    print("Abs(x-3) =", Abs(val-3))
    print("Piecewise =", pw.subs(x, val))
    print("---")
x = -1
Abs(x-3) = 4
Piecewise = 4
---
x = 0
Abs(x-3) = 3
Piecewise = 3
---
x = 3
Abs(x-3) = 0
Piecewise = 0
---
x = 5
Abs(x-3) = 2
Piecewise = 2
---

這種方式讓你更具體地理解「絕對值就是一個分段函數」, 在未來微分、積分或更複雜的不等式中會很有幫助。

4.9 啟發性例子一:距離與誤差範圍¶

假設某測量值 $x$ 的真值為 10,但允許的誤差不超過 0.2, 這可以寫成:

$|x - 10| \le 0.2$。

用 SymPy 解這個不等式:

In [12]:
x = sp.symbols('x', real=True)
ineq_error = Abs(x-10) <= 0.2
solve_univariate_inequality(ineq_error, x)
Out[12]:
$\displaystyle 9.8 \leq x \wedge x \leq 10.2$

結果是一個區間,對應到實際可接受的測量範圍。這種思考方式大量出現在工程、實驗科學以及統計中的「可信區間」概念中。

4.10 啟發性例子二:解集的圖形直觀¶

考慮不等式:

$x^2 - 4 < 0$。

這等價於:$-2 < x < 2$,代表拋物線 $y = x^2 - 4$ 在 x 軸下方的區域。

我們可以用 SymPy 畫出圖形來輔助理解:

In [13]:
# 在支援繪圖的環境中,可視化拋物線
sp.plot(x**2 - 4, (x, -4, 4), title='y = x^2 - 4')
No description has been provided for this image
Out[13]:
<sympy.plotting.backends.matplotlibbackend.matplotlib.MatplotlibBackend at 0x7f2b28bd16a0>

觀察圖形可以幫助你把「不等式」視為「某函數在某區域的正負性」。 在微積分與應用問題中,我們常需要判斷在哪些區間上函數大於或小於某個值。

4.11 啟發性例子三:雙重不等式與區間運算¶

雙重不等式例子:

$1 < 2x + 1 \le 5$。

我們可以把它拆成兩個不等式:

$1 < 2x + 1$ 與 $2x + 1 \le 5$,

解出各自的解集後取交集。SymPy 也可以利用 reduce_inequalities 處理:

In [14]:
from sympy.solvers.inequalities import reduce_inequalities
sol = reduce_inequalities([1 < 2*x + 1, 2*x + 1 <= 5], x)
sol
Out[14]:
$\displaystyle x \leq 2 \wedge 0 < x$

這裡代表「同時滿足」,解集是兩個區間的交集。

4.12 本章小結¶

本章你學到了:

  • 如何用 solve_univariate_inequality 解一元不等式(一次、二次、分式)。
  • 絕對值的分段定義以及如何用 SymPy 表達與求解。
  • 絕對值方程 $|x-a| = b$ 與不等式 $|x-a| < b, |x-a| \le b$ 的幾何意義(距離與區間)。
  • 利用 Piecewise 清楚寫出分段函數,培養分段討論的概念。
  • 如何把不等式與圖形(函數的正負區域)連結起來。

請記住:

  • 不等式的「答案」往往是一整個範圍(區間),而不是單一數值。
  • 電腦代數系統可以幫忙算出解集,但理解解集代表什麼樣的情境或限制, 仍然仰賴你的數學直覺與生活經驗。

4.13 練習題¶

請在本 Notebook 中新增儲存格,試著完成以下練習:

  1. 基本一次不等式
    (a) 解不等式 $3x - 2 \le 7$。
    (b) 把解集用區間表示,並說明對應的數線圖形(可用文字描述)。

  2. 二次不等式
    使用 solve_univariate_inequality 解下列不等式:
    (a) $x^2 - x - 6 > 0$
    (b) $-x^2 + 4x - 3 \ge 0$
    並試著畫出對應的拋物線,從圖形角度解釋為什麼解集是那樣的區間。

  3. 分式不等式與定義域
    解不等式 $\dfrac{x+1}{x-2} < 0$。
    (a) 用 SymPy 解,寫出解集。
    (b) 手動畫出號線,分析在哪些區間上分子與分母的符號。

  4. 絕對值方程與不等式
    (a) 解方程 $|x+2| = 5$。
    (b) 解不等式 $|x-4| \le 1$,並用數線描述解的範圍。
    (c) 試著用 Piecewise 的分段定義來手動解 $|x-4| \le 1$。

  5. 雙重不等式
    解不等式 $-1 < 3x - 2 \le 7$。
    (a) 先拆成兩個不等式解,再取交集。
    (b) 直接使用 And 與 solve_univariate_inequality 解,確認結果相同。

  6. 應用情境:誤差與容許範圍
    某產品設計長度為 5 公分,允許誤差為 $\pm 0.05$ 公分。
    (a) 請用絕對值不等式表示這個規格條件。
    (b) 用 SymPy 解出實際允許的長度範圍。
    (c) 解釋為什麼這樣寫能正確反映「誤差不超過 0.05」的意思。

  7. 加分題:絕對值與二次不等式的結合
    解不等式 $|x-1| < x^2$。
    提示:可以先用 SymPy 得到解集,再嘗試用圖形或分段討論理解其結構, 並寫下一段你對這個解集形狀的觀察與說明。

回首頁