模板:复变运算/doc

{{复变运算}}模板为Help:计算功能的一个扩展,提供了一些Help:计算不支持的计算。

概要

本模板比Help:计算多了以下功能:

使用方法

本模板的第一参数为欲计算的表达式,关于表达式的语法详见#语法一节。参数number class为指定运算时使用的数域。若使用其软重定向版本{{计算}}则有第二参数可以使用,用途为指定输出的小数码数。

其基础语法为:

{{复变运算| 表达式 }}

{{计算| 表达式 }}

参数说明

  • 第一参数:要计算的数学式
  • |number class=:使用的数域,可以是:
    real实数,与Help:计算功能类似,但Help:计算不支持变量)
    complex复数
    quaternion四元数
    no calcmathtag(不计算,输出对应数学式的LaTeX数学公式
  • |should math=:布尔值,是否直接输出适用于<math></math>LaTeX原始码
  • |use math=:布尔值,是否直接输出完整的<math></math>数学公式
  • |useOtherModule=:布尔值,是否允许加载其他模块中返回数字的LUA数学函数或数学模板

语法

本节将说明本模板输入的表达式之语法。

项目 语法 说明 示例
数字的表达
实数
+或-實數值
科学记号
+或-實數值e+或-科學記號值
含单位的数
+或-實數值單位
含常量单位
任何數值表達式常數或單位的表達式
数字的表达可分为实数表达、科学记号和含单位的数。
  • 实数表达即一般的实数;
  • 科学记号为一实数紧接着一个e和一个整数,例如實數值e整數值则代表實數值×10整數值
  • 另一个表达方式为一个实数值紧接着一个复变单位或角度单位,例如2i表示两倍的虚数单位。此表达式不能与科学记号一同使用。能使用的单位包括ijk°π。其余需使用运算符来表达。
{{複變運算|+2.735}} 2.735
{{複變運算|-2735e-3}} -2.735
{{複變運算|27.35e+3}} 27350
{{複變運算|2.735i}} 2.735i
{{複變運算|180°}} 3.14159...
{{複變運算|}} 6.28318...
{{複變運算|2⋅e}} 5.43656...
{{複變運算|2e}} Lua错误
计算失败:
缺少运算符,
数字 [2, e]
无法运算。
四则运算与幂运算 運算式運算符運算式 依序以中缀表示法表达表达式即可。
{{複變運算|2+3}} 5
{{複變運算|2+3*5^2}} 77
{{複變運算|-2+3*5^2}} 73
函數(參數1,參數2...) 调用现有函数。所有函数都至少要传入一个参数。
{{複變運算|factorial(5)}} 120
{{複變運算|sin(pi/6)}} 0.5
{{複變運算|abs(-5)}} 5
多组运算 運算式1;運算式2 仅会显示最后一组运算的结果
{{複變運算|10;20}} 20
{{複變運算|2+3;2*3}} 6
{{複變運算|2+3;2*3;2^3}} 8
变量定义 變數名稱運算式 给特定名称的变量赋值。需特别注意所有变量的范围(Scope)皆相同(可想像所有变量皆为全局变量),包括函数中的参数,因此若函数外层已经定义了变量x则函数内部需避免使用同名变量x。
{{複變運算|x←5}} 5
{{複變運算|x←5;x+1}} 6
{{複變運算|x←5;3+7;x}} 5
数定义 函數名稱:參數1,參數2...函數運算式; 数的语法为以名称起始并以冒号区隔函数名称与定义(函数名称可留空,但冒号不能省去),整个语法要以分号(;结尾。位于映射符号(前方为函数的变量或参数,后方为函数主体定义,即f : x f(x);。函数可以有多个变量,但仅能有单个输出,即。同时函数语法不建议写成嵌套结构,即不建议将函数定义内包含另一个函数的定义,但可以分开定义再行组合;此外,函数定义内不能包含分号,因为分号会视为函数的结尾。
{{複變運算|f:x↦x^2+1;(0); f(5)}} 26
{{複變運算|f:x↦x^2+1;(0) }} 1
{{複變運算|:x↦x^2+1;(1)}} 2
运算符优先序调整 (運算式優先算符運算式)運算符運算式 使用括号来令特定运算优先进行。
  • 2+3*5→17
  • (2+3)*5→25
详细运算符、常量及函数列表

运算符

语法 名称 元数 说明 优先 示例 效果 math输出
基础算术
+
2
计算两数之和
9
7 + 3
10
-
2
计算两数之差
9
7 - 3
4
*
2
计算两数之乘积
10
7 * 3
21
×
2
计算两数之乘积
10
7 × 3
21
/
2
计算两数相除之商
10
7 / 3
2.3333333333333
÷
2
计算两数相除之商
10
7 ÷ 3
2.3333333333333
%
2
计算两数相除之余数
10
7 % 3
1
^
2
计算两数之幂运算
12
7 ^ 3
343
e
2
当e左邻一实数、右邻一整数时,则为科学记号,以256e-3为例,其代表的结果为。要注意的是左边的数必为单一实数、右边的数必为整数,可为负数,且中间不能有空格。
12.3e4
123000
()
1
改变运算优先级
2*(2+3)
10
数论
+
1
表达一正数
14
+7
7
-
1
计算一数的相反数
14
-7
-7
%
2
计算两数相除之余数
10
7 % 3
1
布尔代数
&
2
两逻辑是否皆为真
5
(1=1) & (1=2)
0
2
两逻辑是否不全为真
5
(1=1) ↑ (1=2)
1
|
2
两逻辑是否有一者为真
4
(1=1) | (1=2)
1
2
两逻辑是否全为假
4
(1=1) ↓ (1=2)
0
2
两逻辑是否相异
4
(1=1) ⊕ (1=2)
1
2
两逻辑是否相同
4
(1=1) ⇔ (1=2)
0
~
1
逻辑否定
13
~(1=2)
1
and
2
逻辑且的字母模式。使用时须与前后文各间隔至少一个空格
5
(1=1) and (1=2)
0
nand
2
逻辑与非的字母模式。使用时须与前后文各间隔至少一个空格
5
(1=1) nand (1=2)
1
or
2
逻辑或的字母模式。使用时须与前后文各间隔至少一个空格
4
(1=1) or (1=2)
1
nor
2
逻辑或非的字母模式。使用时须与前后文各间隔至少一个空格
4
(1=1) nor (1=2)
0
xor
2
逻辑异或的字母模式。使用时须与前后文各间隔至少一个空格
4
(1=1) xor (1=2)
1
xnor
2
逻辑当且仅当的字母模式。使用时须与前后文各间隔至少一个空格
4
(1=1) xnor (1=2)
0
not
1
逻辑非的字母模式。使用时须与前后文各间隔至少一个空格
13
not (1=2)
1
数值修约
round
2
round 的运算符模式,会将一数四舍五入到指定的位数。使用时须与前后文各间隔至少一个空格
8
π round 6
3.141593
代数
2
表达一数的系数
10
2⋅π
6.2831853071796
2
给予变量数值
7
x ← 7;x
7
2
给予函数定义
12
:x,y↦x^2+y^2;(5,2)
29
:
构成函数
2
冒号(:)为定义函数时区隔函数的名称与函数的主体,而冒号(:)与分号(;)的区间构成一个函数的定义。在冒号左边的内容为函数的名称,在冒号右边的内容为函数的内容。若函数没有名称也需要输写冒号。
7
f:x↦x^2;(5)
25
,
2
产生数组供多元函数使用
1
7, 3
7, 3
复变
*
1
计算一数的共轭复数
14
*(7+3i)
7-3i
i
1
表达纯虚数
3i
3i
二元关系
>
2
比较两数大小
6
7 > 3
1
<
2
比较两数大小
6
7 < 3
0
2
比较两数大小
6
7 ≥ 3
1
2
比较两数大小
6
7 ≤ 3
0
=
2
两数是否相等
3
7 = 3
0
2
两数是否不相等
3
7 ≠ 3
1
技术性
;
2
分隔两表达式,结果将取最后一个分号后的结果
1
7 ; 3
3
return
1
返回数值。需注意return后方必须跟着一个数值或表达式,否则会变成未定义行为而出现预期外的结果。
2
return 7;8
7
三角函
°
1
用于表示角度单位的符号。
10
180°
3.1415926535898
π
1
表示圆周率。
10
9.4247779607694
注:另有>=<===(相等判断)、~=(不相等判断)、!=(不相等判断)、@=(数值指派)、+=(相加指派)、-=(相减指派)、*=(相乘指派)、/=(相除指派)、^=(幂指派)、&=(逻辑与指派)、|=(逻辑或指派)可供使用,其会自动替换为上表中对应的操作数。指派操作数须注意等号左边必须是一个单一变量词语,不可以是括弧或函数变换的结果。

常量和数值

语法 名称 别名 说明 数值 math输出
e 自然底数 自然对数函数的底数 2.718281828459
i 虚数单位 表达纯虚数 i
j 四元数单位j 表达纯四元数虚数j j
k 四元数单位k 表达纯四元数虚数k k
nan 非数 用于表示数学上未定义的数值,或计算发生错误的数值。 nan
nil 空值 null 空值。在math模式下显示为空白,用于表达或传递无参数的函数之参数。请注意,由于此值为空值,因此请勿将此值参与运算,以免发生错误。 nil
° 角度单位 用于表示角度单位的符号。 0.017453292519943
π 圆周率 pi 表示圆周率。 3.1415926535898
ω 艾森斯坦整数单位 表达艾森斯坦整数单位。 -0.5+0.86602540378444i

语法 名称 参数
数量
说明 示例 效果 math输出
基础算术
div
2
用于在math输出时,以分数的形式显示
div(7,3)
2.3333333333333
dot
2
计算两数的内积。
dot(7,3)
21
pow
2
计算两数之幂运算
pow(7,3)
343
数论
gcd
不定
计算多个数的最大公约数。
gcd(7,21)
7
lcm
不定
计算多个数的最小公倍数。
lcm(7,3,21)
21
digits
1
获取整数的位数个数
digits(7321)
4
divisor
2
获取某数的第n个正约数
divisor(6,1),divisor(6,2),divisor(6,3),divisor(6,4)
1, 2, 3, 6
primedivisor
2
获取某数的第n个素因数
primedivisor(210,1),primedivisor(210,2),primedivisor(210,3),primedivisor(210,4)
2, 3, 5, 7
divisorsigma
2
计算特定整数的除数函
divisorsigma(1,6)
12
eulerphi
1
获取小于等于n的正整数中与n互素的数的数目
eulerphi(8)
4
findnext
向后查找
2
查找下一个符合条件的整数
findnext(:x↦x % 6 = 0;,6)
12
findlast
向前查找
2
查找前一个符合条件的整数
findlast(:x↦x % 6 = 0;,10)
6
初等函
abs
1
计算一数与原点的欧几里得距离
abs(-3)
3
log
1
log(e)
1
log
2
log(2,16)
4
sgn
1
sgn(-7)
-1
sqrt
1
计算一数的算术平方根值
sqrt(16)
4
inverse
1
inverse(7)
0.14285714285714
exp
1
exp(π⋅i)
-1
数值修约
floor
1
向下取整
floor(7.3)
7
ceil
1
向上取整
ceil(7.3)
8
round
3
对一数进行四舍五入。第一参数为欲四舍五入的数字;第二参数为欲四舍五入的位数;第三参数为当数值修约底数非十进制时的底数。
round(π,6)
3.141593
trunc
2
对一数取截尾函数。第一参数为欲截尾的数字;第二参数为欲截尾的位数。
trunc(π,6)
3.141592
特殊函
binomial
2
计算二项式系数。亦可以被理解为从n个相异元素中取出k个元素的方法数。
binomial(7,3)
35
factorial
1
计算一数的阶乘
factorial(7)
5040
gamma
1
计算一数的Γ函数
gamma(7)
720
LambertW
2
计算一数的朗伯W函数
LambertW(1)
0.56714329040978
代数
norm
2
计算一数或向量的范数
norm(3+4i,2)
5
summation
3
计算以函数表达之数列的总和。第一参数为数列首项;第二参数为数列末项;第三参数为用以表达数列的函
summation(1,5,:x↦x^2;)
55
product
3
计算以函数表达之数列的连乘积。第一参数为数列首项;第二参数为数列末项;第三参数为用以表达数列的函
product(1,5,:it↦it;)
120
<不定>
不定
调用自行定义的函数,这些函数通常是。以f:x↦x^2;;f(5)为例,其中f:x↦x^2;定义了函,并调用了函。函数的语法为以名称起始并以冒号区隔函数名称与定义(函数名称可留空,但冒号不能省去),整个语法要以分号(;)结尾。位于映射符号()前方为函数的变量或参数,后方为函数主体定义。函数可以有多个变量,但仅能有单个输出;同时函数语法不建议使用嵌套结构,即不建议将函数定义内包含另一个函数的定义,但可以分开定义再行组合;此外,函数定义内不能包含分号,因为分号会被视为函数结尾。
f:x↦x^2;,f(5)
f, 25
ele
1
获取特定代数空间(如四元数)的第n个单位元,如ele(2)即e₂=j
ele(2)
j
微积分
limit
3
计算一函数在x=x₀的极限。需注意此运算为估计,运算精度约仅有7位有效数字。第一参数为x₀;第二参数为逼近方向,1表示右极限、-1表示左极限、0表示一般的极限,此时若极限不存在则返回nan;第三参数为欲求极限的函数。
limit(0,1,:x↦div(x,x);)
1
diff
2
计算一函数在x=x₀的导数。需注意此运算为估计,运算精度约仅有7位有效数字。第一参数为欲求导数x=x₀的函数;第二参数为x₀。
diff(cos,div(2⋅pi,3))
-0.86602540379001
integral
4
计算一函数在从a到b的定积分。需注意此运算为估计,运算精度约仅有7位有效数字,且积分范围(a和b的距离)越大,精确度会越低。第一参数为a、第一参数为b、第三参数为欲求定积分的函数、第四参数为取样数,若未填写则使用默认值2000。
integral(0,π,:x↦sin(x);)
2
复变
re
1
获取一数的实数部分。
re(7+3i)
7
im
1
获取一数的虚数部分
im(7+3i)
3
nonRealPart
1
获取一数的非实数部分
nonRealPart(7+3i+2j+k)
3i+2j+k
scalarPartQuaternion
1
获取四元数的标量部分
scalarPartQuaternion(7+3i+2j+k)
7
vectorPartQuaternion
1
获取四元数的向量部分
vectorPartQuaternion(7+3i+2j+k)
3i+2j+k
arg
1
计算一复数的辐角
arg(3+7i)
1.1659045405098
cis
1
计算一数的纯虚指数函数值
cis(π)
-1
conjugate
1
conjugate(7+3i)
7-3i
统计
average
不定
计算数组的算术平均数。
average(7,3,2,1)
3.25
geoaverage
不定
计算数组的几何平均数
geoaverage(7,3,2,1)
2.5457298950218
maximum
不定
计算数组的最大值
maximum(7,3,2,1)
7
minimum
不定
计算数组的最小值
minimum(7,3,2,1)
1
selectlist
不定
输出数组中指定位置的元素。第一参数为要输出的元素序号,第二参数之后为数组
selectlist(2,7,3,2,1)
3
σ
不定
计算数组的标准差
σ(7,3,2,1)
2.2776083947861
技术性
hide
隐藏表达式
不定
在math模式下隐藏指定表达式。本函数的结果为最后一个参数。可作为连续表达式的表达,所有已输入的表达式皆会计算,但结果会隐藏。亦可用于自定义函数中的多表达式表达。
hide(y←5,x←7,x⋅y),5
35, 5
exprs
一系列表达式
不定
在math模式时显示所有表达式,运算结果为最后一则表达式。可作为连续表达式的表达,所有已输入的表达式皆会计算。
exprs(y←5,x←7,x⋅y),5
35, 5
lastexpr
最后一则表达式
不定
在math模式时显示最后一则表达式,运算结果也为最后一则表达式。可作为连续表达式的表达,所有已输入的表达式皆会计算。
lastexpr(y←5,x←7,x⋅y),5
35, 5
equalexpr
连续等式
不定
生成连续等式。
equalexpr(2+2,2*2)
4
call
调用函
不定
调用一个函数。用于处理匿名函数或返回值是函数的情况。
call((:x,y↦sin(x)+cos(y);),π,0)
1
<functionName>AtModule<ModulePageName>
不定
调用其他模块的函数。须注意函数名称必须是纯英文、模块名称也必须是纯英文,不能有空格或其他符号。例如若需要调用Module:Element中的getAtomicWeight函数,则须表示为getAtomicWeightAtModuleElement
getAtomicWeightAtModuleElement(10)
20.1797
range
指定范围
3
指定一范围,当一数落在该范围外则视为非数(NaN)。第一参数为要判定的数,第二和第三参数分别为范围的最小和最大值。
range(7,1,5),range(4,1,5)
nan, 4
if
3
指定特定条件下时的表达式。第一参数为条件、第二参数为条件为真时的表达式、第三参数为条件为假时的表达式。
if(3>2,1,0)
1
iff
函数型条件表达式
3
同if,不过参数可以是函数,条件成立时才会调用。
iff(3>2,:nil↦1;,:nil↦2;)
1
ifelse
条件表达式 if...else
不定
类似if,用法为ifelse(条件1, 条件1为真的结果, 条件2, 条件2为真的结果, ... , 条件n, 条件n为真的结果, 条件皆为假的结果)
ifelse(3>2,10,3<2,20,30)
10
ifelsef
函数型条件表达式 if...else
不定
同ifelse,不过参数可以是函数,条件成立时才会调用。
ifelsef(3>2,:nil↦10;,3<2,:nil↦20;,:nil↦30;)
10
random
2
取一个随机数。若无指定参数,或参数中包含非数(NaN),则取0-1之间的随机实数;若指定了参数1,则取1到参数1之间的随机数;若指定了参数1与参数2,则取参数1到参数2之间的随机数
random(1,10)
3
randomseed
设置随机种子码
1
将随机数的种子码设置为输入的参数,并返回实际设置的种子码。若输入的参数非实数则用当前时间随机产生种子码。
randomseed(10)
10
三角函
sin
1
计算一数的正弦值
sin(π)
0
cos
1
计算一数的余弦值
cos(π)
-1
tan
1
计算一数的正切值
tan(π)
0
cot
1
计算一数的余切值
cot(div(π,2))
0
sec
1
计算一数的正割值
sec(π)
-1
csc
1
计算一数的余割值
csc(div(π,2))
1
asin
1
计算一数的反正弦值
asin(1)
1.5707963267949
acos
1
计算一数的反余弦值
acos(1)
0
atan
1
计算一数的反正切值
atan(1)
0.78539816339745
acot
1
计算一数的反余切值
acot(1)
0.78539816339745
asec
1
计算一数的反正割值
asec(1)
0
acsc
1
计算一数的反余割值
acsc(1)
1.5707963267949
sinh
1
计算一数的双曲正弦值
sinh(π)
11.548739357258
cosh
1
计算一数的双曲余弦值
cosh(π)
11.591953275522
tanh
1
计算一数的双曲正切值
tanh(π)
0.99627207622075
coth
1
计算一数的双曲余切值
coth(π)
1.0037418731973
sech
1
计算一数的双曲正割值
sech(π)
0.086266738334054
csch
1
计算一数的双曲余割值
csch(π)
0.086589537530047
asinh
1
计算一数的双曲反正弦值
asinh(1)
0.88137358701954
acosh
1
计算一数的双曲反余弦值
acosh(1)
0
atanh
1
计算一数的双曲反正切值
atanh(0.5)
0.54930614433405
acoth
1
计算一数的双曲反余切值
acoth(1.5)
0.80471895621705
asech
1
计算一数的双曲反正割值
asech(1)
0
acsch
1
计算一数的双曲反余割值
acsch(1)
0.88137358701954
cis
1
计算一数的纯虚指数函数值
cis(π)
-1
gd
1
计算一数的古德曼函数值
gd(e)
1.4390113159637
arcgd
1
计算一数的反古德曼函数值
arcgd(1)
1.2261911708835
cogd
1
计算一数的余古德曼函数值
cogd(π)
0.08648169656714

自定义函数用法

具名函数

基本函数定义方式为“f : x f(x);”。

例如若要表达,则其应写为“f : x x^2;

匿名函数

匿名函数的语法为“:參數1,參數2...函數運算式;

以上例而言,对应的匿名函数应写为“: x x^2;

匿名函数可以被直接调用,例如“{{計算結果|:x↦x^2;(5)}}”→“

函数中的函数

函数中可以包含另一个函数,例如“{{計算結果|:x↦exprs(f:y↦y^2;,f(x)^2);(5)}}”→“

函数作为参数
部分函数是以函数作为参数,例如summation()product()和一些微积分函数。条件表达式(if())也有函数调用的版本iff()
  • 求和、求积与微积分函数
    求和函数(summation(start,end,function))、求积函数(summation(start,end,function))、微分(diff(function,x0))、积分(integral(a,b,function))、极限(limit(x0,way,function))皆须传入一个匿名函数,作为其数列计算的依据。
    以求和函数summation(start,end,function)为例,若要表达从1到5的和,则代码为:
    {{計算結果|summation(1, 5, :x↦x^2;)}}”→“
    • 求和/求积函数的变量
      一般求和/求积函数的变量通常是i、j或k,而在此运算系统中,i、j与k已被视作常量无法使用。若需要让显示出来的结果为i、j或k可在英文字母后方加“t”,如it、jt或kt,显示时t会省去:
    {{計算結果|summation(1, 5, :it↦it^2;)}}”→“
  • 函数条件表达式(iff(條件,為真,為假)
    条件表达式除了给定条件外,其为真的结果与为假的结果要是一个无参数的匿名函数。无参数的匿名函数定义方式为“:nil函數運算式;
    例如“{{計算結果|x←3; iff(x>2, :nil↦5;, :nil↦10;)}}”→“
    例如“{{計算結果|x←1; iff(x>2, :nil↦5;, :nil↦10;)}}”→“
函数的递归
具名函数可以递归调用,但须注意递归需要消耗较多的性能。函数的递归需要给出初始条件与递归结果,因此需要使用条件表达式,若用if()会导致无穷调用而发生错误,因此需要使用到iff()
  • 以阶乘为例,时定义为1(初始条件),其余为
    例如“{{計算結果|f:n↦iff(n≤1, 1, :nil↦f(n-1)*n;);,f(5)}}”→“

示例

  • {{計算|:x,y↦x^2+y^2;(5,2)}}→29
    • 使用{{计算结果}}:
  • {{計算|maximum(2,5,7,6,9,999)}}→999
    • 使用{{计算结果}}:
  • {{計算|log(2,256)}}→8
    • 使用{{计算结果}}:
  • {{計算|sin(div(pi,6))}}→0.5
    • 使用{{计算结果}}:
  • {{計算|sin(pi/6)}}→0.5
    • 使用{{计算结果}}:
  • {{計算|cos(div(2⋅pi,3))}}→-0.5
    • 使用{{计算结果}}:
  • {{計算|factorial(5)}}→120

限制

本模板仅支持输入数字(0-9)、已定义的运算符符号(&()+*-/÷:|~×°;=<>,%^)和半角英文字母(a-z及A-Z),其余字符都会被忽略。

  • {{複變運算|2 ≈ 3}}→“Lua错误:计算失败:缺少运算符,数字 [2, 3] 无法运算。”(被忽略,剩下“2<空白>3”而无法运算)
  • {{複變運算|²+₆}}→“Lua错误:计算失败:加法运算符需要2个运算数,但只找到1个运算数。”(²被忽略,剩下“+”而无法运算)

参数

以下是该模板的模板数据,适用于可视化编辑器等工具。

复变运算模板数据

进行复变量的运算

模板参数

此模板首选参数不换行的行内格式。

参数描述类型状态
表达式1

要计算的表达式

字符串必需
小数码数 (计算模板专用)2

使用{{计算}}模板时才支持这个参数。

数字可选
运算数字模式number class

要运算的数字模式,可以是实数、cmath(复数)、qmath(四元数)、no calc(不计算)、mathtag(以<math>输出)或直接写Module:模块名称.运算库来指定使用特定模块来运算。

推荐值
real cmath qmath no calc mathtag 實數 複數 四元數
默认值
cmath
字符串可选
使用<math>use math

是否使用<math>

默认值
no
布尔可选
是否以<math>原码输出should math

输出结果字符串是否变换为<math>原码格式输出。若use math设置为是,则此参数会自动当成是。

默认值
no
布尔可选
是否可调用其他模块useOtherModule

是否可调用其他模块的函数。

默认值
no
布尔可选

重定向

参见