matlab這麼強大,為什麼還有看不起用這個軟體的人的人?

由於要參加數學建模,學校要求用matlab,於是去學,由於有過還行的編程基礎(c/cpp)入手挺快,發現這是一門不錯的數學建模工具,我就是看不起這玩意,可能由於是那些把這玩意當編程得瑟的人惹的禍,由於偏見是萬惡之源。但我又想學習這個工具,請大家幫幫我消除偏見,小弟感激不盡

//2015-1-19-20:05

...

//2016年01月20日20:22:40

沒想到我在學習這個之前發的愚昧的感想會引發大家的這麼多不適,從C/Cpp/opencv一路代碼敲慣了(調包固然好,但是由於是學生,於是許多演算法都想儘力好好實現一下,體驗在現有的知識水平上對演算法進行優化),於是這不到入門級別的想法就出來了,我還是喜歡用代碼實現,但是相信學好matlab會成為我一個非常順手的工具

%偏見是萬惡之源

-------

修改者批註:

問題有語病…

原問題:

「matlab這麼強大,為什麼還有看不起用這個軟體的人?」

到底改成,

「matlab這麼強大,為什麼還有看不起用這個軟體的人的人?」呢?

還是改成,

「matlab這麼強大,為什麼還有看不起這個軟體的人?」呢?

後半部分的賓語到底是啥?…

不管了我先隨便改一個剩下的題主看著辦吧…


徹底嚇尿了,人生第一次過百贊。。。激動無比啊。

=========我是百贊分割線===============

「但我就是看不起這玩意」。

LZ這話說的,彷彿自己可以用c/cpp寫出Matlab的各種工具包似的。

你不過就是搞個建模,又不是去炫耀你炫酷的編程技巧的。


所以你只是愛好者。

專業的程序員知道如何權衡逼格和效率。

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

就我個人來說,

哪怕我再不喜歡一個工具,只要它能契合我當前的任務,我都會去學它用它

——除非我能寫個更好或者更合適的爆了它。


真看不起你們這些用C這類高級語言的,老子編程都是打紙帶的。


你可以試試用C/C++寫機器學習(ML)的包。曾經有個叫吳恩達的人試圖這麼做。後來他放棄了。

多說兩句,搞編程的人思路是和搞計算的人思路完全不同的。搞編程的人會更注重計算機底層的一些細節,比如內存管理啊垃圾回收啊之類的,以及代碼風格,可讀性,模塊化,還有完善一些簡單演算法的效率(C裡面用bit-wise operator無臨時變數直接兩行代碼交換變數值也是相當驚艷的)

但計算考慮的更多是如何實現一個(非常)複雜的演算法,證明結果是存在的,如果結果存在,是否符合一些性質,以及這個結果是否正確之類的問題。底層優化很難有太大的效果,因為演算法太複雜了根本無法用高效但晦澀的底層代碼進行重構。反而根據具體問題的性質進行一些演算法優化會有很好的效果。

這就比如,樓主是個好工匠,會做耐用的鎚子斧子,打出來的斧子天下第一。問題是,讓你去蓋個摩天大樓,難道要等你做出起重機再去?現成的混凝土,鋼筋,起重機放著不用,不是腦子有sht嗎。。。


謝邀

因為 haters gonna hate hate hate,你說簡單易用,他說低能低效,你說功能強大,他說結構複雜,你說大家都用,他說太沒個性,你舉一百個優點 他換個jiaodu能找一百個缺點 ,那剩下就是審美問題了,和看不起計算器的人有什麼好計較審美的?


你先學。

上手比其他語言快多了。

回頭叫你用C你都不想用。


數字圖像處理專業,用matlab很多年了,真心搞不懂為什麼有些人鄙視matlab。我只知道吳恩達在斯坦福大學機器學習公開課第一課花費了不少時間強調matlab的重要性。

