就像标题所说,我想使用函数作为函数参数。 直觉我试过像:
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);
但千里马表示"定义:在f的定义中,找到了不好的参数"
我的目标是简化我的方程以获得更好的概述。当我区分
时diff( f(...), R_11 )
此示例的结果应该是b相对于R_11的偏导数。
f' = b_R11(...)
有没有办法做这样的想法,或者这是一个奇怪的尝试,有可能有更好的方法?
答案 0 :(得分:3)
您可以声明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