【发布时间】:2013-04-24 20:12:33
【问题描述】:
我在 Matlab 中有两个向量,z 和 beta。矢量z 是 1x17:
1 0.430742139435890 0.257372971229541 0.0965909090909091 0.694329541928697 0 0.394960106863064 0 0.100000000000000 1 0.264704325268675 0.387774594078319 0.269207605609567 0.472226643323253 0.750000000000000 0.513121013402805 0.697062571025173
... 和 beta 是 17x1:
6.55269487769363e+26
0
0
-56.3867588816768
-2.21310778926413
0
57.0726052009847
0
3.47223691057151e+27
-1.00249317882651e+27
3.38202232046686
1.16425987969027
0.229504956512063
-0.314243264212449
-0.257394312588330
0.498644243389556
-0.852510642195370
我正在处理一些奇点问题,我注意到如果我想计算 z*beta 的点积,我可能会得到 2 个不同的解决方案。如果我使用* 命令,z*beta = 18.5045。如果我编写一个循环来计算点积(如下),我会得到 0.7287 的解。
summation=0;
for i=1:17
addition=z(1,i)*beta(i);
summation=summation+addition;
end
知道这里发生了什么吗?
这是数据的链接:https://dl.dropboxusercontent.com/u/16594701/data.zip
【问题讨论】:
-
你也可以只使用matlab函数“dot”来计算点积
-
@Amy:我已经用你的方法和下面发布的方法 natan(在 R2012a 上)计算了这一点,他们三个都给了
4.1232e+12。 -
@zplesivcak:变量的缩放可能是问题的一部分,所以我给出的截断数据并没有显示问题。我添加了指向数据的链接。我也在使用 R2012a。
-
如果你真的很在意精确的结果,也许可以尝试使用一些任意精度的Matlab库;一个是here。
-
@zplesivcak:精度不是那么重要,只是一致性。我正在构建一个回归模型......计算的输出重新统计很小(例如:0.7287),但是当我使用 regstats 中的 beta 值手动计算输出时,我得到更大的值(例如:18.5045)。我正在使用残差(来自 regstats)来训练另一个模型,所以我需要这些残差与回归模型实际预测的结果一致(
z*beta)。
标签: matlab floating-point floating-accuracy dot-product