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

Mathematica; turn solutions of Nsolve into a list

我正在使用 Mathematica 的 Nsolve 求解多项式。求解时,Nsolve 通常会给出这样的解:

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

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

{1, 2, 3, 4}

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

您有一个列表 {{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},这就是你想要的。

现在 Mathematica 的文化是您尝试缩写所有内容,您总是尝试使用少量标点符号而不是使用函数名称。这对于新用户来说可能很难理解。这是 Mathematica 用户可能会写的另一种方式。

x/.#&/@{{x -> 1}, {x -> 2}, {x -> 3}, {x -> 4}}

这会给你同样的结果。您可以在帮助系统中查找 /.# 以及 &/@ 并尝试理解它们。

在 Mathematica 中几乎总是有十几种不同的方法来完成任何事情。至少其中有几个几乎是完全无法理解的。如果可以,请选择一种您认为自己理解并且可以记住和使用而不会犯太多错误的做事方式。但这似乎经常变成一场比赛,看谁能用更少的字符完成某事,或者谁能在更少的几秒钟内完成这个 运行。

右下命令

sol = {{x -> 1}, {x -> 2}, {x -> 3},{x -> 4}}
x /. sol

结果将按预期显示