最大值:使用函数作为函数参数

maxima: use function as function argument

如标题所说,我想使用函数作为函数参数。 直观的我试过类似的东西:

a(t,c) := t+c;
b(R_11, R_12, R_13, d_1x, d_1y, d_1z) := R_11*d_1x + R_12*d_1y + R_13*d_1z;

f( a(t,c), b(R_11, R_12, R_13, d_1x, d_1y, d_1z), %lambda ) := a(t,c) + 
     %lambda * b(R_11, R_12, R_13, d_1x, d_1y, d_1z);

但是千里马表示"define: in definition of f, found bad argument"

我的目标是简化方程式以获得更好的概览。当我区分

diff( f(...), R_11 )

这个例子的结果应该是 b 关于 R_11 的偏导数。

f' = b_R11(...)

有没有办法做这样的想法,或者这是一个奇怪的尝试,也许有更好的方法?

您可以声明 b 依赖于一些参数,然后 diff 将构造 b 的形式导数。

(%i1) depends (b, [R1, R2]);
(%o1)                             [b(R1, R2)]
(%i2) depends (a, t);
(%o2)                               [a(t)]
(%i3) f(t, R1, R2) := a(t) + b(R1, R2);
(%o3)                  f(t, R1, R2) := a(t) + b(R1, R2)
(%i4) diff (f(t, R1, R2), R1);
                                 d
(%o4)                           --- (b(R1, R2))
                                dR1
(%i5) diff (f(t, R1, R2), t);
                                   d
(%o5)                              -- (a(t))
                                   dt

但这仅在 b 未定义时有效。当 b 被定义时,diff 将继续调用 b 并根据返回的任何内容计算导数。

(%i8) b(R1, R2) := 2*R1 + 3*R2;
(%o8)                      b(R1, R2) := 2 R1 + 3 R2
(%i9) diff (f(t, R1, R2), R1);
(%o9)                                  2