所謂「代數方程式」主要是區別「微分方程式」而言的, 前者應該解出「數」,而後者應該解出「函數」。 就一般的狀況而言,「代數方程式」一點兒也不容易。 但我們此時僅用 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);以上的 % 表示「上一個計算的結果」,也就是展開 2(x-h)2+k 之後的多項式。
solve([coeff(%,x,1)=1, coeff(%,x,0)=-1]);
習題