首页 > 其他 > 详细

关于高斯消元

时间:2020-04-22 22:07:05      阅读:67      评论:0      收藏:0      [点我收藏+]

关于高斯消元

对于要区分无穷解和无解的情况, 要先判断是否存在至少一个方程无解, 确定都有解之后再判断是否有无穷解, 因为如果有必须所有方程都有解, 整个方程组才有解, 而只要有一个方程有无穷解, 并且方程组有解, 那么方程组就有无穷解

容易Hack的数据:

Input :
6
1 2 3 4 5 6 10
0 0 1 2 3 4 15
0 0 0 2 6 7 30
0 0 0 0 6 8 10
0 0 0 0 0 1 30
0 0 0 0 0 0 0
Output :
0

Input:
2
0 2 3
0 0 0
Output:
0

为了不被Hack, 要在代码里加这么一行

bool jdswap(int ri, int x, int y) {
if (fabs(fabs(a[x][ri]) - fabs(a[y][ri])) > eps) return fabs(a[x][ri]) > fabs(a[y][ri]) + eps;
for (int i = ri + 1; i <= n; ++i)
if (fabs(fabs(a[x][i]) - fabs(a[y][i])) > eps) return fabs(a[x][i]) + eps < fabs(a[y][i]);
return false;
}

其中, jdswap()表示要不要把原本在当前行(ri)行的 y 行 和 x 行互换, 其中 fabs() 和 eps(eps = 1e-16)是用来确定精度的

可以发现, jdswap()函数就是用于防止上面两种这样当前列都是0, 但是有一个在之后的列里不是0, 而其他在那一列里都是0的情况

B.T.W, LG P3389 的数据好水……(就是拿着P3389的代码去过P2455, 结果调半天调出一堆错误), 高消去 LG P2455



关于高斯消元

原文:https://www.cnblogs.com/-wxyz/p/12755598.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!