Fortran 90中使用高斯消元法的4个方程组中的浮点误差

时间:2012-12-12 19:54:30

标签: fortran fortran90

此程序返回"floating point error: overflow",其温度值如下:

  

170   225   275   330   390   445   500   555   610   670   725   775   830   1100   1390   1670

这是非常明显的,因为需要提升到功率16然后添加的巨大值。

该矩阵表示需要使用高斯消元解决的4个方程的系统,其中剩余的代码就绪。

Real Mat(4,4),Temp(10), Temp2(10),Sum

Do i=1,16
    Write(*,*)"enter Temperature value T",i
    Read (*,*) Temp(i)
End do

Do i=1,16
    Do j=1,16
        sum=0
        Do k=1,16
           if(i.GT.1)then
                l=(4*(i-1))+j
            elseif(i.eq.1)then
                l=i+j-1
            endif   
            Temp2(k)=Temp(k)**l
            sum=sum+Temp2(k)
        End do
        Mat(i,j)=Sum
    End do
End Do

Do I=1,4
  Write(*,*) (mat(I,J), j=1,4)
End do
 !this just forces the program to stay in the exe wind
    Read(*,*) sum
End    

1 个答案:

答案 0 :(得分:5)

您的数组Temp只有10个元素。你不能读16个数字。 Mat仅为(4,4),但您在循环(i,j)1..16中将其称为1..16

另外,添加implicit none,我不会考虑没有这个程序给我的学生做标记。

我建议您使用具有良好调试功能的编译器并设置正确的标志。我使用gfortran -g -fbacktrace -fcheck=all -Wallg95也很好。也是商业NAG,甚至在运行时检查未定义的值..