有一次面試,公司名字略過,某醫療美容產品,總監是c語言,上來就說matlab有什麼用,我們要在Linux環境下用c語言搭一個深度學習的框架。我滴乖乖,沒確定演算法是否可行,效果如何的情況下,就敢上來直接用c語言寫,如果演算法不好呢,用c語言修改嗎?一個月的時間用matlab穩定演算法,6個月的時間用c語言移植到硬體環境上並且穩定。對比一年甚至兩年的時間你在用c語言實現框架,並且穩定,並且反覆修改,測試演算法效果哪個快????我說的時間一點都無誇張,有過硬體產品工作經驗的人知道一個純c演算法移植到硬體上從移植成功到調試通過甚至運行一次有多不易,時間上的花費真心不知道是matlab的多少倍。

說用matlab不會自己寫一個演算法的人,我覺得挺可笑的,現在的論文哪個不是基於傳統演算法的改進?matlab是有現成的演算法包,但是改進的演算法千變萬化,matlab都有嗎?

從我這個專業來說,某個問題的解決用什麼演算法,演算法怎麼改進,真的不是一開始就能確定的,推斷,嘗試,改進,某個問題的解決思路真心是一個大量嘗試的過程,因為有些東西實驗,計算機運行結果才能說明一切,真心不是拍拍腦袋想想就可以的。而matlab真是提供這些嘗試機會簡單而快速的方法,沒有之一。

工作需要,演算法,c,c++,opencv,openGl都用過,從頭到尾用C++寫一個演算法完全自己實現是常事,但是一直很喜歡用matlab。

後來我簡歷裡面寫,鄙視matlab的面試官,一律不參加面試。演算法才是精華,什麼語言真心不重要,能自己從頭到尾代碼實現,在沒有現成API的情況下也能自己寫是每一個演算法工作者的必備技能。


你討厭的是拿把鎚子就當自己是雷神的人,不是鎚子。


用過至少十幾種語言了 matlab是我最喜歡的之一, 語法不啰嗦, 高階函數用起來也很舒服, 而且會讓使用者從矩陣的角度思考問題, vectorization寫起來有時候也是高潮迭起, 而且我不知道那種語言還有這麼方便的debug環境.


其實一些討厭Matlab的人只是討厭調包這事情而已,保守來看,七成的Matlab選手是沒辦法自己實現一個演算法的......但是就建模而言,你要是不用改演算法的話,為什麼要自己實現它呢?

想做硬核的程序員是好事情,不過數模這事本身就沒那麼硬核...你可以去做機器學習去刷Kaggle,那邊應該沒人會用Matlab——不過大家依然都還是調包俠就是了。


你用過 PHP 么?
這就是科學家的 PHP

其實你轉 SciPy, Sci Perl, modelica, Julia, Clojure 之類也沒人攔你對吧....

反正我轉了 Julia 之後就沒怎麼碰 MATLAB 了,之前靠著 Scientific Perl 於是沒怎麼學 matlab


來來來,咱們用C擼個svd……不行再來個eig,不行再來個inv


題主真的以為用了知乎 就可以盡情裝逼了么?圖樣啊 逼都讓你裝了 你讓別人怎麼辦 你這種試圖喚起有共同逼格群體的方式太弱了 看不起matla,下次你得這麼問: 我很喜歡用matlab編程 覺得這才是最完美的編程語言 什麼c cpp java真的都是辣雞 請問為什麼這些辣雞語言還備受推崇?

相信我 這樣提問 你會得到滿意的答覆


以前法國的一個老師有句話:只有你想不到的 ,沒有Matlab做不到的 。

用Matlab越多這個體會越深。

在能源業和製造業做控制軟體大多早都變成基於Matlab建模自動生成代碼了。

比較典型的例如在汽車行業,航空航天行業,現在直接用C代碼的越來越少,很多以前歐美外包給印度碼農的體力活兒現在都轉全自動生成啦。

自動生成代碼的優勢非常明顯:代碼維護和找錯非常簡單,整體大的控制系統可以很容易分開成一個個模塊獨立開發,界面友好的Matlab/Simulink讓控制工程師可以直接寫代碼而不需要碼農做下游工作,自動生成的代碼標準化程度高,自動生成的代碼優化程度高等等

