網頁

2010年3月12日 星期五

如何在 OpenOffice.org 裏輸入數學公式

(本文內容亦可適用於 LibreOffice, 2012.12.03 補充)
(本文內容亦可適用於 IBM Symphony, 2012.12.05 補充)

記得以前念研究所的時候,個人電腦還是 DOS 的天下、MS Windows 3.1尚未問世,更遑論 MS Word 之類所謂 WYSIWYG 的軟體。個人電腦要輸入中文得要安裝 倚天 3.5,國內最受歡迎的文書處理軟體是 PE (Personal Editor)的後續強化版 PE II Stone。論文中難免會有數學公式或推導式的出現,除了原有請打字行代工製作排版的方法之外,若要藉用電腦軟體自行完成排版製作的話可就得要使用 LaTeX 這個排版套件了。在那個年代,均是 PE II Stone 或 LaTeX 所提供的控制語法完成內容版面的控制或列印。

在 LaTeX 之下要完成一條數學式的排版是相對容易的,大概只要能以逐項口語讀出數學式,然後依口語的順序逐項鍵入公式內容即可。而在現今即使是 WYSIWYG 為標準的文書排版軟體,公式的輸入雖然是可採點按的方式輸入,但那個方式可一點也不直覺、一點也不人性。相對而言,"老舊" LaTeX 的那個輸入方式可能是較方便的,而 OpenOffice.org 2.4/3.1 也可以類似的"直譯式"習慣完成數學式繕寫。

舉如右側的三角形邊角關係式之一為例,在 OpenOffice.org 2.4/3.1 裏可以先如下鍵入:
d_1 over {sin θ_1}=d_2 over {sin θ_2} = λ over {sin θ_3}
然後整列選取後點按"輸入"工具列的"公式"圖示(如下圖)即可完成。

同理要完成如右側數學式的繕寫,則鍵入 sin θ_3 = {v_1 (u_1-u_2)} over {sqrt {u_2^2+v_1^2} sqrt {u_1^2+v_1^2}} 後再如前述操作即可。

最後,附上一個 GPS 數學原理的理想模型(即不考慮系統誤差)推導為例,以"直譯"的方式於OpenOffice.org 2.4/3.1 鍵入內容。GPS 數學原理即是以空間中三個非共線的已知點 P1、P2、P3 為測點,各測點與未知點 P 的距離若可得知的話,未知點 P 的空間座標即可解得。這類問題於醫學領域中亦有極重要的應用,像是精密手術(例如腦科手術)的導引系統亦是採相同的基本原理。可能乍看之下是一組含二次項的聯立方程式,不過仔細推導後可以發現其實是一個可以 Cramer's rule 以行列式值解得的系統過程。朋友們可自行將以下內容複製及貼附至 Writer 中,然後記得要"逐條公式"地以前述方法操作完成即可。若全選取後一次轉換,版面可是會堆疊在一起的。

筆者僅於此處將以下內容中以綠底標記的內容經轉換為公式格式的矩陣式結果,供各位參考。
有好奇心的朋友們自行動手試試了!至於在 MS Office 裏頭是否比照辦理,也請各位朋友試試並與眾分享,畢竟筆者與 MS Office 已"絕緣"好些年了!

{{(X-X_i)}^2+{(Y-Y_i)^2}+{(Z-Z_i)^2}=L_i^2 } and i =1,2,3

X^2+Y^2+Z^2+X_i^2+Y_i^2+Z_i^2-2(XX_i+YY_i+ZZ_i)=L_i^2 … (A)
If let {R_i^2=(X_i^2+Y_i^2+Z_i^2)} then (A) could be
X^2+Y^2+Z^2-2(XX_i+YY_i+ZZ_i)=L_i^2-R_i^2 … (B)
 Then
X^2+Y^2+Z^2-2(XX_1+YY_1+ZZ_1)=L_i^2-R_1^2 …(1)
X^2+Y^2+Z^2-2(XX_2+YY_2+ZZ_2)=L_i^2-R_2^2 …(2)
X^2+Y^2+Z^2-2(XX_3+YY_3+ZZ_3)=L_i^2-R_3^2 …(3)
(1)-(2):(X_2-X_1)X+(Y_2-Y_1)Y+(Z_2-Z_1)Z=L_1^2-L_2^2+R_2^2-R_1^2
(2)-(3):(X_3-X_2)X+(Y_3-Y_2)Y+(Z_3-Z_2)Z=L_2^2-L_3^2 +R_3^2-R_2^2
(3)-(1):(X_1-X_3)X+(Y_1-Y_3)Y+(Z_1-Z_3)Z=L_3^2-L_1^2 +R_1^2-R_3^2

Combine three equations to matrix form:
left [ matrix{(X_2-X_1)#(Y_2-Y_1)#(Z_2-Z_1)##(X_3-X_2)#(Y_3-Y_2)#(Z_3-Z_2)##(X_1-X_3)#(Y_1-Y_3)#(Z_1-Z_3)} right] left ( matrix{ X##Y##Z} right) = left ( matrix{ L_1^2-L_2^2+R_2^2-R_1^2##L_2^2-L_3^2 +R_3^2-R_2^2##L_3^2-L_1^2 +R_1^2-R_3^2} right)

Define matrix {underline A} and vector {tilde B} as
underline A = left [ matrix{(X_2-X_1)#(Y_2-Y_1)#(Z_2-Z_1)##(X_3-X_2)#(Y_3-Y_2)#(Z_3-Z_2)##(X_1-X_3)#(Y_1-Y_3)#(Z_1-Z_3)} right]
tilde B = left ( matrix{ B_1##B_2##B_3} right) = left ( matrix{ L_1^2-L2^2+R_2^2-R_1^2##L_2^2-L3^2 +R_3^2-R_2^2##L_3^2-L1^2 +R_1^2-R_3^2} right)

then the equations could be simplified as {underline A left ( matrix{ X##Y##Z} right)=tilde B}
Let
{underline A}_1 = left [ matrix{B_1#(Y_2-Y_1)#(Z_2-Z_1)##B_2#(Y_3-Y_2)#(Z_3-Z_2)##B_3#(Y_1-Y_3)#(Z_1-Z_3)} right]
{underline A}_2 = left [ matrix{(X_2-X_1)#B_1#(Z_2-Z_1)##(X_3-X_2)#B_2#(Z_3-Z_2)##(X_1-X_3)#B_3#(Z_1-Z_3)} right]
{underline A}_3= left [ matrix{(X_2-X_1)#(Y_2-Y_1)#B_1##(X_3-X_2)#(Y_3-Y_2)#B_2##(X_1-X_3)#(Y_1-Y_3)#B_3} right]

If {det (underline A) <> 0}, then X Y Z could solved by using Cramer's rule as
X = {det ({underline A}_1)} over {det (underline A)}
Y = {det ({underline A}_2)} over {det (underline A)}
Z = {det ({underline A}_3)} over {det (underline A)}

沒有留言: