模组:Complex Number/doc
![本页使用了标题或全文手工转换](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
这是Module:Complex Number的文档页面
![]() | 此页面是Module:Complex Number的模块文档。 此页面可能包含了模板的使用说明、分类和其他内容。 |
![]() | 此模块文档被引用于约5,000个页面。 为了避免造成大规模的影响,所有对此模块文档的编辑应先于沙盒或测试样例上测试。 测试后无误的版本可以一次性地加入此模块文档中,但是修改前请务必于讨论页发起讨论。 模板引用数量会自动更新。 |
本模组为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:求解器和部分共用的函数。