Взаимодействие октавы с C # - PullRequest
20 голосов
/ 06 ноября 2011

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

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

Ответы [ 5 ]

8 голосов
/ 06 ноября 2011

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

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

7 голосов
/ 17 декабря 2011

Я написал оболочку Octave 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 Это гибридная реализация Octave и C #классификатора логистической регрессии.

2 голосов
/ 03 мая 2012

Чтобы создать автономный: http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html#Standalone-Programs

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

Я планирую отслеживать свои усилия здесь, так что в конце это должно стать страницей, котораяпозволит людям найти, как скомпилировать октаву в .dll (всегда предполагая, что это возможно)

Итак:

-Я использую VS2010

-Я начал сMS VS2010 скомпилировал двоичные файлы для октавы, предполагая, что это будет ближе.

-Я создал проект в 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;
}

-Код, конечно, не найдетoctave 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;...

Для включения каталогов (щелкните правой кнопкой мыши Project -> Properties)

Теперь я получаю

Error   73  error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall octave_value::~octave_value(void)" (__imp_??1octave_value@@QAE@XZ) referenced in function "public: void * __thiscall octave_value::`vector deleting destructor'(unsigned int)" (??_Eoctave_value@@QAEPAXI@Z)    ...\Projects\cppap32\cppap32\main.obj   cppap32

что в основном означает, что он не может найти octave_value ... Используя dumpbin.exe, мы можем видеть, что он должен иметь octave.lib И octinterp.lib

Теперь он компилируется .... :)

Следующий шаг - создание .dll ...

Примечания:

Чтобы проверить, что такое expот .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 голосов
/ 29 июня 2018

Мне недавно понадобилась эта функциональность для моего любимого проекта, и все существующие решения не были удобными для пользователя или просто не работали. Для этой цели я создал кроссплатформенную библиотеку .NET Standard с открытым исходным кодом. Я надеюсь, что это спасет некоторые головные боли - Octave.NET на GitHub

0 голосов
/ 30 декабря 2012

Может быть, вы можете посмотреть Xoctave.Это графический интерфейс, написанный для Octave.Вот ссылка: www.xoctave.com

И, может быть, у ребят найдется решение ваших вопросов.

...