[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode
program main
    use library
    implicit none
    real::a,b!要声明subroutine
    real::T(69,2)
    character*30::ans
    real,allocatable::y_nihe(:)
    integer::i,error
   
    n=69.0
    !读SST文件
   open(unit=10,file="Global_SST.txt")
   do i=1,n
       read(10,*) T(i,1:2)
       x(i)=T(i,1)
       y(i)=T(i,2)
       print*,'x=',x(i),'y=',y(i)
   end do
   close(10)
   
    call nihe(x,y,n,a,b,ans,y_nihe)!不能忘记
   
    !建拟合后数值文件
    open(unit=11,file="Global_SST_nihe.txt")
    do i=1,n
        write(11,*) x(i),y(i),y_nihe
    end do
    close(11)
end
module library
    !real,allocatable,save::x(:),y(:)
    real*8,allocatable,save::y(:)
    integer,allocatable,save::x(:)
    real,save::n!数据数
   
    contains
        !计算测试数据x(i)的平均值
        real function average_x(x,n)
            implicit none
            real::sum1!输入参数
            integer,allocatable::x(:)!要加(:)否则sub里调用会报错6637
            integer::i
            real::n
            sum1=0.0
            do i=1,n
                sum1=sum1+x(i)
            end do
            average_x=sum1/n
            return
        end
        
        !计算测试数据y(i)的平均值
        real function average_y(y,n)
            implicit none
            real::sum2!输入参数
            real*8,allocatable::y(:)!要加(:)否则sub里调用会报错6637
            integer::i
            real::n
            sum2=0.0
            do i=1,n
                sum2=sum2+y(i)
            end do
            average_y=sum2/n
            return
        end
     
        
        subroutine nihe(x,y,n,a,b,ans,y_nihe)
            implicit none
            real::a,b,ave_x,ave_y,suma,sumb,sumc,sumd,sume
            real*8,allocatable,intent(in)::y(:)
            integer,allocatable,intent(in)::x(:)
            real,allocatable::y_nihe(:)
            character*30,optional::ans
            character*10::ac,bc
            integer::i
            real::n
      
            ave_x=average_x(x,n)!测试数据平均值
            ave_y=average_y(y,n)
           
            !求b的公式计算            
            suma=0.0
            do i=1,n
                suma=suma+x(i)*y(i)
            end do
         
            sumb=0.0
            do i=1,n
                sumb=sumb+y(i)
            end do
         
            sumc=0.0
            do i=1,n
                sumc=sumc+x(i)
            end do
           
            sumd=0.0
            do i=1,n
                sumd=sumd+x(i)**2
            end do
         
            sume=sumc**2
            
            !b的公式计算
            b=(n*suma-sumb*sumc)/(n*sumd-sume)
            
            !求a的公式计算
            a=ave_y-b*ave_x
            
            !曲线公式输出
            write(ac,'(f5.3)')a!数字转字符串
            write(bc,'(f5.3)')b
            ans="y="//trim(ac)//"+"//trim(bc)//"*x"!要去空格,不然看不到ac后面的
            
            
            !拟合y的计算
            do i=1,n
                y_nihe(i)=a+b*x(i)
            end do
            
            return
        end subroutine
end module library
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode
do i=1,n
       read(10,*) T(i,1:2)
       x(i)=T(i,1)
       y(i)=T(i,2)
       print*,'x=',x(i),'y=',y(i)
   end do