跳转到内容

英文维基 | 中文维基 | 日文维基 | 草榴社区

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

相关页面

[编辑]