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