跳转到内容

模组:Complex Number/doc

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是Module:Complex Number的文档页面

本模组为Lua定义了一套复数(如虚数四元数)运算的系统,可提供其他模组呼叫使用,而若要直接在模板或条目中使用可透过Module:Complex Number/Calculate‎或{{复变运算}}来完成。

关于本模组创建动机详见Module:TemplateParameters#设计缘由(亦可参考Template_talk:Root)。

模组内容

本模组有4套数学资料结构的定义以及对应的数学运算库:

.cmath
复数的数学资料结构及运算的系统
.qmath
四元数的数学资料结构及运算的系统
.math
实数运算系统的扩充
.bmath
布林代数的数学资料结构及运算的系统

使用方法

  1. 初始化数学库
    • local 自订函数库名称 = require("Module:Complex Number").函数库名称.init()
      例如:local cmath = require("Module:Complex Number").cmath.init()
  2. 初始化指定数学结构的数字
    • local 变数名称 = 自订函数库名称.constructor("描述数字的字串")
      例如:local num1 = cmath.constructor("2+3i")
  3. 执行运算
    例如:
    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原生支援 不存在 输出
cis
cis(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中的运算子。

定义数学资料结构

参阅Example的第85行

数学资料结构需要定义成一个table,并以table来定义或表达所需要的数字。即使数字只有单一物件,也许使用table因为这样才能透过实作Metatables来完成Module:Complex Number系列函数库所需的相关功能。

实作metatable

参阅Example的第47行

需定义Metatables的 __add(加法)、 __sub(减法)、 __mul(乘法)、 __div(除法)、 __mod(取馀数)、 __unm(相反数)、 __eq(相等判断)、 __tostring(以字串表达本物件)

定义数学资料结构的建构子

参阅Example的第85行第95行

由于数学资料结构需要定义为table因此需要有建构子来赋予该结构初值。建构子需要完成以下步骤:

定义数学库的初始化函数

参阅Example的第101行

数学库必须是一个独立物件,所有的函数皆需定义在数学函数库物件下(包括数学资料结构的建构子)。初始化数学库的函数名称必为init,当中需要定义以下内容:

完成数学库的定义

视情况定义列于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
二元复数英语Applications of dual quaternions to 2D geometry函数库
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
预先套用凯莱-迪克森结构十六元数后的函数库(可作为三十二元数使用)

相关页面