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