Plotter: 面向科学的计算系统&程序设计语言(Developing)2021.04.03

Plotter: 面向科学的计算系统&程序设计语言(Developing)

Plotter 是一个轻量级、完全本地运行、全平台的科学计算系统,也是一个面向科学运算的程序设计语言。

其组成分为以下几个部分:

  • 数值运算系统
  • 符号代数系统
  • 计算几何系统
  • 单位运算系统
  • 几何、数值、符号、数据可视化系统
  • Plotter 语言的编译器
  • 全平台 GUI

上述系统的一部分工作已经完成了,未完成的部分我会打括号标注。

下面我将一一解释上述组成部分。

组成部分

数值运算系统

基本的算数与函数(复数域内)

基本的四则运算、三角函数以及其反函数、双曲三角函数以及其反函数、指数函数、对数函数、一些积分函数(如 Γ 函数,黎曼 ζ 函数,高斯误差函数 \mathrm{erf} 等)和一些超几何函数、累加Σ、累乘Π、Prime、isPrime 以及其它更多。

数值微积分:导数值、定积分(黎曼积分)

向量和矩阵运算:MATLAB 中的大部分矩阵运算均支持

同时支持稠密矩阵和稀疏矩阵的运算

矩阵的数乘、矩阵的加减、矩阵之间的左乘右乘、指数运算、点乘、叉乘、差分、转置、复共轭转置、行列式、特征值、求逆、张量积、秩、迹、reshape、resize、rotate、sort、squeeze、transpose 以及更多

组合学和概率函数

组合数、排列数、阶乘、伽马函数、KL距离、随机数、多项式分布(超几何分布)、高斯分布(正态分布)

复数(支持绝大多数函数):四则运算、幂、实部、虚部、共轭、辐角

数列、迭代式的数值运算

任意精度支持的大数运算(支持绝大多数函数):例如 9999999 的阶乘

符号代数系统

符号的四则运算、幂、指数、对数、偏导、全微分、符号积分(暂未实现<并且很难实现好>)

数值和符号的分数支持

集合运算:去重、广义交、广义并、差集、对称差、补集、子集、幂集、笛卡尔乘积、multiplicity

统计学运算:列表或者矩阵的绝对中位差、最大、最小、平均数、中位数、众数、方差、标准差、卡方检验(独立性检验)、以及其它更多。

组合函数:贝尔数、卡特兰数、第二类Stirling数、素数函数以及其它。

位运算:按位与、或、非、异或、算数(或逻辑)左移、算数(或逻辑)右移。

逻辑运算:逻辑与、或、非、异或。(只实现了逻辑运算的数值运算、符号运算暂未实现

计算几何系统(待完善)

二维或三维上的

两点间距离、两直线交点、两平面交线(暂未实现)、以及其他。

单位运算系统

单位运算系统与数值计算系统和符号代数系统兼容。

支持各种数值和符号带单位的运算和转换、甚至支持矩阵(向量)和复数带单位进行运算。

单位运算系统支持声光热力电、时间、空间、能量、化学、信息等各种属性的单位

包含了公制单位和非公制单位总共数百种

以及百余种不同学科(数学、物理学、化学、信息学等)的常数(数学常数和物理常数)

几何、数值、图、数据可视化系统

几何可视化:

基础几何的创建和绘制:点、线、多边形、椭圆等。

三维图形的创建和绘制:多面体、球、线、平面等。(暂未实现)

数值可视化:

直角坐标系下以及极坐标系下的(二维已实现,三维暂未实现)

函数绘图、隐函数绘图、参数方程绘图、区域绘制

图可视化:(暂未实现)

例如:连通图的可视化、抽象语法树的可视化(暂未实现)

数据可视化:(暂未实现)

散点图、柱状图、直方图、折线图、扇形图等(暂未实现)

Plotter 语言的编译器

这是一个专门为数学以及科学运算所设计的脚本语言,可以将 Plotter 语言编译为 Javascript 代码,能够在几乎所有平台被 Javascript 引擎解释执行。

同时支持面向函数式编程、面向过程式编程和面向对象编程(待完善)。

全平台 GUI

使用三维游戏引擎开发GUI,能够支持几乎所有平台(Android、IOS、Windows、OS X、Linux、Web 浏览器、甚至各种小程序平台)

2021.04.03

2赞

:crazy_face:如有想法可移步:开发一个科学运算系统和面向科学的编程语言有意义吗? - 0xFFFF

补充说明:

  • 考虑使用 WebGL 和 Shader 来进行图形的计算和渲染(未实现)
  • 轻量级:安装包不会超过50Mib改成200Mib
    当前安卓系统的安装包为10Mib,使用使用C++ WinAPI 的 Windows 系统的安装包为21Mib。
    如果后期Plotter要使用完整的 DOM 和 Node.js ,就得使用Electron进行打包桌面版本,软件本体必定超过100Mib
为什么选用 Typescript 为开发语言?

首先 Typescript 是 Javascript 的超集,Javascript 的优势是语法非常灵活。Node.js 可以很方便的使用大量开源的 npm 包,避免自己造轮子。

Javascript 使得 Plotter 里面的所有数据都可以非常容易的序列化,并且将 Plotter 语言编译为 Javascript 语言很容易。Javascript 语言又可以在几乎所有平台运行,现在有各种 Javascript 引擎的优化(如 V8 的 JIT),Javascript 的运行效率还是挺不错的。

Javascript 不支持多线程怎么办?

大部分并发都可以通过 Javascript 的异步实现,但在进行同步的复杂运算时不可避免的需要用到多线程

可以通过 Web Worker 或者调用原生平台的 API 来实现多线程。(暂未实现)

Javascript 怎么做高性能运算?

在遇到大稠密矩阵的运算时,可以考虑使用 WebGL 来调用 GPU 进行运算。(暂未实现)

关于Plotter语言的执行(未实现)
分为两种:

  • 全部编译为JavaScript之后被JavaScript引擎解释执行 (类似于静态编译,只不过是编译为JavaScript而不是机器码)
  • 运行到哪一语句,就把当前语句编译为JavaScript代码执行,已经编译过的语句不重复编译(类似于JIT)
1赞

一点点 Plotter 之:分支结构 一点点 Plotter 之:分支结构 - 0xFFFF

一点点Plotter语言之:循环结构 - 0xFFFF

粤 ICP 备 2020080455 号