目前有兩個主流工具:

Matlab/Simulink+自帶的Real-time workshop

另外一個組合是Matlab/Simulink+Targetlink

當今在控制界一般能讀懂C代碼就夠了,有的時候偶爾需要檢查下自動生成的代碼而已。


如果你只要解決方法的話,很簡單:買一套正版你就愛上它了。

過一段時間你就會在網上炫耀如何用MATLAB發郵件之類的,因為人很少會看不上自己花大價錢得到的東西。


原來跨領域跨層次都可以有鄙視鏈的,那是不是以後玩PS的人可以鄙視用CAD的人了?


你的第一段黑字是不是可以理解為可以不文明開噴的提示!

即使這樣,作為君子,你不仁我不能不義,我就不噴了。

先說語法,Matlab是建立在矩陣上的語言,我們跟他說話相當於要建立矩陣,給矩陣元素賦值,對矩陣進行操作變換。這是數學的一套語言,不管你用著方不方便,可是處理矩陣問題的時候他本來就應該是這樣的啊,他就應該更像一個式子而不是編程語言。我可以給它起個名字叫面向矩陣;如果要做數學和一些數學上演算法的工作的候我一定要遵從oop那套,定義類,對哪個對象執行哪個方法那套,我還覺得這個語法才是反人類呢。分工就不同

再說效率,這執行某些演算法時Matlab確實慢。但是這裡有兩個問題。

1,數學上的清晰可以給數據工作者更高的開發效率,然後再考慮利用矩陣化什麼的來提高運行效率。而且debug也非常方便,因為數學上的語言結構清晰。給你一段感受一下:

雖然這是numpy里的,但是因為也相當於矩陣語言,所以本質差不太多。你可以看到這種一個函數套一個矩陣的語言在數學上多麼清晰

#%%time plane

time=arange(0.25,10+0.25,dt)

timep=repeat([time],M,axis=0)

time=repeat([time],lag,axis=0) #time is a plane now

"timecube is for passing time"

timecube=repeat([time],M,axis=0) #repeat prependicularly

timecube=reshape(timecube,(M,lag,lag))

#%% tri cube

"triones cube,used to ellimate the undefined lower part"

triones=triu(ones((lag,lag)))

tridiag=diag(diag(triones))

triones=rot90(triones)

tridiag=rot90(tridiag)

2,之前在另一篇答案里有人曾今討論過自己重新構建矩陣包優於Matlab本身的可能性。Matlab在矩陣演算法上已經優化的相當好了,至少這個方面已經很難有人出其右了。

說了這麼多,就想表達一個意思,矩陣演算法上Matlab就該這樣,而且好用。不是隨你看不看得起而轉移的


用matlab的人多有錢啊!!!我都只敢偷偷用盜版的。


Matlab解放了編程時間。

可以把時間主要放在架構上,而不是具體實現上。

我們需要的是實現想法的一個程序,具體哪個程序不重要。

何必糾結於程序?


有一天你要與人比劍,面前有兩個選擇,一個是一把神劍,一個是一塊鐵礦石,此刻你想用別人鑄的劍怕是會被別的劍客看不起吧,於是選擇鐵礦石自己鑄就最適合自己的劍...遂卒

比劍的核心是劍法,建模的核心是什麼我不知道但肯定不是建模工具


推薦閱讀:

如果從一出生就學習 C 語言,並通過閱讀代碼對話,會把 C 語言當成母語嗎?
Python 好在哪裡,為什麼我認識的幾個很厲害的程序員都說編程新手用它做為入門語言很好?
哪種編程語言的語法最漂亮?
你最喜歡、熟練的編程語言中最讓你不爽的是什麼東西?
Rust 語法很醜陋嗎?如果是,為什麼醜陋呢?為什麼設計成這樣呢?

TAG:編程語言 | 編程 | MATLAB |