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

相关页面