Mathematica 和 MATLAB 都有什麼不同?做數學分析哪個比較專業?


http://zhidao.baidu.com/question/69542953.html

matlab在實際工程應用上的優勢是非常巨大的,在工程上,matlab最大的用途就是進行模擬分析,而數學分析只是其龐大功能的其中一種。但是要知道,matlab之所以提供600多函數的數學模型,是因為在工程計算中,確實會用到這些模型。比如說,有限元分析,這就必須要有強大的數學分析能力,才能完成。總的來說,對於初級應用,matlab的應用範圍要遠遠比mathematica要廣,使用的人數也非常多,因為在絕大多數情況下,我們或者很多非專業人員是需要一個軟體直接提供一個直觀的計算結果或者模擬結果的。這就是matlab的優勢。

mathematica的實際應用範圍比matlab要小,但是不是說mathematica就比matlab要差。兩者的側重不一樣。從名字上,就可以知道,mathematica是一款計算功能極其卓越的軟體,不僅可以提供常規所有函數的數學模型,而且可以進行深度計算。其數學模型分析方面的能力是matlab遠遠不可比及的。只是mathematica在工程應用和模擬分析的方面就顯然要比matlab要稍遜一籌了。

所以軟體無高低,只是側重不同,對於學校這個級別的數學建模,是不會用到深度計算的。所以你老師推薦你用matlab只是說,他比較熟悉matlab,或者matlab的通用性比較好(除非你打算一個人包干),這樣方便協作。畢竟matlab使用的人數更多。但是對於mathematica而言,做數學建模正是它的特長,mathematica的數分能力可以說是各個軟體之首,如果你擅長mathematica,我個人建議你完全可以使用mathematica參加比賽。

最後,強調的是,這兩個軟體都是非常卓越的,用偉大來形容也不過分,也今天我們很多基礎學科都到了瓶頸期。而這兩個軟體是最有可能成為將來這些學科突破的開路先鋒。所以不存在誰更強的說法,重要的是應用的人以及應用的方式方法。合理的建模和分析模式都會取得同樣的結果。


資深外觀控來說一二,
首先我從高中開始就幾乎只用Mathematica,長期以往的習慣甚至是用c/cuda寫的獨立的科學運算程序的數據都會導入mma處理。現在偶然也會用到python或者直接寫OpenGL。主要原因很簡單,就是mma比matlab好看……
其次,作為一個OI保送的物理系學生在計算機專業實驗室做無人機以及在等體實驗室做模擬……我個人接觸的東西很多很雜,但是我知道我需要的是一套通用的工具(如python)和一些專用的東西。你說Matlab可以做工程有限元,其實我同時也需要花兩個月去自己寫一個跑在GPU的有限元,你說matlab可以做很多很多,但是因為他丑。所以我有時候不得不用它卻不得不用完後捂著鼻子離開。
Matlab的丑不僅僅是ui拙計,就我少量接觸而言,語言風格龐雜混亂,根本不是一門嚴謹的編程語言,雖然我也很討厭mma 有時候過於啰嗦(主要是用於約定格式的符號太多……)而且縮進起來語法高亮下一點都不如python或者java規整好看。
但是mma的語言至少是一門嚴謹的函數式編程語言(我也試過用mma封裝oop……那效率慘不忍睹)。至少你可以把mma偶爾當Haskell玩(雖然沒有Haskell的模式匹配)或者當lisp折騰(我恨lisp的括弧),心情好了他是會問你電腦要gpu的python(巨費電),順便寫個微分方程作業做個網格劃分或者折騰點社交分析。作為心情不好就碰各種語言的強迫症,matlab連文件名都可以不帶括弧不能忍!
另外是對客戶端的評判,mma的ui清新太多…表示理想的編程環境就該只有一個文本框,剩下的你要他出來他出來,不需要滾遠。而mma則是圖文並茂了。
圖像處理啊,各種分析折騰啊,雖然不使用,但在碼opencv之前當個測試器也很贊啊……py cv就沒有mma sexy…雖然確實快了那麼一點(幾個數量級)
也說說mma的問題吧,至少很多時候我個人在mma上會搞得語言混亂…因為寫代碼時候從來不是把它當正經的代碼寫……沒有vim模擬器又不喜歡調subl/vim也是圖個滿屏幕sigma好看……再加上mma的格式符號確實不討巧…就亂七八糟……於是是真當繪圖板用了。

而且看過一點點mma和c的介面…屬於看了第一眼就不想看第二眼的api類型(比jni一還煩人)…結論是我寧可把數據導出文件或者用python+scipy……
還有就是mma的繪圖確實質量好觀察容易,但那個效率………我Haswell i7 +GT 750m表示很捉急啊。
其次是MMA的並行雖然已經有了(比如ParallizeMap就是我很喜歡的玩意,很MapReduce的feel,很贊哦…)。
但是智能度還能提升,而且CUDA support不多,這邊我不知道matlab怎麼樣。。。

總之呢,mma更像一個sexy girl,待你去調節,matlab是個中年大叔了…雖然在數值確實比mma好一些(主要是…咳咳……盜版的包多),但是誰願意…嗯天天撿肥皂呢。

最後,鄙視一切用盜版還罵軟體的(包括我自己)以後收入了一定買正版Mathematica

