Eigenmath函数说明

类别:    标签: 数理   阅读次数:   版权: (CC) BY-NC-SA

Eigenmath是一个计算机代数系统, 可用于进行简单的数学符号计算, 公式推导. 最近也提供了js版本, 可以直接在浏览器中运行. 我关注它有很多年了, 虽然也只是不时用到. 这里整理了Eigenmath支持的函数的说明, 供参考.

参考资料

注意

  1. 注释符为#--
  2. 尽量不要使用deipi作为变量名,因为它们分别代表求导、常数e、虚数i、常数pi。
  3. 使用括号定义多元矩阵,使用方括号取矩阵中的某个元素。
  4. 下文中>后面为输入.

abs(x): x的绝对值或向量x的长度

> X = (x,y,z)
> abs(X)
              1/2
  2    2    2
(x  + y  + z )

adj(m): 矩阵m的伴随矩阵,等于m的行列式乘以m的逆矩阵

> A = ((a,b),(c,d))
> adj(A) == det(A) inv(A)
1

and(a,b,...): 逻辑与

如果所有参数都为真(即非零),返回1,否则返回0。

> and(1=1,2=2)
1

arccos(x): x的反余弦$\cos^{-1}(x)$

> arccos(1/2)
 1
--- π
 3

arccosh(x): x的反双曲余弦$\cosh^{-1}(x)$

arcsin(x): x的反正弦$\sin^{-1}(x)$

> arcsin(1/2)
 1
--- π
 6

arcsinh(x): x的反双曲正弦$\sinh^{-1}(x)$

arctan(y,x): y/x的反正切$\tan^{-1}(y/x)$

> arctan(1,0)
 1
--- π
 2

arctanh(x): x的反双曲正切$\tanh^{-1}(x)$

arg(z): 复数z的幅角

> arg(2 - 3i)
arctan(-3,2)

besselj(x,n): 贝塞尔函数

> besselj(x,1/2)
  1/2
 2    sin(x)
-------------
   1/2  1/2
  π    x

binding(s): 符号表达式的原本形式

计算一个符号表达式时,其结果可能与符号表达式的原始形式不同,比如结果表达式会展开。使用binding函数可以返回符号表达式原本的形式。

> p = quote((x + 1)^2)
> p
> binding(p)
     2
p = x  + 2 x + 1
       2
(x + 1)

binomial(n,k): 二项式系数, 或组合数

$(x+y)^n$的展开式中$x^k y^(n-k)$项的系数.

此函数与choose相同。

> binomial(52,5)
2598960

ceiling(x): 大于或等于x的最小整数

> ceiling(1/2)
1

check(x): 测试表达式x的值并决定是否停止脚本

如果x为真(非零)则继续执行脚本,否则停止脚本。表达式x可以包含比较运算,比如===<<=>>=。可以使用not函数测试非等价条件。

> A = 1
> B = 1
> check(A=B) -- 如果A不等于B, 则在此处停止脚本

choose(n,k): 组合数

n中不考虑顺序取k个项的组合数(即$C_n^k$)。

> choose(52,5)
2598960

circexp(x): 计算x表达式,将其中的三角函数和双曲函数转换为指数形式

> circexp(cos(x) + i sin(x))
exp(i x)

clear: 清除所有的符号定义

clock(z): 复数z的极坐标形式,但使用-1作为底数,而不使用e

> clock(2 - 3i)

           arctan(-3,2)
          --------------
  1/2           π
13    (-1)

coeff(p,x,n): 多项式p中$x^n$项的系数

> p = x^3 + 6x^2 + 12x + 8
> coeff(p,x,2)
6

cofactor(m,i,j): 矩阵mi行、第j列元素的代数余子式, 伴随矩阵的转置。

> A = ((a,b),(c,d))
> cofactor(A,1,2) == adj(A)[2,1]
1

conj(z): 复数z的共轭。

> conj(2 - 3i)
2 + 3 i

