用 wxMaxima 計算數學

電腦代數系統的介紹:用 wxMaxima 計算高中數學

作者:謝其磐

email: hsiehcp@protonmail.com

2025年12月

(這本書所介紹的的計算指令,都有在 wxMaxima 24.02.2 環境下測試成功。如有發現排版或打字錯誤,或對內容有建議,歡迎各位先進朋友 email 給我指正和建議,感謝。)

目錄

前言:電腦代數系統和 wxMaxima 的介紹

電腦代數系統(Computer Algebra System, CAS) 是一類專門用來處理「符號運算」與「代數計算」的軟體。它不是單純做數值運算的計算機,而是能用代數規則操作「符號」,並產生精確的數學結果。

它能處理「整個數學式」,可以用代數式顯示計算結果,也可以用數值來呈現。

CAS 能做什麼?

1. 符號運算(Symbolic Computation)

這是 CAS 最核心的能力。

CAS 可以像人類做代數一樣操作:

2. 自動求解方程式

CAS 可以解:

而且能給出符號解,而不是只是近似數值。

3. 微積分計算

CAS 的強項還包括:

對正在學微積分的學生尤其有用。

4. 線性代數與矩陣運算

CAS 通常內建:

比手算快、比一般計算機強大。

5. 畫圖與視覺化

包括 2D 與 3D:

圖形能幫助你直觀理解數學。

CAS 系統的典型例子

以下是常見的 CAS:

Maxima / wxMaxima

開源、免費,功能完整,適合學生、教育與研究者。 wxMaxima 為 Maxima 的圖形化介面,特別好用,也是本書要使用的軟體

SageMath

整合多個開源數學套件的大型系統,適合進階使用者。

Mathematica (Wolfram)

功能極強,但商業軟體,需付費。

Maple

工程科系常用,也是商業授權。

CAS 的價值和目的

1. 提升數學理解,而不是取代人

CAS 幫你處理繁雜計算,你可以專注於:

它是輔助學習的好工具

2. 讓學習更迅速

CAS 可以快速驗算、模擬與視覺化概念。 對自學者與需要做大量計算的人尤其重要。

3. 與未來技術接軌:AI + 數學的基礎

CAS 本質上是「讓電腦理解數學」的技術,而這與:

都是未來的重要方向。

會 CAS 就像會電腦的語言一樣,是未來的必備技能。

總結:CAS 是現代人的數學超級工具

電腦代數系統不是用來取代數學教育,而是讓你:

它是現代學習數學與科學的一項必備技能。


wxMaxima 的介紹

wxMaxima 源自是一個歷史非常悠久的 CAS —— Maxima 之上。 Maxima 的前身是麻省理工學院(MIT)於 1960 年代開始的 MACSYMA 計畫,是全球最早的符號計算系統之一,在當時屬於頂尖的科學研究工具。

後來 MACSYMA 的部分版本在 2000 年由 MIT 以 GPL 開源授權公開,形成今日的 Maxima 專案。wxMaxima 是 Maxima 的圖形化介面。

想要讓數學學習更有效率,更有趣嗎?wxMaxima 是一款免費、開源,而且功能強大的電腦代數系統(CAS),非常適合作為你的數學學習輔助工具。以下是值得學習的理由:

免費又跨平台 wxMaxima 完全免費,支援 Windows、macOS 與 Linux,下載即可使用,不需要花錢買昂貴軟體。

符號運算強、計算能力紮實 不管是解方程式、化簡、展開,還是微積分、矩陣運算,wxMaxima 都能給出精確的「符號解」,比單純的計算機更能幫你理解數學本質。

介面友善,容易上手 透過圖形化介面、輸入框與按鈕設計,方便操作,顯示美觀,輕鬆完成從代數到微積分的各類計算。

能畫圖、看得更懂 wxMaxima 支援 2D 與 3D 繪圖。想了解函數長什麼樣?想視覺化微分與積分?它可以幫助你把抽象概念變得具體。

學習過程可記錄、可重複使用 計算步驟與結果都會保留在單一檔案中,類似可執行的「數學筆記本」,方便複習、修改或與同學分享。

幫助你專注於理解,而不是卡在繁瑣計算 CAS 的目的不是偷懶,而是讓你把時間花在「數學概念」上,而不是被冗長的計算步驟拖累,更適合作為學習與驗算工具。

wxMaxima 的下載與安裝

▶ Windows 安裝

  1. 打開 wxMaxima 官方下載頁:
    https://wxmaxima-developers.github.io/wxmaxima/download.html
  2. 下載最新版本的 Windows Installer,請選擇包括 Gnuplot 和 Maxima 的套件。
  3. 依照安裝步驟按下一步即可。
  4. 安裝結束後,開始選單會看到 wxMaxima

▶ macOS 安裝

  1. 前往官方下載頁。
  2. 下載 .dmg 檔案。
  3. 打開 dmg,將 wxMaxima.app 拖到 Applications。
  4. 若遇到安全性提示,到「系統偏好設定 → 安全性與隱私」允許開啟。

▶ Linux(Ubuntu / Debian)安裝

Linux 內含 wxMaxima 套件,可在終端機輸入指令安裝:

sudo apt update
sudo apt install wxmaxima

wxMaxima 介面介紹

本書介紹的數學計算,是在 wxMaxima 24.02.2 版本操作。啟動 wxMaxima 之後,可以看到整體分成幾個主要區域:

fig0_1

工作區(Worksheet)

主畫面的大區塊,用來顯示你的輸入(input)與輸出(output)。
每次計算會以「輸入區塊(input cell)」的形式呈現。

輸入區塊(Input Cell)

你可以在預設的 Maths 格式區塊中輸入 Maxima 語法,例如:

1 + 1;

也可以輸入文字說明的區塊,只要把區塊的格式選擇 Text 即可。這樣子搭配文字說明和計算的區塊,就可以製作筆記本,儲存下來。

Shift + Enter 執行。

輸出區塊(Output Cell)

用於顯示計算結果,例如上面的例子會輸出:2

工具列(Toolbar)

包含常用功能按鈕,例如:

選單(Menu)

包括「檔案、編輯、繪圖、計算、代數、微積分」等項目,可以快速使用常見功能。選單的語言種類,可以在 [Edit] -> [Configure] -> [Options] 裡設定。

輸入技巧與數學符號

▶ 指令結尾要加分號 ;

Maxima 的每個指令結尾都要用分號結束,例如:

x:3;
x + 5;

Shift + Enter 執行

▶ 上一個輸入與輸出的參照:%i1%o1

例如:

(%i1) x:3;
(%o1) 3

之後你可以輸入:

%o1 + 5;

得到 8

也可以用 % 表示最後一次輸出的結果。

儲存檔案與匯出

儲存專案(.wxmx)

使用:

此格式可完整保存你的輸入與輸出(含圖形)。

複製圖片(例如繪圖)

任一繪圖可:

這對於寫報告非常方便。

你已經準備好開始使用 wxMaxima,進入正式的 CAS 學習旅程。


第 1 章 wxMaxima 基本語法入門

本章將介紹使用 wxMaxima 進行最基本的計算方式,包括變數、指派、基本運算、常見指令,以及錯誤訊息的辨識。完成本章後,你能將 wxMaxima 當作一個比「計算機」更強大的數學工具。


1.1 輸入算式與執行方式

wxMaxima 使用「輸入區塊(Input Cell)」撰寫指令。每次執行後會產生一個輸出結果。

▶ 執行指令

範例:

1 + 2;

執行後會顯示:

3

1.2 變數與指派:x:3;

變數是 CAS 中的重要概念,你可以將數字或表達式「存」進變數。
指派變數的語法是:

變數 : 值;

▶ 範例:指派與使用

x:3;
x + 5;

輸出:

3
8

:(指派)與 =(方程式)的差別

範例:

solve(x = 3, x);

1.3 基本運算:四則運算、指數、分數、根號、三角函數、對數

Maxima 支援完整的代數運算。

▶ 四則運算

3 + 5;
7 - 2;
4 * 6;
1 / 7;
1.0 / 7; /* 輸入小數格式 1.0,會啟動浮點數計算 */

輸出:

(%o5)   8
(%o6)   5
(%o7)   24
(%o8)   1/7
(%o9)   0.1428571428571428

可以用 float() 這個指令,指定用浮點數計算,如:

float(1/7);
(%o10)  0.1428571428571428

▶ 指數(^)

2^5;
8^(1/3);
2^(-3);
x^3;

輸出:

(%o11)  32
(%o12)  2
(%o13)  1/8
(%o14)  x^3

▶ 根號:使用 sqrt()

sqrt(2);
(%o26)  sqrt(2)
float(%);
(%o27)  1.414213562373095

▶ 三角函數

可以用 sin()cos(),和 tan() 等三角函數計算。需要注意的是,這裡需要用弳度 (radian) 來輸入角度,180度 (degree) 等於 \(\pi\) (radian),30度等於 \(\pi\)/6。在 wxMaxima 裡,以 %pi 來表示圓周率。 \(\pi\) = 3.141592653589793。

(%i28)  sin(%pi/6);
(%o28)  1/2

▶ 對數

對數函數可以使用 log() 來計算,注意這裡指的是自然對數,也就是以自然底數 \(e\) 為底的對數。在 wxMaxima 裡,以%e 來表示自然底數。 \(e\) = 2.718281828459045。

log(%e);
(%o32)  1
log(10);
float(log(10));
(%o33)  log(10)
(%o34)  2.302585092994046

若要計算以 10 為底的對數,可以使用對數的運算關係: \[ \log_{10}(x) = {log_{e}(x) \over log_{e}(10)} \]

▶ 虛數

wxMaxima 裡虛數以 %i 表示。

%i^2;

輸出:

-1

1.4 常見指令:expand、factor、ratsimp、subst

雖然後面章節會詳述,這裡先介紹最常使用的基本代數功能。

▶ 展開 expand

expand((x - 2)*(x + 3));
(%o10)  x^2+x-6

▶ 因式分解 factor

factor(x^2 + x - 6);
(%o11)  (x-2)*(x+3)

▶ 分式化簡 ratsimp

ratsimp((x^2 - 4)/(x - 2));
(%o12)  x+2

▶ 代入 x 的值 subst

subst(x=2, x^3 + 5*x);
(%o14)  18

