写点什么

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:2611592

评论

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

选对黑龙江等保测评公司:从合规准入到服务质量的全维度指南

等保测评

软件外包公司选择指南 - 郑州寻路科技专业建议

寻路科技

软件开发公司

【FAQ】HarmonyOS SDK 闭源开放能力 — AppGallery Kit

HarmonyOS SDK

HarmonyOS SDK应用服务

内网视频会议与外网视频会议的区别是什么?

BeeWorks

即时通讯 IM 视频会议 局域网

大数据-136 - ClickHouse 集群 表引擎详解 选型实战:TinyLog/Log/StripeLog/Memory/Merge

武子康

大数据 flink spark 分布式 Clickhouse

基于华为开发者空间云主机部署Typora高效内容创作,实现图片自动上传

华为云开发者联盟

Typora PicGo 华为开发者空间 云主机环境 对象存储服务 (OBS)

黑龙江龙江网络安全:等保测评的核心作用与覆盖范畴

等保测评

AI 友好的云开发 MySQL SDK 它来了!微信小程序能直连关系型数据库了

蛋先生DX

微信小程序 云开发 AI‘’ mysql'

区块链 Web3 项目的开发流程

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

基于华为开发者空间云主机的软件安全栈溢出攻击实践

华为云开发者联盟

云主机 华为开发者空间

AI风险评估系统:技术架构、行业落地与风控效能革新

上海拔俗

一个基于 .NET 8 + Vue3 实现的极简 RABC 权限管理系统

追逐时光者

C# .net Vue

配电 低压电工经验总结(17)

万里无云万里天

工业 工厂运维

领域驱动设计(DDD)中聚合根的最主要职责真的是维护一致性吗?

canonical

领域驱动设计 DDD 领域模型 可逆计算 Nop平台

信息化系统数据安全建设方案

金陵老街

数据安全 医疗安全

搞跨端渲染?你绕不开的HarfBuzz原理

非专业程序员Ping

大前端 ios 开发 an'droid

双碳目标下,MyEMS 为何成为制造企业的 “刚需工具”?

开源能源管理系统

开源 能源管理系统

打破 “封闭垄断”:MyEMS 开源生态如何有效控制企业能源管理成本

开源能源管理系统

开源 能源管理系统

想了解ABAQUS,有没有比较好的SMULIA代理商公司推荐?

思茂信息

abaqus软件 达索 SMULIA代理商 思茂信息

基于华为开发者空间,实现RFM分析与CLTV预测的电商客户细分与营销策略优化

华为云开发者联盟

RFM模型 华为开发者空间 CLTV

提示词工程-复杂项目-VB Coding

Jxin

AI 软件工程 提示词工程 氛围编程

BeeWorks企业即时通讯好用吗,马上简单了解一下!

BeeWorks

即时通讯 IM 私有化部署

不止节能:MyEMS 为企业带来的成本控制、合规风控与数字化转型价值

开源能源管理系统

开源 开源能源管理系统

为什么说境外舆情监测是全球化企业的必要投资?

沃观Wovision

舆情监测 沃观Wovision 海外舆情监测 境外舆情监测 舆情监测软件

基于华为开发者空间-云开发环境,Vanna+MaaS实现自然语言与数据库对话

华为云开发者联盟

MaaS 华为开发者空间 云开发环境 Vanna Text-to-SQL

2026年境外舆情监测网站选型白皮书:功能、厂商与案例

沃观Wovision

舆情监测 沃观Wovision 海外舆情监测 境外舆情监测 舆情监测网站

领域驱动设计(DDD)领域对象一定要讲究充血模型吗?

canonical

领域驱动设计 DDD 聚合根 可逆计算

MIAOYUN | 每周AI新鲜事儿(10.17-10.24)

MIAOYUN

AI 机器人 AIGC AI大语言模型 多模态模型

华为开发者空间,基于仓颉与DeepSeek的MCP智能膳食助手

华为云开发者联盟

MaaS DeepSeek v3 华为开发者空间

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