contract(a,i,j): 张量a对指标ij缩并, 矩阵m的迹

如果忽略ij,则分别取12。表达式contract(m)表示计算矩阵m的迹(即$\tr(m)$)。

> A = ((a,b),(c,d))
> contract(A)
a + d

cos(x): x的余弦

> cos(pi/4)
  1
------
  1/2
 2

cosh(x): x的双曲余弦

> circexp(cosh(x))
 1             1
--- exp(-x) + --- exp(x)
 2             2

cross(u,v): 向量uv的叉积

cross函数可重定义,默认定义如下:

cross(u,v) = (u[2] v[3] - u[3] v[2],
              u[3] v[1] - u[1] v[3],
              u[1] v[2] - u[2] v[1])

curl(u): 向量u的旋度

curl函数可重定义,默认定义如下:

curl(u) = (d(u[3],y) - d(u[2],z),
           d(u[1],z) - d(u[3],x),
           d(u[2],x) - d(u[1],y))

d(f,x): fx的偏导数

> d(x^2,x)
2 x

参数f可以是任意秩的张量,参数x可以是向量。当x为向量时,结果为f的梯度。

> F = (f(),g(),h())
> X = (x,y,z)
> d(F,X)
                                
 d(f(),x)   d(f(),y)   d(f(),z) 
                                
 d(g(),x)   d(g(),y)   d(g(),z) 
                                
 d(h(),x)   d(h(),y)   d(h(),z) 
                                

d可以用作变量名,它不会与函数d冲突。

可以将d重定义为其他函数,这种情况下仍然可以使用derivative(d的同义函数)计算偏导数。

defint(f,x,a,b): 从ab, fx的定积分

参数可以扩展以对多个变量进行定积分计算(多重积分),例如defint(f,x,a,b,y,c,d)等价于defint(defint(f,x,a,b),y,c,d)

> f = (1 + cos(theta)^2) sin(theta)
> defint(f, theta, 0, pi, phi, 0, 2pi)
 16
---- π
 3

deg(p,x): 多项式px的最高次数

> p = (2x + 1)^3
> deg(p,x)
3

denominator(x): 表达式x的分母

> denominator(a/b)
b

det(m): 矩阵m的行列式

> A = ((a,b),(c,d))
> det(A)
a d - b c

dim(a,n): 张量an个指标的维数, 或矩阵an列的维数

注意编号从1开始。

> A = ((1,2),(3,4),(5,6))
> dim(A,1)
3

div(u): 向量u的散度

div函数可重定义,默认定义如下:

div(u) = d(u[1],x) + d(u[2],y) + d(u[3],z)

do(a,b,...): 从左到右依次计算每个参数表达式,返回最后一个参数的计算结果

> do(A=1,B=2,A+B)
3

注意,计算过程的中间变量在函数计算结束后仍然会保留。

dot(a,b,...): 向量、矩阵、张量的点积,矩阵乘法

# 计算方程组AX=B的解
> A = ((1,2),(3,4))
> B = (5,6)
> X = dot(inv(A),B)
> X
         
     -4  
         
X =   9  
     --- 
      2  
         

draw(f,x): 绘制f(x)的函数图像

可以通过设置xrangeyrange指定绘制范围

> xrange = (0,1)
> yrange = (0,1)
> draw(x^2,x)

注意,该功能需要在GUI中使用。

e: 初始化为自然常数e

> e^x
exp(x)

注意: 可以清除或重定义e, 用作其他.

eigen(m): 数值计算特征值和特征向量, $m=Q’DQ$

注意,矩阵m必须为数值, 且对称。计算结果会保存在QD变量中,其中Q的行保存了特征向量,D对角线上的元素为特征值。

> A = ((1,2),(2,1))
> eigen(A)
> dot(transpose(Q),D,Q)
       
 1   2 
       
 2   1 
       

erf(x): x的误差函数

erfc(x): x的余误差函数

