人给我整傻了,这里写j=i和j=i+1有啥区别吗?还有为啥我这代码开long double 就会T。。。
by linfourxu @ 2020-12-24 12:14:46
为什么把那一段注释掉都可以过
by MatrixCascade @ 2020-12-24 12:39:27
```
for (rint i = 1; i <= n + 1; i++)
{
for (rint j = i + 1; j <= n + 2; j++)
a[i][j] /= a[i][i];
a[i][i] = 1.0;
for (rint j = 1; j <= n + 1; j++)
{
if (i == j)
continue;
for (rint k = i + 1; k <= n + 2; k++)
a[j][k] -= a[j][i] * a[i][k];
a[j][i] = 0.0;
}
}
```
可以过,说明可能那个交换是多余的?
by MatrixCascade @ 2020-12-24 12:41:02
@[MatrixCascade](/user/154101) 高斯消元还能不交换?
by linfourxu @ 2020-12-24 13:48:28
@[linfourxu](/user/50477) 我就想测试一下 `pos=i` 占的分数,结果不知道为什么就过了
by MatrixCascade @ 2020-12-24 13:50:46
@[linfourxu](/user/50477) double 不能用 abs 吧,应该改成 fabs,然后改成`if(fabs(a[j][i]) - fabs(a[pos][i])>eps)`
by MatrixCascade @ 2020-12-24 13:58:40
@[MatrixCascade](/user/154101) 而且我一直这么写的/kk
by linfourxu @ 2020-12-24 14:01:35
@[MatrixCascade](/user/154101) cmath里面的abs好像是啥类型都行的,不需要用fabs
by linfourxu @ 2020-12-24 14:04:49
@[linfourxu](/user/50477) 好吧,那可能是我孤陋寡闻了。 /ll
所以高消的部分应该是
```
if (fabs(a[j][i]) - fabs(a[pos][i]) > minlf)
{
pos = j;
break;
}
```
这样写?
by MatrixCascade @ 2020-12-24 14:04:55
抱歉我一开始没看题面就说
by MatrixCascade @ 2020-12-24 14:05:36