偶然发现了matlab2010a的错误。 在某些非常特殊的情况下,matlab2010a的向量内积(即*指令)会产生错误的结果。
以下叙述具体现象:
1 .程序源代码
(注意:要运行此程序,必须将两个matlab数据文件den1.mat和kern1.mat与程序位于同一文件夹中。)
clc;
清除器
加载(de n1.mat );
LOAD(Kern1.mat );
x=kern;
y=den(:
z=0;
fori=1:长度(y )
z=zx(1,I ) y ) I,1 );
结束
z1=x*y;
Z2=sum(y
2 .有关程序的说明
)1) den1.mat是matlab数据文件。 您可以从这里下载http://ishare.iask.Sina.cn/f/22182234.html。 其中,数据是1*36维的行向量,如下所示: (其中-是负号) )。
[1- 34.9104720617963591.960057485552-6494.9069509398751826.3768981548-320501.8574798841598411.70513468-66006 4.4665517178938782.362431-405639572.104363809205656.532103-1428012719.05092238285526.53077-31255592609.96666 217670.624123085871743.18171-2198564376.37758139513287.06250-786754091.156305392372548.725918-172287-786755555 325918-1 1647-21964736.31408186259618.77763060-1507763085.68697902300647.808748368-48367.82278911176030.54888
)2) kern1.mat也是matlab数据文件。 您可以从这里下载http://ishare.iask.Sina.cn/f/22182235.html。 其中,数据是1*36维的行向量,如下所示:
[ 111111111111111111111111111111111111111111111111
)3) den和kern分别是来自den1.mat和kern1.mat的1*36维行向量,其中kern的所有元素都是1。
)4)显然,该程序的作用是用三种不同的程序方法计算den中所有元素的和。 即:
z1用向量内积计算,z2直接求元素和,z循环求向量内积。
3 .错误现象说明
)1) MATLAB7)版本7.0.0.19920 (R14 ) ) )运行此程序后得到的z=z1=z2=5.3111e-008完全相同,这符合我们的数学常识
但不可思议的是,matlab2010a出现了奇怪的结果。
)在matlab210a中,z=z2=5.311088491222193e-08,z1=0。
这不是很奇怪吗! 这是matlab2010a的错误吗!
)3) matlab210b和matlab210a出现类似问题。