wxMaxima:如何定义函数的反函数?

wxMaxima: how to define the inverse of a function?

我知道我们可以使用 solve 例如

求函数的反函数
f(x):= a*x+b$
[invf]:solve(f=f(x),x);

但是,我一直无法弄清楚如何在新函数的定义中使用它。我尝试了一些东西,比如:

invF(f):=rhs(invf);

rhs(invf) 中的 f 未被识别为函数 invF(f) 的参数。有没有什么方法可以定义逆,或者可以简单地使用这个表达式并使用类似 subst 的东西来评估它?

我之前尝试的以下修改似乎有效:

f(x):=a*x+b;
[inv]:solve(f=f(x),x);
invF(x):=subst(x,f,rhs(inv));

不确定为什么使用 subst 会改变函数定义的处理方式,但它似乎确实有效。希望对其他人有所帮助!

:= 的右侧未计算(甚至简化),因此函数体中的任何类似 rhs(invf) 的内容在调用函数之前不会实际计算结果.这里需要的是确保在构造函数时将结果粘贴到函数体中。

至少有两种方法可以做到这一点。更通用的方法是用 define 而不是 := 来定义函数。然后在定义函数时评估主体。例如。 define(invF(x), rhs(inv));.

另一种只在顶层工作(即不在任何函数内部)的方法是使用所谓的引用-引用运算符,'',它具有插入当前的效果将某物的值输入到输入中,就好像它是输入的一样。例如invF(x) := ''(rhs(inv));.

引号在表达式被解析时起作用,因此如果它出现在函数中可能会令人惊讶。例如。 y: 123; f(x) := block([y: 2*x], ''y); 然后 f(4) returns 123,而不是 8。也就是说,我发现引述既方便又有帮助——只需将其限制在顶级内容即可。