我做的:与值替换元素是不一样的
T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703]);
获得:
T =
0.2989 0.5870 0.1140
0.5959 -0.2744 -0.3216
0.2115 -0.5229 0.3114
如果我做
T(1,1)==0.2989
我获得
ans =
0
相同的其他元素。 这是为什么?
我做的:与值替换元素是不一样的
T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703]);
获得:
T =
0.2989 0.5870 0.1140
0.5959 -0.2744 -0.3216
0.2115 -0.5229 0.3114
如果我做
T(1,1)==0.2989
我获得
ans =
0
相同的其他元素。 这是为什么?
因为他们是不相等的。它只是一个显示器。要看到这一点:
fprintf('%.8f\n', T(1,1))
会给你
0.29893602
MATLAB存储的数字比你通常看到的要多。 0.2989实际上是0.298936021293776(甚至那不是故事的结尾)。 试试你的代码,并添加
format long
T(1,1)
但尽管如此,
T(1,1) == 0.298936021293776
ans =
0
所以尽量
T(1,1) - 0.298936021293776
你刚才没有看到所有的数字。 T(1,1)
是它应该是。
测试浮点数以确保相等是很危险的。默认情况下,MATLAB使用64位来存储浮点值,并且某些值(如0.1
)甚至不能完全由任意数量的位表示。 T(1,1)
是不完全0.2989
,它具有更大的打印精度值时,你可以看到:
>> T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703])
T =
0.2989 0.5870 0.1140
0.5959 -0.2744 -0.3216
0.2115 -0.5229 0.3114
>> fprintf('%1.10f\n', T(1,1))
0.2989360213
这就是为什么T(1,1) == 0.2989
返回false。它是安全测试两个浮点值是否几乎相等,即有关于一个公差值tol
:
>> tol = 1/1000;
>> abs(T(1,1) - 0.2989) < tol
ans =
1
这里的东西你应该阅读:click
我如何可以查看所有的数字? – volperossa
我真的不知道。但是 - 为什么你想看到所有的数字?如果你想检查平等,检查两个数字是否在一定的容差范围内。 –
我需要复制相同的行为,而无需调用inv函数(所以我只需要在产品中使用的数字...我用fprintf解析('%。55f \ n',T(1,1))XD – volperossa