计算GuassLegendre 积分

来源:互联网 发布:航天开票软件开票流程 编辑:程序博客网 时间:2024/05/03 08:35
!  GuassLegendre.f90 !!  FUNCTIONS:!!  计算GuassLegendre 积分!  封建湖, 车刚明, 聶玉峰, 等. 数值分析原理[M]. 科学出版社, 2001.!  P116例4.4!  日期:2015/07/28!  BY: Wlq!****************************************************************************!!  PROGRAM: GuassLegendre!!  PURPOSE:  Entry point for the console application.!!****************************************************************************    PROGRAM GuassLegendre    IMPLICIT NONE          INTEGER I, J ,K      INTEGER ORDER                               !选取几阶高斯积分      REAL(KIND=8) GT(7,7),GC(7,7)                !高斯点矩阵,高斯系数矩阵      REAL(KIND=8) xk,Ak                          !高斯积分点和高斯系数      REAL(KIND=8) fx                             !高斯积分求解结果      REAL(KIND=8),PARAMETER::  pi   = 4.*atan(1.)       REAL(KIND=8),PARAMETER::  half = 0.5      REAL(KIND=8) tmp1,tmp2,tmp3                 !用于表达被积函数            !高斯点(按行赋值,只对矩阵下三角的元素赋值,积分时需要几阶精度就把矩阵的第几行取出来)      DATA ((GT(I, J), J=1, I), I=1,7) /&                  0.0,                                                                                                             &      -0.5773502693,   0.5773502693,                                                                                    &      -0.7745966692,   0.0,            0.7745966692,                                                                    &      -0.8611363114,  -0.3399810437,   0.3399810437,   0.8611363114,                                                    &      -0.9061798457,  -0.5384693100,   0.0,            0.5384693100,   0.9061798457,                                    &      -0.9324695142,  -0.6612093865,  -0.2386191861,   0.2386191861,   0.6612093865,   0.9324695142,                    &                               -0.9491079123,  -0.7415311856,  -0.4058451514,   0.0,            0.4058451514,   0.7415311856,   0.9491079123/       !高斯系数(按行赋值,只对矩阵下三角的元素赋值,积分时需要几阶精度就把矩阵的第几行取出来)      DATA ((GC(I, J), J=1, I), I=1,7) /&                  2.0,                                                                                                              &      1.0,                   1.0,                                                                                       &       0.5555555556,   0.8888888889,   0.5555555556,                                                                     &      0.3478548451,   0.6521451549,   0.6521451549,   0.3478548451,                                                     &      0.2369268851,   0.4786286705,   0.5688888889,   0.4786286705,   0.2369268851,                                     &      0.1713244924,   0.3607615730,   0.4679139346,   0.4679139346,   0.3607615730,   0.1713244924,                     &      0.1294849662,   0.2797053915,   0.3818300505,   0.4179591837,   0.3818300505,   0.2797053915,   0.1294849662/      !积分精度可选1阶至7阶      DO ORDER=1,7                     fx = 0.0                    DO K=1,ORDER              !积分精度为几阶,就使用GT和GC矩阵里的第几行的系数              xk    = GT(ORDER,K)              Ak    = GC(ORDER,K)              !计算高斯点处被积函数的函数值              tmp1  = half*pi*(xk+1.0)              tmp2  = exp(tmp1)*cos(tmp1)              !高斯点处被积函数的函数值乘以权重              tmp3  = Ak*tmp2              !各高斯点累加              fx    = fx+tmp3              fx    = half*pi*fx  !变量代换后积分号外面有个系数(b-a)/2          END DO                    WRITE(*,*) ORDER,"阶高斯积分结果:"          WRITE(*,*) fx                END DO          END PROGRAM GuassLegendre

0 0
原创粉丝点击