[其他] 想請問一下 Matlab 與c的差別~

作者: puppyulove (WHY)   2015-04-22 16:58:23
請問一下 matlab與c主要的差別在哪?
用C打得出來的,matlab也可以嗎?
用matlab打的出來的,C也可以嗎?
因為只會C,
所以老師說要用matlab打時想說可不可以用C來做@.@
感【激不盡~
作者: sunev (Veritas)   2015-04-22 17:27:00
兩者都是圖靈完全(誤)
作者: profyang (prof)   2015-04-22 18:50:00
迴圈什麼的matlab都可以寫 只要想要會動用c是OK的阿看錯 你是本來用matlab要用c 那我就不確定了有可能你們學的東西需要用到不少matlab內建函式 難道這些你都要自己在c重寫?還是你找得到別人建好的函式?以我個人是比較建議你乾脆用matlab 畢竟你都會用c了 真不行直接在matlab寫迴圈還是會動的
作者: JamesChen (James)   2015-04-22 23:17:00
你想問哪方面的差距?
作者: pipidog (如果狗狗飛上天)   2015-04-23 12:32:00
一個是編譯式,一個是直譯式,完全不一樣的邏輯啊!
作者: linux5566 (linux56)   2015-04-23 14:07:00
能用matlab就用吧 不要折磨自己
作者: aada (aada)   2015-04-23 14:51:00
這只是個工具, 用啥都好, 用手算畫也可以~
作者: jatj   2015-04-23 14:55:00
速度是最大的考量 matlab優點在豐富的library 不用什麼都自己coding, 但是執行速度matlab跟c完全不在同一個檔次用於驗證想法matlab是很好的工具 但是要開發程式最後還是C
作者: s4300026 (s4300026)   2015-04-23 23:06:00
先用就對了,matlab好用,C會coding到死當老師說用C或matlab時,可以不要選C來折磨自己
作者: celestialgod (天)   2015-04-23 23:32:00
簡單來說matlab可以即時檢視結果、除錯又有圖形能力、方便的GUI使用以及各種toolbox用C你可能要去找一堆library然後還要編譯安裝MATLAB都幫你準備好了matlab做99乘法就 for i=1:9,for j=1:9,disp(['i*j=', num2str(i*j)]), end, end更正[num2str(i),'x',num2str(j),'=',num2str(i*j)]
作者: jatj   2015-04-24 09:25:00
99乘法表 kron(1:9,(1:9)')用到兩個for就不是matlab的精隨了 基本上跟c一樣了c: for(int i=1;i<=9;i++) for(int j=1;i<=9;j++)cout << i << '*' << j << '=' << i*j << endl;
作者: celestialgod (天)   2015-04-24 11:58:00
只是要print string 如果只output結果當然那樣就好也可以這樣 [a,b] = meshgrid(1:9, 1:9);arrayfun(@(x, y) [num2str(x), '*', num2str(y),'=', num2str(x*y)], a, b, 'UniformOutput', false)快程式易讀性、向量矩陣運算等都是MATLAB勝出比較多向量矩陣運算,我是指撰寫程式上
作者: linux5566 (linux56)   2015-04-24 13:36:00
你各別寫個矩陣乘法 就知道差別了
作者: maplefog (楓霧)   2015-04-24 21:40:00
用C和matlab寫個1000x1000的複數反矩陣 就知道差別了
作者: diggershi (早立衫)   2015-04-24 23:28:00
教授給的題目是哪一類的,如果都屬於數學 畫圖之類不用想Mathlab 除非寫出來的code跑個好幾天也跑不完再來考慮c,不過 好像Mathlab也有提供轉C的功能...
作者: warex14 (航)   2015-04-25 11:18:00
C的好處應該就是「免費」,MATLAB很貴再來就是MATLAB屬於直譯式語言速度比較慢(不過人家還在寫c的時候MATLAB都應該寫完跑好幾次了)
作者: celestialgod (天)   2015-04-25 13:45:00
matlab轉c的code不見得可以跑,慢的話針對慢的演算法寫c,用matlab call c即可。
作者: jatj   2015-04-26 03:31:00
樓上warex你大概沒跑過c只要五小時matlab要超過5週的project這時候你花一個月寫程式也值得兩個語言的基本用處完全不一樣 這應該是原po要搞懂的
作者: sunev (Veritas)   2015-04-26 08:31:00
十倍速正常,差到百倍我會覺得那個人不懂matlab……
作者: celestialgod (天)   2015-04-26 09:09:00
matlab在雙層以上迴圈(疊代)是很可能慢到這種地步無法使用向量運算下是有可能差那麼多的我自己親身例子是小資料五倍,大資料拉到二十倍...
作者: jatj   2015-04-26 10:04:00
我當時至少也有八年使用的經驗了 我想我沒有到不懂的地步當你處理的資料是以千萬個迴圈當單位來計算 資料量是GB等級的時候 或許就可以體會我說的話了 有興趣歡迎私下討論稍微更正 應該說資料點數是以10^9以上個int來計算的時候沒記錯我當初跑了10^10^4個迴圈 一個迴圈產生3個int一定要用迴圈是因為下個點是根據之前資料產生的 當資料大的時候就要存回硬碟適時再抓出來 每個迴圈也會呼叫其他迴圈有興趣我可以把原始檔丟上來C和MATLAB都有 是我研究所修課的期末project我當時是已有八年Matlab經驗 C不到半年
作者: celestialgod (天)   2015-04-26 11:09:00
我覺得s大根本沒看過費式數列的效能比較,差到四千多倍
作者: oversky0 (oversky0)   2015-04-26 11:36:00
http://bit.ly/1EEbuQK 向量化的費式數列。我沒用過,有沒有人有興趣測一下時間?
作者: celestialgod (天)   2015-04-26 12:16:00
樓上這是一個矩陣向量化去算各自費式數列的值,不是單一個數的費式數列向量化
作者: sunev (Veritas)   2015-04-26 12:43:00
jatj 可以大概講一下演算法嗎?如果沒辦法用空間換時間那是沒救沒錯。celestialgod的費式數列是什麼意思?不能像oversky0一樣用公式解嗎?
作者: celestialgod (天)   2015-04-26 13:15:00
oversky0的連結是向量化運算整數矩陣的每一個元素的費式數列,等於一次跑跟矩陣元素一樣多個的費式數列,說真的那樣不如建立一個最大數,再用參照位置找出來對應的費式數列值。最大數的費式數列反正他還是遞迴就是會比c慢上許多。
作者: sunev (Veritas)   2015-04-26 13:28:00
oversky0給的連結是直接用公式,沒有用到遞迴。matlab用這個公式是有可能比c慢,但應該不會慢到十倍以上
作者: celestialgod (天)   2015-04-26 13:47:00
最後一行還是call itself.....我誤會了.... 抱歉,不過公式解確實會快一點,我例子舉的不夠好Computation Time Comparison Between Matlab and C++... ,2012超過四百倍。
作者: sunev (Veritas)   2015-04-26 14:15:00
你說的四百倍是指遞迴公式嗎? 你算到多大的n啊?
作者: oversky0 (oversky0)   2015-04-26 14:21:00
四千倍大概可以參考這邊 http://julialang.org/
作者: sunev (Veritas)   2015-04-26 14:40:00
樓上的連結真的是太慘烈了……
作者: celestialgod (天)   2015-04-26 14:57:00
julia某些比較實在不適合或許可以嘗試用PSO做比較,兩者在較多Swarms下如果目標函數是難以向量化的函數,會差上幾百倍例如:design的optimal,分類的AUC, accurate rate
作者: jatj   2015-04-27 04:22:00
給原po應該要了解各個語言的優缺點 適時選擇適當語言
作者: warex14 (航)   2015-04-27 15:45:00
我確實沒遇過那種MATLAB要跑超久的project我c也沒有很精通所以我也只是就我曾經遇過的問題來說還在coding c的時候MATLAB應該已經寫好且跑完了沒有說一定是這樣,但非特殊情形的時候,我覺得是這樣啦
作者: math99 (新世界)   2015-04-28 14:19:00
換個角度想 乘機會多學一套軟體也不錯啊

Links booklink

Contact Us: admin [ a t ] ucptt.com