如果我评估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
?
看来西蒙打败了我一个答案(我很高兴StackOverflow给了我一个弹出窗口让我知道!),因此我将采取不同的方法.您应该知道如何直接使用Solve的输出,因为很多次这样做会很方便.
从...开始
ClearAll[a, x, sols]
sols = Solve[x^2 + a x + 1 == 0, x]
Run Code Online (Sandbox Code Playgroud)
这是你可以做的一些事情.
x
供a == 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)
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
(在此示例中)保持未分配状态.