首页 > 解决方案 > wxMaxima:如何定义函数的逆?

问题描述

我知道我们可以使用solve 例如找到函数的逆

f(x):= a*x+b$
[invf]:solve(f=f(x),x);

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

invF(f):=rhs(invf);

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

标签: maximawxmaxima

解决方案


的右侧:=没有被评估(甚至被简化),所以rhs(invf)在函数被调用之前,函数体中的任何东西实际上都不会计算结果。这里需要确保在构造函数时将结果粘贴到函数体中。

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

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

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


推荐阅读