这是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
预先套用凯莱-迪克森结构十六元数后的函数库(可作为三十二元数使用)

相关页面

编辑