如何直接从Solve的输出创建一个函数

9 wolfram-mathematica

如果我评估Solve[f[x,y]==0,x],我得到一堆解决方案,如:

{{x -> something g[y]}, {x -> something else}}

现在我想将每个转换x->somethings成一个函数.通常,我的要求很低,我的功能f[x]最多是一个立方体,有简单的解决方案x.所以,我一直只是定义g1[y_]:=something,g2[y_]:=...等等,手动.

但是,对于我现在的函数,Solve输出一个运行4页长的复杂多项式,并且有4个这样的解.我试着使用减少到简单的形式Simplify,Collect,Factor等等,但它只是似乎束缚.

有没有办法可以自动将它们分配给函数?(滚动页面并复制每个页面非常困难......我必须寻找下一个页面开始的位置!)

像这样的东西:{g1[y_], g2[y_], g3[y_]} = output of Solve

Mr.*_*ard 7

看来西蒙打败了我一个答案(我很高兴StackOverflow给了我一个弹出窗口让我知道!),因此我将采取不同的方法.您应该知道如何直接使用Solve的输出,因为很多次这样做会很方便.

从...开始

ClearAll[a, x, sols]

sols = Solve[x^2 + a x + 1 == 0, x]
Run Code Online (Sandbox Code Playgroud)

这是你可以做的一些事情.


找到解决方案,以xa == 7

x /. sols /. a -> 7
Run Code Online (Sandbox Code Playgroud)

绘制解决方案

Evaluate 这里使用的不仅仅是基本功能,而是允许Plot功能分别设置每个解决方案的样式

Plot[Evaluate[x /. sols], {a, 1, 4}]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


a为第二个解决方案定义新功能

注意使用=而不是:=在这里

g[a_] = x /. sols[[2]]
Run Code Online (Sandbox Code Playgroud)

这是Simon为每个解决方案定义函数的方法的替代方法

MapIndexed[(gg[#2[[1]]][a_] := #) &, x /. sols]
Run Code Online (Sandbox Code Playgroud)

然后该函数与语法一起gg[1][17]用于表示第一个解决方案,和a == 17

Plot[gg[1][a], {a, 1, 4}]

gg[2] /@ {1, 2, 3}
Run Code Online (Sandbox Code Playgroud)

这些用途通常要求a(在此示例中)保持未分配状态.