数学;将Nsolve的解决方案转换为列表

时间:2017-10-16 18:13:54

标签: wolfram-mathematica

我使用mathematica的Nsolve来求解多项式。解决后,Nsolve传统上提供这样的解决方案:

{{x - > 1},{x - > 2},{x - > 3},{x - > 4}}

但是,我需要将此输出转换为数字列表,因此它看起来像:

{1,2,3,4}

我该怎么做?必须有一个简单的方法。

2 个答案:

答案 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

结果将按预期显示