eval(f,x,a): x等于a时表达式f的值

参数列表可以扩充以支持多个变量。比如,eval(f,x,a,y,b)等价于eval(eval(f,x,a),y,b)

> eval(x + y,x,a,y,b)
a + b

exp(x): xe次幂$e^x$

> exp(i pi)
-1

expand(r,x): 多项式rx次数的部分分数展开

> p = (x + 1)^2
> q = (x + 2)^2
> expand(p/q,x)
    2            1
-------- + -------------- + 1
  x + 2      2
            x  + 4 x + 4

expcos(z): z的余弦函数的指数形式

> expcos(z)
 1              1
--- exp(i z) + --- exp(-i z)
 2              2

expcosh(z): z的双曲余弦函数的指数形式

> expcosh(z)

 1             1
--- exp(-z) + --- exp(z)
 2             2

expsin(z): z的正弦函数的指数形式

> expsin(z)

  1                1
---- i exp(i z) + --- i exp(-i z)
  2                2

expsinh(z): z的双曲正弦函数的指数形式

> expsinh(z)
  1             1
---- exp(-z) + --- exp(z)
  2             2

exptan(z): z的正切函数的指数形式

> exptan(z)
       i             i exp(2 i z)
---------------- - ----------------
 exp(2 i z) + 1     exp(2 i z) + 1

exptanh(z): z的双曲正切函数的指数形式

> exptanh(z)
       1             exp(2 z)
--------------- + --------------
  exp(2 z) + 1     exp(2 z) + 1

factor(n): 数n的因数(质数分解)

> factor(12/35)
  2
 2  3
------
 5 7

如果n是一个浮点数,则选取它的一个近似值进行计算。

> factor(float(pi))
 5 71
------
 113

factor(p,x): 多项式p关于x的因式分解

对于多变量的多项式,函数的参数列表可以扩展。

> p = 2x + x y + y + 2
> factor(p,x,y)
(x + 1) (y + 2)

注意,factor函数返回的是未展开的表达式,如果将结果赋值给一个符号变量,则对这个符号变量的计算会将结果展开。如果希望保持不展开的结果,可通过binding函数进行处理。

> p = 2x + x y + y + 2
> q = factor(p,x,y)
> q
q = 2 x + x y + y + 2
> binding(q)
(x + 1) (y + 2)

factorial(n): n的阶乘n!

也可以使用n!

> 20!
2432902008176640000

filter(f,a,b,...): f中不包含ab等的表达式

> p = x^2 + 3x + 2
> filter(p,x^2)
3 x + 2

float(x): 表达式x的有理数和整数转换为浮点数之后的值

注意,pie也会转换。

> float(212^17)
          39
3.52947 10

floor(x): 小于或等于x的最大整数

> floor(1/2)
0

for(i,j,k,a,b,...): i取值从j到k时,计算ab及后续表达式的值

> for(k,1,3,A=k,print(A))
A = 1
A = 2
A = 3

注意,for循环中i的值在for循环结束后会恢复原值,除非for循环被check之类的函数打断。如果使用i作为计数变量,for循环内的虚数单位会被覆盖(涉及复数计算时,尽量不使用i作为变量)。

gcd(a,b,...): 各表达式的最大公约数

> gcd(x,x y)
x

hermite(x,n): xn阶Hermite多项式

> hermite(x,3)
   3
8 x  - 12 x

(新版本中不可用) hilbert(n): n阶Hilbert矩阵

> hilbert(3)
       1     1
 1    ---   ---
       2     3
 1     1     1
---   ---   ---
 2     3     4
 1     1     1
---   ---   ---
 3     4     5

hadamard(a,b,...): Hadamard积(对应元素的乘积)

参数的维数必须相同. Hadamard积也可以通过简单地对参数相乘进行计算.

> A = ((A11,A12),(A21,A22))
> B = ((B11,B12),(B21,B22))
> A B
                   
 A   B     A   B   
  11  11    12  12 
                   
 A   B     A   B   
  21  21    22  22 
                   

