2011-11-06 25 views
18

我已經開發了一個程序,在Octave中我想添加一個GUI層。我想在C#中創建一個可執行的程序,我可以分發它,但想要堅持Octave的線性代數結構,而無需自行實現它們。特別是,我想要基本的矩陣,矢量操作和優化功能(如fminuncfmincg)。與C接口的倍頻程#

達到此目的的最佳方法是什麼?適當的C#線性代數庫,或許?

+1

您應該編輯您的標題來匹配你的問題,你可能會得到更多人的興趣。 – jv42

回答

8

c#有很多數學庫。 Math.NET Numerics似乎是一個很好的免費替代品。也有商業實現。

另一種方法是用Process.Start調用Octave並解析輸出。這樣可以避免重寫計算,但您需要將Octave與您的應用程序捆綁在一起。如果你想緊密地混合使用c#和數學代碼,這將是一個相當複雜的過程,但是如果你的數學代碼是一個具有一組輸入和一組輸出的大計算,那麼它可能是一個很好的選擇。

6

我寫了八度C#包裝我阿達斯特拉項目:

http://code.google.com/p/adastra/source/browse/trunk/src/Adastra/Tools/OctaveController.cs

這是一個例子用法:http://code.google.com/p/adastra/source/browse/trunk/src/Adastra/Algorithms/OctaveLogisticRegression.cs這是一種混合八度和Logistic迴歸classificator的C#實現。

+0

您的代碼對我幫助很大,謝謝! – Narek

+0

@Anton安德列夫它可以處理情節?我可以使用OctaveController進行計算,但無法弄清楚如何查看圖。 – demongolem

+0

@Anton - 這看起來真棒;感謝分享。你知道在Linux上使用Mono有多簡單嗎?我看到你有一些API調用Kernel32 ...(更新:我發現了這個:http://www.codeproject.com/Articles/342007/OctaveSharp-Running-GNU-Octave-with-Csharp) –

2

要建立一個獨立的: http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html#Standalone-Programs

我有類似的問題,這是創造C# 我一直在尋找一種方式,以現在一會兒做一個.dll,我沒有能夠找到說明或簡單的方法來做到這一點。這是一個正在進行的項目,而不是一個問題,但我肯定會採取任何答案或幫助!:)

我打算跟蹤我在這裏的努力,所以最終這應該成爲一個頁面,將允許人們找到如何編譯倍頻到.DLL(總是假設這是可能的)

所以:

-I現在用VS2010

-I開始爲八度的MS VS2010編譯的二進制文件,假設這將更接近。

-I創造VS一個項目,用下面的代碼:

#include <iostream> 
#include <octave/oct.h> 
#include <octave/octave.h> 
#include <octave/parse.h> 


int main(int argc, char* argv[]) 
{ 
    std::cout<<"hello world"<<std::endl; 
    char a[900]; 
    std::cin>>a; 
    return 0; 
} 

-The碼當然會找不到倍頻庫,所以我加了他們,例如,

C:\Octave\Octave-3.6.1-VS10\lib\octave\3.6.1;C:\Octave\Octave-3.6.1-VS10\include\octave-3.6.1;C:\Octave\Octave-3.6.1-VS10\include;$(VCInstallDir)include;... 

要包含目錄(右鍵單擊項目 - >屬性)

現在,我得到

Error 73 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall octave_value::~octave_value(void)" ([email protected]@[email protected]) referenced in function "public: void * __thiscall octave_value::`vector deleting destructor'(unsigned int)" ([email protected]@[email protected]) ...\Projects\cppap32\cppap32\main.obj cppap32 

這基本上意味着它不能octave_value ...發現通過使用DUMPBIN.EXE我們可以看到,它需要有兩個octave.lib和octinterp.lib

現在確實編譯....:)

下一步創建一個.dll ......

注:

要檢查什麼是一個的.lib出口:

dumpbin.exe /exports C:\Octave\Octave-3.6.1-VS10\lib\octave\3.6.1\octave.lib 

相關鏈接:

類似,對其他網站開放的問題: http://www.daniweb.com/software-development/cpp/threads/297336/gnu-octave-for-c-how-to-start

0

也許你可以看看Xoctave。這是一個爲O​​ctave編寫的GUI。這裏是鏈接:www.xoctave.com

也許傢伙有可能對你的問題的解決方案。