模块:Complex Number/doc
这是Module:Complex Number的文档页面
此页面是Module:Complex Number的模块文档。 此页面可能包含了模板的使用说明、分类和其他内容。 |
此模块文档被引用于约5,100个页面。 为了避免造成大规模的影响,所有对此模块文档的编辑应先于沙盒或测试样例上测试。 测试后无误的版本可以一次性地加入此模块文档中,但是修改前请务必于讨论页发起讨论。 模板引用数量会自动更新。 |
本模块为Lua定义了一套复数(如虚数、四元数)运算的系统,可提供其他模块调用使用,而若要直接在模板或条目中使用可通过Module:Complex Number/Calculate或{{复变运算}}来完成。
关于本模块创建动机详见Module:TemplateParameters#设计缘由(亦可参考Template_talk:Root)。
模块内容
本模块有4套数学数据结构的定义以及对应的数学运算库:
使用方法
- 初始化数学库
local 自定义函数库名称 = require("Module:Complex Number").函数库名称.init()
- 例如:
local cmath = require("Module:Complex Number").cmath.init()
- 例如:
- 初始化指定数学结构的数字
local 变量名称 = 自定义函数库名称.constructor("描述数字的字符串")
- 例如:
local num1 = cmath.constructor("2+3i")
- 例如:
- 执行运算
- 例如:
local num1 = cmath.constructor("2+3i") local num2 = cmath.constructor("4+5i") print(num1 * num2)
- 输出:-7+22i
- 或者使用函数库内容:
local num1 = cmath.constructor("i") print(cmath.sqrt(num1))
- 输出:0.70710678118655+0.70710678118655i
- 例如:
- 若需要在模板中使用,请参阅{{复变运算}}
原理
复数可分为实部和虚部,此特性可以通过Lua的table功能({real=..., imag=...,}
)来实现,同时通过复写Metatables来完成其各运算符(如+
、-
、*
、/
)来实现复变的基本运算:
p.ComplexNumberMeta = {
__add = function (op1, op2)
return p.ComplexNumber(op1.real + op2.real, imag = op1.imag + op2.imag)
end,
--...
}
function p.ComplexNumber(real, imag)
local complexNumber = {real = op1.real + op2.real, imag = op1.imag + op2.imag}
setmetatable(complexNumber,p.ComplexNumberMeta)
return complexNumber
end
如此一来,只要是设置过Metatables的含实部和虚部的table都可以直接进行复变量的运算。
剩下的部分就是完善数学函数库math.xxx
的各函数。
比较
函数库 | 默认的math
|
.cmath
|
.qmath
|
.math
|
.bmath
|
.tagmath 位于Module:Complex Number/Calculate | |
---|---|---|---|---|---|---|---|
说明 | Lua默认提供的math程序库 | 复数( )专用程序库 | 四元数( )专用程序库 | 默认math 的扩展,定义了上方两个程序库中的功能
|
简单的布尔代数 | 会运算成<math></math> 的程序库
| |
函数库初始化方式 | 无须初始化 | cmath = require("Module:Complex Number").cmath.init();
|
qmath = require("Module:Complex Number").qmath.init();
|
math = require("Module:Complex Number").math.init();
|
bmath = require("Module:Complex Number").bmath.init();
|
tagmath = require("Module:Complex Number/Calculate").tagmath.init();
| |
数字建构/初始化方式 | tonumber("10"); 10
|
cmath.toComplexNumber("1+i"); cmath.getComplexNumber(1,1);
|
qmath.toQuaternionNumber("i+j+k"); qmath.getQuaternionNumber(0,1,1,1);
|
tonumber("10"); 10
|
bmath.toBoolean("yes");
|
tagmath.toTagMath("a");
| |
四则运算 | 加法a + b
|
lua原生支持 | 逻辑或 | 输出 | |||
减法a - b
|
lua原生支持 | 输出 | |||||
乘法a * b
|
lua原生支持 | 逻辑与 | 输出 | ||||
除法a / b
|
只能除实数 | lua原生支持 | 不存在 | 输出 | |||
模除a % b
|
以高斯符号定义 | lua原生支持 | 不存在 | ||||
一元运算 | 相反数-a
|
lua原生支持 | 逻辑非 | 输出 | |||
tostring | lua原生支持 | ||||||
e常量e
|
输出 | ||||||
圆周率pi
|
lua原生支持 | 输出 | |||||
虚数单位i
|
输出 | ||||||
j单位j
|
输出 | ||||||
k单位k
|
输出 | ||||||
绝对值abs(a)
|
lua原生支持 | 回传1或0 | 输出 | ||||
符号函数sgn(a)
|
回传1或0 | 输出 | |||||
共轭复数conjugate(a)
|
原式输出。 | 输出 | |||||
辐角arg(a)
|
输出 | ||||||
平方根sqrt(a)
|
输出 | ||||||
倒数inverse(a)
|
输出 | ||||||
分数div(a,b)
|
输出 | ||||||
数字部件 | 实部re(a)
|
输出 | |||||
虚部im(a)
|
恒为0 | 输出 | |||||
非实部nonRealPart(a)
|
恒为0 | 恒为0 | 即将到来 | ||||
标量部 | |||||||
向量部 | |||||||
部件向量tovector(a)
|
单一元素向量 | ||||||
内积dot(a,b)
|
与乘法相同 | 输出 | |||||
外积outer(a,b)
|
不存在 | 恒为0 | 不存在 | 不存在 | 即将到来 | ||
幂a ^ b
|
只能pow(a,b) | 只能pow(a,b) | lua原生支持 | 只能pow(a,b) | |||
指对数函数 | 指数pow(a,b)
|
lua原生支持 | 输出 | ||||
自然对数log(a)
|
lua原生支持 | 不存在 | 输出 | ||||
自然指数exp(a)
|
lua原生支持 | 不存在 | 输出 | ||||
ciscis(a)
|
不存在 | 输出 | |||||
高斯符号 | 地板floor(a)
|
lua原生支持 | 不存在 | 输出 | |||
天花板ceil(a)
|
lua原生支持 | 不存在 | 输出 | ||||
数值修约round(a)
|
不存在 | 即将到来 | |||||
截尾函数trunc(a,b)
|
不存在 | 输出 | |||||
三角函数 | 正弦sin(a)
|
lua原生支持 | 不存在 | 输出 | |||
余弦cos(a)
|
lua原生支持 | 不存在 | 输出 | ||||
正切tan(a)
|
lua原生支持 | 不存在 | 输出 | ||||
余切cot(a)
|
不存在 | 输出 | |||||
反三角函数 | 反正弦asin(a)
|
lua原生支持 | 不存在 | 输出 | |||
反余弦acos(a)
|
lua原生支持 | 不存在 | 输出 | ||||
反正切atan(a)
|
lua原生支持 | 不存在 | 输出 | ||||
反余切acot(a)
|
不存在 | 输出 | |||||
双曲函数 | 双曲正弦sinh(a)
|
lua原生支持 | 不存在 | 输出 | |||
双曲余弦cosh(a)
|
lua原生支持 | 不存在 | 输出 | ||||
双曲正切tanh(a)
|
lua原生支持 | 不存在 | 输出 | ||||
双曲余切coth(a)
|
不存在 | 输出 | |||||
反双曲函数 | 双曲反正弦asinh(a)
|
不存在 | 输出 | ||||
双曲反余弦acosh(a)
|
不存在 | 输出 | |||||
双曲反正切atanh(a)
|
不存在 | 输出 | |||||
双曲反余切acoth(a)
|
不存在 | 输出 |
扩展函数
本模块仅为这些数学结构定义一些基本运算(见上表)。一些较复杂的运算可通过调用Module:Complex_Number/Functions来完成。本模块提供的3个部分(cmath、qmath、math)皆支持Module:Complex_Number/Functions。
- 使用方法
-
mathlib = require("Module:Complex Number/Functions")._init(mathlib, numberConstructer)
- 其中,
mathlib
为已初始化的数学函数库(如cmath、qmath、math),numberConstructer
为对应该数学函数库数字结构的构造函数函数。 - 所回传的新mathlib将会包含Module:Complex_Number/Functions中已定义的所有扩展函数。
- 注:详细使用条件参见Module:Complex_Number/Functions/doc#使用条件,说明了函数库须具备那些条件方能使用此扩展。
定义新的数学库
Module:Complex Number是一系列数学运算库,并可以相互兼容。当然也能定义其他兼容的程序库,但需要符合特定条件,例如需要实现一些需求函数。详细内容可以参考示例数学库Module:Complex Number/Example。
若要定义一个新的Module:Complex Number系列函数库需要实现一个新的对象,并实现其Metatables中的运算符。
定义数学数据结构
数学数据结构需要定义成一个table,并以table来定义或表达所需要的数字。即使数字只有单一对象,也许使用table因为这样才能通过实现Metatables来完成Module:Complex Number系列函数库所需的相关功能。
- numberType:本数学数据结构的类型名称(字符串),用于Module:Complex Number系列函数库的识别(参阅Example的第92行)
- update():更新结构数值的成员函数(参阅Example的第89行)
- clean():去除过小值或误差值的成员函数,并返回结果。若无此需求,直接返回自身即可。(参阅Example的第90行)
实现metatable
需定义Metatables的 __add(加法)、 __sub(减法)、 __mul(乘法)、 __div(除法)、 __mod(取余数)、 __unm(相反数)、 __eq(相等判断)、 __tostring(以字符串表达本对象)
定义数学数据结构的构造函数
由于数学数据结构需要定义为table因此需要有构造函数来赋予该结构初值。构造函数需要完成以下步骤:
- 读取输入的对象或字符串将其存入table对象中(参阅Example的第91行)
- 设置table的metatable为刚才定义的metatable(参阅Example的第88行)
- 定义其他所需的成员变量或函数
定义数学库的初始化函数
数学库必须是一个独立对象,所有的函数皆需定义在数学函数库对象下(包括数学数据结构的构造函数)。初始化数学库的函数名称必为init,当中需要定义以下内容:
- 各项常量的定义(参阅Example的第102行)
- numberType成员函数定义为Module:Complex Number中的_numberType(参阅Example的第106行)
- constructor成员函数设置为数学结构的构造函数(参阅Example的第107行)
- elements成员变量设置为单位元的清单(参阅Example的第108行)
完成数学库的定义
视情况定义列于Module:Complex_Number/doc#比较中的各项函数(如需支持Module:Complex_Number/Functions的情况)。
其他函数库
require("Module:Complex Number").cmath
- 复变函数库
require("Module:Complex Number").qmath
- 四元数函数库
require("Module:Complex Number").math
- 实数函数库扩展
require("Module:Complex Number").bmath
- 布尔代数函数库
require("Module:Complex Number/Calculate").tagmath
- 输出为
<math></math>
的运算库 require("Module:Complex Number/Matrix").mmath
- 矩阵函数库
require("Module:Complex Number/Dual Number").dumath
- 二元数函数库
require("Module:Complex Number/Dual Number").ducmath
- 二元复数函数库
require("Module:Complex Number/Octonion").omath
- 八元数函数库
require("Module:Complex Number/CayleyDickson").cdmath.init(math_lib)
- 将指定的函数库
math_lib
套用凯莱-迪克森结构形成新的函数库(无法自我嵌套) require("Module:Complex Number/CayleyDickson").sdmath
- 八元数套用凯莱-迪克森结构后的形成新的十六元数函数库
require("Module:Complex Number/CayleyDickson").cdmathOctonion
- 预先套用凯莱-迪克森结构的八元数后的函数库(可作为十六元数使用)
require("Module:Complex Number/CayleyDickson").cdmathSedenion
- 预先套用凯莱-迪克森结构的十六元数后的函数库(可作为三十二元数使用)
相关页面
- Module:Complex_Number/Solver:求解器和部分共享的函数。