2011-11-06 17 views
18

He desarrollado un programa en Octave al que me gustaría agregar una capa de GUI. Quiero crear un programa ejecutable en C# que pueda distribuir, pero quiero seguir con las construcciones de álgebra lineal de Octave sin tener que implementarlas por mi cuenta. Particularmente, quiero operaciones básicas de matriz, operaciones vectoriales y optimización (como fminunc y fmincg).octava de interconexión con C#

¿Cuál es la mejor manera de lograr esto? ¿Biblioteca apropiada de álgebra lineal de C#, tal vez?

+1

Debe editar el título para que coincida con su pregunta, puede obtener más personas interesadas. – jv42

Respuesta

8

Hay muchas librerías 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 reescribir sus cálculos, pero debe poder combinar Octave con su aplicación. Si quieres mezclar fuertemente el código C# y el código matemático, será bastante complicado, pero si tu código matemático es un gran cálculo con un solo conjunto de entradas y un solo conjunto de resultados, podría ser una buena alternativa.

6

He escrito un Octave C# envoltorio para mi proyecto 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 Se trata de un híbrido de octava y C# aplicación de regresión logística clasificador.

+0

¡Tu código me ayudó mucho, gracias! – Narek

+0

@Anton Andreev ¿Puede manejar parcelas? Puedo hacer cálculos usando OctaveController, pero no puedo entender cómo ver los gráficos. – demongolem

+0

@ Anton: esto se ve increíble; gracias por compartir. ¿Sabes lo fácil que sería trabajar en Mono en Linux? Veo que tiene algunas llamadas API a Kernel32 ... (ACTUALIZACIÓN: he visto esto: http://www.codeproject.com/Articles/342007/OctaveSharp-Running-GNU-Octave-with-Csharp) –

2

Para construir un independiente: http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html#Standalone-Programs

Tengo un problema similar, que consiste en crear un archivo .dll para C# He estado buscando una manera de hacer esto desde hace un tiempo, no tengo sido capaz de encontrar instrucciones o una forma fácil de hacerlo. Esto es más un proyecto en curso que una pregunta, ¡pero definitivamente tomaría cualquier respuesta o ayuda! :)

Estoy planeando hacer un seguimiento de mis esfuerzos aquí, así que al final esto debería convertirse en una página que permita las personas encontrar la forma de compilar octava en un .dll (siempre suponiendo que esto es posible)

Así:

-I estoy usando VS2010

-Empecé con los binarios compilados para MS VS2010 octava, asumiendo esto estará más cerca.

-I creó un proyecto en VS y se utiliza 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 sería, por supuesto, no encontrar las librerías de octava, así que les añade, 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;... 

Incluir a Directorios (Haga clic derecho sobre Proyecto -> Propiedades)

ahora consigo

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 

que básicamente significa que no puede encontrar octave_value ... Mediante el uso de Dumpbin.exe podemos ver que tiene que tener tanto octave.lib Y octinterp.lib

Ahora se compila ....:)

El siguiente paso crear un archivo .dll ...

Notas:

para comprobar lo que se exporta por un .lib:

dumpbin.exe /exports C:\Octave\Octave-3.6.1-VS10\lib\octave\3.6.1\octave.lib 

Enlaces de interés:

similares , pregunta abierta en otro sitio: http://www.daniweb.com/software-development/cpp/threads/297336/gnu-octave-for-c-how-to-start

0

Quizás puedas mirar el Xoctave. Esta es una GUI escrita para Octave. Aquí está el enlace: www.xoctave.com

Y tal vez los muchachos allí podrían tener una solución para sus preguntas.