1、MMA概述


1、MMA概述                     返回目錄頁
一、MMA的使用
二、函數
三、表達式
四、數值計算和符號計算
五、數據的表示
六、程序設計

----------------------------------

MMA能夠用兩個字歸納:強大。
用四個字歸納:很是強大。
代碼短是出名的,MMA的代碼n行,其餘語言好比C、Java等,要10n行左右。這個有人做過統計。
爲啥會這樣呢?由於MMA的視角不同。其餘語言在搞零售,MMA在搞批發。
代碼短顯然是個優勢,但帶來兩個問題:代碼比較晦澀、影響運行效率。
MMA的代碼,通常來講比較符合人的閱讀習慣,個別代碼晦澀,多是用了較多的語法糖。
至於效率,如今的硬件已經很發達,稍低的效率徹底能夠接受。

---------------------------------
一、MMA的使用
怎麼安裝破解就不說了,百度上不少。
雙擊運行。
MMA能夠創建多種文件,這裏僅關注筆記本文件,即*.nb文件。
啓動MMA,會自動建立一個nb文件。右下角能夠選擇顯示的大小。選擇一個本身眼睛舒服的大小便可。
代碼能夠輸入進去,或者拷貝進去。文件能夠保存。
運行代碼有兩種方法,Shift+Enter。或者直接按數字小鍵盤右下解的Enter鍵。

好比:
1 + 2
運行,得3

1 + 2;
運行,沒反應。由於分號的做用是,程序內部運行了,但不輸出。

{1 + 2; 1 + 3, 1 + 4}
這裏有三個語句。
由於第一個是分號結尾,因此只輸出了兩句的結果。
最後一個語句,默認爲有輸出,結尾符號能夠沒有。

------------------------------------
二、函數
函數由兩部分構成,函數名(又叫函數頭)與參數。
MMA有數千內置函數(直接拿來可用的)及不少程序包中的函數(必須導入程序包)。
內置函數的函數名,絕大多數用英文全名,可讓人一看到就知道函數的功能。並且函數名的第一個字母,是大寫的。
MMA是大小寫敏感的語言。即N與n是不一樣的。
參數個數無限制,中間用逗號隔開。參數包含在[]之中。
好比:
Mod[5, 2]
得1

MMA的內置函數很是多,儘可能用內置函數,優化過的,速度快。
固然,自定義函數也很方便:

f[x_] := x + 1; (*就這麼愉快地實現了加1功能的函數*)
f[1]
得2
(* 中間是備註內容 *)
這是MMA中惟一的備註形式。//備註,沒有。{}備註,沒有。/* */備註,沒有。

函數名並不必定要放在前面,也能夠放在後面。這裏給出第一個語法糖:
2 // f
得3

MMA的幫助文件中,以兩種形式呈現:
函數瀏覽器:以講函數爲主。
虛擬全書:以講功能爲主。

函數能夠嵌套使用:
2 // f // f
得4
這與寫成:f[f[2]],是同樣的。


------------------------------------------
三、表達式
每一個MMA的表達式,都具備一個Head(函數頭)。

Head[a + b]
得Plus

通常咱們的習慣是,形式如:a+b的,稱之爲表達式。形式如:Plus[a+b]的,稱之爲函數。
卻不知,在MMA中,a+b的內部形式,正是Plus[a+b]。
表面上的不少數學符號的鏈接體,內部均爲函數形式。
按照通常的定義,任何語句均可以稱爲表達式。而函數不能這樣說。
表達式包括函數與atom。atom是最基本的數據類型,後面會說。

在MMA中,任何事物都具備表達式這一共同結構。
能夠用FullForm函數把表達式的內部表示顯示出來:

3*(a+5)//FullForm
得:Times[3,Plus[5,a]]
很容易看清楚,是把5與a加起來,而後乘以3。這是個嵌套函數。

有時候,嵌套很是多時,滿眼都是[],就不太容易看清楚了。這時候,能夠這樣:

Times[3,Plus[5,a]] // TreeForm
獲得一個樹形圖。
就很容易看清楚了。

a + b // FullForm
a - b // FullForm
a*b // FullForm
a/b // FullForm
觀察結果,咱們能夠看到,在MMA內部,加減都經過加法作,乘除都經過乘法作。
乘號要注意一下,在MMA中,空格能夠表示乘號:
a b
即爲a*b

2 b
能夠寫成:2b,中間空格是能夠省略的。但不能寫成b2,這樣的話,b2就會被當成一個符號。
ab中間的空格也不能省,省掉的話同樣會被當作符號ab。

2 2
表示2*2,乘號會自動補上。

()的優先級很高。乘除的優先級高於加減。這些優先級通常都不用多說,由於多數符合通常的習慣。
當搞不清楚時,那就寧肯加上()。一點不浪費,反而使代碼閱讀性提升了。

關係算子與邏輯算子的表面形式與內部函數形式,就上圖吧:

html

 

----------------------------------------------
四、數值計算和符號計算
MMA的數值計算,有兩個特色:精確的結果、任意精確度。

1/2 + 1
得3/2
能用分數表達的,就不會輸出小數。

Sqrt[2]
得根號2。能用根號表示的,不會輸出小數。
那想要小數咋辦?用N函數:

