List 在Mathematica中如何将所有解合并到一个列表中?
使用Mathematica中的List 在Mathematica中如何将所有解合并到一个列表中?,list,wolfram-mathematica,List,Wolfram Mathematica,使用Mathematica中的Solve函数,我们可以得到几个解,例如: In[1]:= Solve[x == 1 && 2 >= y >= 1, {x, y}, Integers] Out[1]= {{x -> 1, y -> 1}, {x -> 1, y -> 2}} 如果有几十种解决方案,上面的列表将很混乱。 现在我只想列出x和y的所有可能值 {x->1, y->1,2} 有没有简单的方法可以重新
Solve
函数,我们可以得到几个解,例如:
In[1]:= Solve[x == 1 && 2 >= y >= 1, {x, y}, Integers]
Out[1]= {{x -> 1, y -> 1}, {x -> 1, y -> 2}}
如果有几十种解决方案,上面的列表将很混乱。
现在我只想列出x和y的所有可能值
{x->1, y->1,2}
有没有简单的方法可以重新格式化解决方案的输出
In[1]:= Solve[x == 1,{x}]
Out[1]= {x -> 1}
In[2]:= x
Out[2]= x
In[3]:= Definition[x]
Out[3]= Null
In[4]:= ?x
Global`x
另一个问题,如何使用解决方案中的值
In[1]:= Solve[x == 1,{x}]
Out[1]= {x -> 1}
In[2]:= x
Out[2]= x
In[3]:= Definition[x]
Out[3]= Null
In[4]:= ?x
Global`x
列表遵循Mathematica规则的模式,因此列表替换是从此类列表中获取值的最简单方法 让我们调用解决方案列表
sol
:
In[3]:= sol = Solve[x == 1 && 2 >= y >= 1, {x, y}, Integers]
Out[3]= {{x -> 1, y -> 1}, {x -> 1, y -> 2}}
现在取symbolx
,并根据被视为规则列表的sol
列出所有替换的x
:
In[4]:= x /. sol
Out[4]= {1, 1}
这会立即让您了解如何从所有解决方案中获得x
的所有不同值:
In[5]:= Union[x /. sol]
Out[5]= {1}
对于y
,同上,尽管所有解决方案都已不同:
In[6]:= Union[y /. sol]
Out[6]= {1, 2}
以下是从上述步骤到复制和粘贴的完整代码:
sol = Solve[x == 1 && 2 >= y >= 1, {x, y}, Integers]
x /. sol
Union[x /. sol]
Union[y /. sol]
Clear[sol]
您可以使用
ReplaceAll
或其缩写/。
将Solve
返回的规则转换为列表,如下所示
Solve[x == 1 && 2 >= y >= 1, {x, y}, Integers] /. Rule[a_, b_] -> b
这将生成一个列表列表:{{1,1},{1,2}
。要获得所需格式的结果,可以将此列表传递给一个函数,该函数接受一对{a,b}
,并返回{x->a,y->b}
。函数
{x -> #[[1]], y -> #[[2]]} &
确实是这样转换的。结合两个步骤
solutionlist = (Solve[x == 1 && 2 >= y >= 1, {x, y}, Integers] /.
Rule[a_, b_] -> b ) // {x -> #[[1]], y -> #[[2]]} &
产生
{x -> {1, 1}, y -> {1, 2}}
比如你的例子
要使用解决方案中的值,可以使用
{xlist, ylist} = {x, y} /. solutionlist
检查
?xlist
给予
编辑:要删除重复项,请将函数{x->#[[1]],y->#[[2]]}&
更改为
{x -> Union@#[[1]], y -> Union@#[[2]]} &
对于第一个问题,您可以使用:
vars = {x, y};
sols = Solve[x == 1 && 2 >= y >= 1, vars, Integers];
Thread[ vars -> Union /@ (vars /. sols) ]
关于第二个问题,请参见 最方便的是:
sols = Solve[x^2 + a x + 1 == 0, x]
MapIndexed[(gg[#2[[1]]][a_] := #) &, x /. sols];
这将为符号gg
然后,该函数与语法
gg[1][17]
一起使用,表示第一个解决方案,a==17
:
Plot[gg[1][a], {a, 1, 4}]
有一个新的唯一的网站,你可能会感兴趣。
gg[2] /@ {1, 2, 3}
{1/2 (-1 + I Sqrt[3]), -1, 1/2 (-3 + Sqrt[5])}