【问题标题】:Maxima: evaluate a function f(x) embedding diff() nounsMaxima:评估嵌入 diff() 名词的函数 f(x)
【发布时间】:2015-06-06 00:32:36
【问题描述】:

我按照these 指令生成泰勒级数:

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

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

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

如果我这样做:

f(1);

然后最大值返回我以下错误:

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

如果我这样做:

f(D);

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

我该怎么做?

【问题讨论】:

  • 其实我事先并不知道qExct的定义:qExct几乎可以是任何平滑函数。这是生成数字方案的脚本的一部分。第一步是编写泰勒展开式,然后我必须对泰勒级数展开进行线性组合,以消除尽可能多的导数。我不应该为此需要 qExct 的定义。有什么想法吗?
  • @FredSensese 实际上,Maxima 对未定义的函数非常满意。

标签: maxima differentiation taylor-series


【解决方案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 安装中,share/pdiff/pdiff-doc.pdf 中有 pdiff 的文档。

【讨论】:

  • @RobertDodler 你的两个解决方案都有效,但pdiff 更适合我的情况:我有很多衍生品,所以简洁的写作风格更好。以前不知道pdiff,所以谢谢!谢谢@RobertDodler @FredSensese 的时间和回答!
【解决方案2】:

这是另一个解决方案,它使用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 的源代码中),这样就不会再发生了。

【讨论】:

    猜你喜欢
    • 2021-03-15
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-09
    相关资源
    最近更新 更多