跳转到内容

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

模組: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
預先套用凯莱-迪克森结构十六元數後的函數庫(可作為三十二元數使用)

相關頁面

[编辑]