Подтвердить что ты не робот

Взаимодействие октавы с С#

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

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

4b9b3361

Ответ 1

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

Другой вариант - вызвать Octave с Process.Start и проанализировать вывод. Это избавит вас от переписывания ваших вычислений, но вам нужно сделать связку 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

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