1.5 小練習

  1. a 指派為 7,計算 2*a + 3
  2. 展開 (x+1)^3 並因式分解還原。
  3. 使用 ratsimp 化簡

    \[ \frac{x^2 - 9}{x - 3} \]

  4. 計算:

1.6 本章小結

你已經學會:

接下來的章節會進入更系統的代數、方程式與函數操作。


第 2 章 式子變形與因式分解

本章將介紹代數式的展開、化簡、因式分解與分式處理。
這些操作在高中數學中非常常見,而 wxMaxima 提供快速又可靠的工具,幫助你檢查手算結果或進行複雜計算。


2.1 多項式展開:expand

展開多項式是最基本的代數技巧,wxMaxima 使用 expand 指令完成。

▶ 範例 1:二項式展開

expand((x + 3)*(x - 5));

結果:

x^2 - 2*x - 15

▶ 範例 2:三次方展開

expand((x - 2)^3);
(%o16)  x^3-6*x^2+12*x-8

2.2 合併同類項:ratsimp、expand

合併同類項常用 ratsimpexpand 自動整理式子。

▶ 範例

ratsimp(3*x + 2*x - x + 5);

結果:

4*x + 5

2.3 因式分解:factor

因式分解是高中最常見的 CAS 操作之一。
Maxima 的 factor 指令可以將式子自動化簡成乘法形式。

▶ 範例 1:基本因式分解

factor(x^2 - 5*x + 6);

結果:

(x - 2)*(x - 3)

▶ 範例 2:高次多項式

factor(x^4 - 1);

Maxima 會自動分解成:

(x - 1)*(x + 1)*(x^2 + 1)

2.4 分式化簡:ratsimp

分式化簡是 ratsimp 的強項。

▶ 基本範例

ratsimp((x^2 - 4) / (x - 2));

Maxima 會先因式分解,再約分:

x + 2

▶ 多項式分式

ratsimp((x^3 - 1)/(x - 1));
(%o18)  x^2+x+1

2.5 部分分式分解:partfrac

部分分式在積分與分式化簡中很重要,Maxima 的 partfrac 可以分解有理式。

▶ 範例

partfrac((3*x + 5)/(x^2 - x), x);
(%o19)  8/(x-1)-5/x

2.6 結合展開與因式分解的應用

高中常見型態如:

CAS 可以快速驗證學生是否展開或還原正確。

▶ 範例:還原完全平方

factor(x^2 + 6*x + 9);
(%o20)  (x+3)^2

2.7 練習題

請使用 wxMaxima 完成以下練習:

  1. 展開下列多項式

    \[ (x - 1)(x^2 + 3x + 5) \]

  2. 因式分解

    \[ x^3 - 8 \]

  3. 化簡分式

    \[ \frac{x^2 - 4x + 4}{x - 2} \]

  4. 嘗試用 CAS 觀察下列公式是否正確:

    \[ (x + y)^3 = x^3 + 3x^2y + 3xy^2 + y^3 \]

    提示:使用 expand((x + y)^3);


2.8 本章小結

你已經學會:

下一章將進入「方程式」的世界,學習如何用 CAS 解線性方程、二次方程與聯立方程。


第 3 章 一元方程與聯立方程

本章將介紹如何使用 wxMaxima 解一元一次方程、一元二次方程,以及二元一次聯立方程。本章內容完全對應高中數學最核心的方程式操作,並示範如何使用 CAS 協助檢查答案與處理較複雜的情況。


3.1 解一元一次方程

一元一次方程的標準形式為:

\[ ax + b = 0 \]

wxMaxima 使用 solve 指令解方程式:

solve(方程式, 未知數);

▶ 範例:解一元一次方程

解:

\[ 2x - 5 = 7 \]

solve(2*x - 5 = 7, x);

結果為:

[x = 6]

3.2 一元二次方程與判別式

一元二次方程一般形式:

\[ ax^2 + bx + c = 0 \]

使用 solve 即可直接求根:

▶ 範例

解:

\[ x^2 - 5x + 6 = 0 \]

solve(x^2 - 5*x + 6 = 0, x);

結果:

[x = 2, x = 3]

3.2.1 判別式 \(\Delta = b^2 - 4ac\)

判別式決定根的型態:

可以自訂一個判別式函數:

delta(a,b,c) := b^2 - 4*a*c;

測試:

delta(1, -5, 6);

得到:

1

3.2.2 用 CAS 推導二次方程的根公式

你也可以請 CAS 解一般式:

solve(a*x^2 + b*x + c = 0, x);

CAS 會輸出:

\[ x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} \]

這可用來驗證教科書公式。


3.3 數值解:高次方程與無法解析的方程式

當方程式很複雜(如五次以上),solve 不一定能給解析式。
可改用以下方法求數值解:

▶ 範例:數值根

\(x^5 - x + 1 = 0\) 的根。

先嘗試用 solve(),只得到原式,沒有得到解析解。。

(%i1)   solve(x^5 - x + 1, x);
(%o1)   [0=x^5-x+1]

用以下指令得到數值解:

allroots(x^5 - x + 1 = 0);
(%o3)   [x=0.3524715460317262*%i+0.7648844336005848,x=0.7648844336005848-0.3524715460317262*%i,x=1.08395410131771*%i-0.1812324444698754,x=-(1.08395410131771*%i)-0.1812324444698754,x=-1.167303978261418]

可以看到這個多項式方程式只有 1 個實數解,另外 4 個是虛數解。

若要使用 find_root,先畫出這個函數的圖形,可以看到在 -1 到 -1.5 之間有一個實數解。

wxplot2d([x^5 - x + 1], [x,-2,2])$

fig3_1

find_root(x^5 - x + 1 = 0, x, -1.5, -1);
(%o8)   -1.167303978261418

要使用牛頓法 mnewton 求數值解,初次使用必需先 load(mnewton) 這個套件。

load(mnewton);
mnewton(x^5 - x + 1 =0, x, -2);
(%o10)  [[x=-1.167303978261418]]

3.4 二元一次聯立方程

解聯立方程的語法:

solve([方程1, 方程2], [未知數1, 未知數2]);

▶ 範例

解:

\[ \begin{cases} 2x + y = 7 \\ x - y = 1 \end{cases} \]

solve([2*x + y = 7, x - y = 1], [x, y]);

結果為:

(%o15)  [[x=8/3,y=5/3]]

也可以用牛頓法求聯立方程式的數值解:

mnewton([2*x + y = 7, x - y = 1], [x, y], [2,1]);
(%o16)  [[x=2.666666666666666,y=1.666666666666666]]

3.5 文字題的建模範例

▶ 題目範例

某班男生 20 人,女生 15 人。若每位男生繳 50 元、女生繳 30 元,總金額為:

\[ 20 \cdot 50 + 15 \cdot 30 \]

但如果有變數(例如人數未知),可用 CAS 建模。

▶ 範例:建模並求解

「班上共有 36 人,男生比女生多 8 人,分別有多少男生與女生?」

設:

方程組:

\[ \begin{cases} x + y = 36 \\ x - y = 8 \end{cases} \]

解:

solve([x + y = 36, x - y = 8], [x, y]);

3.6 練習題

  1. 解下列方程式:
  2. 求判別式並判斷下列方程的根的型態:
    \[ 2x^2 - 4x + 2 = 0 \]

  3. 使用 allroots
    \[ x^4 - 3x + 1 = 0 \]

  4. 解聯立方程: \[ \begin{cases} 3x + 2y = 12 \\ x - 4y = -6 \end{cases} \]


3.7 本章小結

本章你學會:

下一章將介紹不等式與絕對值方程,讓你利用 CAS 處理更多高中常見的問題。


第 4 章 不等式與絕對值

本章介紹如何使用 wxMaxima 處理一元不等式、不等式組、絕對值不等式與區間表示法。
不等式是高中數學常見題型,而 CAS 尤其擅長在複雜的不等式推導中協助檢查與驗證。


4.1 一元一次不等式

一元一次不等式的形式為:

\[ ax + b > 0,\quad ax + b < 0 \]

單變數的多項式和有理不等式,可以使用 solve_rat_ineq 來解,初次使用需先載入:

load(solve_rat_ineq);

▶ 範例:解不等式

\[ 3x - 5 > 7 \]

solve_rat_ineq(3*x - 5 > 7, x);

結果:

[[x>4]]

4.2 一元二次不等式

高中常見型態:

\[ ax^2 + bx + c > 0 \]

解法通常需先找根,再判斷圖形開口方向。
CAS 可直接求解:

▶ 範例

解:

\[ x^2 - 5x + 6 < 0 \]

solve_rat_ineq(x^2 - 5*x + 6 < 0);

結果:

[[x>2,x<3]]

4.3 有理不等式

有理不等式,即分式形式的不等式。

▶ 範例

\[ {{2\,x-1}\over{x+4}} \le {3} \]

solve_rat_ineq((2*x - 1)/(x + 4) <= 3);

結果:

[[x<=-13],[x>-4]]

▶ 範例

解:

\[ {{1}\over{x+3}}+{{x+2}\over{x-1}} > 0 \]

solve_rat_ineq((x+2)/(x-1) + 1/(x+3) > 0);

結果:

[[x<-5],[x>-3,x<-1],[x>1]]

4.4 不等式組

單變數或多變數的線性不等式組,可以用 fourier_elim 這個指令來解。初次使用需載入套件:

load(fourier_elim);

▶ 範例

解:

\[ \begin{cases} x + 1 > 0 \\ 2x - 5 < 3 \end{cases} \]

fourier_elim([x + 1 > 0, 2*x - 5 < 3], [x]);

結果:

[-1<x,x<4]

▶ 範例

fourier_elim 也可以解 2 個變數的線性不等式組:

\[ \begin{cases} x + y > 0 \\ 2x - y < 3 \end{cases} \]

fourier_elim([x + y > 0, 2*x - y < 3], [x, y]);

結果:

[-y<x,x<y/2+3/2,-1<y]

從圖形上來看,由於這兩條直線的交點是 (1, -1),滿足不等式組的區域就會是這 2 條線圍成的上方區域。

wxplot2d([-x, 2*x -3], [x,-5,5])$

fig4_1

▶ 範例

這裡考慮另一個例子,把上面的例子改成“大於等於”。

\[ \begin{cases} x + y \ge 0 \\ 2x - y < 3 \end{cases} \]

fourier_elim([x + y >= 0, 2*x - y < 3], [x, y]);

結果就會包含一部份直線本身,和 2 條線圍成的上方區域。

輸出:

