Mathematica 簡單介紹

(1)啟動 Mathematica

1.當你啟動 Mathematica 的時候將會看到一空白視窗，但一旦你開始打指令時，就會顯示在文件中了。且系統會在視窗右邊對應指令處產生一自動伸展的方括號，稱為Cell。

2.當你要執行指令時請按 Shift+Enter 鍵，系統只會執行目前的Cell〈游標閃爍處〉。若要一次自動執行多個Cell請用Crtl+滑鼠或Shift+滑鼠點選多個方括號再執行之。

3.單一Cell中可包含多個完整指令，執行的結果將隨即顯示於其後，若不要某指令的回應則以；殿後。

4.當你執行第一個指令時， Mathematica 需要較長的時間來啟動它的Kernel〈計算核心〉，但是第二個以後的指令便會執行的快很多了。

5.鍵入 Exit會結束現在的Kernel，並且所有變數、記憶體中的資料都將清除，一個新的Kernel會在你下一次執行指令時開始。

6.當 Mathematica 看到運算式中有 " (* 註解 *) " 時，它會忽略掉。例如：

2+3

7.Mathematica 中所有的名稱敘述都必須注意大小寫，且所有的內建指令第一個字母均為大寫字母，指令的參數均以 [ ] 包夾。

8.Mathematica擁有多樣而複雜的各項指令以及繁瑣的控制參數，善用Help Browser內的完整說明才能輕鬆駕馭。

(2)基本運算( + - × / ^ (Sqrt[□]) )

1.只要直接輸入數學算式再執行就可以了
For example:

1+2*3-4/5^6    (* 乘號可用空白鍵代替 *)

2. Mathematica 中有很方便的面板可以使用，面板可以在 File>Palettes 裡面找到。其中最常用的是"BasicInput " 面板，上面有很多數學運算式可以使用。只要點選面板上你所要的式子，該式子就會出現在文件中了，然後在點選方格的地方就可以輸入數值了，然後可以直接執行。
For Example:

{(∑_(k = 1)^10) 
        k, ∫(x^2) \[DifferentialD]x, (Sqrt[4]), (27^(1/3))}

