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

时间:2015-04-01 11:23:57

标签: maxima differentiation taylor-series

我按照these指令生成泰勒系列:

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

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

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

如果我这样做:

f(1);

然后maxima返回以下错误:

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

如果我这样做:

f(D);

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

我该怎么做?

2 个答案:

答案 0 :(得分:1)

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安装中的pdiff中有share/pdiff/pdiff-doc.pdf的文档。

答案 1 :(得分:1)

这是另一种解决方案,它使用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的源代​​码中),因此不再发生。