2011-11-06 2 views
18

J'ai développé un programme en Octave auquel j'aimerais ajouter une couche GUI. Je veux créer un programme exécutable en C# que je puisse distribuer mais que je veux coller avec les constructions d'algèbre linéaire d'Octave sans avoir à les implémenter moi-même. En particulier, je veux la matrice de base, les opérations vectorielles et les fonctions d'optimisation (comme fminunc et fmincg).Interfaçage octave avec C#

Quelle est la meilleure façon d'y parvenir? Bibliothèque d'algèbre linéaire C# appropriée, peut-être?

+1

Vous devriez éditer votre titre pour assortir votre question, vous pourriez obtenir plus de personnes intéressées. – jv42

Répondre

8

Il existe de nombreuses bibliothèques mathématiques pour C#. Math.NET Numerics semble être une bonne alternative gratuite. Il y a aussi des implémentations commerciales.

Une autre alternative est d'appeler Octave avec Process.Start et d'analyser la sortie. Cela vous évite de réécrire vos calculs, mais vous devez pouvoir regrouper Octave avec votre application. Si vous voulez mélanger C# et le code mathématique, ce sera assez compliqué, mais si votre code mathématique est un gros calcul avec un seul ensemble d'entrées et un seul ensemble de sorties, cela pourrait être une bonne alternative.

6

J'ai écrit un Octave C# wrapper pour mon projet Adastra:

http://code.google.com/p/adastra/source/browse/trunk/src/Adastra/Tools/OctaveController.cs

C'est un exemple d'utilisation: Ce http://code.google.com/p/adastra/source/browse/trunk/src/Adastra/Algorithms/OctaveLogisticRegression.cs est un hybride Octave et C# mise en œuvre de régression logistique classificateur.

+0

Votre code m'a beaucoup aidé, merci !!! – Narek

+0

@Anton Andreev Peut-il gérer les parcelles? Je peux faire des calculs en utilisant OctaveController, mais je n'arrive pas à comprendre comment afficher les tracés. – demongolem

+0

@Anton - cela semble génial; Merci d'avoir partagé. Savez-vous comment cela serait facile de travailler dans Mono sous Linux? Je vois que vous avez des appels d'API à Kernel32 ... (MISE À JOUR: J'ai repéré ceci: http://www.codeproject.com/Articles/342007/OctaveSharp-Running-GNU-Octave-with-Csharp) –

2

Pour construire un autonome: http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html#Standalone-Programs

J'ai un problème similaire, ce qui est de créer un fichier .dll pour C# que je cherchais un moyen de le faire pendant un certain temps maintenant, je n'ai pas été capable de trouver des instructions ou un moyen facile de le faire. C'est plus un projet en cours qu'une question, mais je prendrais certainement n'importe quelle réponse ou aide! :)

Je prévois de garder la trace de mes efforts ici, donc à la fin cela devrait devenir une page qui permettra les gens à trouver comment compiler octave dans une .dll (en supposant toujours que cela est possible)

Alors:

-Je me sers VS2010

-I a commencé avec les binaires compilés MS VS2010 pour octave, en supposant ce sera plus proche.

-I a créé un projet dans VS et utilisé le code suivant:

#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; 
} 

-Le code serait de trouver bien sûr pas l'octave libs, alors je les ai ajoutés, par exemple,

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;... 

pour inclure des répertoires (clic droit sur le projet -> Propriétés)

maintenant je

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 

ce qui signifie, fondamentalement, il ne peut pas trouver octave_value ... En utilisant Dumpbin.exe nous pouvons voir qu'il doit avoir à la fois octave.lib ET octinterp.lib

Il ne compile maintenant ....:)

étape suivante créer un fichier .dll ...

Notes:

Pour vérifier ce qui est exporté par un .lib:

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

Liens utiles:

similaires , question sur un autre site: http://www.daniweb.com/software-development/cpp/threads/297336/gnu-octave-for-c-how-to-start

0

Peut-être que vous pouvez regarder le Xoctave. Ceci est une interface graphique écrite pour Octave. Voici le lien:

Et peut-être que les gars pourraient avoir une solution à vos questions.