2011-11-06 2 views
18

Я разработал программу в Octave, к которой я хотел бы добавить слой GUI. Я хочу создать исполняемую программу на C#, которую я могу распространять, но хочу придерживаться конструкций линейной алгебры Octave без необходимости реализовать их самостоятельно. В частности, мне нужны базовые матрицы, векторные операции и функции оптимизации (например, fminunc и fmincg).Взаимодействие октавы с C#

Каков наилучший способ достичь этого? Соответствующая библиотека линейной алгебры C#, возможно?

+1

Вы должны отредактировать свой заголовок в соответствии с вашим вопросом, вы можете заинтересовать больше людей. – jv42

ответ

8

Существует множество математических библиотек для C#. Math.NET Numerics кажется хорошей альтернативой. Существуют также коммерческие реализации.

Другим вариантом является вызов Octave с Process.Start и анализ вывода. Это избавит вас от переписывания ваших вычислений, но вам нужно сделать связку Octave с вашим приложением. Если вы хотите сильно комбинировать C# и математический код, это будет довольно сложно, но если ваш математический код - большой расчет с одним набором входов и одним набором выходов, это может быть хорошей альтернативой.

6

Я написал # обертку Октав C для моего проекта Adastra:

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 Это гибрид Октав и C реализация логистической регрессии Классификатор #.

+0

Ваш код мне очень помог, спасибо !!! – Narek

+0

@ Антон Андреев Может ли он обрабатывать графики? Я могу делать вычисления с помощью OctaveController, но не могу понять, как просматривать графики. – demongolem

+0

@ Антон - это выглядит потрясающе; Спасибо, что поделился. Вы знаете, как легко было бы работать в Mono на Linux? Я вижу, что у вас есть некоторые вызовы API для Kernel32 ... (UPDATE: Я заметил это: 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

У меня аналогичная проблема, которая заключается в создании DLL-файл для C# Я искал способ сделать это на некоторое время теперь, я не имею были в состоянии найти инструкции или простой способ сделать это. Это скорее текущий проект, чем вопрос, но я определенно беру любой ответ или помощь! :)

Я планирую отслеживать свои усилия здесь, поэтому в конце это должно стать страницей, которая позволит людей, чтобы найти, как компилировать октаву в .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 код будет, конечно, не найти октаву LIBS, поэтому я добавил их, например,

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. Это графический интерфейс, написанный для Octave. Вот ссылка: www.xoctave.com

И, может быть, ребята могли бы решить ваши вопросы.

Смежные вопросы