題外話……要不是Wolfram寫了mma這麼叼的東西,他那個元胞自動機和宇宙等價的理論確實…民科……不過在計算物理課學到元胞自動機可以解N-S方程,或者波什麼的……確實給wolfram他老人家跪了。沒想到當年在霍金他老人家書裡面看到的小玩意還能這麼叼…


本人大學略懂些Matlab,最近在學用Mathematica(這裡題主應該是拼錯吧)。

相比較來說,Matlab缺少的是Mathematica強大的符號計算能力,但是Matlab的功能強大是不用多說的,Mathematica的圖形界面更美觀,但是在複雜處理的時候輸入需要編程,不如Matlab方便,內核的穩定性也有些差距,在數值計算的速度上Matlab也要快一些。

所以看你需要多麼強大的功能了,如果通過Mathematica比較簡單的輸入完全滿足你的需要,那麼就用它吧,我受夠了Matlab的醜陋界面了……如果一些比較複雜的應用上,用Matlab要好些,雖然Mathematica也能實現,但是需要複雜的編程來輸入,效率比較低。

還有,Matlab學起來簡單多了 XD

發現題主是學計算機的,那麼打個比方Matlab是C語言,Mathematica是Lisp。


科學家用Mathematica,工程師用Matlab


我來補下樓上。
一般學數學,用mathmatic
學技術,用matlab


其實比較下documentation就可見一斑 你們講這麼多沒用的還把別人給搞糊塗了


作為一個接觸Matlab只有兩年多的土木男弱弱的表示,Matlab不是你們數學界的大神們開發出來給我們工科屌絲搬磚用的么?怎麼你們搞數學的也要搞這個?難不成題主說的數學分析是數值分析?哈哈哈哈給理科生回複評論好害羞[掩面逃走]


有的人說的玄乎玄乎的,

這麼說吧,推公式的時候只能用mathematica,然後MATLAB啟動太慢我受不了的時候用mathematica,

其他的功能沒什麼大區別,當然,MATLAB畫圖要丑一些。


沒用過mathematics,不過我們老師都是用它來推導很複雜的公式的。比如非線性方程的數值解。所以感覺這個應該偏數學一點


Matlab需要一些基礎的編程語言,而Mathematica對這方面需求似乎弱一些,對於不熟悉編程語句的我還是使用Mathematica吧


要是純數值分析,那肯定是Mathematica,但是一般你要用到一些模擬之內的東西還是推薦Matlab,個人對Matlab也比較有感情


都挺專業的,就是用軟體的人不夠專業。。。


那為啥Mathematica在中國的市場推廣沒有matlab做的好呢?


兩者在邏輯和使用領域有很大的區別。
可能和有些人的理解相反,我認為MATLAB在科學領域應用更多,而mathematica更適合於工程(師玩)。

如果題主說的數學分析是數值分析的話,MATLAB嚴格優於Mathematica。如果指解析解的話,毫無疑問正好相反。因為它們的目標就是不同的。而且好像沒有什麼相同。。

隨著兩款軟體的升級,功能上出現了很多重疊。尤其mathematica引入了很多吸引人眼球的元素。在內置函數和語法的設計上更是別具匠心。敢說自己是OO的functional programming language真是讓wolfram大民科的逼格高了N個檔次。。

拋開兩者豐富的工具箱和效率不論,單談語言特性。
MATLAB的強大之處在於矩陣運算表示的簡潔(相比之下mathematica的矩陣是鏈表的鏈表)。比方說,一行代碼就可以對數據矩陣做標準化(0均值,單位方差)

m = (m - repmat(mean(m),length(m),1))./repmat(std(m),length(m),1)

這對做統計和智能相關的人來說十分貼心。因此,很多演算法在設計的初期都是用matlab做的demo。比如hdp和spectral clustering。水漲船高,現在matlab成了很多學者跑實驗的必需工具,同時也是各高校機器學習,多元統計分析,優化演算法等課程的教學利器。

Mathematica的強大之處是解析運算,另外支持任意精度。但這在研究領域是很無力的。
在我的經驗里Mathematica不是個獨立的語言。只是一個功能繁多,界面新穎的計算器。沒錯它可以做很多cool stuff,在圖像處理應用上我還是挺有體會的。給內置函數穿上functional的外衣,可謂是程序員最clever的玩具之一。比如說,畫個圓:
Mathematica:

Graphics[{
{Thickness[.03], Circle[]},
(* other stuff... *)
}]

MATLAB:

R = linspace (0, 2*pi, 1000);
x1 = 9*cos (R);
y1 = 9*sin (R);
plot (x1, y1, " b", " linewidth", 8, " color", " k")

但是它也僅限於做這些cool stuff罷了。它是我做數學分析時偷懶的工具,但它並沒有教會過我任何演算法。它也不適於開發較大的項目。我沒見過有人基於mathematica做過什麼流行的工具,網上的資源也只是內部社區上的一些代碼段。

從一個使用者的角度說,Mathematica的界面還是相當友好且有創意的。。然而一直在interactive mode下工作的後果就是,我離開IDE就不會寫代碼了。。


推薦閱讀:

如何在兩條曲線之間上色?

TAG:MATLAB | Wolfram Mathematica |