【问题标题】:Mathematica; turn solutions of Nsolve into a list数学;把 Nsolve 的解变成一个列表
【发布时间】:2017-10-16 18:13:53
【问题描述】:

我正在使用mathematica 的Nsolve 来求解多项式。解决后,Nsolve 传统上会给出这样的解决方案:

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

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

{1、2、3、4}

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

【问题讨论】:

  • 简单规则替换:x/.{{x -> 1}, {x -> 2}, {x -> 3},{x -> 4}} 给出{1,2,3,4}

标签: wolfram-mathematica


【解决方案1】:

您有一个列表{{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,它使用x和一个单独的Rule来替换x中所有xReplaceAll函数,并且只有一个,其值为从那个规则。然后Map 一遍又一遍地执行此操作,直到它处理完列表中的所有项目。结果是{1, 2, 3, 4},这就是你想要的。

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

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

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

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

【讨论】:

    【解决方案2】:

    下面的命令就对了

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

    结果将按预期显示

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-25
      • 2017-12-05
      • 2018-04-23
      • 2018-06-10
      • 1970-01-01
      • 2019-12-29
      • 2013-09-16
      • 2023-02-16
      相关资源
      最近更新 更多