C#中的字符计算器

不知何故,我需要用c#编写一个可以进行符号计算的库(我不时补充一个数学程序的功能)。 网络上的任何源代码都可以用不同的语言找到,但是找不到更简单,更易理解的东西。 他提请注意Jasymca(Java符号计算器)

挑战赛


为了在SMath Studio中实现Mathcad odesolve块的模拟,必须求解导数方程。 可溶解的ODE系统没有特别限制。 用户以相对任意的形式设置的内容必须转换为便于ODE数值求解的形式。 它看起来应该像这样:



在一般情况下,这对我来说很难解决c#语言的可能性。 角色引擎的帮助不会受到伤害。

源转换


我看了一下applet的源代码。 似乎并不很吓人,但是您需要在C#中使用Java转换器。 在我刚开始执行此操作时,我发现了一个或多或少有效的在线资源,现在我已经不记得了。 看起来它是来自有形软件解决方案的资源,因为 源代码中的注释类似于其当前转换器作为程序进行的注释。
一切都好,但一件事情是坏的。 资源是免费转换的,仅源的有限大小。 真正的行数限制。 我想这很奇怪,并且将一行中的所有内容都隐藏在一行中。 然后,我将单行源代码免费转换为c#等效项,并使用自动格式在Visual Studio中将其恢复为正常状态。

文件定稿


不用说,自动转换器可以转换大多数形式,但仍需要处理内容。 那时,我意识到两种语言的水平显然不足以解决所有编译问题。 时间流逝,尊敬John Skeet。 斯基特同志灌输决心。

在努力进行编译的过程中,转换器用一个友好的词来回忆。 他几乎完成了所有繁琐的工作。 在某些时候,他并不仅掌握数学部分。 它涉及一大类JMath。 在某些情况下,对BitConverter.Int64BitsToDouble()方法的限制在于将double转换为hex表示,反之亦然,该方法不适用于某些无符号长常量,例如-0( 0x8000000000000000 )。 Skeet同志再次来此营救,并非没有我们的帮助,我们设法将此值呈现为1.0 / double.NegativeInfinity。 通常,“无穷小”的这种算法仍然困扰着我,因为 我不确定作者Jasymca想到的所有内容是否正确。

在纠正了一些语义错误,用类型及其实例替换工作并添加控制台界面之后,我们设法启动了该项目。 我一直想看看这种符号程序的内部厨房。 符号C ++是一回事,而Java或C#是另一回事。 进入门槛要低得多。

在撰写本文时,计算器如下所示:



可执行文件在资源库中可用。 需要.Net 2.0。 Linq在.Net 2.0中有一个依赖LinqBridge的功能(该库随附在其中)。

几乎所有内容都来自作者Jasymca的文档 。 例外是使用图形,即 绘图功能。 我认为重新编写此部分要比移植容易。 不包括依赖于第三方库的功能(LAPACK等)。 随着时间的流逝,也会出现一些小故障。

结论


该项目是为符号数学爱好者创建的。 如果需要,可以将其带到库中,并在需要简单数值或符号数学的项目中使用:使用复数,积分,微分,求解方程等。作者Jasymca 将该程序定位为那些想要创建自己的程序的培训工具 。执行符号计算:
Jasymca是为数学教学而开发的,特别是为了便于快速轻松地学习计算机数学。 主要障碍之一是袖珍计算器,这使许多学生无法使用计算机进行数学运算。 袖珍计算机既便宜又便于携带,而CAS程序通常很昂贵,并且至少需要一台笔记本电脑才能运行。 Jasymca是免费软件,几乎可以在配备微处理器的任何系统上运行:从手机和pda到Windows / linux / macos计算机,甚至在游戏机或Internet路由器上。
我希望源代码的C#版本对您也有所帮助。

参考文献


1. Jasymca(Java符号计算器)
2. Jasymca(zip)的来源
3. Jasymca 2.0-Java的符号计算器(手册,pdf)
4. 此类Java库的概述
5. 项目的存储库

Source: https://habr.com/ru/post/zh-CN439656/


All Articles