24小时热门版块排行榜    

查看: 12828  |  回复: 157
本帖产生 1 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

maomao1210

金虫 (正式写手)

[交流] 【交流】Fortran语言答疑专帖 已有46人参与

帖主寄言


其实语言并不是最重要的,形势的载体而已,fortran擅长工程计算,因为工作需要,偶尔用用fortran。在此开贴目的有二:

第一,希望能和大家交流的同时提高和丰富自己;

第二,认识来自五湖四海的朋友。

资料目前还没有整理,有机会整理上传一些。呵呵。


[ Last edited by nono2009 on 2009-11-18 at 10:34 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

血汗泪

新虫 (小有名气)


小木虫: 金币+0.5, 给个红包,谢谢回帖
前辈您好,我写了一个计算复数矩阵行列式的小程序,出现错误了,望前辈指点!
        SUBROUTINE CDET(A,N,DET)
        USE MSIMSL
      IMPLICIT INTEGER*4 (I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
        COMPLEX*16 A(N,N),DET
        DIMENSION RAR(N,N),RAI(N,N)
        REAL*8 SS
!C=====================================================================
        RAR=DREAL(A)
        RAI=DIMAG(A)
        F  =1.0
        DET=1.0
!C=====================================================================
        DO L=1,N-1
                RD=0.0
                DO I=L,N
!C=====================================================================
                        DO J=L,N
!C---------------------------------------------------------------------
                                RM=RAR(I,J)*RAR(I,J)+RAI(I,J)*RAI(I,J)
!C---------------------------------------------------------------------
                                IF (RM.GT.RD) THEN
                                        RD=RM
                                        IS=I
                                        JS=J
                                END IF
!C---------------------------------------------------------------------
                        ENDDO
                ENDDO
!C=====================================================================
                IF (RD+1.0.EQ.1.0) THEN
                        DET=0.0
                        RETURN
                END IF
!C=====================================================================
                IF (IS.NE.L) THEN
                        F=-F
!C---------------------------------------------------------------------
                        DO J=L,N
                                P=RAR(L,J)
                                RAR(L,J)=RAR(IS,J)
                                RAR(IS,J)=P
                                P=RAI(L,J)
                                RAI(L,J)=RAI(IS,J)
                                RAI(IS,J)=P
                        ENDDO
!C---------------------------------------------------------------------
                ENDIF
!C=====================================================================
                IF (JS.NE.L) THEN
                        F=-F
!C---------------------------------------------------------------------
                        DO I=L,N
                                P=RAR(I,L)
                                RAR(I,L)=RAR(I,JS)
                                RAR(I,JS)=P
                                P=RAI(I,L)
                                RAI(I,L)=RAI(I,JS)
                                RAI(I,JS)=P
                        ENDDO
!C---------------------------------------------------------------------
                END IF
                DET=DET*DCMPLX(RAR(L,L),RAI(L,L))
!C=====================================================================
                DO J=L+1,N
                        P=RAR(L,J)*RAR(L,L)
                        Q=-RAI(L,J)*RAI(L,L)
                        SS=(RAR(L,L)-RAI(L,L))*(RAR(L,J)+RAI(L,J))
                        RAR(L,J)=(P-Q)/RD
                        RAI(L,J)=(SS-P-Q)/RD
                ENDDO
                DO I=L+1,N
                        DO J=L+1,N
                                P=RAR(I,L)*RAR(L,J)
                                Q=RAI(I,L)*RAI(L,J)
                                SS=(RAR(I,L)+RAI(I,L))*(RAR(L,J)+RAI(L,J))
                                RAR(I,J)=RAR(I,J)-P+Q
                                RAI(I,J)=RAI(I,J)-SS+P+Q
                        ENDDO
                ENDDO
!C---------------------------------------------------------------------
        ENDDO
!C=====================================================================
        DET=F*DET*DCMPLX(RAR(N,N),RAI(N,N))
        RETURN
        END SUBROUTINE
!C=====================================================================
错误为Error: The shapes of the array expressions do not conform.   [DET]
请您看一下,万分感谢!
149楼2013-07-29 17:04:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 158 个回答

stereochemistry


小木虫(金币+0.5):给个红包,谢谢回帖交流
你好,最近写程序遇见一个问题,一个对称矩阵想线性存储,请问怎么实现呢?
2楼2009-06-01 12:32:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

★ ★ ★ ★ ★
wangen994(金币+2,VIP+0):鼓励一下,哈哈 6-4 11:55
gwdavid(金币+3,VIP+0):辛苦了!答疑帖加大奖励力度!;) 6-7 10:32
wangen994(金币+0,VIP+0):请你讲九月份十月份的参与应助的帖子整理附在http://emuch.net/bbs/viewthread.php?tid=1358729&fpage=1后面,以便发放津贴 11-9 19:00
哦。我给你举个例子吧,比如对称矩阵 A[3,3]
                              A(1,1)     A(1,2)     A(1,3)
                              A(2,1)     A(2,2)     A(2,3)
                              A(3,1)     A(3,2)     A(3,3)
只要存储成一个一维数组即可: B(1)=A(1,1),B(2)=A(2,1),B(3)=A(2,2), B(4)=A(3,1),B(5)=A(3,2),B(6)=A(3,3).
还要记住这个: 行和列与存储该值的关系为:II=MAX(I,J)*(MAX(I,J)+1)/2+MIN(I,J), 那么B(II)==A(I,J).
不知道我讲的能听懂与否。如果不懂,继续发问。
3楼2009-06-01 12:41:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

anbb1009

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
我同意楼上的观点,因为我以前也这样做过,而且效果不错,但顺便问一下:目前fortran中用的最好的求 非线性方程一组实根的方法有哪几种,有没有现成的子程序?谢谢
4楼2009-06-05 14:35:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见