Calculadora de caracteres en C #

De alguna manera, necesitaba una biblioteca en C #, que pueda hacer cálculos simbólicos (de vez en cuando suplemente las capacidades de un programa matemático). Cualquier código fuente en la red se puede encontrar en diferentes idiomas, pero no fue posible encontrar algo más simple y más comprensible. Llamó la atención a Jasymca (Calculadora simbólica de Java) .

Desafío


Para implementar un análogo del bloque Mathdes odesolve en SMath Studio, fue necesario resolver ecuaciones para derivadas. No hay restricciones especiales en el sistema ODE solucionable. Lo que el usuario establece en una forma relativamente arbitraria debe convertirse a una forma conveniente para la solución numérica del ODE. Debería verse así:



Eludir las posibilidades del lenguaje c # me resultó difícil aquí en el caso general. La ayuda del motor de personajes no haría daño.

Conversión de fuente


Miré el código fuente del applet. No parece muy aterrador, pero necesita un convertidor Java en C #. En el momento en que comenzaba a hacer esto, encontré un recurso en línea más o menos funcional, que no podía recordar ahora. Parece que fue un recurso de Tangible Software Solutions, como Los comentarios en el código fuente son similares a los realizados por su convertidor actual como un programa.
Todo está bien, pero una cosa es mala. El recurso convirtió de forma gratuita solo el tamaño limitado de la fuente. Verdadero límite en el número de líneas. Es muy extraño, pensé, y cegué todo el contenido en un archivo en una línea. Luego convertí las fuentes de una sola línea al equivalente de c # de forma gratuita y las restauré a la normalidad en Visual Studio usando el formato automático.

Finalización de archivo


No es necesario decir que el convertidor automático se convierte en su mayor parte, pero con el contenido en el que aún necesita trabajar. En ese momento, me di cuenta de que claramente no tenía suficientes niveles en ambos idiomas para resolver todos los problemas de compilación. El tiempo pasó, veneraba a John Skeet. El camarada Skeet infundió determinación.

En el proceso de la lucha por la compilación, el convertidor recordó con una palabra amable. Hizo casi todo el trabajo tedioso. No dominó solo la parte matemática en algunos puntos. Se refería a una gran clase de JMath. La conversión de representación doble a hexadecimal y viceversa descansaba en algunos casos con una restricción en el método BitConverter.Int64BitsToDouble (), que no funciona con algunas constantes largas sin signo, por ejemplo, -0 ( 0x8000000000000000 ). Aquí nuevamente, el camarada Skeet vino al rescate, no sin cuya ayuda logramos presentar este valor como 1.0 / double.NegativeInfinity. En general, esta aritmética de lo "infinitesimal" todavía me persigue, porque No estoy seguro de la interpretación correcta de todo lo que el autor Jasymca tenía en mente.

Después de corregir algunos errores semánticos, reemplazar el trabajo con tipos y sus instancias, y agregar una interfaz de consola, logramos iniciar este proyecto. Hace tiempo que quería mirar la cocina interior de esos programas simbólicos. Symbolic C ++ es una cosa y Java o C # es otra muy distinta. El umbral de entrada es mucho más bajo.

Al momento de escribir, la calculadora se ve así:



El archivo ejecutable está disponible en el repositorio . Requiere .Net 2.0. Hay una dependencia en LinqBridge para que Linq funcione en .Net 2.0 (la biblioteca está adjunta allí).

Casi todo funciona desde la documentación del autor Jasymca. La excepción es trabajar con gráficos, es decir trazando funciones. Creo que será más fácil volver a escribir esta parte que al puerto. Las funciones que dependen de bibliotecas de terceros (LAPACK, etc.) no están incluidas. También hay fallas que se borrarán con el tiempo.

Conclusión


El proyecto fue creado para los amantes de las matemáticas simbólicas. Si lo desea, puede llevarlo a la biblioteca y utilizarlo en sus propios proyectos donde se requieran matemáticas numéricas o simbólicas simples: trabajar con números complejos, integración, diferenciación, resolver ecuaciones, etc. El autor Jasymca posicionó el programa como una herramienta de capacitación para aquellos que desean crear su propio programa. realizar cálculos simbólicos:
Jasymca ha sido desarrollado para enseñar matemáticas, especialmente para facilitar una entrada rápida y fácil a las matemáticas de la computadora. Uno de los principales obstáculos son las calculadoras de bolsillo, que evitan que muchos estudiantes usen computadoras para las matemáticas. Las calculadoras de bolsillo son baratas y portátiles, mientras que los programas CAS a menudo son caros y siempre requieren al menos una computadora portátil para funcionar. Jasymca es un software gratuito y se ejecuta en casi cualquier sistema equipado con un microprocesador: desde teléfonos móviles y pdas hasta computadoras con Windows / Linux / Macos, incluso en consolas de juegos o enrutadores de Internet.
Espero que la versión C # del código fuente también sea útil para usted.

Referencias


1. Jasymca (Calculadora simbólica de Java) .
2. Fuentes de Jasymca (zip) .
3. Jasymca 2.0 - Calculadora simbólica para Java (Manual, pdf) .
4. Una descripción general de tales bibliotecas Java .
5. El repositorio del proyecto .

Source: https://habr.com/ru/post/439656/


All Articles