[x=-y,-1<y] or [-y<x,x<y/2+3/2,-1<y]

也就是:

\[ \left[ x=-y , -1<y \right] \lor \left[ -y<x , x<{{y}\over{2}}+{{3}\over{2}} , -1<y \right] \]


4.5 絕對值不等式:|x| < a

絕對值不等式是高中常見題型,CAS 可直接求解。

▶ 型態一:\(|x| < a\)

\[ |x| < 3 \]

在 wxMaxima:

fourier_elim([abs(x) < 3], [x]);

結果:

[-3<x,x<3]

▶ 型態二:\(|x - a| > b\)

例:

\[ |x - 2| > 5 \]

fourier_elim([abs(x - 2) >  5], [x]);

得到:

[x<-3] or [7<x]

4.6 以圖形輔助理解不等式

wxMaxima 能用 wxplot2d 繪製函數圖形,以視覺方式理解不等式的解集。

▶ 範例:判斷 \(x^2 - 4 < 0\)

  1. 先繪圖:
wxplot2d(x^2 - 4, [x, -5, 5]);

fig_4_2

  1. 觀察圖形在 x 軸下方的區域:
    開口向上的拋物線在 -2 與 2 之間小於 0。

解:

\[ -2 < x < 2 \]

load(solve_rat_ineq);
solve_rat_ineq(x^2 - 4 < 0);

結果:

[[x>-2,x<2]]

4.8 練習題

請使用 wxMaxima 解下列不等式:

  1. \(5 - 2x < 11\)
  2. \(x^2 - 9 \ge 0\)
  3. \(|x + 1| \le 4\)
  4. 解下列不等式組:

    \[ \begin{cases} 2x - 1 > 0 \\ x + 5 < 10 \end{cases} \]

  5. 先畫圖,再解:

    \[ x^2 + x - 6 < 0 \]


4.8 本章小結

本章你學會:

下一章將開始數列、級數與遞迴的世界,並學習如何用 CAS 生成數列與求和。

第 5 章 數列與遞迴關係

本章介紹如何使用 wxMaxima 處理高中數學中的數列、等差級數、等比級數、遞迴數列與求和運算。
CAS 在數列主題中特別好用,因為它能快速計算大量項目、檢查規律,並協助學生建立數列直觀。


5.1 定義數列與取項:makelist

wxMaxima 中沒有專門的「數列物件」,但可以使用 list(列表) 表示有限數列。

生成前 n 項可用:

makelist(表達式, 變數, 起始, 終止);

▶ 範例:生成數列的前 10 項

定義數列
\[ a_n = n^2 \]

makelist(n^2, n, 1, 10);

輸出:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

5.2 等差數列與等差級數

等差數列定義為:

\[ a_n = a_1 + (n-1)d \]

▶ 生成範例

a1: 3;
d: 2;
makelist(a1 + (n-1)*d, n, 1, 10);

結果:

3
2
[3,5,7,9,11,13,15,17,19,21]

▶ 等差級數求和

等差級數公式:

\[ S_n = \frac{n(a_1 + a_n)}{2} \]

CAS 可直接使用 sum

sum(3 + (n-1)*2, n, 1, 10);

結果:

120

5.3 等比數列與等比級數

等比數列:

\[ a_n = a_1 r^{n-1} \]

▶ 生成前數項

a1: 2;
r: 3;
makelist(a1*r^(n-1), n, 1, 8);

結果:

2
3
[2,6,18,54,162,486,1458,4374]

▶ 等比級數求和

等比級數公式:

\[ S_n = a_1 \frac{r^n - 1}{r - 1} \]

CAS 也能自動求和:

sum(2*3^(n-1), n, 1, 8);

結果:

6560

5.4 遞迴數列:定義與生成

數列也可用遞迴定義:

\[ a_1 = 1,\quad a_{n+1} = 2a_n + 1 \]

Maxima 沒有遞迴數列內建函數,但我們可以使用程式語法生成遞迴:

▶ 使用 for 生成遞迴數列

a[1] : 1$
for n:1 thru 10 do a[n+1] : 2*a[n] + 1$
makelist(a[n], n, 1, 11);

在 wxMaxima 指令行尾若是用 $,代表不要顯示這行指令的結果。

結果:

[1,3,7,15,31,63,127,255,511,1023,2047]

5.5 使用 CAS 觀察數列行為:極限與趨勢

對數列
\[ a_n = \frac{n}{n+1} \] 求 n 趨近無限大時的極限:

limit(n/(n+1), n, infinity);

結果:

1

▶ 數值觀察

makelist(n/(n+1), n, 1, 10);

可從結果看到其逐漸趨近 1。

[1/2,2/3,3/4,4/5,5/6,6/7,7/8,8/9,9/10,10/11]

5.6 求和:sum 指令

CAS 的 sum 可以處理:

▶ 多項式求和

求:

\[ \sum_{n=1}^{20} n^2 \]

sum(n^2, n, 1, 20);

結果:

2870

5.7 無窮數列與無窮級數

求無窮幾何級數:

\[ \sum_{n=0}^{\infty} ar^n \]

條件:公比 \(|r| < 1\)

在 wxMaxima:

assume(abs(r) < 1)$
sum(a*r^n, n, 0, inf), simpsum=true;

上面加上 simpsum=true 是為了要簡化輸出,結果:

a/(1-r)

即得到,當公比的絕對值小於 1 時,無窮等比級數的和。


5.8 練習題

請使用 wxMaxima 完成:

  1. 生成數列 \(a_n = 2n + 1\) 的前 15 項。
  2. 求等差數列(首項 5、公差 3)前 20 項和。
  3. 求等比數列(首項 4、公比 2)第 10 項。
  4. 使用遞迴式,生成數列的前 10 項。 \[ a_1 = 2,\quad a_{n+1} = 3a_n - 1 \]

  5. 求和:
    \[ \sum_{n=1}^{50} (3n - 1) \]


5.9 本章小結

你已經學會:

下一章將進入函數與圖形的世界,學習如何用 wxMaxima 進行繪圖與函數分析。

第 6 章 函數基本觀念與圖形

本章將介紹如何在 wxMaxima 中定義函數、計算函數值、繪製圖形,並探索函數的重要性質,例如定義域、值域、奇偶性與對稱性。本章奠定後續所有函數章節(平移、反函數、複合函數、微分、積分)的基礎。


6.1 在 wxMaxima 中定義函數

定義函數的語法為:

f(x) := 表達式;

▶ 範例:定義二次函數

f(x) := x^2 - 3*x + 2;

▶ 計算函數值

f(1);
f(2.5);

即得到函數的值:

0
0.75

6.2 繪製函數圖形:wxplot2d

繪圖語法:

wxplot2d(函數, [x, 最小值, 最大值]);

▶ 範例:繪製二次函數

wxplot2d(x^2 - 3*x + 2, [x, -5, 5])$

fig6_1

反應在視窗中的即是拋物線圖形。


6.3 多函數比較:疊圖

可以一次繪製多個函數,來比較圖形。

▶ 範例:一次與二次函數比較

f(x) := x^2;
g(x):= x + 1;
wxplot2d([f(x), g(x)], [x,-5,5], [y,-2,2])$

fig6_2

上面的指令,也可以用視窗選單的 [Plot] -> [Plot 2d] 來做。

若是在選單中的 [Options]選擇 set size ratio 1; set zeroaxis;,並且把 x, y 的區間設成相同,就可以畫出 x 軸和 y 軸以 1 : 1 顯示的圖形。

wxplot2d([f(x), g(x)], [x,-5,5], [y,-5,5],
     [gnuplot_postamble, "set size ratio 1; set zeroaxis;"])$

fig6_3


6.4 定義域與值域(用圖形理解)

wxMaxima 不會自動給出值域,但可透過圖形判讀。

例如:

\[ f(x) = \sqrt{x - 1} \]

▶ 範例:指定繪圖範圍

wxplot2d(sqrt(x - 1), [x, 1, 10]);

fig6_4

由圖可看出:


6.5 奇函數、偶函數與對稱性

奇函數(odd function):

\[ f(-x) = -f(x) \]

偶函數(even function):

\[ f(-x) = f(x) \]

可透過 CAS 做代換檢查:

▶ 檢查奇偶性(自動化)

f(x) := x^3 - x;
ratsimp(f(-x) + f(x));   /* 若為 0 → 奇函數 */
ratsimp(f(-x) - f(x));   /* 若為 0 → 偶函數 */

由結果可知此函數為奇函數:

f(x):=x^3-x
0
2*x-2*x^3

▶ 圖形視覺化

wxplot2d(x^3 - x, [x, -3, 3]);

fig6_5

奇函數會顯示原點對稱。


6.6 分段函數(piecewise function)

Maxima 可用 if 定義分段函數。

▶ 範例

\[ f(x) = \begin{cases} -x & \text{if } x < 0 \\ x & \text{if } x \geq 0 \end{cases} \]

f(x) := if x < 0 then -x else x;

圖形:

wxplot2d([f(x)], [x,-5,5])$

fig6_6

▶ 範例

\[ g(x) = \begin{cases} 0 & \text{if } x < 0 \\ x & \text{if } 0 \leq x < 2 \\ 2 & \text{if } x \geq 2 \end{cases} \]

g(x) := if x < 0 then 0 
        elseif x < 2 then x 
        else 2;

圖形:

wxplot2d([g(x)], [x,-5,5], [y,-3,3])$

fig6_7


6.7 化簡式子

例:判斷函數

\[ f(x) = \frac{x^2 - 4}{x - 2} \]

是否可化成簡單形式。

ratsimp 是常用指令,可將代數式化成「有理式」的最簡形式(rational simplification)。

ratsimp((x^2 - 4)/(x - 2));

結果:

x + 2

提醒:原式在 \(x = 2\) 不存在。

▶ 三角函數的化簡

trigsimp 可以化解三角函數,如:

trigsimp(sin(x)^2 + cos(x)^2);

得到:

1
trigsimp(2*cos(x)^2 + sin(x)^2);

化簡後:

cos(x)^2+1

▶ 對數的式子整理

使用 logcontract 的例子

例:

logcontract(2 *  log(x) + log (y));

得到:

log(x^2*y)

另一例:

logcontract(2 * a * n * log(x));

得到:

a*log(x^(2*n))

logexpand 展開式子的例子:

logexpand: all;
log(a * b^2);

結果:

2*log(b)+log(a)

6.8 練習題

