24小时热门版块排行榜    

查看: 505  |  回复: 1

kimileegdut

捐助贵宾 (小有名气)

[求助] 求助:迭代计算有问题

编的程序迭代部分代码如下,在运行的时候出现问题,无论开始给一维数组A3赋非0的任何值,程序都只是迭代计算2次,而且结果也不太对,想请教一下各位大神,这段代码中哪里出现了问题?事关毕业,麻烦各位了!

********************************************************
!1)赋初值给A3
    A3=1.D0
!
!2)计算U3XT,U3YT:含有待求系数列阵A3和边界位移列阵U3B
  itera_of_A3O
    U3X=MATMUL(EX,U3B)+MATMUL(DX,A3)
    U3Y=MATMUL(EY,U3B)+MATMUL(DY,A3)
    DO i=1,M
      DO t=1,M
        IF(i==t)THEN
          U3XT(i,t)=U3X(i)
          U3YT(i,t)=U3Y(i)
        ELSE
          U3XT(i,t)=0
          U3YT(i,t)=0
        END IF
      END DO
    END DO
!
!3)计算系数矩阵C1和C2:含有待求的系数列阵A3
    temp1C1=MATMUL(U3XT,temp1B1)
    C1A=MATMUL(temp1C1,U3B)
    temp3C1=MATMUL(U3XT,A11)
    C1B=MATMUL(temp3C1,A3)
    temp2C1=MATMUL(EXY,U3B)+MATMUL(DXY,A3)
    C1C=0.5*(1.+MIU)*MATMUL(U3YT,temp2C1)
    C1=-C1A-C1B-C1C
!
    temp1C2=MATMUL(U3YT,temp2B2)
    C2A=MATMUL(temp1C2,U3B)
    temp2C2=MATMUL(U3YT,A22)
    C2B=MATMUL(temp2C2,A3)
    C2C=0.5*(1.D0+MIU)*MATMUL(U3XT,temp2C1)
    C2=-C2A-C2B-C2C
!
!4)A1,A2:两个待求的系数矩阵
!A1
    A1A=A11-MATMUL(A12,A22N)
    temp1A1=MATMUL(A12,A22N)
    temp2A1=C2-B2
    temp3A1=MATMUL(temp1A1,temp2A1)
    A1B=C1-B1-temp3A1
    A1=MATMUL(A1A,A1B)
!
!A2
    A2B=C1-B1-MATMUL(A11,A1)
    A2=MATMUL(A12N,A2B)
!
!5)U1XT,U1YT,U2XT,U2YT,U3,U3XX,U3YY,U3XY
    U1X=MATMUL(EX,U1B)+MATMUL(DX,A1)
    U1Y=MATMUL(EY,U1B)+MATMUL(DY,A1)
    U2X=MATMUL(EX,U2B)+MATMUL(DX,A2)
    U2Y=MATMUL(EY,U2B)+MATMUL(DY,A2)
    U3=MATMUL(E,U3B)+MATMUL(D,A3)
    U3XX=MATMUL(EXX,U3B)+MATMUL(DXX,A3)
    U3YY=MATMUL(EYY,U3B)+MATMUL(DYY,A3)
    U3XY=MATMUL(EXY,U3B)+MATMUL(DXY,A3)
    DO i=1,M
      DO t=1,M
        IF(i==t)THEN
          U1XT(i,t)=U1X(i)
          U1YT(i,t)=U1Y(i)
          U2XT(i,t)=U2X(i)
          U2YT(i,t)=U2Y(i)
        ELSE
          U1XT(i,t)=0
          U1YT(i,t)=0
          U2XT(i,t)=0
          U2YT(i,t)=0
        END IF
      END DO
    END DO
!
!6)利用简单迭代法x=f(x)计算
    DD1=U1XT+0.5*MATMUL(U3XT,U3XT)+MIU*U2YT+0.5*MIU*MATMUL(U3YT,U3YT)
    DD2=(1.D0-MIU)*(U1YT+U2XT+MATMUL(U3XT,U3YT))
    DD3=U2YT+0.5*MATMUL(U3YT,U3YT)+MIU*U1XT+0.5*MIU*MATMUL(U3XT,U3XT)
    DD4=MATMUL(DD1,EXX)+MATMUL(DD2,EXY)+MATMUL(DD3,EYY)
    K1=MATMUL(DD4,U3B)
    DD5=MATMUL(DD1,DXX)+MATMUL(DD2,DXY)+MATMUL(DD3,DYY)
    K2=(1.D0/D0)*(q-2.D0*ks*U3)
    K3=K1+K2
!
!求DD5的逆阵DD5N
    DWZ_DD5=DD5
!
!生成单位阵
    EDD5=0
    DO i=1,M
      EDD5(i,i)=1
    END DO
    DD5N=EDD5
!调用子程序
    CALL gaussr_inverse(DWZ_DD5,M,M,DD5N,M,M)
!
!判断逆矩阵是否有效
    DWZ_DD5=MATMUL(DD5,DD5N)
    dm_DD5=0
    DO i=1,M
        DO t=1,M
            d_DD5=DWZ_DD5(i,t)-EDD5(i,t)
            IF(abs(d_DD5) > abs(dm_DD5) ) THEN
               dm_DD5=d_DD5
            END IF
        END DO
     END DO
     IF(ABS(dm_DD5)<error_inverse) GO TO 74
     WRITE(*,*)'Error of DD5 inverse'
74 CONTINUE
!
!迭代式
    A3I=-MATMUL(DD5N,K3)
    MAX_A3L=0
    DO i=1,M
      A3L=A3(i)-A3I(i)
      IF(ABS(A3L)>ABS(MAX_A3L))THEN
         MAX_A3L=A3L
      END IF
    END DO
    n_itera=n_itera+1
    IF(MAX_A3L<=itera_A3_error)EXIT itera_of_A3
    A3=A3I
  END DO itera_of_A3
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kimileegdut

捐助贵宾 (小有名气)

相关版块跳转 我要订阅楼主 kimileegdut 的主题更新
信息提示
请填处理意见