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。也就是说,我发现引述既方便又有帮助——只需将其限制在顶级内容即可。
我知道我们可以使用 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。也就是说,我发现引述既方便又有帮助——只需将其限制在顶级内容即可。