拓冰建站拓冰建站
首页 / 资讯中心 / 正文

mathjs 复数(Complex Numbers)完全指南:创建、运算与 API 详解

科学计算【免费下载链接】mathjsAn extensive math library for JavaScript and Node.js项目地址https://gitcode.com/gh_mirrors/ma/mathjs点击查看免费下载导读本文是 mathjs 中复数Complex Numbers数据类型的系统性技术指南覆盖从复数的数学定义、math.complex的多种构造方式到四则运算、实部/虚部/共轭等常用函数再到Complex对象完整的实例 API 与静态方法的全链路内容。读完本文你将掌握如何在 JavaScript / Node.js 项目中创建与操作复数、如何用极坐标与 JSON 序列化处理复数并了解 mathjs 底层如何基于 complex.js 实现复数支持、为什么math.sqrt(-4)能返回2i这类看似越界的运算。复数在 mathjs 中的定位mathjs 是一个面向 JavaScript 与 Node.js 的扩展数学库复数是其核心数据类型之一。官方文档明确说明**mathjs 的复数支持由 complex.js。从源码可以确认createComplexClass通过 factory 机制注册Complex类并为其附加类型标记Complex.prototype.type Complex与Complex.prototype.isComplex true见 src/type/complex/Complex.js这也是 mathjs 内部isComplex类型判断见 src/utils/is.js与 Unit 等类型识别复数的依据。在数学上复数形如a bi其中a、b为实数虚数单位i满足i² -1即i是-1的平方根。a称为实部real partb称为虚部imaginary part例如3 2i的实部为3、虚部为2。复数广泛应用于应用数学、控制理论、信号分析、流体力学等工程与科学领域——这也是 mathjs 将复数作为一等公民数据类型的原因。创建复数math.complex 的多种构造方式创建复数使用math.complex函数。根据官方文档与 src/type/complex/function/complex.js 中的 typed-function 签名定义该函数支持下列全部调用形式math.complex() // 无参数返回 0 0i对应源码中 Complex.ZERO math.complex(re) // 仅实部虚部为 0 math.complex(re, im) // 实部 虚部 math.complex(complex) // 克隆一个已有的 Complex 对象 math.complex({re, im}) // 对象形式实部 虚部 math.complex({r, phi}) // 对象形式极坐标模 辐角 math.complex({abs, arg}) // 对象形式极坐标的别名写法 math.complex(str) // 字符串形式如 4 - 2i源码 src/type/complex/function/complex.js 中的实现要点空调用返回Complex.ZERO0 0inumber单参数构造虚部为 0 的复数number, number双参数直接构造BigNumber, BigNumber会先toNumber()再构造源码注释标注该签名是冗余的Fraction通过x.valueOf()转为数值传入Complex时调用x.clone()完成克隆保证返回独立对象传入string时直接交给 complex.js 解析例如2 3i传入Object时依次识别reim、rphi、absarg三组属性三者均不满足时抛出Expected object with properties (re and im) or (r and phi) or (abs and arg)传入Array | Matrix时通过deepMap逐元素递归转换见 src/utils/collection.js即复数构造可以作用于矩阵。官方文档给出的基础示例const a math.complex(2, 3) // Complex 2 3i a.re // Number 2 a.im // Number 3 const b math.complex(4 - 2i) // Complex 4 - 2i b.re 5 // Number 5 b // Complex 5 - 2i在表达式解析器中使用除了函数式调用complex也是表达式解析器math.evaluate/math.parser()中的构造函数关键字。其嵌入式文档定义于 src/expression/embeddedDocs/construction/complex.js声明语法为complex()、complex(re, im)、complex(string)例如math.evaluate(complex(2, 3))与math.evaluate(complex(7 - 2i))均可用。此外表达式语法本身也内置虚数单位常量i见 src/expression/embeddedDocs/constants/i.js可直接书写2 3i形式的表达式。复数运算实部、虚部、共轭与四则运算mathjs 中绝大多数函数都支持复数且复数与实数可以混合参与运算。官方文档示例const a math.complex(2, 3) // Complex 2 3i const b math.complex(4 - 2i) // Complex 4 - 2i math.re(a) // Number 2 math.im(a) // Number 3 math.conj(a) // Complex 2 - 3i math.add(a, b) // Complex 6 i math.multiply(a, 2) // Complex 4 6i math.sqrt(-4) // Complex 2i从源码看这些运算的底层实现math.resrc/function/complex/re.js对Complex直接返回x.re对number | BigNumber | Fraction原样返回对数组/矩阵逐元素计算。注意math.imsrc/function/complex/im.js对number返回0、对BigNumber | Fraction返回x.mul(0)保证类型一致。math.conjsrc/function/complex/conj.js对Complex调用x.conjugate()得到共轭a - bi对Unit会先toNumeric()求共轭再保持原单位对数组/矩阵同样逐元素处理。math.sqrt(-4)返回2i这是复数支持带来的自然结果——开方、pow、log、三角函数如sin、cos等函数在实数域无解时自动落入复数域。测试 test/unit-tests/type/complex/Complex.test.js 以及算术函数测试中对sqrt负数输入的断言均验证了该行为。复数与实数的混合运算如math.multiply(a, 2)由 typed-function 的多签名分派自动处理开发者无需手动做类型转换。Complex 对象实例 APImath.complex返回的Complex对象包含以下属性与方法与 complex.js 保持一致的语义complex.re / complex.imcomplex.re实部数值类型可读可写complex.im虚部数值类型可读可写。赋值后对象立即反映新值例如上文示例中b.re 5后b变为Complex 5 - 2i。complex.clone()创建当前复数的一个独立副本修改副本不影响原对象。math.complex(complex)内部即调用该方法。complex.equals(other)测试两个复数是否相等。当且仅当实部与虚部都相等时返回true。测试用例test/unit-tests/type/complex/Complex.test.js验证了new Complex(2, 4).equals(new Complex(2, 3))为false、new Complex(0, 0).equals(new Complex())为true等边界情况。complex.neg()取相反数实部、虚部保持绝对值、符号取反即a bi→-a - bi。complex.conjugate()取共轭实部不变、虚部符号取反即a bi→a - bi。与函数math.conj(x)等价。complex.inverse()返回当前复数的乘法逆元倒数。复数z的逆为1/z满足z * z⁻¹ 1。complex.toVector()返回当前复数的向量表示即一个长度为 2 的数组[re, im]可用于与向量/矩阵运算对接。complex.toJSON()返回复数的 JSON 表示结构为{mathjs: Complex, re: number, im: number}。该实现位于 src/type/complex/Complex.js是 mathjs 序列化机制的基础——JSON.stringify会自动调用它。完整序列化/反序列化流程参见 序列化文档。complex.toPolar()返回极坐标表示{r: number, phi: number}其中r是模this.abs()phi是辐角this.arg()区间为[-pi, pi]。实现见 src/type/complex/Complex.js。complex.toString()返回字符串表示格式为a bi如2 3i。源码中还定义了Complex.prototype.valueOf Complex.prototype.toString见 src/type/complex/Complex.js即隐式类型转换时同样得到字符串。complex.format([precision])获取格式化字符串。除toString()的基础输出外format支持传入精度参数或格式化选项传数字precision按 10 的负幂次 epsilonMath.pow(10, -precision)做舍入当实部/虚部比值小于 epsilon 时将该分量归零从而消除浮点噪声实现见 src/type/complex/Complex.js输出对纯实部im 0、纯虚部re 0含i、-i缩写以及一般复数分别处理负数虚部使用a - bi形式。对应的测试用例test/unit-tests/type/complex/Complex.test.js验证了虚部相对实部极小则归零实部相对虚部极小则归零等舍入行为。Complex 静态方法以下静态方法通过math.Complex访问Complex.fromJSON(json)从 JSON 对象复活复数接受{mathjs: Complex, re: number, im: number}mathjs属性可选re、im缺省为 0。实现见 src/type/complex/Complex.js与toJSON配对使用是 序列化机制 中math.reviver恢复 Complex 类型的底层入口。const c math.Complex.fromJSON({ mathjs: Complex, re: 4, im: 3 }) // Complex 4 3iComplex.fromPolar(r, phi)从极坐标创建复数支持两种调用形式实现见 src/type/complex/Complex.jsComplex.fromPolar(r, phi) // 双参数 Complex.fromPolar({r, phi}) // 单对象参数r必须是数值phi可以是数值也可以是角度单位Unit含ANGLE基准此时自动toNumber(rad)转为弧度。测试 test/unit-tests/type/complex/Complex.test.js 验证了Complex.fromPolar(1, new Unit(90, deg))与Complex.fromPolar(1, new Unit(100, grad))均得到虚部为 1 的复数参数非法时分别抛出TypeErrorr 非数值 / phi 非数值且非角度单位或SyntaxError参数个数错误。Complex.compare(a, b)比较两个复数的大小规则为字典序比较先比实部再比虚部返回-1、0或1实部a.re b.re→ 返回1实部a.re b.re→ 返回-1实部相等时虚部a.im b.im→ 返回1虚部a.im b.im→ 返回-1实部虚部均相等 → 返回0。该实现直接对应源码 src/type/complex/Complex.jsconst a math.complex(2, 3) // Complex 2 3i const b math.complex(2, 1) // Complex 2 1i math.Complex.compare(a, b) // 返回 1实部相等a 的虚部更大序列化与反序列化由于Complex是实例化对象跨进程、跨端传输或持久化时需要序列化。mathjs 的通用序列化方案见 序列化文档对复数而言const x math.complex(2 3i) const str JSON.stringify(x, math.replacer) // 输出 {mathjs:Complex,re:2,im:3}JSON.stringify默认会调用Complex.prototype.toJSON因此大多数场景不传math.replacer也能正确序列化但文档特别提示像Infinity这类值必须借助math.replacer才能无损序列化最佳实践是一律传入math.replacer。反序列化时需配合math.reviverconst json {mathjs:Complex,re:2,im:3} const x JSON.parse(json, math.reviver) // Complex 2 3i当与其他数据类型如 Unit、Matrix混用多个 reviver 时可以通过级联组合const reviver function (key, value) { return reviver1(key, reviver2(key, value)) }小结mathjs 的复数支持是一套完整的类型体系构造上支持数字对、字符串、{re, im}对象、{r, phi}/{abs, arg}极坐标对象、数组矩阵逐元素转换以及克隆运算上与实数无缝混用且能自然扩展sqrt、log、三角函数到复数域对象层提供了re/im读写、clone、equals、neg、conjugate、inverse、toVector、toPolar、toString、format等完整实例方法静态层提供fromJSON、fromPolar支持角度单位、compare。其底层实现集中在 src/type/complex/Complex.js 与 src/type/complex/function/complex.js并有 test/unit-tests/type/complex/Complex.test.js 等测试保障行为正确性。无论是信号处理、控制理论等领域的科学计算还是在浏览器与 Node.js 间的数据交换本文覆盖的内容都足以支撑完整的复数编程实践。赞分享科学计算【免费下载链接】mathjsAn extensive math library for JavaScript and Node.js项目地址https://gitcode.com/gh_mirrors/ma/mathjs点击查看免费下载相关推荐CSS 预处理器依赖分析如何使用 node-dependency-tree 处理 Sass、Less、StylusCSS 预处理器依赖分析如何使用 node dependency tree 处理 Sass、Less、Stylus 在前端开发中CSS 预处理器如 SasEdgeDB Numbers 标准库完全指南数值类型、运算符与函数EdgeDB Numbers 标准库完全指南数值类型、运算符与函数 本篇技术指南以 EdgeDBGel标准库的 Numbers 参考文档 docs/re数据库图数据库关系型数据库Complex and Rational Numbers in Julia: A Comprehensive GuideComplex and Rational Numbers in Julia: A Comprehensive Guide Julia 语言内建了两种重要的数值类编程语言编译器语言运行时标准库JIT编译创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门