請使用 wxMaxima 完成以下練習:

  1. 定義 \(f(x) = x^2 + 2x + 1\),計算:
  2. 繪製下列函數:
  3. 判斷下列函數是奇函數、偶函數或皆非:
  4. 定義分段函數,並繪圖: \[ f(x) = \begin{cases} x^2, & x \le 0 \\ x, & x > 0 \end{cases} \]

  5. 利用 ratsimp 檢查: \[ \frac{x^3 - x}{x} = x^2 - 1 \]


6.9 本章小結

本章你學會:

下一章將介紹函數平移、伸縮、翻轉等變換,幫助學生全面理解函數圖形的變化。

第 7 章 函數的平移、伸縮與變化

本章介紹如何利用 wxMaxima 觀察與理解函數的各種變換,包括水平與垂直平移、伸縮、反射與疊圖比較。
這些內容是高中數學中函數圖形的重要核心能力,亦是學生視覺化理解函數的最佳機會。


7.1 函數的垂直平移:\(f(x) + k\)

垂直平移代表整個圖形向上或向下移動 k 單位。

▶ 範例:向上平移 3

f(x) := x^2;
wxplot2d([f(x), f(x) + 3], [x, -5, 5]);

fig7_1

圖形會呈現兩個拋物線,一個在上方,一個在下方。


7.2 函數的水平平移:\(f(x - h)\)

水平平移是將圖形向左或向右移動 h 單位。

▶ 範例:\(f(x-2)\)代表向右平移 2

f(x) := x^2;
wxplot2d([f(x), f(x - 2)], [x, -2, 6]);

fig7_2

▶ 範例:\(f(x+3)\)代表向左平移 3

f(x) := x^2;
wxplot2d([f(x), f(x + 3)], [x, -10, 10]);

fig7_3


7.3 函數的垂直伸縮:\(a·f(x)\)

▶ 範例:垂直伸縮

f(x) := x^2;
wxplot2d([f(x), 2*f(x), 0.5*f(x)], [x, -5, 5]);

fig7_4


7.4 函數的水平伸縮:\(f(bx)\)

▶ 範例:水平伸縮

f(x) := x^2;
wxplot2d([f(x), f(2*x), f(0.5*x)], [x, -5, 5]);

fig7_5


7.5 反射(對稱):\(-f(x)\)\(f(-x)\)

▶ 上下反射

f(x) := x^3 + 3*x^2 - x + 1;
wxplot2d([f(x), -f(x)], [x, -4, 4]);

fig7_6

▶ 左右反射

f(x) := x^3 + 3*x^2 - x + 1;
wxplot2d([f(x), f(-x)], [x, -4, 4]);

fig7_7


7.6 複合變換的觀察(綜合應用)

變換可組合使用,例如:

\[ y = -2f(x - 1) + 3 \]

代表:

  1. 向右移 1
  2. 垂直伸縮 2 倍
  3. 上下反射
  4. 向上移 3

▶ CAS 示範

f(x) := x^2;
g(x) := -2*f(x - 1) + 3;
wxplot2d([f(x), g(x)], [x, -10, 10], [y, -250, 250]);

fig7_8


7.7 練習題

  1. \(f(x) = x^2\),繪製:
  2. 觀察一次函數變化
    \(g(x) = 2x - 1\),繪製:
  3. 對下列函數作平移:
  4. 使用 CAS 比較下列函數的差異:
  5. 綜合練習:
    \(f(x) = |x|\),繪製下列函數並比較:

7.8 本章小結

本章你已學會:

下一章將介紹反函數與複合函數,深入探討函數之間的關係與變換。

第 8 章 反函數與複合函數

本章介紹反函數、單調性判斷、水平線測試、反函數求法,以及複合函數的概念與在 wxMaxima 中的實作。
高中數學強調「函數之間的關係」與「操作與圖形的連結」,本章正好是銜接的核心。


8.1 反函數的概念

如果一個函數 \(f\)\(x\) 對應到 \(y\)

\[ y = f(x) \]

那反函數 \(f^{-1}\) 則反過來:

\[ x = f^{-1}(y) \]

要有反函數,函數必須是可逆的,也就是通過「水平線測試」:


8.2 使用 CAS 求反函數

反函數的求法就是「把 x 與 y 交換,再解 x」。

在 wxMaxima:

solve(y = f(x), x);

▶ 範例:求二次函數的反函數(限制定義域)

\[ f(x) = x^2,\quad x \ge 0 \]

solve(y = x^2, x);

得到:

[x=-sqrt(y),x=sqrt(y)]

但是因為有限制 \(x \ge 0\),所以只取:

x = sqrt(y)

若要寫成反函數:

\[ f^{-1}(x) = \sqrt{x} \]

(反函數存在的理由是限制在 \(x \ge 0\) 的區間。)


8.3 線性函數的反函數

若:

\[ f(x) = ax + b,\quad a \neq 0 \]

反函數為:

\[ f^{-1}(x) = \frac{x - b}{a} \]

CAS 驗算:

solve(y = a*x + b, x);

得到:

[x=(y-b)/a]

8.4 常見反函數的例子:指數與對數函數

指數與對數天然互為反函數:

\[ f(x) = e^x,\quad f^{-1}(x) = \ln(x) \]

驗算:

solve(y = exp(x), x);
x = log(y)

8.5 利用圖形理解反函數:\(y=x\) 對稱

反函數圖形會以直線 \(y = x\) 對稱。

▶ 範例:繪製 \(f\)\(f^{-1}\)

wxplot2d([exp(x), log(x), x], [x,-10,10], [y,-10,10],
     [gnuplot_postamble, "set size ratio 1; set zeroaxis;"])$

fig8_1

你會看到兩條對稱的曲線。


8.6 複合函數 \(f \circ g\)

複合函數定義:

\[ (f \circ g)(x) = f(g(x)) \]

在 wxMaxima:

h(x) := f(g(x));

▶ 範例

\[ f(x) = x^2,\quad g(x) = x + 1 \]

f(x) := x^2;
g(x) := x + 1;
h(x) := f(g(x));
h(x);

輸出:

(x + 1)^2

8.7 複合函數的圖形觀察

疊圖能清楚看出複合函數的效果。

wxplot2d([f(x), g(x), h(x)], [x,-5,5], [y,-5,5],
     [gnuplot_postamble, "set size ratio 1; set zeroaxis;"])$

fig8_2

能觀察到:


8.8 反函數與複合函數的關係

\(f\) 可逆:

\[ f(f^{-1}(x)) = x \] \[ f^{-1}(f(x)) = x \]

CAS 驗證:

自訂 f(x)finv(x):

f(x)  := x^2;
finv(x) := sqrt(x); 
    ratsimp(f(finv(x)));
    ratsimp(finv(f(x)));

得到:

f(x):=x^2
finv(x):=sqrt(x)
x
x

8.9 練習題

  1. 求下列函數的反函數:
  2. 判斷下列函數是否有反函數(用水平線測試 + 圖形):
  3. \(f(x) = \sqrt{x}\),求:
  4. 使用 CAS 疊圖比較:
  5. 綜合應用:
    \(f(x) = 2x + 1\),求
    \[ (f^{-1} \circ f)(x),\quad (f \circ f^{-1})(x) \]

8.10 本章小結

本章你學會:

下一章將正式進入微積分的世界:極限與導數。

第 9 章 極限直觀與符號操作

本章將介紹極限的概念、數值觀察、圖形判斷,以及 wxMaxima 的 limit 指令。
高中數學的微積分強調「直觀理解」而非純符號推導,因此本章以視覺與數值為主,搭配 CAS 檢查極限。


9.1 極限的基本概念

極限表示「當 x 趨近某個值時,函數值的趨近行為」。

例:

\[ \lim_{x\rightarrow 2}{x^2-1} \]

意義是「看 x 靠近 2 時,\(x^2 - 1\) 靠近什麼數」。


9.2 用 CAS 做數值觀察(極限前的直覺)

極限的直覺可用數列表觀察。

▶ 範例:

觀察 \[\lim_{x\rightarrow 2} (x^2 - 1)\]

makelist(x^2 - 1, x, 1.5, 2.5, 0.1);
[1.25,1.56,1.89,2.240000000000001,2.610000000000001,3.000000000000001,3.410000000000002,3.840000000000002,4.290000000000004,4.760000000000004,5.250000000000004]

此輸出顯示 x 靠近 2 時,值靠近 3。


9.3 使用 \(\texttt{limit}\) 求極限

wxMaxima 中:

limit(表達式, 變數, 逼近值);

▶ 範例

limit(x^2 - 1, x, 2);

結果:

3

9.4 單側極限:左極限與右極限

語法:

limit(f(x), x, a, minus);   /* x → a^- */
limit(f(x), x, a, plus);    /* x → a^+ */

▶ 範例:

\[ \lim_{x\rightarrow 0^-} \frac{|x|}{x} \]

limit(abs(x)/x, x, 0, minus);
limit(abs(x)/x, x, 0, plus);

結果顯示:


9.5 基本極限型態

高中數學重點型態如下:

\[ \lim_{x\rightarrow 0} \frac{\sin x}{x} = 1 \]

指令:

limit(sin(x)/x, x, 0);

9.6 不定型極限:0/0 的處理

CAS 能自動化簡代數式再取極限。

▶ 範例:

\[ \lim_{x\rightarrow 2} \frac{x^2 - 4}{x - 2} \]

limit((x^2 - 4)/(x - 2), x, 2);

結果:

4

同時也可先簡化:

ratsimp((x^2 - 4)/(x - 2));

得到:

x + 2

9.7 無窮極限與漸近線

▶ 無窮極限

例:

\[ \lim_{x\rightarrow \infty} \frac{3x^2 + 1}{x^2 - 2} \]

limit((3*x^2 + 1)/(x^2 - 2), x, inf);

結果:

3

▶ 漸近線

若:

\[ \lim_{x\rightarrow \infty} f(x) = L \]

\(y = L\) 為水平漸近線。

CAS 可快速判斷此性質。


9.8 透過圖形理解極限

繪圖可以直觀判斷極限。

▶ 範例

wxplot2d((3*x^2 + 1)/(x^2 + 2), [x, -50, 50], [y,0,4]);

fig9_1.png

圖形顯示:當 \(x\) 向正方向或負方向越來越大時, \(f(x)\) 趨近於漸近線 \(y = 3\)


