通过Cramer规则求解小矩阵的系统线性方程具有较大的数值误差

时间:2016-11-10 22:58:41

标签: c++ lapack determinants linear-equation

我观察到,当我通过克莱默规则(两个决定因子的商)求解线性方程组时,N< 10,与LAPACK解决方案相比,我得到了相当大的残差。

以下是一个例子:

float B00[36] __attribute__((aligned(16))) = {127.3611, -46.75962, 62.8739, -9.175959,   27.23792, 1.395347, 
                                            -46.75962,   841.5496, 406.2475, -119.3715, -33.60108, 6.269638, 
                                            62.8739,    406.2475,  1302.981, -542.8405,  95.03378, 42.77704, 
                                            -9.175959, -119.3715, -542.8405, 434.3342,   34.96918, -33.74546, 
                                            27.23792,  -33.60108,  95.03378, 34.96918,   59.10199, -1.880791, 
                                            1.395347,   6.269638,  42.77704, -33.74546, -1.880791, 2.650853};

float c00[6] __attribute__((aligned(16))) = {-0.102149, -5.76615, -17.02828, 12.47396, 1.158018, -0.9571021};

现在 linsolv 这样,LAPACK的收益率(来自英特尔MKL):

x = [-0.000314947 -0.000589154 -0.00587876 0.0184799 0.01738 -0.0170484]

和Cramer的规则(自己的实现)产生:

x = [-0.000314933 -0.000798058 -0.00587888 0.0184808 0.017381 -0.0170508]

注意x[1]区别。

我可以保证我的行列式计算是正确的。有没有人做过类似的观察或者可以说出这个?

0 个答案:

没有答案