推 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: 我沒用過,有沒有人有興趣測一下時間? 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
推 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