Взаимодействие октавы с С#
Я разработал программу в Octave, к которой я хотел бы добавить слой GUI. Я хочу создать исполняемую программу на С#, которую я могу распространять, но хочу придерживаться конструкций линейной алгебры Octave без необходимости реализовать их самостоятельно. В частности, мне нужны базовые матричные, векторные операции и функции оптимизации (например, fminunc
и fmincg
).
Каков наилучший способ достичь этого? Соответствующая библиотека линейной алгебры С#, возможно?
Ответы
Ответ 1
Существует множество математических библиотек для С#. Math.NET Numerics кажется хорошей альтернативой. Существуют также коммерческие реализации.
Другой вариант - вызвать Octave с Process.Start
и проанализировать вывод. Это избавит вас от переписывания ваших вычислений, но вам нужно сделать связку Octave с вашим приложением. Если вы хотите жестко смешивать С# и математический код, это будет довольно сложно, но если ваш математический код является большим вычислением с одним набором входов и одним набором выходов, это может быть хорошей альтернативой.
Ответ 2
Я написал оболочку Octave С# для моего проекта 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 и С# классификатора логистической регрессии.
Ответ 3
Чтобы создать автономный:
http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html#Standalone-Programs
У меня есть аналогичная проблема, которая заключается в создании .dll для С#
Я искал способ сделать это какое-то время, я не смог найти инструкции или простой способ сделать это. Это скорее текущий проект, чем вопрос, но я определенно беру любой ответ или помощь!:)
Я планирую отслеживать свои усилия здесь, поэтому в конце это должно стать страницей, которая позволит людям находить, как скомпилировать октаву в .dll(всегда предполагая, что это возможно)
Итак:
-Я использую VS2010
-Я начал с компилированных двоичных файлов 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;
}
-Код, конечно, не найдет октавные библиотеки, поэтому я добавил их, например,
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)" ([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 AND 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
Ответ 4
Может быть, вы можете посмотреть Xoctave. Это графический интерфейс, написанный для Octave. Вот ссылка: www.xoctave.com
И, возможно, у ребят есть решение для ваших вопросов.