写点什么

Math.js:多用途的 JavaScript 数学库

  • 2014-01-26
  • 本文字数:1393 字

    阅读完需:约 5 分钟

Math.js 是一款开源的 JavaScript 和 Node.js 数学库,用于处理数字、大数、复数、单位和矩阵。它还有一个灵活的表达式解析器。为了解更多信息,InfoQ 联系了该项目的创始人 Jos De Jong。

Jos 解释了项目背后的动机——

对于 JavaScript,我们有很好的库来处理矩阵、复数和统计等计算。欠缺的是用于高级数学计算的集成解决方案。大多数现有的库支持链式 API,它们使用起来很直观,但只接受库本身已知的数据类型。因此,整合时存在的问题 是:矩阵库不能处理复数,反之亦然,你无法将它们合并起来。math.js 的 API 和 JavaScript 的 Math 对象和内置操作符的 API 是相同的,都是支持各种输入类型的静态函数。 Math.js 对该 API 进行了扩展,为高级数据类型、函数和常数提供了支持。

我希望 math.js 能使应用程序开发中的数学处理变得简单,并且更为有趣,希望还能帮助弥合开发者的世界与学术世界直接的鸿沟。

Math.js 有三种使用方式——

  1. 用静态函数和常数(就像 JavaScript 的 Math 对象) ```

math.add(2, 3)math.add(2, 3); // 5
math.sqrt(-4); // 2i
math.pow([[-1, 2], [3, 1]], 2); // [[7, 0], [0, 7]]

复制代码
2. 对字符串表达式进行求值运算 ```
math.eval('1.2 * (2 + 4.5)'); //7.8
math.eval('5.08 cm to inch'); //2 inch
  1. 使用链式操作 ```

math.select(3)
.add(4)
.multiply(2)
.done(); //14

复制代码
[math.js 网站有几个示例,文档](http://mathjs.org/) 中也有。
Jos 希望在几个月内发布第一个稳定版本 1.0。
> 版本 1.0 还剩下的工作是写一个参考文档,代码的单元测试覆盖率达到 100%,解决 一些不完善的地方。
到版本 1.0 发布时,API 也将稳定下来,之后我们的焦点可能会转移到优化上。Jos 提出了可能会带来潜在性能改进的几个方向,如使用类型化数组、并行化和 <a>asm.js</a>
<a>Jos</a> 为什么选择了 JavaScript,而没有选择像已有诸如 NumPi/SCIPI 等库的 Python 这样的语言,原因是——
> 最近几年,我们已看到了云计算和 Web 应用程序的发展浪潮,而且我自己也完全融入其中了。浏览器和 JavaScript 引擎也正在变得越来越快。几年前,我们就可以使用 [node.js](http://nodejs.org/) 运行 JavaScript 服务器端。这开拓了许多新的可能性,并导致了 JavaScript 的生态系统及其受欢迎程度的 [爆炸性增长](http://resin.io/happy-18th-birthday-javascript/)。看起来 JavaScript 正在成为应用最普遍的语言。尽管 JavaScript 远不完美,但我非常喜欢 JavaScript 及其社区。
目前已经有几个使用 math.js 的最终用户应用。Jos 自己的项目 [mathnotepad](http://mathnotepad.com/) 也是基于 math.js 的,目前还处于早期开发阶段。[numerics](http://numerics.info/) 这款流行的计算器项目也用到了 Math.js。
如果想使用 Math.js,可以查看 [文档](https://github.com/josdejong/mathjs/blob/master/docs/getting_started.md)。
** 查看英文原文:**[Math.js: Versatile Math Library For JavaScript](http://www.infoq.com/news/2014/01/mathjs)
- - - - - -
感谢 [臧秀涛](http://www.infoq.com/cn/author/%E8%87%A7%E7%A7%80%E6%B6%9B) 对本文的审校。
给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 [editors@cn.infoq.com](mailto:editors@cn.infoq.com)。也欢迎大家通过新浪微博([@InfoQ](http://www.weibo.com/infoqchina))或者腾讯微博([@InfoQ](http://t.qq.com/infoqchina))关注我们,并与我们的编辑和其他读者朋友交流。
2014-01-26 08:2611546

评论

发布
暂无评论
发现更多内容

企业应该知道的几种网络安全防护措施!

行云管家

网络安全 网络 信息

低代码平台需要什么样的ORM引擎?(2)

canonical

开源 mybatis 低代码 jpa ORM

Wallys / QCN9074/QCN9024 WIFI 6E 802.11AX 4X4 6GHz wifi module.

Cindy-wallys

前端开发之函数式编程实践 | 京东云技术团队

京东科技开发者

JavaScript 编程 京东云 企业号 5 月 PK 榜

华为云云原生视窗:一文回顾Q1精彩瞬间

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

性能优化多重要?凭借华为791页Mysql金字塔性能调优手册,进阿里

Java MySQL 性能优化 性能调优

云原生背景下如何配置 JVM 内存

Java 容器 云原生 JVM

从可逆计算看Delta Oriented Programming

canonical

开源 低代码 软件产品线工程 可变性管理 可逆计算

BSN-DDC基础网络详解(十一):官方门户OpenAPI说明及开发资料汇总

BSN研习社

低代码平台中的GraphQL引擎

canonical

开源 低代码 领域驱动模型DDD 中台架构 graphql 低代码平台

Github上标星98K!火爆全网的性能调优实战手册,出自腾讯T4大佬

Java 性能优化 性能调优

低代码平台需要什么样的ORM引擎?(1)

canonical

开源 低代码 ORM 低代码平台 Spring JPA

阿里大佬在Github分享的Spring Cloud全栈笔记,你想象不到有多全

Java 架构 微服务 Spring Cloud

Paxos的魔法学研究报告

canonical

paxos协议 共识算法 分布式, 分布式算法 深入理解分布式共识算法

XDSL:通用的领域特定语言设计

canonical

开源 低代码 dsl 领域特定语言 领域语言工作台

低代码平台中的自动化测试

canonical

开源 低代码 自动化测试 自动化测试框架 低代码平台

玩转服务器之环境篇:PHP和Python环境部署指南 | 京东云技术团队

京东科技开发者

php Python 京东云 企业号 5 月 PK 榜 轻量云服务器

为什么说百度AMIS框架是一个优秀的设计

canonical

开源 前端架构 低代码 低代码平台 百度AMIS

如果重写SpringBoot,我们会做哪些不同的选择?

canonical

开源 低代码 架构设计 springboot spring ioc

小微企业运维用哪款软件好?有免费的吗?

行云管家

运维 安全运维 小微企业

你管这破玩意叫缓存穿透?还是缓存击穿?

Java 数据库 redis 缓存穿透 缓存击穿

【直播回顾】AIGC产业研究报告2023图像生成篇报告解读

易观分析

产业 智能

手把手教你用代码画架构图 | 京东云技术团队

京东科技开发者

京东云 代码实现 企业号 5 月 PK 榜 C4

背靠香港影视集团星光文化,StarNFT问世了

小哈区块

什么是声明式编程

canonical

函数式 声明式 命令式

程序员之间拉开差距最大的因素

博文视点Broadview

架构师日记-从数据库发展历程到数据结构设计探析 | 京东云技术团队

京东科技开发者

数据库 京东云 企业号 5 月 PK 榜

【保姆级教程】如何用Rust编写一个ChatGPT桌面应用 | 京东云技术团队

京东科技开发者

rust 京东云 桌面应用 企业号 5 月 PK 榜

解耦远不止依赖注入

canonical

架构设计 解耦 依赖注入

从可逆计算看声明式编程

canonical

开源 低代码 声明式 命令式

Difference between from DR4019 and DR4029 /industrial wifi5 router/support openwrt.

Cindy-wallys

IPQ4019 ipq4029

Math.js:多用途的JavaScript数学库_JavaScript_Roopesh Shenoy_InfoQ精选文章