【问题标题】:What does 1. mean in a mathematica solution (of a sum)1. 在数学解决方案(总和)中是什么意思
【发布时间】:2013-09-04 13:49:48
【问题描述】:

我正在尝试评估一个困难的总和:mathematica 似乎在评估它,给出消息“求解无法求解具有不精确系数的系统。答案是通过求解相应的精确系统并将结果数值化”

解决方案包含表达式“1”。例如 (0.5 + 1.i)。

1. 是什么意思?

【问题讨论】:

  • @Orbling 你错了:FullForm[(0.5 + 1.i)] 给出了Plus[0.5`,Times[1.`,i]],所以. 在这里只是意味着1.machine-number
  • @AlexeyPopkov:很公平。
  • 对不起,这里的一些 cmets 已经关闭(或者可能来自非数学家)。缺少额外的零并不表示精度低,例如 1 // N 产生 1. ,即使该值对机器精度有好处。您可以尝试将 1/2 + i 插回您的系统,看看它是否准确。

标签: wolfram-mathematica


【解决方案1】:

您可以查看类似的问题here。例如,Mathematica 将输入 0.5(或任何包含 0.5 的输入)解释为“数值”,因此它试图解决它的尝试本质上是数值的,假设 0.5 是某个实数,它在任何相关的精度级别内看起来它等于 0.5。即使 0.5==1/2 将返回 True,Mathematica 仍然以非常不同的方式处理这两个表达式。

如果您使用“数字”(即十进制)数字输入一些命令,Mathematica 将采用数字方法(如 NIntegrate、NSolve、NDSolve、算术运算的数字版本等),而不是那些适用于整数、有理数的方法等。

发生的错误是由于 NSolve(或其他此类算法)的工作方式造成的。但它随后采取了使方程精确的步骤(它确实知道,毕竟,0.5=1/2)然后得到一个精确的解,但随后它“数字化”结果(用 N 命令命中)给你对应的数值。

输入 N[1/2+I] 看看你会得到什么。应该是 0.5+1.i。这意味着你有一个数量,在虚方向上大约是 1.0000000000000000,在实方向上大约是 0.50000000000000。

要明确查看差异,请尝试:

Head[1]
Head[1.]

小数点向 Mathematica 表明两者中的第二个是“实”数,即用于某种浮点运算。第一个是整数,Mathematica 有时会为此使用不同类型的算法。

【讨论】:

    【解决方案2】:

    “1”。是否可以保证该表达式的后续使用不会失去该表达式是通过数字获得的,因此受制于数字精度。例如,

    In[121]:= Pi/3.14`2 * x
    Out[121]= 1.0 x
    

    即使您可能认为1.0*x == xPi==3.14 肯定不是真的;相反,Pi 只是 3.14 到给定的 2 精度。通过在答案中包含1.0InputForm 显示的内部实际上是 1.00050721451904243263141509021640261145`2)下一次评估,

    In[122]:= % /. x -> 3
    Out[122]= 3.0
    

    正确而不是错误地给出准确的3

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多