matlab 矩阵乘法简化在代码中未给出相同的结果

ippsafx7  于 2022-12-04  发布在  Matlab
关注(0)|答案(1)|浏览(150)

我想在Matlab中计算表达式xTAx-2 yTAx +yTAy。
如果我的计算是正确的,这应该等价于求解(x-y)TA(x-y)
我现在的主要问题是,我从上面两个表达式中得到的结果不一样,我想知道这是精度错误还是概念错误。
我尝试了一个非常简单的例子,其中包含一些随机值,以检查我的计算是否正确。
第一个
都给予46。
然后我尝试了一个更现实的例子来说明我所做的事情的价值观,但失败了。

A = [2.66666666666667,-0.333333333333333,0,-0.333333333333333,-0.333333333333333,0,0,0,0;
-0.333333333333333,2.66666666666667,-0.333333333333333,-0.333333333333333,-0.333333333333333,-0.333333333333333,0,0,0;
0,-0.333333333333333,2.66666666666667,0,-0.333333333333333,-0.333333333333333,0,0,0;
-0.333333333333333,-0.333333333333333,0,2.66666666666667,-0.333333333333333,0,-0.333333333333333,-0.333333333333333,0;
-0.333333333333333,-0.333333333333333,-0.333333333333333,-0.333333333333333,2.66666666666667,-0.333333333333333,-0.333333333333333,-0.333333333333333   -0.333333333333333;
0,-0.333333333333333,-0.333333333333333,0,-0.333333333333333,2.66666666666667,0,-0.333333333333333,-0.333333333333333;
0,0,0,-0.333333333333333,-0.333333333333333,0,2.66666666666667,-0.333333333333333,0;
0,0,0,-0.333333333333333,-0.333333333333333,-0.333333333333333,-0.333333333333333,2.66666666666667,-0.333333333333333;
0,0,0,0,-0.333333333333333,-0.333333333333333,0,-0.333333333333333,2.66666666666667];

x =[1.21585420370805;
1.00388159497757e-16;
-0.405284734569351;
1.36809776609658e-16;
-1.04796659533634e-17;
-7.52459042423650e-17;
-0.607927101854027;
-8.49163704356314e-17;
0.303963550927013];

v =[0.0319067068305797,0.00786616506360615,0.0709811622828447,0.0719615328671117;
1.26150800194897e-17,5.77584497721720e-18,7.89740111567879e-18,7.14396333930938e-18;
-0.158358815125228,-0.876275686098803,0.0539216716399594,0.0450616819309899;
7.90937837037453e-18,3.24196519177793e-18,3.99402664932776e-18,4.17486202509670e-18;
5.35533279761622e-18,-8.91723780863019e-19,-1.56128480212603e-18,1.84423677629470e-19;
-2.18478057810330e-17,-6.63779320738873e-18,-3.21099714760257e-18,-3.93612240449303e-18;
-0.0213963226092681,-0.0168256143048771,-0.0175695110350900,-0.0128155908603601;
-4.06029341772399e-18,-5.65705978843172e-18,-1.80182480882056e-18,-1.59281757789645e-18;
0.221482525259710,-0.0576644539359728,0.0163934384910353,0.0197432976432437];

u = [1.37058079022968;
1.79302486419321;
69.4330887239959;
-52.3949662214410];

y = v*u;

第一个表达式为0,第二个表达式为7.1387e-28。这是精度错误吗?哪个版本更好/更准确?为什么?谢谢!

pdsfdshx

pdsfdshx1#

我没有检查你的简化,但浮点数学通常是不精确的。即使以不同的顺序执行相同的运算也会给予不同的结果。鉴于您所看到的偏差,我相信它们可能是由浮点数学中的不精确性造成的,您可以决定这些偏差是否符合您的目的。要确定哪个版本更准确,您必须计算要比较的参考值,这可能会很困难。

相关问题