我知道我们可以使用 solve
e.g.
f(x):= a*x+b$
[invf]:solve(f=f(x),x);
但是,我一直无法弄清楚如何在新函数的定义中使用它。我尝试了一些事情,例如:
invF(f):=rhs(invf);
但 rhs(invf)
中的 f
未被识别为函数 invF(f)
的参数。有什么方法可以定义逆,还是可以简单地使用这个表达式并使用类似 subst
的东西来计算它?
最佳答案
:=
的右侧未被求值(甚至未被简化),因此函数体中的任何类似 rhs(invf)
的内容实际上都没有计算结果直到函数被调用。这里需要的是确保在构造函数时将结果粘贴到函数体中。
至少有两种方法可以做到这一点。更通用的方法是用define
而不是:=
来定义函数。然后在定义函数时评估主体。例如。 定义(invF(x), rhs(inv));
。
另一种只在顶层工作(即不在任何函数内部)的方法是使用所谓的引号-引号运算符,''
,它具有内插的效果将某物的当前值输入到输入中,就好像它是输入的一样。例如invF(x) := ''(rhs(inv));
.
Quote-quote 在表达式被解析时起作用,所以如果它出现在函数中可能会令人惊讶。例如。 y: 123; f(x) := block([y: 2*x], ''y);
然后 f(4)
返回 123,而不是 8。也就是说,我找到了引用-引用要方便且有用——只需将其限制在顶级内容即可。
关于maxima - wxMaxima:如何定义函数的反函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65442134/