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

Sye*_*ail 2 fortran fortran90

该程序返回a "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    
Run Code Online (Sandbox Code Playgroud)

Vla*_*r F 5

你的数组Temp只有10个元素.你不能读16个数字.Mat只是(4,4)你把它称为(i,j)循环1..161..16.

另外,implicit none我不会考虑一个没有这个的程序来标记我的学生.

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