i: 初始化为虚数单位$(-1)^{1/2}$

> exp(i pi)
-1

注意: 可以清除或重定义i做其他用途.

imag(z): z的虚部

> imag(2 - 3i)
-3

inner(a,b,...): 向量、张量、矩阵的内积(矩阵乘法)

> A = ((a,b),(c,d))
> B = (x,y)
> inner(A,B)
           
 a x + b y 
           
 c x + d y 
           

注意,innerdot是同一函数。

integral(f,x): f关于x的不定积分

> integral(x^2,x)
 1   3
--- x
 3

inv(m): 矩阵m的逆矩阵

> A = ((1,2),(3,4))
> inv(A)
            
 -2     1   
            
  3      1  
 ---   ---- 
  2      2  
            

isprime(n): 若n为质数返回1,否则返回0

> isprime(2^31 - 1)
1

j: 设置j=sqrt(-1), 以便使用j而不是i作为虚数单位

> j = sqrt(-1)
> 1/sqrt(-1)
-j

kronecker(a,b,...): 向量, 矩阵的Kronecker积(直积)

> A = ((1,2),(3,4))
> B = ((a,b),(c,d))
> kronecker(A,B)
                       
  a     b    2 a   2 b 
                       
  c     d    2 c   2 d 
                       
 3 a   3 b   4 a   4 b 
                       
 3 c   3 d   4 c   4 d 
                       

laguerre(x,n,a): xn阶关联Laguerre多项式

> laguerre(x,3,0)
  1   3    3   2
---- x  + --- x  - 3 x + 1
  6        2

last: 上一步的计算结果

> 212^17
3529471145760275132301897342055866171392
> last^(1/17)
212

注意,对某些函数,如果未指定参数,则会将last作为参数。

> 212^17
3529471145760275132301897342055866171392
> float
          39
3.52947 10

lcm(a,b,...): 各表达式的最小公倍数

> lcm(x,x y)
x y

leading(p,x): 多项式px最高次项的系数

> leading(3x^2+y^4+1,x)
3

legendre(x,n,m): xn阶关联Legendre多项式

> legendre(x,3,0)
 5   3    3
--- x  - --- x
 2        2

(新版本中不可用) lisp(x): 计算表达式x并返回结果的前缀符号形式

在调试脚本时很有用。

> lisp(x^2 + 1)
(+ (^ x 2) 1)

log(x): 以e为底x的对数(自然对数)

> log(x^y)
y log(x)

如果要计算以其他值,如a,为底的对数,可使用换底公式:$log_a(x) = log(x)/log(a)$.

mag(z): 复数z的模

> mag(x + i y)
       1/2
 2    2
x  + y 
       
       

注意,mag函数会将未定义的符号函数视为实数,而abs函数不会。

minor(m,i,j): 矩阵mij列对应的余子式

> A = ((1,2,3),(4,5,6),(7,8,9))
> minor(A,1,1) == det(minormatrix(A,1,1))
1

minormatrix(m,i,j): 矩阵m去除ij列后的结果

> A = ((1,2,3),(4,5,6),(7,8,9))
> minormatrix(A,1,1)
       
 5   6 
       
 8   9 
       

mod(a,b): a除以b的模

a除以b计算整数商时的余数。

> mod(10,7)
3
> mod(5,3/8)
 1
---
 8

noexpand(x): 计算表达式x的值, 但不展开求和进行

> noexpand((x + 1)^2 / (x + 1))
x + 1

not(x): 逻辑非

x为真(非零)返回0,否则返回1

> not(1=1)
0

nroots(p,x): 多项式p(x)的所有根

包括实数和复数根。该函数只进行数值计算。p(x)的系数可以是复数。

> nroots((x-1)*(x+2),x)
    
 -2 
    
 1  
    

number(x): 判断数字

