我按照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
,并保持衍生物不变...
我该怎么做?
答案 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的源代码中),因此不再发生。