微分代数(Differential Algebra)简单来说是一种利用计算机代数近似实际函数的手段,也就是说函数是以代数变量加减乘除的形式在计算机中保存的,而不是实际数值。因此,它可以作为主流符号运算软件的底层表达方式。
它的核心方法是把函数进行Taylor展开,然后用
n
n
n次多项式的系数表达出来,这其中会用到函数的微分,可能这是它称为“微分”代数的原因。
在实际运算的时候,用这个“多项式近似”的结果来代替原来的函数关系,就可以有很多方便。典型例子比如,我们手头有一个函数
f
(
x
)
=
sinh
(
arctan
(
x
)
)
f(x) = \sinh(\arctan(x))
f(x)=sinh(arctan(x)),但因为种种原因我们没办法得到这个表达式,于是我可以用微分代数进行representation。在
Mathematica
\textit{Mathematica}
Mathematica中运行
f[x] = Sinh[ArcTan[x]]; g[x] = Series[f[x], {x, 0, 10}]
就得到了以下这个10阶近似:
f
(
x
)
≈
x
−
x
3
6
+
x
5
24
−
x
7
1008
−
1163
x
9
72576
+
O
(
x
11
)
f(x)\approx {x}-\frac{{x}^3}{6}+\frac{{x}^5}{24}-\frac{{x}^7}{1008}-\frac{1163 {x}^9}{72576}+O\left({x}^{11}\right)
f(x)≈x−6x3+24x5−1008x7−725761163x9+O(x11)
在计算机中保存的是这几个系数,所以再次调用就很轻松可以得到函数结果。实际应用DA时,所面临的很多函数计算量肯定是远大于我这个例子,此时DA的意义就出现了。比如下面这个隐函数
E
(
a
,
e
,
t
)
E(a,e,t)
E(a,e,t)代表的是Kepler方程的解,即满足以下等式:
E
−
e
sin
E
−
μ
a
3
(
t
−
t
0
)
=
0
E-e \sin E-\sqrt{\frac{\mu}{a^{3}}}\left(t-t_{0}\right)=0
E−esinE−a3μ(t−t0)=0
而它又是个隐函数,因此
不过,很明显的是,DA仍然只能提供一种近似,而不是原函数的代替。
DA的功能还有很多,尤其是对复杂数学系统的近似,如隐函数 f ( x ) = 0 f(x)=0 f(x)=0、微分 f ′ ( x ) f^\prime(x) f′(x)、积分 ∫ f ( x ) d x \int f(x) \text d x ∫f(x)dx、ODE的解 x ( t ) x(t) x(t)的近似和representation。
感兴趣的朋友可以git一个Github - Differential Algebra Computational Toolbox ,这个工具箱的作者是米兰理工大学,他们在将其应用到航天中做了很多工作。