如果x为有理数或者浮点数返回1,否则返回0。

> number(1/2)
1

numerator(x): 表达式x的分子

> numerator(a/b)
a
> numerator(a/b+b/a)
 2    2
a  + b

or(a,b,...): 逻辑或

如果参数列表中至少有一个表达式为真(非0),则返回1,否则返回0。

> or(1=1,2=2)
1

outer(a,b,...): 向量、矩阵或张量的外积(张量积)

> A = (a,b,c)
> B = (x,y,z)
> outer(A,B)
                 
 a x   a y   a z 
                 
 b x   b y   b z 
                 
 c x   c y   c z 
                 

pi: 符号π

> exp(i pi)
-1

polar(z): 复数z的极坐标形式

> polar(x - i y)
       1/2
 2    2
x  + y     exp(i arctan(-y,x))
       
       

power: 使用^求幂

指数为负值时需要加括号.

> x^(-1/2)
  1
------
  1/2
 x

prime(n): 第n个质数

注意,n应介于1和10000之间。

> prime(100)
541

print(a,b,...): 计算表达式并输出结果

通常与for函数配合使用, 用于在循环内部输出结果。

> for(j,1,3,print(j))
j = 1
j = 2
j = 3

product(i,j,k,f): 连乘积

i取值从jk,分别计算f,并将它们的值累乘作为结果.

下面的例子等价于计算$(x+1)(x+2)(x+3)$的展开式。

> product(j,1,3,x + j)
 3      2
x  + 6 x  + 11 x + 6

注意,i在函数计算结束后会恢复。如果使用i作为变量,则product函数内表达式中的复数单位i会被覆盖。

product(y): y分量的连乘积.

> product((1,2,3,4))
24

quote(x): 表达式x,而不先计算其值

> quote((x + 1)^2)
       2
(x + 1)

> x=2
> quote((x+1)^2)
       2
(x + 1)
> t=last
> t
t = 9

quotient(p,q,x): p(x)q(x)的商

> p = x^2 + 1
> q = x + 3
> quotient(p,q,x)
x - 3

rank(a): 矩阵或张量a的秩

> A = ((a,b),(c,d))
> rank(A)
2

rationalize(x): 通分

计算表达式x,并使其只有一个分母(即结果只含有一个分式)

> rationalize(1/a + 1/b + 1/2)
 2 a + a b + 2 b
-----------------
      2 a b

注意,rationalize函数返回未展开的表达式。如果将结果赋值给一个符号变量,对其求值会展开表达式。可以使用binding函数保持未展开的表达式。

> f = rationalize(1/a + 1/b + 1/2)
> binding(f)
 2 a + a b + 2 b
-----------------
      2 a b

real(z): 复数z的实部

> real(2 - 3i)
2

rect(z): 复数z的三角函数形式

> rect(exp(i x))
cos(x) + i sin(x)

roots(p,x): 多项式p(x)的根

该多项式应当能够因式分解。返回的向量中包含了每个根。

> roots(x^2 + 3x + 2,x)
    
 -2 
    
 -1 
    

rotate(u,s,k,...): 旋转向量u

向量u必须具有2n个元素, 其中n为整数, 取值范围为1到15. 参数s,k,...为旋转代码的一个序列, 其中s为大写字母, k为4位的数, 从0到n-1. 旋转从左到右进行求值. 可以使用的旋转为:

控制前缀C, k修改下一个旋转代码, 以便使其成为一个使用k作为控制位的控制旋转. 使用两个会更多前缀来指定多个控制位. 例如, C, k, C, j, X, m为Toffoli旋转. 傅里叶旋转Q, kV, k用于从0到k的量子位.(QV忽略所有控制前缀). 另见手册的第三节.

> psi = (1,0,0,0)
> rotate(psi,H,0)
        
   1    
 ------ 
   1/2  
  2     
        
   1    
 ------ 
   1/2  
  2     
        
   0    
        
   0    
        