3.在 Mathematica 中 " % " 代表的是上一個運算的結果，而Out[##]則可叫出第##次指令運算的結果。
For example:

2*4

% - 1

(3)List串列

List串列是Mathematica 中最重要的資料型態，它能儲存任何型態資料、隨意動態增減長度無須宣告，使用彈性非常大。大部份Mathematica計算的結果也都是以此型態儲存運用

lst1 = {1, I, (x^2), {2, 4}, Out[34]}

lst1 = Append[lst1, curve1]

向量、矩陣、集合皆是List，也可當陣列使用

vec1 = Table[i, {i, 1, 2,  .5}]

matrixA = Table[x^(i j), {j, 0, 2}, {i, 0, 2}]

MatrixForm[matrixA]

Eigenvalues[matrixA]

vec1 . matrixA

temp = 0;
Do[
temp += 
          matrixA[[j]] vec1[[j]]
, {j, 1, 
          3}];
temp

Join[vec1, lst1]

(4)函數的定義

1.函數的定義如下：

f[x_] := 2  x + 1

f[3]

" x_ "裡面的底線 " _ "十分重要，不能夠省略。 而分號 " : " 則代表延遲執行亦是必需。
多變數的函數也是一樣：

g[x_, y_] := x + y

g[3, 5]

2.條件函數的定義方法如下：

h[x_] := 
      If[x ≤ 1  &&  x ≥ -1, (x^2)]

h[x_] := 1   /; x < -1 || x > 1
Plot[h[x], {x, -2, 2}, PlotRange -> {0, 2}]

其中 And 和 Or 在 Mathematica 中運算符號分別為 " && " 及 " || "
For example :

{True  &&  True , True && False, True || True, 
      False || True}

{3 > 2 && 1 > 2 ,  3 < 1  || 4 > 0}

另外其函數型式寫法為：

{Or[True, False], And[a, b]}

如果覺得運算符號不好記的話，有一個小技巧 ，利用 " ~And~ "的方法：

{True~And~False, b~Or~c}

(5)常用函數及符號

符號

({{名稱, 寫法, 快捷鍵, 符號}, {\(\(圓週率\)\(\ \ \)\), Pi, Esc + p + Esc, π}, {\(\(自然常數\)\(\ \)\), E, Esc + ee + Esc, e}, {虛數  , I, Esc + ii + Esc, i}, {無限大, Infinity, Esc + inf + Esc, ∞}})  
其實兩種寫法均可，也就是說 Pi = π
For Example：

{Sin[Pi],(I^2),(1/Infinity),Cos[π],(E^(1  π*I)),(∞/∞)}

三角函數
\(Sin\ Cos\ Tan\ Cot\ Sec\ Csc\ ArcSin\ ArcCos\ ArcTan\ ArcCot\ ArcSec\ ArcCsc\)
\(Sinh\ Cosh\ Tanh\ Coth\ Sech\ Csch\ ArcSinh\ ArcCosh\ ArcTanh\ ArcCoth\ ArcSech\ ArcCsch\)

Sin[π]

指數對數函數
Exp [a]:=e^a
Log[a]指的是以 自然常數e 為底的對數函數
Log[a,b]指的是以 a為底的對數函數

a = Exp[2];

{Log[E, a], Log[a]}

(6)解方程式

Solve可以求出解析解：

Solve[(x^2) + x + 1 == 10, x]

很重要的一點：在 Mathematica 中等式或判斷式要用雙等號來表示 " == "
至於單等號 " = " 是用在給定值的地方
For example:

{3 == 2, 3 = 2}

eqn = (x^4) - 13  (x^2) + 36 == 0
Solve[eqn, x]

Solve[(x^5) + (x^4) - (x^3) == 2, x]

如上例中，絕大部份方程式很難求解析解，所以他的顯示並無實質意義
但仍可用NSolve指令來找出數值解

NSolve[(x^5) + (x^4) - (x^3) == 2, x]

\(TraditionalForm\`解聯立方程式：\)

Solve[{(x^2) + (y^2) == 1, 3  x == y}]

須注意，數值解亦會受到方程式複雜性及數值方法收斂的問題，影響求出根的數量，不能保證無漏網之魚

(7)求極限

Limit[Sin[x]/x, x -> 0]

Limit[((3  (x^2) + 15  x - 1)/((x^2) + 20  x + 5)), 
      x -> ∞]

Limit[Tan[x], x -> (Pi/2), Direction -> 1]   (* 左極限 *)

Limit[Tan[x], x -> (Pi/2), Direction -> -1]   (* 右極限 *)

(8)求值

N[Exp[3 + I]]

N[π*E, 100]

(9)微分積分

微分 D[f, x]    D[f,(Subscript[x, 1]),(Subscript[x, 2]),(Subscript[x, 3])]

D[Sin[x], x]

D[Sin[x y], x, y]            (*((∂^2)/(∂x ∂y))sin(xy)*)

n階微分 D[f, {x, n}]

D[Sin[Exp[x]], {x, 3}]

\(TraditionalForm\`有一個方法很方便，直接打\ \(f'\)[x]\ \)
\(TraditionalForm\`或者是直接按面板上的\ \ ∂\_□\ □\ \ \)
\(TraditionalForm\`\ ∂\_\(□, □\)□  是二階微分\)

f[x_] := Sin[x] + Exp[(x^2)];
f'[x]

Sin''[x]

(∂_x) Sin[Log[x]]

(∂_(x, y))(x^y)              (*((∂^2)/(∂x ∂y)) (x^y)*)

積分 Integrate

Integrate[(x^2) Sin[x], x]                (*不定積分*)

Integrate[Sin[x], {x, 0, π}]    (*定積分*)

\(TraditionalForm\`積分也可以用面板上直覺式的輸入\ \ \ \ \(∫□ d□\ \ \ \ \ \(∫\_□\%□ □ d□\)\)\)

(∫_0^∞) 
            (1/((x^2) + 1)) \[DifferentialD]x

∫(1/((x^2) + 1)) \[DifferentialD]x

如下例中，絕大部份積分很難得Exact Form，所以他的顯示並無實質意義，
只能退而求其次用NIntegrate計算數值解

Integrate[Sin[Sin[x]], x]

NIntegrate[Sin[Sin[x]], {x, 0, π}]

(10)２維繪圖

Plot[Sin[x], {x, 0, 2  π}]

\(TraditionalForm\`兩個以上的函數\)

curve1 = 
      Plot[{Sin[x], Cos[x]}, {x, 0, 2  π}, 
        PlotStyle -> {RGBColor[1, 0, 0], RGBColor[0, 0, 1]}]

PlotRange

curve2 = 
      Plot[Tan[x], {x, 0, 2  π}, 
        PlotRange -> {-20, 10}]

\(TraditionalForm\`兩個以上的圖形合成\)

Show[curve1, curve2]

隱函數繪圖：
因為 Mathematica 的內建指令中並沒有可以畫出隱函數圖形者，所以必須要呼叫函式庫ImplicitPlot

Needs["Graphics`ImplicitPlot`"]

ImplicitPlot[x^2 + y^2 == 3, {x, -2, 2}]

\(TraditionalForm\`參數繪圖：\)

ParametricPlot[{{t + 2  Sin[2  t], t + 2  Cos[5  t]}}, {t, 0, 
        2  π}]

(11)３維繪圖

空間中的參數曲線與曲面  ParametricPlot3D

ParametricPlot3D[{Sin[t], Cos[t], Sin[t] Cos[t]}, {t, 0, 
        2  π}]

ParametricPlot3D[{r Sin[t], r Cos[t], Sin[r]}, {t, 0, 2  π}, {r, 
        0, 10}, BoxRatios -> {1, 1, 0.5}]

兩個變數的函數繪圖  Plot3D

Plot3D[Sin[(Sqrt[(x^2) + (y^2)])], {x, -10, 10}, {y, 10, -10}, 
      PlotPoints -> 40]

\(TraditionalForm\`隱函數\)

Needs["Graphics`ContourPlot3D`"]

ContourPlot3D[
      Cos[Sqrt[x^2 + y^2 + z^2]], {x, -2, 2}, {y, 0, 2}, {z, -2, 
        2}]

更換視角 ViewPoint
視角的選擇可以從  ( Input>3D ViewPoint Selector 或是按 Shift+Ctrl +V )呼叫出一個小視窗，可以很方便的選取所需要的視角

f[x_, 
        y_] := ((-3 y)/((x^2) + (y^2) + 1))
Plot3D[((-3 y)/((x^2) + (y^2) + 1)), {x, -3, 3}, {y, -3, 
        3}, ViewPoint -> {-4.000,  -4.000,  4.000}]

Plot3D[f[x, y], {x, -3, 3}, {y, -3, 3}, 
      ViewPoint -> {4.000,  2.580,  4.000}]

\(TraditionalForm\`等高線圖\)

ContourPlot[
      Sin[x] Sin[y], {x, -π, π}, {y, -π, π}, 
      Contours -> 16, PlotPoints -> 26]

(12)解微分方程與繪圖

DSolve[{
x'[t] == 
          x[t] x[t], 
x[0] == 1}, 
x[t], 
      t]

DSolve[{
x'[t] == 
          y[t], 
y'[t] == 
          2 x[t] + y[t] + 1}, 
{x[t], y[t]}, t]

以NDSolve計算有名的Lorenz方程數值解

α = 10. ;
β = 28. ;
γ = 8/3. ;
\(LORENZequ = 
      NDSolve[{
	\(x'\)[
              t] == α\ \((y[t] - 
                  x[t])\), 
	\(y'\)[
              t] == β\ x[t] - y[t] - 
              x[t]\ z[t], 
	\(z'\)[
              t] == \(-γ\)\ z[t] + 
              x[t]\ y[t], 
	
          x[0] == 0.1, 
	
          y[0] == 0.1, 
	
          z[0] == 0.1}, 
	\ \ {x, y, z}, {t, 0, 
          50. }, 
MaxSteps\  -> 400000, 
        WorkingPrecision -> 24]\)

\(TraditionalForm\`注意如何將得到的解繪圖\)

ParametricPlot3D[
        Evaluate[{x[t], y[t], z[t]} /. LORENZequ], {t, 0. , 50. }, 
        PlotRange -> All, PlotPoints -> 2000, 
        Boxed -> False];