Interfaz de octava con C#
math octave (5)
He desarrollado un programa en Octave al que me gustaría agregar una capa GUI. Quiero crear un programa ejecutable en C # que pueda distribuir, pero quiero mantener las construcciones de álgebra lineal de Octave sin tener que implementarlas por mi cuenta. Particularmente, quiero matrices básicas, operaciones vectoriales y funciones de optimización (como fminunc
y fmincg
).
¿Cuál es la mejor manera de lograr esto? ¿Biblioteca apropiada de álgebra lineal C #, tal vez?
Hace poco necesitaba esta funcionalidad para mi proyecto de mascota y todas las soluciones existentes no eran fáciles de usar o simplemente no funcionaban. Creé una biblioteca estándar .NET de código abierto y multiplataforma para este único propósito. Espero que te guarde algunos dolores de cabeza - Octave.NET en GitHub
Hay muchas bibliotecas de matemáticas para c #. Math.NET Numerics parece ser una buena alternativa gratuita. También hay implementaciones comerciales.
Otra alternativa es llamar a Octave con Process.Start
y analizar la salida. Esto le ahorra la posibilidad de volver a escribir sus cálculos, pero debe poder agrupar Octave con su aplicación. Si desea mezclar estrechamente c # y el código matemático, esto será bastante complicado, pero si su código matemático es un cálculo grande con un solo conjunto de entradas y un solo conjunto de salidas, podría ser una buena alternativa.
He escrito un envoltorio de Octave C # para mi proyecto de Adastra:
http://code.google.com/p/adastra/source/browse/trunk/src/Adastra/Tools/OctaveController.cs
Este es un ejemplo de uso: http://code.google.com/p/adastra/source/browse/trunk/src/Adastra/Algorithms/OctaveLogisticRegression.cs Esta es una implementación híbrida de Octave y C # del clasificador de Regresión logística.
Para crear una versión independiente: http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html#Standalone-Programs
Tengo un problema similar, que es crear un .dll para C #. He estado buscando una manera de hacer esto por un tiempo, no he podido encontrar instrucciones o una forma fácil de hacerlo. Este es más un proyecto en curso que una pregunta, ¡pero definitivamente aceptaría cualquier respuesta o ayuda! :)
Estoy planeando hacer un seguimiento de mis esfuerzos aquí, por lo que al final esto debería convertirse en una página que permitirá a las personas encontrar la forma de compilar una octava en una .dll (siempre y cuando esto sea posible)
Asi que:
-Estoy usando VS2010
-Empecé con los binarios compilados de MS VS2010 para octava, asumiendo que esto será más cercano.
-He creado un proyecto en VS y utilicé el siguiente código:
#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;
}
-El código por supuesto no encontraría las libs de octava, así que las agregué, por ejemplo,
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;...
Para incluir directorios (haga clic derecho en Proyecto -> Propiedades)
Ahora me sale
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
lo que básicamente significa que no puede encontrar octave_value ... Al usar dumpbin.exe podemos ver que necesita tener tanto octave.lib Y octinterp.lib
Ahora compila .... :)
El siguiente paso es crear un .dll ...
Notas:
Para comprobar qué es exportado por un .lib:
dumpbin.exe /exports C:/Octave/Octave-3.6.1-VS10/lib/octave/3.6.1/octave.lib
Enlaces relevantes:
Preguntas abiertas similares en otro sitio: http://www.daniweb.com/software-development/cpp/threads/297336/gnu-octave-for-c-how-to-start
Tal vez puedas mirar el Xoctave. Esta es una GUI escrita para Octave. Aquí está el enlace: www.xoctave.com
Y tal vez los chicos allí podrían tener una solución para sus preguntas.