根据官方2020年11月5号版本的Manual文件的第三章翻译的函数参考(Eigenmath网站https://georgeweigt.github.io/,参考文件位置https://georgeweigt.github.io/help.html,PDF版本参考文件https://georgeweigt.github.io/eigenmath.pdf,Eigenmath的单文件C源码:https://georgeweigt.github.io/eigenmath.c),便于检索需要的函数。

注意

尽量不要使用d、e、i、pi作为变量名,因为它们分别代表求导、常数e、虚数i、常数pi。
使用括号定义多元矩阵,使用方括号取矩阵中的某个元素。

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}$)。

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

arccosh(x)

返回x的反双曲余弦函数值(即$cosh^{-1}$)。

arcsin(x)

返回x的反正弦函数值(即$sin^{-1}$)。

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

arcsinh(x)

返回x的反双曲正弦函数值(即$sinh^{-1}$)。

arctan(x)

返回x的反正切函数值(即$tan^{-1}$)。

> arctan(1)
 1
--- pi
 2

arctanh(x)

返回x的反双曲正切函数值(即$tanh^{-1}$)。

arg(z)

返回复数z的角度。

> arg(2 - 3i)
-pi

besselj(x,n)

返回贝塞尔差分方程的一个解。

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

binding(s)

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

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

binomial(n,k)

返回在$(x+y)^n$的展开式中,$x^ky^(n-k)$项的系数。

> binomial(52,5)
2598960

注意,binomial函数和choose函数是同一个函数。

ceiling(x)

返回大于或等于x的最小整数。

> ceiling(1/2)
1

check(x)

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

A = 1
B = 1
check(A=B) -- script stops here if A not equal to 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)
  1/2     arctan(-3,2)/pi
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)

返回矩阵m的协因子矩阵的第i行、第j列的元素(各元素的代数余子式)。它是伴随矩阵的转置。

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

conj(z)

返回复数z的共轭。

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

contract(a,i,j)

返回张量a在i和j上的和。如果忽略i和j,则分别取1和2。表达式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)

返回向量u和v的交叉积。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)

返回f关于x的偏导。

> 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函数用作偏导计算。

defint(f,x,a,b)

返回f关于x在a到b上的定积分。参数可以扩展以用作对多个变量进行定积分计算(多重积分),如integral(f,x,a,b,y,c,d)等价于integral(integral(f,x,a,b),y,c,d)。

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

deg(p,x)

返回多项式p关于x的度(即p中含x的最高次项的次数)。

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

denominator(x)

返回x表达式的分母。

> denominator(a/b+b/a)
a b

det(m)

返回矩阵m的行列式。

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

dim(a,n)

返回张量a的第n项的维数(或矩阵a的第n列作为列向量的维数)。注意编号从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


 9
---
 2

draw(f,x)

画f(x)的函数图像。绘制范围可以通过设置xrange和yrange进行指定。

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

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

eigen(m)

数值计算特征值和特征向量(注意,eigenmath内建的特征值和特征向量求解算法要求矩阵m必须是数值的和对称的)。计算结果会保存在Q和D变量中,其中Q的每一行保存了一个特征向量,D的对角线上的每一个元素是一个特征值。

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

2.0   1.0

erf(x)

返回x的误差函数。

erfc(x)

返回x的互补误差函数。

eval(f,x,a)

计算f在x等于a时候的值。该函数的参数列表可以扩充以支持多个变量。比如,eval(f,x,a,y,b)等价于eval(eval(f,x,a),y,b)。

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

exp(x)

返回x的e指数。即$e^x$。

> exp(i pi)
-1

expand(r,x)

返回多项式r按x的分数的部分分数展开式。

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

expcos(z)

Returns the cosine of z in exponential form.
返回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函数进行处理。

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

factorial(n)

返回n的阶乘。也可以直接用n!进行表示。

> 20!
2432902008176640000

filter(f,a,b,...)

返回f中不包含a、b等的表达式。

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

float(x)

返回x的表达式中有理数和整数转换为浮点数之后的值。注意,pi和e也会被转换。

> float(212^17)
          39
3.52947 10

floor(x)

返回小于或等于x的最大整数。

> floor(1/2)
0

for(i,j,k,a,b,...)

对于i从j到k,计算a、b及后续表达式的值。

> 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)

返回使用x的n阶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

imag(z)

返回z的虚部。

> imag(2 - 3i)
-3

inner(a,b,...)

返回向量、张量、矩阵的内积。即矩阵乘法。(注,与dot是同一个函数)。

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

c x + d y

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

laguerre(x,n,m)

返回m阶x的第n个关联的Laguerre多项式。如果忽略m,则默认m取0。

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

last

上一步的计算结果被存放在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)

返回多项式p(x)的前导系数。

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

legendre(x,n,m)

返回m阶x的第n个关联的Legendre多项式。如果忽略m,则默认m取0。

> legendre(x,3)
 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函数会将未定义的符号函数视为实数,而abs函数不会。

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

mod(a,b)

返回a除以b的模,即a除以b计算整数商时的余数。

> mod(10,7)
3

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+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

polar(z)

返回复数z的极坐标形式。

> polar(x - i y)
         1/2
  2    2
(x  + y )    exp(i arctan(-y,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从j到k,分别计算f,并将它们的值累乘。下面的例子等价于计算$(x+1)(x+2)(x+3)$的展开式。

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

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

quote(x)

返回x的表达式,而非先计算表达式的值。

> 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,b),(c,d))
> rank(A)
2
> A=(((1,0),(0,1)),((3,2),(1,0)))
> rank(A)
3

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)为0的x的值。该多项式应当能够因式分解。返回的向量中包含了每个根。

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

-1

run(file)

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

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)

计算f中i从j到k的各个表达式,并返回将各个结果的和。

> sum(i,j,k,f)
 5    4    3    2
x  + x  + x  + x  + x

注意,在sum函数计算结束后,i的值会被还原。如果使用i作为变量,则f中的单位复数i会被替换。

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)

返回f(x)在x趋于a时的n阶taylor展开式。如果忽略a,则a默认值为0。

> taylor(sin(x),x,5)
  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时,脚本会输出它的计算过程。这在调试时有帮助。
注意,使用contract函数来获取矩阵的迹。

transpose(a,i,j)

返回张量a第i、j项的转置。如果i和j未指定,则默认为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,...)

返回给定维数的空张量。在创建初始张量并给每个元素依次赋值时会很有用。

A = zero(3,3)
for(k,1,3,A[k,k]=k)
A
    1   0   0

A = 0   2   0

    0   0   3

标签: Eigenmath

添加新评论