9.9 練習題

  1. 求下列極限:
  2. 判斷極限是否存在:
  3. ratsimp 化簡後再取極限:
  4. 繪製下列函數並觀察極限:

9.10 本章小結

本章你學會:

下一章將介紹正式的微分操作:導數、微分法則與切線問題。

第 10 章 導數與微分

本章將介紹導數的概念、微分法則、在 wxMaxima 中使用 diff 指令求導,以及應用到切線、速度、極值與遞增遞減分析。
這是高中數學微積分單元的核心章節,CAS 能協助學生快速檢查與視覺化理解。


10.1 導數的直觀意義

導數描述「瞬間變化率」或「切線斜率」,也就是在這個點做微分

例如:在物理上,瞬間速度就是位移對時間的微分。瞬間加速度就是速度對時間的微分。

▶ 直觀例子

若:

\[ f(x) = x^2 \]

\(x=1\) 附近的變化率,可用割線斜率近似:

\[ m = \frac{f(1+h) - f(1)}{h} \]

\(h\) 越來越小,即得到導數。

對一個函數 \(f(x)\),若在某點 \(x=a\) 附近定義良好,導數 \(f'(a)\) 定義為:

\[ f'(a)=\lim_{h\to 0}\frac{f(a+h)-f(a)}{h} \]

若此極限存在,則稱函數在 \(x=a\) 可微分(differentiable),而極限的值就是該點的導數。

導數可以表示為:

\[ f'(x) = {{d \, f(x)} \over {d x}} \]


10.2 使用 diff 求導數

基本語法:

diff(函數, 變數);

▶ 範例

diff(x^3 - 3*x + 2, x);

結果:

3*x^2 - 3

10.3 多次微分(高階導數)

若函數 \(f(x)\) 在某點可微,且其導數 \(f'(x)\) 也可微,則二階導數定義為:

\[ f''(x)=\frac{d}{dx} \left( f'(x) \right) = \frac{d^2 f(x)}{dx^2} \]

也就是說: 二階導數 = 一階導數的變化率。

語法:

diff(f(x), x, 2);   /* 二階導數 */
diff(f(x), x, 3);   /* 三階導數 */

▶ 範例:二階導數

就是對函數連續做 2 次微分。

diff(x^4, x, 1);   /* 一階導數 */
diff(x^4, x, 2);   /* 二階導數 */

結果:

4*x^3
12*x^2

10.4 微分法則

wxMaxima 會自動處理:

▶ 範例:鏈鎖法則

diff(sin(3*x^2 + 1), x);

結果:

6*x*cos(3*x^2+1)

10.5 定義導函數並求值

方法一:define()

在 wxMaxima 裡,可以用 define(f(x), 表達式)定義函數。define() 會先計算右邊的表達式,然後再建立函數。

f(x) := x^3 - 3*x^2 + 1;
define(f1(x), diff(f(x), x));   /* 定義導函數 */

得到:

f(x):=x^3-3*x^2+1
f1(x):=3*x^2-6*x

計算 \(x=2\) 時導函數的值:

f1(2);
0

方法二:ev()

另一種求值的表示方法,可以用 ev()

f(x) := x^3 - 3*x^2 + 1;
f1 : diff(f(x),x);    /* 代表把計算出來的值,指派給 f1 */ 
ev(f1, x = 2);

結果:

f(x):=x^3-3*x^2+1
3*x^2-6*x
0

常犯的語法錯誤

f(x) := x^3 - 3*x^2 + 1;
f1(x) := diff(f(x), x);

此時,若是輸入

f1(2);

會得到錯誤訊息,因為 wxMaxima 把它視為: diff(f(2), 2) ← invalid (2 is not a variable)

方法三:``(...)

雙引號 ``(...) 會強制 Maxima 立即對該表達式求值,而不是等到函數被定義之後。

f(x) := x^3 - 3*x^2 + 1;
f1(x) := ''(diff(f(x), x));
f1(2);

就可以得到我們要計算的導函數的值:

f(x):=x^3-3*x^2+1
f1(x):=3*x^2-6*x
0

10.6 切線方程式

若函數 \(f(x)\)\(x=a\) 可微分,其切線斜率:

\[ m = f'(a) \]

切線方程式:

\[ y = f(a) + f'(a)(x - a) \]

▶ 求在 \(x = a\) 的切線方程式

f(x) := x^2 - 3*x + 2;
f1 : diff(f(x), x);
a: 1;
b: f(a);    /* x = a 這點的 f(x) 值 */
m: ev(f1, x = a);    /* x = a 這點的導數,即切線斜率 */
tangent(x) := b + m*(x - a);    /* 自訂切線函數  */
tangent(x);

結果:

(%o1) f(x):=x^2-3*x+2
(f1)    2*x-3
(a) 1
(b) 0
(m) -1
(%o6)   tangent(x):=b+m*(x-a)
(%o7)   1-x

10.7 遞增遞減與極值

▶ 找極值:解 f’(x)=0

f(x) := x^3 - 3*x^2 + 2;
solve(diff(f(x), x) = 0, x);

結果:

f(x):=x^3-3*x^2+2
[x=0,x=2]

\(f(x)\) 的圖形,可以看出在 \(x = 0\) 有局部極大值,在 \(x = 2\) 有局部極小值。

wxplot2d([f(x)], [x,-5,5])$

fig10_1


10.8 二階導數與曲率:凹向上/凹向下

▶ 範例

diff(x^3 - 3*x, x, 2);

二階導數為

6x

把原式和二階導數畫在一起。可以看到當二階導數為正值時,原函數凹向上;當二階導數為正值時,原函數凹向下。

wxplot2d([x^3 - 3*x, 6*x], [x,-5,5])$

fig10_2


10.9 繪圖觀察導數與原函數的關係

範例:

f(x) := x^3 - 3*x;
f1(x) := diff(f(x), x);
wxplot2d([f(x), f1(x)], [x, -4, 4]);

fig10_3

觀察:


10.10 應用題:速度與加速度

若自由落體運動位置對時間的關係為:

\[ s(t) = {{g\,t^2}\over{2}} \]

其中 g 為重力加速度 \(9.8 \, m/s^2\) 則:

CAS:

g : 9.8;
s(t) := 1/2 * 9.8 * t^2;
v(t) := diff(s(t), t);
a(t) := diff(s(t), t, 2);

即:

\[ s(t) = {{g\,t^2}\over{2}} \]

\[ v(t) = g\,t \]

\[ a(t) = g \]

wxplot2d([s(t), v(t), a(t)], [t,0,5])$

fig10_4

可以觀察到,等加速度運動,位移對時間是一元二次函數,速度以直線遞增,加速度則為一固定值。


10.11 練習題

  1. 求下列函數的導數:
  2. 求切線方程式:
    \[ y = x^2 + 1,\quad x = 3 \]

  3. 找出下列函數的極值點:
    \[ f(x) = x^3 - 6x^2 + 9x + 2 \]

  4. 判斷下列函數的凹向上/凹向下區間:
    \[ f(x) = x^4 - x^2 \]

  5. 速度與加速度:求:\(v(t), a(t)\) \[ s(t) = 2t^3 - 4t \]


10.12 本章小結

本章你已學會:

下一章將介紹積分:不定積分、定積分與面積計算。

第 11 章 不定積分與定積分

本章將介紹不定積分、定積分、面積計算,以及 wxMaxima 中 integrate 指令與數值積分方法。
高中數學中強調直觀與應用,積分可以想成是微分的相反,就是已經知道導函數,求回原函數。但有些函數的積分不一定有解析式。 本章也包含圖形理解與 CAS 協助檢查手算結果。


11.1 不定積分的概念

不定積分表示「求原函數」,記為:

\[ \int f(x)\,dx = F(x) + C \]

其中 \(F'(x) = f(x)\)


11.2 使用 integrate 求不定積分

基本語法:

integrate(函數, 變數);

▶ 範例

integrate(2*x, x);

結果:

x^2

11.3 常見基本積分公式

wxMaxima 能自動處理:

▶ 多項式範例

integrate(x^3 - 2*x + 1, x);

得到:

x^4/4-x^2+x

11.4 代換積分(u-substitution)

CAS 不需要手動代換,但能用來檢查手算答案是否正確

▶ 範例:手算常見例子

\[ \int (2x+3)(x^2+3x+1)^5 dx \]

CAS:

integrate((2*x+3)*(x^2+3*x+1)^5, x);

得到:

\[ {{\left(x^2+3\,x+1\right)^6}\over{6}} \]

結果可與手算代換 \(u = x^2 + 3x + 1\) 比對。


11.5 分部積分(進階)

語法與一般積分相同。

▶ 範例

\[ \int x e^x dx \]

integrate(x*exp(x), x);

得到:

\[ \left(x-1\right)\,e^{x} \]


11.6 定積分:曲線下的面積

定積分表示從 a 到 b 的累積量:

\[ \int_a^b f(x)\,dx \]

wxMaxima:

integrate(f(x), x, a, b);

▶ 範例

\[ \int_0^2 (x^2 - 1)\,dx \]

integrate(x^2 + 1, x, 0, 2);

得到:

14/3

積分的結果,可視為 x 從 0 到 2 之間,函數曲線下的面積等於 14/3。

wxplot2d([x^2 + 1], [x,0,2], [y,0,6],
     [gnuplot_postamble, "set size ratio 1; set zeroaxis;"])$

fig11_1


11.7 面積的圖形理解

integrate(x^2 - 3*x + 1, x, 0, 3);

得到:

-(3/2)

wxplot2d 可以視覺化:

wxplot2d(x^2 - 3*x + 1, [x, 0, 3]);

fig11_2

積分的結果是 x 軸上方的積分(正值),加上 x 軸下方的積分(負值)。

可以觀察:


11.8 數值積分:quad_qags

當積分無法得到解析式,可使用數值積分。

quad_qags(exp(-x^2), x, 0, 1);

結果:

[0.7468241328124271,8.291413475940727*10^-15,21,0]

各項數字的意義:

0.7468241328124271 → 近似的積分值

8.291413475940727*10^-15 → 誤差估計

21 → 被積分函數評估的次數

0 → 狀態碼(0 = 成功)


11.9 絕對值積分的處理

若:

\[ \int |x-1| dx \]

需分段:

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

integrate(abs(x-1), x, -5, 5);

得到:

26

圖形為左右兩個三角形的面積的和。

wxplot2d([abs(x-1)], [x,-5,5])$

fig11_3

wxMaxima 雖然能直接給答案,但學習時保持分段觀念更好。


11.10 學習時注意事項與 CAS 檢查

  1. 手算時忘記加常數 C
  2. 積分後未檢查導數是否能回到原函數
  3. 代換積分誤差可用 CAS 驗證
  4. 定積分負值與「面積」混淆

11.11 練習題

  1. 計算不定積分:
  2. 計算定積分:
  3. 對下列函數,用 CAS 檢查手算的代換過程是否正確:
  4. 曲線下方面積:
  5. 數值積分:

11.12 本章小結

你已學會:

下一章將介紹向量與幾何,進入空間觀念與圖形分析的世界。

第 12 章 向量與座標幾何

本章介紹高中數學中的向量與座標幾何核心概念:向量的表示、運算、內積、夾角、投影、與直線方程式。
wxMaxima 雖不是專為幾何設計,但能作為計算工具協助檢查代數推導。


12.1 向量的表示

平面向量可寫成:

\[ \vec{v} = \langle a, b \rangle \]

\[ \vec{w} = \langle c, d \rangle \]

wxMaxima 使用 list(列表)代表向量:

v : [a, b];
w : [c, d];

12.2 向量加法與數乘

▶ 加法

\[ \vec{v} + \vec{w} = \langle a+c,\ b+d \rangle \]

CAS:

v : [1, 3];
w : [2, -1];
v + w;

結果:

(v) [1,3]
(w) [2,-1]
(%o10)  [3,2]

▶ 數乘

\[ k\vec{v} = \langle ka,\ kb \rangle \]

2 * v;
[2,6]

12.3 向量的長度(模)

向量長度:

\[ |\vec{v}| = \sqrt{a^2 + b^2} \]

v : [a, b];
sqrt(v[1]^2 + v[2]^2);

12.4 內積(dot product)

向量內積公式:

\[ \vec{v}\cdot\vec{w} = a c + b d \]

wxMaxima 的內積是用英文的句點 . 代表乘號:

v : [1, 3];
w : [2, -1];
v.w;

得到:

(v) [1,3]
(w) [2,-1]
(%o40)  -1

向量的長度也可以把向量對自己內積,再開根號:

sqrt(v.v);

得到:

sqrt(5)

12.5 夾角公式

向量間夾角滿足:

\[ \cos \theta = \frac{\vec{v}\cdot\vec{w}}{|\vec{v}||\vec{w}|} \]

CAS:

v:[1,2];
w:[3,1];
(v.w) / (sqrt(v.v)*sqrt(w.w)), numer;

上面的 numer 這個參數,是要指定 wxMaxima 以小數表示結果:

(v) [1,2]
(w) [3,1]
(%o3)   0.7071067811865475

12.6 投影

向量 v 在 w 上的投影:

\[ \operatorname{proj}_w v = \frac{\vec{v}\cdot\vec{w}}{|\vec{w}|^2} \vec{w} \]

CAS:

v:[1,2]; 
w:[3,1];
(v.w) / (w.w) * w;

計算 v 在 w 上的投影,結果仍是一個向量:

(v) [1,2]
(w) [3,1]
(%o17)  [3/2,1/2]

12.7 座標幾何:兩點距離

兩點 A(x1,y1)、B(x2,y2) 的距離:

\[ AB = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2} \]

distance(x1,y1,x2,y2) := sqrt((x2-x1)^2 + (y2-y1)^2);
distance(1,2,4,6);

12.8 直線方程式:斜截式與兩點式

▶ 斜截式

\[ y = mx + b \]

▶ 兩點式

\[ y - y_1 = \frac{y_2-y_1}{x_2-x_1}(x - x_1) \]

CAS 可用 solve 找斜率:

m : (y2 - y1)/(x2 - x1);

12.9 直線交點

解聯立方程即可:

solve([y = 2*x + 1, y = -x + 5], [x,y]);

12.10 平行與垂直判斷

is() 來判斷條件的真或假。若為真,傳回 true。若為假,傳回 false

is( m1*m2 = -1 );

或直接代入數值計算。


12.11 練習題

  1. 計算向量加法與數乘:
  2. 求長度:
  3. 求夾角(用內積公式):
  4. 求兩點距離:
  5. 求直線交點:

12.12 本章小結

本章你已學會:

下一章將進入空間向量與立體幾何,延伸至 3D 的向量運算與空間關係。

第 13 章 空間向量與立體幾何

本章將向你介紹三維向量(3D 向量)、空間中的距離、向量運算、平面與直線的關係。
雖然高中數學對空間座標內容較為精簡,但向量觀念在物理與微積分中十分重要,透過 CAS 可以更有效檢查與運算。


13.1 三維向量的表示

空間向量可表示為:

\[ \vec{v} = \langle a, b, c \rangle \]

wxMaxima 一樣使用列表表示:

v : [a, b, c];
w : [x, y, z];

13.2 三維向量的加法與數乘

▶ 加法

\[ \langle a,b,c \rangle + \langle x,y,z \rangle = \langle a+x, b+y, c+z \rangle \]

v:[1,2,3];
w:[3,0,-1];
v + w;

▶ 數乘

3*v;

13.3 三維向量的長度

\[ |\vec{v}| = \sqrt{a^2 + b^2 + c^2} \]

CAS:

v:[a,b,c];
sqrt(v[1]^2 + v[2]^2 + v[3]^2);

或是

v:[a,b,c];
sqrt(v.v);

13.4 三維向量內積(dot product)

定義:

\[ \vec{v}\cdot\vec{w} = ax + by + cz \]

例:

u:[a,b,c];
w:[x,y,z];
u.w;

結果:

(u) [a,b,c]
(w) [x,y,z]
(%o38)  c*z+b*y+a*x

13.5 向量夾角

公式:

\[ \cos\theta = \frac{\vec{v}\cdot\vec{w}}{|\vec{v}|\,|\vec{w}|} \]

CAS:

v:[1,2,3];
w:[3,1,1];
v.w / (sqrt(v.v)*sqrt(w.w));

結果:

(v) [1,2,3]
(w) [3,1,1]
(%o50)  0.6446583712203042

13.6 三維向量外積(cross product)

外積結果是另一個向量,且與 v、w 垂直。

公式:

\[ \vec{v} \times \vec{w} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ a & b & c \\ x & y & z \end{vmatrix} \]

wxMaxima 計算外積,需先 load(vect),再以 v~w 代表外積。

load(vect);
v:[1,2,3];
w:[3,1,1];
v~w;
express(v~w);

結果:

(v) [1,2,3]
(w) [3,1,1]
(%o4)   [1,2,3]~[3,1,1]
(%o5)   [-1,8,-5]

13.7 空間中兩點距離

點 A(x1,y1,z1)、B(x2,y2,z2) 的距離:

\[ AB = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2 + (z_2-z_1)^2} \]

CAS:

distance3(x1,y1,z1,x2,y2,z2) := sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2);
distance3(1,2,3,4,6,8);

13.8 空間直線的向量式

若直線通過點 \(P_0(x_0,y_0,z_0)\),方向向量 \(\vec{d} = (a,b,c)\)
則直線參數式為:

\[ \ell:\ \begin{cases} x = x_0 + at \\ y = y_0 + bt \\ z = z_0 + ct \end{cases} \]

CAS 可用擴展符號表示:

x0:1; y0:2; z0:-3;
d:[-2,-1,3];
[x0 + d[1]*t, y0 + d[2]*t, z0 + d[3]*t];

結果:

(x0)    1
(y0)    2
(z0)    -3
(d) [-2,-1,3]
(%o24)  [1-2*t,2-t,3*t-3]

在3D 座標用參數式畫出這條直線,需先 load(draw)

load(draw)$
    
wxdraw3d(
    parametric(1 - 2*t, 2 - t, 3*t - 3, t, -10, 10),
    xlabel = "x",
    ylabel = "y",
    zlabel = "z")$

fig13_1


13.9 空間平面方程

若平面法向量為 \(\vec{n} = (A,B,C)\),平面方程為:

\[ Ax + By + Cz + D = 0 \]

若給平面上一點 P(x0,y0,z0):

\[ D = -(Ax_0 + By_0 + Cz_0) \]

CAS:

A:1; B:2; C:-1;
x0:2; y0:1; z0:0;
D : -(A*x0 + B*y0 + C*z0);
A*x + B*y + C*z + D;

結果:

(A) 1
(B) 2
(C) -1
(x0)    2
(y0)    1
(z0)    0
(D) -4
(%o8)   -z+2*y+x-4

圖形:

    wxplot3d(x+2*y-4, [x,-5,5], [y,-5,5],
     [gnuplot_pm3d,true])$

fig13_2


13.10 直線與平面的位置關係

  1. 直線方向向量與平面法向量垂直 → 直線平行平面
  2. 若把直線參數式代入平面後可解出 t → 有交點

CAS:

solve(A*(x0+a*t) + B*(y0+b*t) + C*(z0+c*t) + D = 0, t);


13.11 練習題

  1. 求下列三維向量的長度:
  2. 求內積:
  3. 求外積:
  4. 求兩點距離:
    A(1,2,3)、B(4,6,8)

  5. 判斷直線是否與平面相交 直線:\(x=1+2t,\ y=3-t,\ z=2+t\)
    平面:\(x - y + z - 4 = 0\)


13.12 本章小結

本章你已學會:

下一章將進入統計與資料分析,使用 CAS 處理排列組合、機率與統計量!

第 14 章 排列組合與機率

本章介紹高中數學中常見的排列、組合、基本機率概念與 wxMaxima 的計算方法。本章著重「計算與理解並重」,並提供 CAS 作為工具輔助學生檢查答案。


14.1 階乘(factorial)

階乘定義:

\[ n! = n (n-1) (n-2) \cdots 1 \]

wxMaxima 使用 !factorial(n)

5!;
factorial(6);

結果:

(%o4)   120
(%o5)   720

14.2 排列 P(n, k)

排列定義:

\[ P(n,k) = \frac{n!}{(n-k)!} \]

CAS:

n!/(n-k)!;

▶ 例子

10! / (10-3)!;

14.3 組合 C(n, k)

組合定義:

\[ C(n,k) = \frac{n!}{k!(n-k)!} \]

CAS:

binomial(n,k);

▶ 例子

binomial(10,3);

結果:

120

14.4 基本計數原理

  1. 加法原理
  2. 乘法原理

wxMaxima 不會自動判斷情境,但可輔助計算。

▶ 例子:3 種飲料 × 4 種尺寸

3 * 4;

14.5 順序排列與圓排列

圓排列:

\[ (n-1)! \]

CAS:

factorial(n-1);

14.6 機率的基本定義

若所有結果等可能:

\[ P(A) = \frac{\text{有利結果數}}{\text{所有結果數}} \]

CAS 可用來計算:

▶ 擲骰子例子

擲兩顆骰子,點數和為 7 的機率是多少?

方法一

為了清楚起見,以下列出每一步驟的輸出結果。

makelist(i+j, i, 1, 6);   /* 列出 i 從 1 到 6 和 j 搭配 */

s_nested: makelist(makelist(i+j, i, 1, 6), j, 1, 6);   /* 生成所有可能點數和的列表 */

s: flatten(s_nested);   /* 將二維列表展平為一維列表,包含 36 個元素 */

sublist(s, lambda([x], x=7));

favorable_outcomes: length(sublist(s, lambda([x], x=7)));    /* 計算點數和為 7 的情況數 */

/* 計算所有可能結果的次數 */
total_outcomes: length(s);    

/* 計算機率 (有利結果數 / 總結果數) */
probability: favorable_outcomes / total_outcomes;

其中 lambda([x], x = 7) 是判斷函數,若 x = 7 傳回 true; 其餘情況,傳回 false

結果:

(%o12)  [j+1,j+2,j+3,j+4,j+5,j+6]
(s_nested)  [[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9],[5,6,7,8,9,10],[6,7,8,9,10,11],[7,8,9,10,11,12]]
(s) [2,3,4,5,6,7,3,4,5,6,7,8,4,5,6,7,8,9,5,6,7,8,9,10,6,7,8,9,10,11,7,8,9,10,11,12]
(%o15)  [7,7,7,7,7,7]
(favorable_outcomes)    6
(total_outcomes)    36
(probability)   1/6

方法二

上面的步驟可以簡化為:

s : create_list(i + j, i, 1, 6, j, 1, 6);
prob : length(sublist(s, lambda([x], x = 7))) / length(s);

結果:

(s) [2,3,4,5,6,7,3,4,5,6,7,8,4,5,6,7,8,9,5,6,7,8,9,10,6,7,8,9,10,11,7,8,9,10,11,12]
(prob)  1/6

14.7 聯集、交集與獨立事件

\[ P(A \cup B) = P(A)+P(B)-P(A\cap B) \]

獨立事件:

\[ P(A\cap B)=P(A)P(B) \]

獨立事件的計算例子:

PA:1/3; PB:1/4;
PA*PB;

14.8 條件機率

\[ P(A|B) = \frac{P(A\cap B)}{P(B)} \]

例題: 把一顆骰子連續擲2次, 事件B: 已知第1次擲得偶數 事件A: 兩次點數的和是 5 請問條件機率 \(P(A|B)\)?

1. 事件定義

1. 求 \(P(B)\)

第 1 次必須是偶數(2,4,6 共 3 種),第 2 次可為 1–6 共 6 種:

\[ |B| = 3 \times 6 = 18,\quad P(B) = \frac{18}{36} = \frac{1}{2} \]


3. 求 \(P(A \cap B)\)

  1. 的所有可能結果是:

\[ (1,4),(2,3),(3,2),(4,1) \]

其中要同時滿足「第 1 次是偶數」,只留下:

\[ A \cap B = {(2,3),(4,1)} \]

所以:

\[ |A \cap B| = 2,\quad P(A \cap B) = \frac{2}{36} = \frac{1}{18} \]

4. 用條件機率公式

\[ P(A \mid B) = \frac{P(A \cap B)}{P(B)} = \frac{\frac{1}{18}}{\frac{1}{2}} = \frac{1}{18} \times 2 = \frac{2}{18} = \frac{1}{9} \]

用wxMaxima模擬

(%i49)  /* 所有樣本點 */
    S : create_list([i, j], i, 1, 6, j, 1, 6);
    
    /* 事件 B:第 1 次偶數 */
    B : sublist(S, lambda([x], evenp(x[1])));
    
    /* 事件 A∩B:第 1 次偶數且和為 5 */
    AB : sublist(S, lambda([x],
        evenp(x[1]) and x[1] + x[2] = 5));
    
    /* P(A|B) */
    P_A_given_B : length(AB) / length(B), ratsimp;

其中 evenp() 是 Maxima 的內建判斷函數,用來測試某個整數是否為「偶數 (even)」。

輸出結果:

(S) [[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[2,1],[2,2],[2,3],[2,4],[2,5],[2,6],[3,1],[3,2],[3,3],[3,4],[3,5],[3,6],[4,1],[4,2],[4,3],[4,4],[4,5],[4,6],[5,1],[5,2],[5,3],[5,4],[5,5],[5,6],[6,1],[6,2],[6,3],[6,4],[6,5],
[6,6]]
(B) [[2,1],[2,2],[2,3],[2,4],[2,5],[2,6],[4,1],[4,2],[4,3],[4,4],[4,5],[4,6],[6,1],[6,2],[6,3],[6,4],[6,5],[6,6]]
(AB)    [[2,3],[4,1]]
(P_A_given_B)   1/9

14.9 貝氏定理

貝氏定理 (Bayes’ Theorem) 描述了兩個條件機率之間的關係。

\[ P(A|B) = \frac{P(B|A) \times P(A)}{P(B)} \]

範例

求某醫學檢驗呈陽性時,病人得病的機率。

A: 病人得病 B: 檢驗呈陽性

某疾病的盛行率為:

\[ P(A)=0.01 \]

在病人得病情況下,檢驗呈陽性的機率: \[ P(B \mid A)=0.9 \]

在未得病的人,檢驗呈陽性的機率: \[ P(B \mid A^c)=0.05 \]

求檢驗呈陽性時,病人得病的機率。:

\[ P(A \mid B) = ? \]

(%i112) /* 先驗機率 P(A) */
    PA : 0.01;
    
    /* 在 A 下觀察到 B 的機率: P(B|A) */
    PBgivenA : 0.9;
    
    /* 在不是 A 時觀察到 B 的機率: P(B|A^c) */
    PBgivenAc : 0.05;
    
    /* 事件 A 的補集的機率 */
    PAc : 1 - PA;
    
    /* 總證據機率 P(B) = P(B|A)*P(A) + P(B|A^c)*P(A^c) */
    PB : PBgivenA*PA + PBgivenAc*PAc;
    
    /* 貝氏定理:P(A|B) */
    PAgivenB : (PBgivenA * PA) / PB;

結果:

(PA)    0.01
(PBgivenA)  0.9
(PBgivenAc) 0.05
(PAc)   0.99
(PB)    0.0585
(PAgivenB)  0.1538461538461538

\[ P(A \mid B) = 0.15 \]


14.10 二項式分布

二項式分布:

\[ P(X=k)=C(n,k)p^k(1-p)^{n-k} \]

例題:

假設:

求: \[ P(X = 4) \]

依二項式分布公式: \[ P(X=k)=\binom{n}{k}p^k(1-p)^{n-k} \]

代入 \(n=10, k=4, p=0.3\)

\[ P(X=4)=\binom{10}{4} (0.3)^4 (0.7)^6 \]

CAS 計算:

n:10;
p:0.3;
k:4;
binomial(n,k) * p^k * (1-p)^(n-k);

結果:

(n) 10
(p) 0.3
(k) 4
(%o53)  0.2001209489999998

14.11 練習題

  1. 計算:
  2. 10 本書排成一排,3 本指定書必須相鄰,有幾種排法?

  3. 從 A、B、C、D、E 中選 3 個人組隊,有幾種方式?

  4. 擲兩顆骰子,求:
  5. 若事件 A、B 互斥,\(P(A)=0.3\), \(P(B)=0.25\)
  6. 若事件 A、B 獨立,\(P(A)=0.4\), \(P(B)=0.2\)

14.11 本章小結

本章你學會:

下一章將進入資料分析與統計量包含平均數、中位數、變異數、標準差等計算。

第 15 章 資料分析、平均數、變異數與標準差

本章介紹高中數學的重要統計內容:
平均數、中位數、眾數、變異數、標準差、加權平均、資料表處理等。
wxMaxima 雖不是專用統計軟體,但提供足夠的資料處理能力,能協助學生快速檢查答案。


15.1 建立資料列表

wxMaxima 使用 list 來存放資料:

data : [5, 7, 3, 9, 10, 4];

15.2 平均數(mean)

平均數定義:

\[ \bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i \]

CAS 使用:

mean(data);

平均值:

19/3
mean(data), numer;

加上 numer,以小數表示:

6.333333333333333

平均數也可用定義,把總和除以項數:

sum(data[i], i, 1, length(data)) / length(data);

結果:

19/3

15.3 中位數(median)

中位數為排序後的中間值。

CAS:

median(data);

因為這筆資料有 6 項,這裡傳會中間 2 個數的平均。

6

15.4 眾數(mode)

最常出現的數值。

wxMaxima 沒有直接代表眾數的指令。

可以用其它方法觀察:

需先 load(descriptive),使用discrete_freq(list) 傳回 [值, 出現次數]。

load(descriptive)$

data1 : [3, 5, 2, 3, 3, 2, 5, 4, 3, 5, 7];
df1 : discrete_freq(data1);

val : df1[1];
freq : df1[2];

index_max : sublist_indices(freq, lambda([x], x = lmax(freq)));   /* 找出最大的 freq 的 index 位置 */

modes : makelist(val[i], i, index_max)$  /* 眾數的定義,傳回出現最多次數的值 */

modes;

結果:

(data1) [3,5,2,3,3,2,5,4,3,5,7]
(df1)   [[2,3,4,5,7],[2,4,1,3,1]]
(val)   [2,3,4,5,7]
(freq)  [2,4,1,3,1]
(index_max) [2]
(%o16)  [3]

在此例中,可以看到 3 出現 4 次,所以眾數是 3。

定義一個求眾數的自訂函數

把上面的方法延伸,直接定義一個求眾數的函數。

    mode(list) := block(
        [df, val, freq, idx],
        
        /* 離散型資料的值與頻數 */
        df : discrete_freq(list),
        val : df[1],
        freq : df[2],
    
        /* 最大頻數的索引位置 */
        idx : sublist_indices(freq, lambda([x], x = lmax(freq))),
    
        /* 傳回所有眾數 */
        makelist(val[i], i, idx)
    )$

接著,只要輸入:

(%i6)   data2 : [3, 5, 2, 3, 3, 2, 5, 4, 3, 5, 7];
    mode(data2);

就可以得到眾數。

[3,5,2,3,3,2,5,4,3,5,7]
[3]

15.5 變異數與標準差

▶ 定義

對於資料 \(x_1, x_2, \dots, x_n\)

變異數:

\[ \sigma^2 = \frac{1}{n}\sum (x_i - \bar{x})^2 \]

標準差:

\[ \sigma = \sqrt{\sigma^2} \]

計算:

data : [3, 5, 2, 3, 3, 2, 5, 4, 3, 5, 7];
var(data), numer;    /* 變異數 */
std(data), numer;    /* 標準差 */

得到:

(data)  [3,5,2,3,3,2,5,4,3,5,7]
(%o5)   2.148760330578513
(%o6)   1.465865045145191

15.6 樣本變異數與樣本標準差

適用於有限個樣本數的變異數和標準差,此時分母是用 \(n - 1\)

\[ s^2 = \frac{1}{n-1}\sum (x_i - \bar{x})^2 \]

計算

需先 load(descriptive),再使用 var1std1

load(descriptive);
data : [3, 5, 2, 3, 3, 2, 5, 4, 3, 5, 7];
var1(data), numer;
std1(data), numer;

15.7 加權平均

加權平均:

\[ \bar{x} = \frac{\sum w_i x_i}{\sum w_i} \]

▶ CAS 計算

假設:

x : [70, 80, 90];
w : [2, 3, 5];
sum(w[i]*x[i], i,1,3) / sum(w[i], i,1,3);

得到加權平均:

83

15.8 分組資料(級距)之平均

若資料分組(例如統計表),需要用組中點計算:

組中點:

\[ m_i = \frac{\text{下限}+\text{上限}}{2} \]

平均數:

\[ \bar{x} = \frac{\sum m_i f_i}{\sum f_i} \]

CAS:

mid : [(0+10)/2, (10+20)/2, (20+30)/2];
freq : [5, 12, 8];
sum(mid[i]*freq[i], i,1,3) / sum(freq[i], i,1,3), numer;

得到:

(mid)   [5,15,25]
(freq)  [5,12,8]
(%o26)  16.2

15.9 數據排序、最大值、最小值

data : [3, 5, 2, 3, 3, 2, 5, 4, 3, 5, 7];
sort(data);
lmax(data);
lmin(data);

得:

(data)  [3,5,2,3,3,2,5,4,3,5,7]
(%o35)  [2,2,3,3,3,3,4,5,5,5,7]
(%o36)  7
(%o37)  2

15.10 四分位數

CAS:

data : [3,5,2,3,3,2,5,4,3,5,7];
quantile(data, 0.25);
quantile(data, 0.50);   /* 中位數 */
quantile(data, 0.75);
(%o7)   3.0
(%o8)   3
(%o9)   5.0

15.11 練習題

  1. 計算下列資料的平均數、中位數、眾數:
    \([6, 8, 6, 10, 5, 7, 6]\)

  2. 求變異數與標準差:
    \([3, 4, 5, 6, 7]\)

  3. 三科成績:
  4. 對分組資料:
    | 區間 | 人數 | |——|——| | 0–10 | 4 | | 10–20| 6 | | 20–30| 5 |
    求估計平均數。

  5. 計算資料的最大、最小、排序與四分位數:
    \([2,9,1,4,7,6]\)


15.12 本章小結

本章你已學會:

下一章將進入本書的最後主題:wxMaxima 的應用策略

第 16 章 電腦代數系統的應用策略

本章是全書收尾,介紹如何實際在高中數學題目中運用 wxMaxima 這個電腦代數系統 (CAS),作為「檢查工具」、「探索工具」與「解題策略輔助」。
善用 CAS 來驗證、觀察與發現規律,可以使學習更有效率。


16.1 CAS 不是替代手算,而是補充工具

高中數學強調「理解」、「推理」、「應用」,而非機械計算。
CAS 在此扮演以下三種角色:

  1. 檢查(verify)
  2. 探索(explore)
  3. 視覺化(visualize)

例如:


16.2 多項式與代數題的策略

▶ 檢查代數化簡是否正確

ratsimp((x^3 - 1)/(x - 1));
(%o26)  x^2+x+1

▶ 展開與因式分解確認

expand((x-2)*(x+3));
factor(x^2 + x - 6);
(%o27)  x^2+x-6
(%o28)  (x-2)*(x+3)

16.3 方程式題型:使用 solve 檢查

考題:

\[ 2x - 5 = 7 \]

手算後,CAS 可用來檢查:

solve(2*x - 5 = 7, x);
(%o29)  [x=6]

▶ 二次方程、聯立方程

solve(x^2 - 3*x + 2 = 0, x);
solve([2*x + y = 7, x - y = 1], [x,y]);
(%o30)  [x=1,x=2]
(%o31)  [[x=8/3,y=5/3]]

16.4 不等式題型:使用 solve 搭配圖形

例:

\[ x^2 - 4 < 0 \]

load(solve_rat_ineq);
solve_rat_ineq(x^2 - 4 < 0);
wxplot2d(x^2 - 4, [x, -3, 3]);

得到:

[[x>-2,x<2]]

fig16_1

可透過兩種結果交叉確認。


16.5 數列題型:使用 makelist 觀察規律

例:

\[ a_n = n^2 - 3n + 2 \]

makelist(n^2 - 3*n + 2, n, 1, 10);
(%o32)  [0,0,2,6,12,20,30,42,56,72]

▶ 檢查遞迴是否正確

a[1]:1$
for n:1 thru 10 do a[n+1]:2*a[n]+1$
makelist(a[n], n,1,10);
(%o35)  [1,3,7,15,31,63,127,255,511,1023]

16.6 函數與圖形題型:以 wxplot2d 輔助

例:比較

\[ y = x^2,\ y = x^2 - 4x + 3 \]

wxplot2d([x^2, x^2 - 4*x + 3], [x, -2, 6]);

fig16_2

圖形可清楚顯示平移與最小值位置。


16.7 反函數與複合函數題型

反函數:

solve(y = x^3 + 1, x);

fig16_3

複合:

f(x):=x^2;
g(x):=x+1;
h(x):=f(g(x));

16.8 微積分題型的策略

▶ 極限:

limit((x^2 - 1)/(x - 1), x, 1);
(%o61)  2

▶ 導數:

diff(sin(x^2), x);
(%o62)  2*x*cos(x^2)

▶ 切線:

f(x) := x^2 - 3*x + 2;
f1 : diff(f(x), x);
a: 1;
b: f(a);    /* x = a 這點的 f(x) 值 */
m: ev(f1, x = a);    /* x = a 這點的導數,即切線斜率 */
tangent(x) := b + m*(x - a)$   /* 自訂切線函數  */
tangent(x);
(%o69)  f(x):=x^2-3*x+2
(f1)    2*x-3
(a) 1
(b) 0
(m) -1
(%o75)  1-x

▶ 定積分與面積:

integrate(x^2 - 4, x, -2, 2);
(%o76)  -(32/3)

16.9 機率題:模擬與列舉

▶ 兩顆骰子點數和為 7 的機率

s:create_list(i+j, i,1,6, j,1,6)$
length(sublist(s, lambda([x], x=7))) / length(s);
(%o79)  1/6

16.10 統計題:快速求平均數與標準差

data:[5,7,3,9,10,4];
mean(data), numer;
std(data), numer;
(data)  [5,7,3,9,10,4]
(%o86)  6.333333333333333
(%o87)  2.560381915956202

16.11 在物理學學習的應用

考慮平面拋射體運動,當一顆棒球在地面上被擲出,初速度大小為 \(v\),初速度與水平線夾角為 \(\theta\),考慮水平方向的位移

\[ x(t) = v \, {\cos\theta} \,t \]

垂直方向的位移

\[ y(t) = v \, {\sin\theta}\,t- {{g\,t^2}\over{2}} \]

我們要求這個拋射體運動的軌跡方程式,也就是 \(y\)\(x\) 的關係。

v1 : v*cos(θ);   /* 初速度的水平分量 */
v2: v*sin(θ);     /* 初速度的垂直分量 */
/* 用 eliminate() 來消去時間 t */
eliminate([x - v1 * t, y - v2 * t + (1/2) * g * t^2], [t]);

得到: fig16_4

/* 解上面的式子,以 y 為未知數 */
solve(%o3 , y);

fig16_5

expand(%o4);   /* 整理式子 */

fig16_6

很興奮地,我們得到了拋射體的軌跡方程式

接著,我們要求水平射程,也就是 \(y = 0\) 時的 \(x\) 值。

rhs(%o5[1]);  /* 取得軌跡方程式的右邊項 */

fig16_7

solve(%o6 = 0, x);   /* 解 x /*

fig16_8

即得到水平射程的式子。

以拋射角 60 度為例,代入式子,

θ:(%pi/3)$   /* 以 60 度為拋射角 */
g:9.8$   /*  重力加速度 */
v:10$    /* 初速度大小 */
float(ev(%o7, numer));

得到 \(x = 0\)\(x = 8.84\) 時,\(y = 0\),也就是水平射程是 8.84 公尺。

(%o11)  [x=8.83699391616774,x=0.0]

畫出軌跡方程式的圖:

wxplot2d([(x*sin(θ))/cos(θ)-(g*x^2)/(2*v^2*cos(θ)^2)], [x,0,8.84])$

fig16_9

很開心呢!


16.12 在解題中如何善用電腦代數系統 (CAS)

  1. CAS不會告訴你邏輯推理,但能幫助運算,檢查結果。
  2. 先試著釐清問題,用手算,再用 CAS 驗證,可提升學習成效。
  3. 對於圖形題,CAS 的視覺化能建立直覺。
  4. 遞迴、數列、代入驗證等類型非常適合使用 CAS。
  5. CAS 是好的輔助學習工具,也可以應用在其它學科。

16.13 練習題

  1. 使用 CAS 檢查手算結果:
  2. solve 解:
  3. 使用圖形判斷不等式:
  4. 使用 makelist 找出前 12 項:
  5. 計算:

16.14 結語

恭喜你完成本書!

你已經學會如何:

希望這本書能讓你在學習中更加得心應手,也希望透過 wxMaxima 這個電腦代數系統來協助計算,並更理解數學。

祝您學習愉快!