Maxima:评估嵌入 diff() 名词的函数 f(x)

Maxima: evaluate a function f(x) embedding diff() nouns

我按照 these 说明生成泰勒级数:

f(x) := ''(ratdisrep(taylor(qExct('x),'x,0,5)));

qExct 是一个未定义的函数: 我想对作为平滑函数的任何 qExct 执行特定计算。

知道了这一点,如何将变量 x 设置为某个值(例如 1)?

如果我这样做:

f(1);

然后 maxima returns 我出现以下错误 :

diff: variable must not be a number; found: 1

如果我这样做 :

f(D);

然后它将 D 视为一个变量,并将所有出现的变量 x 替换为变量 D。特别是,它使用 d/dD 而不是 d/dx 来区分。但是,我想要的是仅在 x^n 项中用数字 1 替换变量 x 并保持导数不变......

我该怎么做?

diff 表达式中的变量在 Maxim 中并非处处都被识别为虚拟(正式)变量,因此当您尝试计算 f(1) 时,Maxima 将 1 代入 diff 表达式并导致错误。我认为这是一个错误;我会做一个关于它的错误报告。

作为解决方法,您可以使用 Maxima 附带的附加包 pdiff(位置导数)。该表示法与 Maxima 默认使用的 dy/dx 表示法略有不同。

(%i1) load (pdiff) $
(%i2) f(x) := ''(ratdisrep(taylor(qExct('x),'x,0,2)));
                                    2
                     qExct     (0) x
                          ""(2)
(%o2)        f(x) := ---------------- + qExct     (0) x + qExct(0)
                            2                ""(1)
(%i3) f(h);
                                2
                   qExct   (0) h
                        (2)
(%o3)              -------------- + qExct   (0) h + qExct(0)
                         2               (1)
(%i4) ev (%, qExct=sin);
(%o4)                                  h
(%i5) ev (%o3, h=1);
                     qExct   (0)
                          (2)
(%o5)                ----------- + qExct   (0) + qExct(0)
                          2             (1)

我认为 f(x) := ... 显示中的虚假 "" 是轻微的显示错误;我想你可以忽略它们。

在您的 Maxima 安装中 share/pdiff/pdiff-doc.pdf 中有 pdiff 的文档。

这是另一个解决方案,它使用 at 而不是 pdiff

(%i1) f(x) := ''(ratdisrep(taylor(qExct('x),'x,0,2)));
                                !
                   2            !
               2  d             !
              x  (--- (qExct(x))!     )
                    2           !
                  dx            !                         !
                                !x = 0       d            !
(%o1) f(x) := ------------------------- + x (-- (qExct(x))!     ) + qExct(0)
                          2                  dx           !
                                                          !x = 0
(%i2) at(f(x), x=1);
                           !
                     !     !
        2            !     !
       d             !     !
       --- (qExct(x))!     !
         2           !     !
       dx            !     !                           !
                     !x = 0!                     !     !
                           !x = 1   d            !     !
(%o2)  -------------------------- + -- (qExct(x))!     !      + qExct(0)
                   2                dx           !     !
                                                 !x = 0!
                                                       !x = 1
(%i3) %, qExct=sin;
                                !
                          !     !
               2          !     !
              d           !     !
              --- (sin(x))!     !
                2         !     !
              dx          !     !                         !
                          !x = 0!                   !     !
                                !x = 1   d          !     !
(%o3)         ------------------------ + -- (sin(x))!     !
                         2               dx         !     !
                                                    !x = 0!
                                                          !x = 1
(%i4) %, nouns;
(%o4)                                  1

请注意 f(1) 是通过 at(f(x), x=1) 求值的。

嵌套的 at 表达式很麻烦;我已经修复它(在 Maxima 的源代码中),这样就不会再发生了。