Matlab算矩阵决定式为什么算出这么个结果?
>>A=[101;211;321];>>det(A)ans=-1.1102e-16A=101211321用笔算,det(A)应该等于0吧,为什么matlab得的是-1.1...
>> A=[1 0 1;2 1 1;3 2 1];
>> det(A)
ans =
-1.1102e-16
A =
1 0 1
2 1 1
3 2 1
用笔算,det(A)应该等于0吧,为什么matlab得的是 -1.1102e-16?
请高手赐教! 展开
>> det(A)
ans =
-1.1102e-16
A =
1 0 1
2 1 1
3 2 1
用笔算,det(A)应该等于0吧,为什么matlab得的是 -1.1102e-16?
请高手赐教! 展开
2个回答
展开全部
试了一下还真是这样= =
估计matlab他的计算方式不是向我们那样乘起来加减的。
下面是其他有个知道的回答。
计算机中的数值是浮点数,不是我们理解的实数,所以当我们输入一个矩阵时,里面的元素和我们输入的数据是有一点点误差的。LU分解时,对矩阵的一些元素进行了减法,扩大了这些误差,所以本来应该是零的值很可能变成一个很小的值。第二个矩阵的行列式恰好等于零是因为运气好正好没扩大误差。嗯,如果你想深入分析,最好先看看浮点数系统(floating-points system)。然后自己编一个精度更低的浮点数系统模拟器,再算算,就可以体会到期间的奥妙了。
估计matlab他的计算方式不是向我们那样乘起来加减的。
下面是其他有个知道的回答。
计算机中的数值是浮点数,不是我们理解的实数,所以当我们输入一个矩阵时,里面的元素和我们输入的数据是有一点点误差的。LU分解时,对矩阵的一些元素进行了减法,扩大了这些误差,所以本来应该是零的值很可能变成一个很小的值。第二个矩阵的行列式恰好等于零是因为运气好正好没扩大误差。嗯,如果你想深入分析,最好先看看浮点数系统(floating-points system)。然后自己编一个精度更低的浮点数系统模拟器,再算算,就可以体会到期间的奥妙了。
参考资料: http://zhidao.baidu.com/question/325337618.html
展开全部
刚用了matlab算了一下 结果为0 我的版本7.0.0.19920 (R14)
A=[1 0 1;2 1 1;3 2 1];det(A)
ans =
0
你重启程序试试? 要不就是你精度设置的问题。
A=[1 0 1;2 1 1;3 2 1];det(A)
ans =
0
你重启程序试试? 要不就是你精度设置的问题。
追问
怎么改变所谓“精度设置”?
追答
file-preferences
看一下text display里的numeric format是什么型 我用的是short
刚才试了下别的型 还是等于0
我确实遇见过你说的那种情况,但是一般都出现在2个数精度不同的情况,两个数做运算就会出现一个极小的值
你比如
0.42-0.5+0.08
ans =
-1.3878e-017
遇见这种数,就当它是0就好了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询