我正在尝试评估一个困难的总和:mathematica 似乎在评估它,给出消息“求解无法求解具有不精确系数的系统。答案是通过求解相应的精确系统并将结果数值化来获得的”
该解决方案包含表达式“1”。例如 (0.5 + 1.i)。
1. 是什么意思?
我正在尝试评估一个困难的总和:mathematica 似乎在评估它,给出消息“求解无法求解具有不精确系数的系统。答案是通过求解相应的精确系统并将结果数值化来获得的”
该解决方案包含表达式“1”。例如 (0.5 + 1.i)。
1. 是什么意思?
您可以在此处查看类似的问题。例如,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”。是否可以保证该表达式的后续使用不会失去该表达式是通过数字获得的,因此受制于数字精度。例如,
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
.