Maxima 教材:代數方程式求解

所謂「代數方程式」主要是區別「微分方程式」而言的, 前者應該解出「數」,而後者應該解出「函數」。 就一般的狀況而言,「代數方程式」一點兒也不容易。 但我們此時僅用 solve 指令示範較簡單的求解問題。

所有通過一點 A(x0,y0) 的直線(非鉛直線)都具備線型函數的形式: y=m(x-x0)+y0,其中 m 是未知的斜率。若給定直線通過的第二個點 B(x1,y1), 則可以代入式中的 x 和 y 而求解斜率 m (其中 x1 not= x0)。 假設 A(300,2000)、B(290,2250), 這個簡單的問題可以用 solve 指令解決:

solve([y=m*(x-300)+2000, x=290, y=2250]);
求得一組解
   [[x = 290, m = - 25, y = 2250]]
其中 m=-25 是我們須要的斜率。

如果想要將一次多項式 -25*(x-300)+2000 改寫成標準形式, 可以說

expand(-25*(x-300)+2000);
得到
    9500 - 25 x
讀者可以自行將它改寫成升冪排列 -25x+9500。

再如配方(配完全平方),若給定二次多項式 ax2+bx+c, 則已知它等於 a(x-h)2+k,只要比較係數就能解出未知的 h 和 k。 以 2x2+x-1 為例,配方的目標是 2(x-h)2+k, 先展開後者如下:

expand(2*(x-h)^2+k);
得到結果
                               2                  2
                            2 x  - 4 h x + k + 2 h
由使用者自己讀出 x 項係數為 -4h,它應該等於原式的 x 項係數 1, 而常數項 k+2h2 則應該等於原式的常數項 -1。 所以,用以下指令求解:
solve([-4*h=1, k+2*h^2=-1]);
得到
                                     9        1
                             [[k = - -, h = - -]]
                                     8        4
不妨代入配方後的 h 和 k 驗算看看:
expand(2*(x+1/4)^2-9/8);

其實 Maxima 有指令取得多項式的 n 次項係數。例如

coeff(expand(2*(x-h)^2+k), x, 0);
就得到展開後的常數項
                                         2
                                  k + 2 h
所以,用以下指令,可以做到同樣的「配方」效果:
expand(2*(x-h)^2+k);
solve([coeff(%,x,1)=1, coeff(%,x,0)=-1]);
以上的 % 表示「上一個計算的結果」,也就是展開 2(x-h)2+k 之後的多項式。

習題

  1. 試寫出通過 (197, 2004) 和 (2012, 101) 兩點的直線方程式。
  2. 試寫出 x2/7 - 12x + 19 的完全平方式。
單維彰 (2012/06/25) --- [Prev] [Next] [Up]