run(file): 执行脚本file

file应为脚本的绝对路径或相对当前可执行文件位置的路径。在批量加载一些自定义函数时很有用,或可以实现脚本的嵌套调用。

> run("Downloads/EVA.txt")

simplify(x): 化简表达式x

> simplify(sin(x)^2 + cos(x)^2)
1

sin(x): x的正弦函数值

> sin(pi/4)
  1
------
  1/2
 2

sinh(x): x的双曲正弦函数值

> circexp(sinh(x))
  1             1
---- exp(-x) + --- exp(x)
  2             2

sqrt(x): x的平方根

> sqrt(10!)
     1/2
720 7

status: 当前的内存使用情况

stop: 终止运行当前脚本

(新版本中不可用) string(x): 计算x表达式并返回字符串

在测试脚本时很有用。

> string((x + 1)^2) == "x^2 + 2 x + 1"
1

subst(a,b,c): 将c中的b替换为a

> subst(x,y,y^2)
 2
x

sum(i,j,k,f): 连加和

i取值从jk, 分别计算f,并返回各个结果的连加和。

> sum(j,1,5,x^j)
 5    4    3    2
x  + x  + x  + x  + x

注意,sum函数计算结束后,i的值会还原。如果使用i作为变量,则sum函数内的复数单位i会被覆盖。

sum(y): y各分量的连加和

> sum((1,2,3,4))
10

tan(x): x的正切值

> simplify(tan(x) - sin(x)/cos(x))
0

tanh(x): x的双曲正切值

> circexp(tanh(x))
       1             exp(2 x)
--------------- + --------------
  exp(2 x) + 1     exp(2 x) + 1

taylor(f,x,n,a): x趋于a时, f(x)n阶Taylor展开

> taylor(sin(x),x,5,0)
  1    5    1   3
----- x  - --- x  + x
 120        6

test(a,b,c,d,...): 连续测试

如果表达式a为真(非零),则返回b,否则如果表达式c为真,则返回d,依次类推。

如果参数的个数为奇数,则当所有被测试表达式均为假时,返回最后一个表达式。表达式可以包含===<<=>>=。可以使用not函数测试非等价性。(在=为赋值算符的情况下, 可以使用等价算符==)

> A = 1
> B = 1
> test(A=B,"yes","no")
yes

trace: 追踪计算过程

设置trace=1时,脚本会输出计算过程。有助于调试。

> trace = 1

注意,使用contract函数计算矩阵的迹。

transpose(a,i,j): 转置

张量a对指标ij的转置。

如果未指定ij,则默认为1和2,因此可以只使用一个参数对矩阵进行转置。

> A = ((a,b),(c,d))
> transpose(A)
       
 a   c 
       
 b   d 
       

注意,参数可以扩展以实现多个转置操作。参数从左到右依次计算。例如,transpose(A,1,2,2,3)等价于transpose(transpose(A,1,2),2,3)

tty: 文本终端

设置tty=1时,结果将以普通文本形式输出。

> tty = 1
> (x + 1/2)^2
x^2 + x + 1/4

unit(n): n阶单位矩阵

> unit(3)
           
 1   0   0 
           
 0   1   0 
           
 0   0   1 
           

zero(i,j,...): 零张量

给定维数i, j等的空张量。在创建张量并给每个元素赋值时会很有用。

> A = zero(3,3)
> for(k,1,3,A[k,k]=k)
> A
               
     1   0   0 
               
A =  0   2   0 
               
     0   0   3 
               
◆本文地址: , 转载请注明◆
◆评论问题: https://jerkwin.herokuapp.com/category/3/博客, 欢迎留言◆


前一篇: 副本交换动力学T-REMD模拟的温度分布计算器
后一篇: 环puckering坐标分析工具:gmx_puckering

访问人次(2015年7月 9日起): | 最后更新: 2022-12-17 03:04:57 UTC | 版权所有 © 2008 - 2022 Jerkwin