標籤:

如何將MATLAB轉化為C#?

跪求,不用動態鏈接庫的


感謝邀請

找一個C#社區,發起一個話題:

「這個程序用MATLAB實現起來太簡單了,C#實現起來至少要5倍的代碼量,我欽定MATLAB是墜吼的語言」

內容一定要把MATLAB的程序寫清楚,把要實現什麼說清楚

之後就有機會收穫到相應的C#程序,同時還將隨機獲得「C#的優勢是什麼?」「C#能做MATLAB不能做的有哪些?」等問題的答案

類似方法可以推廣到其他語言轉化


額(⊙o⊙)…,這個事情我干過

用http://math.net重寫一下演算法

自己封裝http://math.net實現一下MATLAB的內置函數甚至可以做到語法基本和MATLAB一致


歪個題.

也可以試試F#, 然後給C#用

對比看圖.

圖片來自於 Evelina Gabasova 的ppt https://s3-eu-west-1.amazonaws.com/evelinag/fsExchange.pdf 裡面有關於怎麼寫公式往F#轉化的技巧啥的...


同意樓上 @matsuz Math.Net重寫演算法,Matlab『大部分基礎功能Math.Net都能實現;

需要學一下lambda表達,因為http://Math.Net大量矩陣的里的「函數」都是用lambda表達完成的。

LinearAlgebra(各種類型),Distribution這些復包里都有一些不錯的函數

實際應用還是需要一些loop的但是效率已經大大提高了

matlab的源碼可以在matlab自己的library里查,但是大量函數非常Operate Overloading,我們只需挑我們需要的功能完成(畢竟不是造輪子,要是目的造輪子不會來這問這個問題了),二式matlab自己的數據格式比較髒亂,直接翻譯到.Net框架下會造成一些麻煩,所以我們還是秉著「需要什麼就實現什麼」的原則在http://Math.Net里慢慢找和拼好了,搭積木不需要從砍木頭這一步開始嘛。

個別實在是複雜的函數可以考慮一下把dll拉出來,或者乾脆學我和樓上 @壯壯 F#大法好啊

圖個槽,想扣的話基本上StackOverflow得天天逛了,裡面全是演算法。


是不是有個c++寫的開源軟體Octave?

雖然我沒用過,但是據說開發者有說過,如果你發現octave和matlab的不同,可以告訴他,他改。。。照他的源碼改改就出來了

《matlab c# book》this book is a great tutorial for c# programmers who use matlab to dev apps and slns不知這本書靠譜不


既然不用DLL那麼就只能走間接的了,先轉為C或C++然後轉為C#,後者是有一個開源項目的C++ to C# Code Converter

當然前者肯定也有的吧,當然這個我沒試過,我是覺得不是說Matlab是用C實現的么,那麼轉成C應該不難吧:MATLAB Central 這兒提到的 Real-Time Workshop 可以試試。

但是這樣總歸太麻煩了。


表示正在把matlab的通信模擬程序轉成Qt(C++)程序,蛋疼不已2333


童鞋,你為什麼不用動態鏈接庫呢?!微軟集齊了世界上最傑出的程序員開發.NET平台,使用封裝技術和動態鏈接庫,就是為了讓人們的創新性的想法轉化為程序代碼的過程更簡單.將Matbal語言轉化為C#可以使用的代碼,並且不用動態鏈接庫,就好比是烏鴉喝水:

有一隻聰明的烏鴉喝不到瓶子里的水,它轉身看到身後的淡水湖清澈明凈的淡水河邊的小石子,靈機一動,來來回回若干趟,將小石子放到瓶子里,水漫上來了,就喝到了.(沒錯,是清澈明凈的淡水河邊的小石子.)

所以,問題的實質是有人曾經在你的思維的土地里種了一顆有問題的種子:"動態鏈接庫不是個好東西,動態鏈接庫很難很不好用的".

問題的回答應該是幫助你糾正這個錯誤,以及用鐵的實時告訴你,用動態鏈接庫是多麼簡單:

第一步:在2016版以上的Matlab的命令輸入行中輸入"coder"命令,按回車,Matlab會彈出代碼轉化工具箱,專門用於將Matlab代碼轉化為C代碼或C++代碼:

選擇你要轉化的matlab函數,根據指引規定好傳入和傳出參數,即可自動將其轉化為C++代碼(頭文件和源文件).

第二步:將C++頭文件和源文件轉化為供C#用的動態鏈接庫.

教你快速在c#中調用C++代碼(函數) - CSDN博客

整個過程的學習時間成本不會超過2個小時.


matlab有dcom介面,使用com interop就可以在c#里直接調用matlab程序,看起來玩c++和com的人越來越少了。


為什麼是C#?C#應該不是為大型計算項目設計的吧,用C#的話速度肯定是個問題,搞不好比Matlab還慢,況且OpenCV,FFTW,這些基本的可以實現matlab的庫都不支持C#,所以你這個項目坑很大啊,建議先轉成c++然後用C#去調生成的dll。


推薦閱讀:

如何看待2017的 The .NET Language Strategy 去掉了C++/CLI支持?
什麼情況下使用異常處理?
C# 中如何有效地釋放內存?
如何評價微軟推出的 .NET Native?
如何評價 JetBrains 將要推出的跨平台 C# IDE: Rider?

TAG:MATLAB | C# |