我正在尝试评估一个困难的总和:mathematica似乎在评估它,给出了消息“Solve无法用不精确的系数解决系统。答案是通过求解相应的精确系统并对结果进行数值化来获得的”< / p>
解决方案包含表达式“1”。如(0.5 + 1.i)。
1是什么意思?
答案 0 :(得分: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有时会使用不同类型的算法。
答案 1 :(得分:0)
“1”是否保证随后使用该表达式不会丢失该表达式以数字方式获得,因此具有数值精度。例如,
In[121]:= Pi/3.14`2 * x
Out[121]= 1.0 x
即使您可能认为1.0*x == x
,Pi==3.14
肯定不是这样。相反,Pi
只有3.14
给定的精度为2.通过在答案中包含1.0
(InputForm
显示的实际内部是1.00050721451904243263141509021640261145`2)下一个评估,
In[122]:= % /. x -> 3
Out[122]= 3.0
是正确的,而不是错误地给出一个确切的3
。