D'une certaine manière, j'avais besoin d'une bibliothèque en c #, qui peut faire des calculs symboliques (de temps en temps je complète les capacités d'un programme mathématique). Tout code source sur le réseau peut être trouvé dans différentes langues, mais il n'a pas été possible de trouver quelque chose de plus simple et de plus compréhensible. Il a attiré l'attention sur
Jasymca (Java Symbolic Calculator) .
Défi
Pour implémenter un analogue du bloc Mathodes odesolve dans SMath Studio, il était nécessaire de résoudre des équations pour les dérivés. Il n'y a pas de restrictions spéciales sur le système ODE soluble. Ce que l'utilisateur définit sous une forme relativement arbitraire doit être converti en une forme convenant à la solution numérique de l'ODE. Cela devrait ressembler à ceci:

Se déplacer dans les possibilités du langage c # s'est avéré difficile pour moi dans le cas général. L'aide du moteur de personnage ne ferait pas de mal.
Conversion de source
J'ai regardé le code source de l'applet. Cela ne semble pas très effrayant, mais vous avez besoin d'un convertisseur Java en c #. Au moment où je commençais tout juste à faire cela, j'ai trouvé une ressource en ligne de travail plus ou moins, dont je ne pouvais pas me souvenir maintenant. Il semble que ce soit une ressource de Tangible Software Solutions, comme les commentaires dans le code source sont similaires à ceux faits par leur convertisseur actuel en tant que programme.
Tout est bon, mais une chose est mauvaise. La ressource convertie gratuitement uniquement la taille limitée de la source. Véritable limite sur le nombre de lignes. C'est très étrange, je pensais, et aveuglé tout le contenu d'un fichier sur une seule ligne. Ensuite, j'ai converti gratuitement les sources unifilaires en équivalent c # et les ai restaurées à la normale dans Visual Studio à l'aide du formatage automatique.
Finalisation des fichiers
Inutile de dire que le convertisseur automatique convertit la plupart du temps, mais avec le contenu sur lequel vous devez encore travailler. A cette époque, j'ai réalisé que je n'avais clairement pas assez de niveaux dans les deux langues pour résoudre tous les problèmes de compilation. Le temps a passé, vénéré John Skeet. Le camarade Skeet a inculqué la détermination.
Au cours de la lutte pour la compilation, le convertisseur a rappelé avec un mot aimable. Il a fait presque tout le travail fastidieux. Il n'a pas maîtrisé seulement la partie mathématique à certains moments. Cela concernait une grande classe de JMath. La conversion de la représentation double en hexadécimal et vice versa reposait dans certains cas dans une restriction pour la méthode BitConverter.Int64BitsToDouble (), qui ne fonctionne pas avec certaines constantes longues non signées, par exemple -0 (
0x8000000000000000 ). Là encore, le camarade Skeet est venu à la rescousse, non sans l'aide de qui nous avons réussi à présenter cette valeur comme 1.0 / double.NegativeInfinity. En général, cette arithmétique de "l'infinitésimal" me hante encore, car Je ne suis pas sûr de l'interprétation correcte de tout ce que l'auteur Jasymca avait en tête.
Après avoir corrigé quelques erreurs sémantiques, remplacé le travail par des types et leurs instances et ajouté une interface de console, nous avons réussi à démarrer ce projet. J'ai longtemps voulu regarder la cuisine intérieure de ces programmes symboliques. C ++ symbolique est une chose et Java ou C # en est une autre. Le seuil d'entrée est beaucoup plus bas.
Au moment de la rédaction, la calculatrice ressemble à ceci:

Le fichier exécutable est disponible dans le
référentiel . Nécessite .Net 2.0. Il existe une dépendance à LinqBridge pour que Linq fonctionne dans .Net 2.0 (la bibliothèque y est jointe).
Presque tout fonctionne à partir de la
documentation de l' auteur Jasymca. L'exception concerne les graphiques, c'est-à-dire fonctions de traçage. Je pense qu'il sera plus facile de réécrire cette partie que de mettre en communication. Les fonctions dépendantes de bibliothèques tierces (LAPACK, etc.) ne sont pas incluses. Il existe également des problèmes qui seront résolus au fil du temps.
Conclusion
Le projet a été créé pour les amateurs de mathématiques symboliques. Si vous le souhaitez, il peut être apporté à la bibliothèque et utilisé dans vos propres projets où des mathématiques numériques ou symboliques simples sont nécessaires: travail avec des nombres complexes, intégration, différenciation, résolution d'équations, etc. L'auteur Jasymca a
positionné le programme comme un outil de formation pour ceux qui veulent créer leur propre programme effectuer des calculs symboliques:
Jasymca a été développé pour l'enseignement des mathématiques, en particulier pour faciliter une entrée rapide et facile en mathématiques informatiques. L'un des principaux obstacles sont les calculatrices de poche, qui empêchent de nombreux élèves d'utiliser des ordinateurs pour les mathématiques. Les calculatrices de poche sont bon marché et portables, tandis que les programmes CAS sont souvent chers et nécessitent toujours au moins un ordinateur portable pour fonctionner. Jasymca est un logiciel gratuit et fonctionne sur presque tous les systèmes équipés d'un microprocesseur: des téléphones portables et des pdas aux ordinateurs Windows / Linux / MacOS, même sur les consoles de jeux ou les routeurs Internet.
J'espère que la version c # du code source sera également utile pour vous.
Les références
1.
Jasymca (calculatrice symbolique Java) .
2.
Sources de Jasymca (zip) .
3.
Jasymca 2.0 - Calculatrice symbolique pour Java (manuel, pdf) .
4.
Un aperçu de ces bibliothèques Java .
5.
Le référentiel du projet .