跳转到内容

模組:Complex Number/doc

维基百科,自由的百科全书

这是本页的一个历史版本,由A2569875留言 | 贡献2022年5月2日 (一) 16:21 top编辑。这可能和当前版本存在着巨大的差异。

这是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原生支援 否 輸出
符号函数
sgn(a)
否 是 是 是 否 輸出
共轭复数
conjugate(a)
否 是 是 原式輸出。 否 輸出
輻角
arg(a)
否 是 是 是 否 輸出
平方根
sqrt(a)
否 是 是 是 否 輸出
倒數
inverse(a)
否 是 是 是 否 輸出
分數
div(a,b)
否 是 是 是 否 輸出
數字部件 實部
re(a)
否 是 是 是 否 輸出
虛部
im(a)
否 是 是 恆為0 否 輸出
純量部 否 否 是 否 否 否
向量部 否 否 是 否 否 否
內積
dot(a,b)
否 是 是 與乘法相同 否 輸出

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)
否 是 是 是 不存在 即将到来
三角函數 正弦
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#使用條件,說明了函數庫須具備那些條件方能使用此擴充功能。

其他函數庫

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