最大值:以列表作为参数调用函数
maxima: calling function with list as argument
我能做到:
(%i1) myFunc(x) := x^2 + 1;
myList : [1,2,3];
myFunc(myList);
(%o1) myFunc(x):=x^2+1
(%o2) [1,2,3]
(%o3) [2,5,10]
还有这个:
(%i1) kill(all);
load("pdiff");
myFunc(x) := ratdisrep(taylor(diff(q('dst),'dst,x),'dst,0,5));
myFunc(1);
myFunc(2);
myFunc(3);
(%o1) myFunc(x):=ratdisrep(taylor(diff(q('dst),'dst,x),'dst,0,5))
(%o2) [1,2,3]
(%o3) (q[(6)](0)*dst^5)/120+(q[(5)](0)*dst^4)/24+(q[(4)](0)*dst^3)/6+(q[(3)](0)*dst^2)/2+q[(2)](0)*dst+q[(1)](0)
(%o4) (q[(7)](0)*dst^5)/120+(q[(6)](0)*dst^4)/24+(q[(5)](0)*dst^3)/6+(q[(4)](0)*dst^2)/2+q[(3)](0)*dst+q[(2)](0)
(%o5) (q[(8)](0)*dst^5)/120+(q[(7)](0)*dst^4)/24+(q[(6)](0)*dst^3)/6+(q[(5)](0)*dst^2)/2+q[(4)](0)*dst+q[(3)](0)
但我做不到:
(%i1) kill(all);
load("pdiff");
myFunc(x) := ratdisrep(taylor(diff(q('dst),'dst,x),'dst,0,5));
myList : [1,2,3];
myFunc(myList);
(%o1) myFunc(x):=ratdisrep(taylor(diff(q('dst),'dst,x),'dst,0,5))
(%o2) [1,2,3]
declare: argument must be a symbol; found "d"
-- an error. To debug this try: debugmode(true);
为什么会这样,我该如何解决?
提前致谢!
我不知道关于 declare
的错误是从哪里来的 -- 我在 pdiff.lisp
中找不到对 declare
的任何调用。当我复制您的第二个示例时,我得到的不是错误,而是:'diff(q(dst),dst,[1,2,3])
我认为这是可以预料的。
我猜您想为 myList
的每个元素创建一个输出为 myFunc
的列表。我的建议是简单地将 myFunc
映射到 myList
。一些函数自动映射列表;这是一个方便的功能,并非所有功能都有。这是我在这种情况下得到的:
(%i1) display2d : false $
(%i2) load ("pdiff") $
(%i3) myFunc(x) := ratdisrep(taylor(diff(q('dst),'dst,x),'dst,0,5)) $
(%i4) myList : [1,2,3] $
(%i5) map (myFunc, myList);
(%o5) [((pderivop(q,6))(0)*dst^5)/120+((pderivop(q,5))(0)*dst^4)/24
+((pderivop(q,4))(0)*dst^3)/6
+((pderivop(q,3))(0)*dst^2)/2
+(pderivop(q,2))(0)*dst
+(pderivop(q,1))(0),
((pderivop(q,7))(0)*dst^5)/120+((pderivop(q,6))(0)*dst^4)/24
+((pderivop(q,5))(0)*dst^3)/6
+((pderivop(q,4))(0)*dst^2)/2
+(pderivop(q,3))(0)*dst
+(pderivop(q,2))(0),
((pderivop(q,8))(0)*dst^5)/120+((pderivop(q,7))(0)*dst^4)/24
+((pderivop(q,6))(0)*dst^3)/6
+((pderivop(q,5))(0)*dst^2)/2
+(pderivop(q,4))(0)*dst
+(pderivop(q,3))(0)]
我能做到:
(%i1) myFunc(x) := x^2 + 1;
myList : [1,2,3];
myFunc(myList);
(%o1) myFunc(x):=x^2+1
(%o2) [1,2,3]
(%o3) [2,5,10]
还有这个:
(%i1) kill(all);
load("pdiff");
myFunc(x) := ratdisrep(taylor(diff(q('dst),'dst,x),'dst,0,5));
myFunc(1);
myFunc(2);
myFunc(3);
(%o1) myFunc(x):=ratdisrep(taylor(diff(q('dst),'dst,x),'dst,0,5))
(%o2) [1,2,3]
(%o3) (q[(6)](0)*dst^5)/120+(q[(5)](0)*dst^4)/24+(q[(4)](0)*dst^3)/6+(q[(3)](0)*dst^2)/2+q[(2)](0)*dst+q[(1)](0)
(%o4) (q[(7)](0)*dst^5)/120+(q[(6)](0)*dst^4)/24+(q[(5)](0)*dst^3)/6+(q[(4)](0)*dst^2)/2+q[(3)](0)*dst+q[(2)](0)
(%o5) (q[(8)](0)*dst^5)/120+(q[(7)](0)*dst^4)/24+(q[(6)](0)*dst^3)/6+(q[(5)](0)*dst^2)/2+q[(4)](0)*dst+q[(3)](0)
但我做不到:
(%i1) kill(all);
load("pdiff");
myFunc(x) := ratdisrep(taylor(diff(q('dst),'dst,x),'dst,0,5));
myList : [1,2,3];
myFunc(myList);
(%o1) myFunc(x):=ratdisrep(taylor(diff(q('dst),'dst,x),'dst,0,5))
(%o2) [1,2,3]
declare: argument must be a symbol; found "d"
-- an error. To debug this try: debugmode(true);
为什么会这样,我该如何解决?
提前致谢!
我不知道关于 declare
的错误是从哪里来的 -- 我在 pdiff.lisp
中找不到对 declare
的任何调用。当我复制您的第二个示例时,我得到的不是错误,而是:'diff(q(dst),dst,[1,2,3])
我认为这是可以预料的。
我猜您想为 myList
的每个元素创建一个输出为 myFunc
的列表。我的建议是简单地将 myFunc
映射到 myList
。一些函数自动映射列表;这是一个方便的功能,并非所有功能都有。这是我在这种情况下得到的:
(%i1) display2d : false $
(%i2) load ("pdiff") $
(%i3) myFunc(x) := ratdisrep(taylor(diff(q('dst),'dst,x),'dst,0,5)) $
(%i4) myList : [1,2,3] $
(%i5) map (myFunc, myList);
(%o5) [((pderivop(q,6))(0)*dst^5)/120+((pderivop(q,5))(0)*dst^4)/24
+((pderivop(q,4))(0)*dst^3)/6
+((pderivop(q,3))(0)*dst^2)/2
+(pderivop(q,2))(0)*dst
+(pderivop(q,1))(0),
((pderivop(q,7))(0)*dst^5)/120+((pderivop(q,6))(0)*dst^4)/24
+((pderivop(q,5))(0)*dst^3)/6
+((pderivop(q,4))(0)*dst^2)/2
+(pderivop(q,3))(0)*dst
+(pderivop(q,2))(0),
((pderivop(q,8))(0)*dst^5)/120+((pderivop(q,7))(0)*dst^4)/24
+((pderivop(q,6))(0)*dst^3)/6
+((pderivop(q,5))(0)*dst^2)/2
+(pderivop(q,4))(0)*dst
+(pderivop(q,3))(0)]