Sqrt[2] // N
得:1.41421
通常輸出的是六位有效數字。這並不意味着MMA內部在偷懶,其實內部已經算了不少了。
能夠指定輸出多位:

N[Sqrt[2], 100]

又好比:
N[Pi, 100]

MMA能夠有任意精確度的意思是說,只要你的電腦內存夠大,有足夠的時間等待輸出,那麼能夠輸出任意位。
N[Pi, 1000000]
能夠試一下。

Timing[FactorInteger[10000!];]
Timing函數能夠用來計時。只計計算的時間,輸出的時間不算的。分號是表示不輸出運算結果。
質因數分解通常認爲很化時間的。但這裏彷佛沒有化時間。。本身去觀察結果。

Log[E]
得1
這是天然對數。Pi、E等,是內置的數學常數,不要理解爲沒有參數的函數。

Log[2,8]
得3
任意數做底數,均可以。


符號計算至關好玩了,不給出具體數字,也同樣能夠解出方程。

Solve[a x^2 + b x + c == 0, x]
注意,a和b以後,都有個空格。

那解方程組咋辦?
這樣寫就能夠了:
Solve[a x + y == 7 && b x - y == 1, {x, y}]

Solve[Cos[x] == x, x]
MMA對這個方程,無能爲力。嘿嘿,你也有解決不了的時候。
固然嘍,MMA不是萬能的。可是呢,MMA能夠用牛頓求根法,來獲得一個近似值:

FindRoot[Cos[x] == x, {x, 1.0}]
初始猜想爲1.0。
得:{x -> 0.739085}

不定積分,能夠這樣:
Integrate[1/(1 - x^3), x]

求導函數,用D:
D[%, x]
%表示上一個輸出結果。

化簡:
Simplify[%]
積分微分是互逆的,這裏能夠看到結果回到了原來。


能夠計算定積分:
Integrate[Sin[x], {x, 0, Pi}]

能夠計算二重積分:
Integrate[Sqrt[x^2 + y^2], {x, 0, 1}, {y, 0, x}]

能夠解微分方程:
DSolve[y''[x] == a y[x], y[x], x]

能夠解常微分方程組:
NDSolve[{x'[t] == -y[t] - x[t]^2, y'[t] == 2 x[t] - y[t]^3,
  x[0] == y[0] == 1}, {x, y}, {t, 20}]

有人說,玩上MMA,學高數的人,筆算能力沒有了。
並不都是如此吧?MMA不光可以快速獲得結果,還能提升學習者的理解能力。

-------------------------------------------------
五、數據的表示

MMA的三個基本構造塊,即三個atom是:
符號 symbol
數字 number
串 string
符號如:a、List、Plus
數字如:一、3.十二、3+4I、5/7,分別是整數、實數、複數、分數
串如:"Hello, Hi"
atom沒有組成部分,即基本數據類型。
這裏要注意的是,串指字符串,再也不是字符數組(如C、Pascal語言中)。

至於經常使用數據,在MMA中,是常常用表(list)來表示的,用{}括起來。
{1, 2, 3}
就是一個表。
MMA中,表的強勁之處在於,表中元素沒必要同一類型,並且,能夠是任意類型。
就是說,啥均可以放在表中。通常的數啊、函數啊、表達式啊,圖形啊,能夠一塊兒放到表中。
固然,你能夠放入一杯咖啡試一下 :)


數據的可視化,在全部的學科中,都是極爲重要的。
咱們學習數學時,一直強調數圖合一。
MMA的編制人員,化了近乎三分之一的精力,用在實現數據的圖形呈現上。
這裏只舉兩個例子:

ListLinePlot[Table[RandomInteger[{1, 10}], {10}]]
先產生十個一到十之間的隨機整數,放到表中。而後畫出拆線圖。

Plot3D[Sin[x + y], {x, -3, 3}, {y, -2, 2}]
當變量有兩個時,輸出函數的立體圖。


--------------------------------------------
六、程序設計
MMA聽說是世界上最複雜的軟件系統。支持這個又支持那個。。
最近看了MMA老闆的一個視頻,大有一統天下的架勢。

MMA不光支持傳統的過程式編程,也支持函數式編程。
不光如此,還有獨特的模式匹配與變換規則等等功能。

很多會用MMA的,就會忍不住與其餘軟件比,好比MatLab、好比Python。。
固然,就是死勁黑人家了。。黑了人家,還說我不是故意的。。
聽起來很方的樣子,其實學會了就容易了。。到時候,你會加入黑人家的隊伍麼?
這種可能性很大。。很大。。很大。。

MMA容許程序設計者編寫「天然碼」的能力。
這種天然碼更多依賴於你要處理的問題自己的狀況,而較少依賴於你所使用的語言風格和獨特性。
至關於說,MMA代碼,有一種平易近人的味道。
讓咱們一塊兒來品嚐吧。

23:14 2016-10-24編程

 

+++++++++++++++++++++++++++++++++++++數組

擴展閱讀:我爲何喜歡Mathematica!(有連接,能夠點開)瀏覽器

 

 

 

                        Top


dom

相關文章
相關標籤/搜索