我使用mathematica的Nsolve来求解多项式。解决后,Nsolve传统上提供这样的解决方案:
{{x - > 1},{x - > 2},{x - > 3},{x - > 4}}
但是,我需要将此输出转换为数字列表,因此它看起来像:
{1,2,3,4}
我该怎么做?必须有一个简单的方法。
答案 0 :(得分:2)
您有一个列表{{x -> 1}, {x -> 2}, {x -> 3},{x -> 4}}
,并且您希望对该列表中的每个项目执行相同操作,您希望将{x -> n}
替换为n
。
在Mathematica中,这是一件非常普遍的事情。有一个函数Map
接受一个函数和一个列表,并对列表中的每个项执行该函数。您可以在帮助页面中查找Map
并尝试理解它。
您的列表中包含Rule
个。所以你拥有的是{{Rule[x,1]}, {Rule[x,2]}, {Rule[x,3]},{Rule[x,4]}}
,Mathematica缩写为{x -> 1}
等等。您可以在帮助系统中查找Rule
并尝试理解它。
让我们看看你想做什么的一种方式
sol = {{x -> 1}, {x -> 2}, {x -> 3}, {x -> 4}};
f[r_] := ReplaceAll[x, r];
Map[f, sol]
定义了一个函数f
,该函数使用ReplaceAll
函数与x
和个人Rule
替换所有x
中的x
Map
,只有一个,具有该规则的值。然后{1, 2, 3, 4}
一遍又一遍地执行此操作,直到它处理了列表中的所有项目。结果是x/.#&/@{{x -> 1}, {x -> 2}, {x -> 3}, {x -> 4}}
这就是你想要的。
现在Mathematica的文化是你试图缩写所有东西,你总是尝试使用一些标点字符而不是使用函数的名称。对于新用户来说,这可能非常难以理解。以下是Mathematica用户可能采用的不同方式。
/.
这会给你相同的结果。您可以在帮助系统中查找#
和&
以及/@
和+=
,并尝试了解这些内容。
在Mathematica中几乎总有十几种不同的方法可以完成任何事情。其中至少有几个几乎完全不可理解。如果可以的话,选择一种你认为理解并且能够记住和使用而不会犯太多错误的方法。但这通常会成为一场竞赛,看看谁可以使用少数几个角色来完成某些事情,或者可以在几秒钟内完成这项任务。
答案 1 :(得分:0)
正好下面的命令
sol = {{x -> 1}, {x -> 2}, {x -> 3},{x -> 4}}
x /. sol
结果将按预期显示