稀疏矩阵中分布着大量的零元素,可以对列选主元高斯消元法进行一点改进,避免对0元素的运算,将会大大减少运算次数。这里不考虑压缩存储。
在进行消元的循环中,原来为:
do i = k+1,n
temp = ab(i,k)/ab(k,k)
ab(i,:) = ab(i,:) - temp*ab(k,:)
end do
可以替换为下列语句:
do i = k+1,n
if (ab(i,k) /= 0.0d0) then
temp = ab(i,k)/ab(k,k)
ab(i,:) = ab(i,:) - temp*ab(k,:)
cnt_elim = cnt_elim + 1 ! 消元次数计数器
end if
end do
系数矩阵:
右端向量:
改进前消元次数:
Total elimination steps: 28
0.100000D+01
0.148030D-15
0.200000D+01
-0.200000D+01
0.400000D+01
-0.100000D+01
0.300000D+01
0.100000D+01
改进后消元次数:
Total elimination steps: 7
0.100000D+01
0.148030D-15
0.200000D+01
-0.200000D+01
0.400000D+01
-0.100000D+01
0.300000D+01
0.100000D+01
从上面结果来看,大大减低了消元次数。