Maxima:函数的翻译运算符
Maxima: Translation operator on functions
我想定义一个翻译运算符 L,它从函数 q 为所有 x 输出 q(x-1),即相同的函数,但向左移动一位。我是这样定义的:
(%i0) L(q) := q(x-1);
但是,如果我应用运算符两次
(%i1) L(L(q));
它输出
(%o1) q(x-1)(x-1)
而不是
(%o1) q(x-2)
执行此操作的正确方法是什么?
L
必须 return 一个函数才能使这种嵌套工作。
或许,一个简单的替换就足以完成任务:
L(f) := subst(x=x-1,f)$
L(sin(x)); L(L(sin(x)));
sin(x - 1)
sin(x - 2)
带有 lambda 的宏也可以工作:
L(q) ::= buildq([q], lambda([x], q(x-1)));
所以,例如,当 f(x):= x + 1, g(x) := sin(%pi*(x-1)/4)
:
f(1); L(f)(1); L(L(f))(1);
2
1
0
g(1); L(g)(1); L(L(g))(1);
0
-1/sqrt(2)
-1
我想定义一个翻译运算符 L,它从函数 q 为所有 x 输出 q(x-1),即相同的函数,但向左移动一位。我是这样定义的:
(%i0) L(q) := q(x-1);
但是,如果我应用运算符两次
(%i1) L(L(q));
它输出
(%o1) q(x-1)(x-1)
而不是
(%o1) q(x-2)
执行此操作的正确方法是什么?
L
必须 return 一个函数才能使这种嵌套工作。
或许,一个简单的替换就足以完成任务:
L(f) := subst(x=x-1,f)$
L(sin(x)); L(L(sin(x)));
sin(x - 1)
sin(x - 2)
带有 lambda 的宏也可以工作:
L(q) ::= buildq([q], lambda([x], q(x-1)));
所以,例如,当 f(x):= x + 1, g(x) := sin(%pi*(x-1)/4)
:
f(1); L(f)(1); L(L(f))(1);
2
1
0
g(1); L(g)(1); L(L(g))(1);
0
-1/sqrt(2)
-1