求解线性方程组中的一个步骤
c语言吧
全部回复
仅看楼主
level 1
贴吧用户_JQZ24Q1
楼主
如果对角元不是该行绝对值最大的,则对角元所在列与该行中绝对值最大的那个元素所在列互换
最开始还有个大循环,k从1开始
这一段好像不能实现上述功能,不知问题所在
2024年04月23日 15点04分
1
level 9
何度-137
问题所在
1. 绝对值计算的问题:
在计算每一行的绝对值时,循环索引从 k-1 开始,而非从 k 开始,会导致计算出不必要的绝对值并影响结果。
2. 最大值查找的问题:
最大值查找时,索引从 k 开始,应该从 k-1 开始,确保从当前对角线元素开始比较。
3. 列交换的问题:
交换列时,你的 a[0] 用于临时存储元素,但可能存在问题。更好的方法是使用一个临时变量。
修改后的代码:
for (i = k - 1; i < n; i++) {
a[i] = fabs(A[k - 1][i]);
}
max = k - 1;
for (i = k; i < n; i++) {
if (a[max] < a[i]) {
max = i;
}
}
if (max > k - 1) {
for (i = 0; i < n; i++) { // 注意这里改成了从 0 到 n
double temp = A[i][max]; // 用一个临时变量
A[i][max] = A[i][k - 1];
A[i][k - 1] = temp;
}
}
关键修改点:
1. 在交换列时,循环从 0 到 n ,因为我们需要交换整列。
2. 使用一个临时变量 temp ,避免使用数组 a 的第一个元素 a[0] 进行交换。
2024年05月18日 03点05分
0
1