24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1119  |  回复: 5

songjunann

铜虫 (小有名气)

[求助] 帮忙看一下,这两个程序(关于点积的)讲的是什么,为什么要写的这么繁琐

dot.f程序:

  function dot (x,y,n)
cc-begin
c
c-----------------------------------------------------------------------
c
c     dot (x,y,n)
c
c
c     purpose
c     -------
c
c     dot calculates the dot product of the two n-vectors
c     x and y.
c
cc-doc
c     input arguments
c     ---------------
c
c     x       = vector of length n.
c     y       = vector of length n.
c     n       = dimension of x and y.
c
c     output arguments
c     ----------------
c
c     dot     = value of the function, i.e. dot product of x and y.
c
c     notes
c     -----
c
c     1. dot contains a test for n = 0.
c
c-----------------------------------------------------------------------
cc-end
c
      implicit real*8 (a-h,o-z)
      dimension x(*),y(*)
c
      dot = 0.
      if (n .le. 0) return
c      do 100 i = 1,n
c         dot = dot + x(i)*y(i)
c  100 continue
      dot = ddot(n,x,1,y,1)
      end
%%%%%%%%%%%%%%%%%%%%%%%%%
其中ddot.f子程序为:
      DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
*     .. Scalar Arguments ..
      INTEGER INCX,INCY,N
*     ..
*     .. Array Arguments ..
      DOUBLE PRECISION DX(*),DY(*)
*     ..
*
*  Purpose
*  =======
*
*     DDOT forms the dot product of two vectors.
*     uses unrolled loops for increments equal to one.
*
*  Further Details
*  ===============
*
*     jack dongarra, linpack, 3/11/78.
*     modified 12/3/93, array(1) declarations changed to array(*)
*
*  =====================================================================
*
*     .. Local Scalars ..
      DOUBLE PRECISION DTEMP
      INTEGER I,IX,IY,M,MP1
*     ..
*     .. Intrinsic Functions ..
      INTRINSIC MOD
*     ..
      DDOT = 0.0d0
      DTEMP = 0.0d0
      IF (N.LE.0) RETURN
      IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
*
*        code for both increments equal to 1
*
*
*        clean-up loop
*
         M = MOD(N,5)
         IF (M.NE.0) THEN
            DO I = 1,M
               DTEMP = DTEMP + DX(I)*DY(I)
            END DO
            IF (N.LT.5) THEN
               DDOT=DTEMP
            RETURN
            END IF
         END IF
         MP1 = M + 1
         DO I = MP1,N,5
          DTEMP = DTEMP + DX(I)*DY(I) + DX(I+1)*DY(I+1) +
     $            DX(I+2)*DY(I+2) + DX(I+3)*DY(I+3) + DX(I+4)*DY(I+4)
         END DO
      ELSE
*
*        code for unequal increments or equal increments
*          not equal to 1
*
         IX = 1
         IY = 1
         IF (INCX.LT.0) IX = (-N+1)*INCX + 1
         IF (INCY.LT.0) IY = (-N+1)*INCY + 1
         DO I = 1,N
            DTEMP = DTEMP + DX(IX)*DY(IY)
            IX = IX + INCX
            IY = IY + INCY
         END DO
      END IF
      DDOT = DTEMP
      RETURN
      END

个人感觉不就是两个向量的点积,为什么两个程序要写的这么复杂呢,有什么特别的地方吗,请大家多多指教,谢谢!
回复此楼

» 猜你喜欢

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

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

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


xzhdty(金币+1): 欢迎常来程序语言看看 2011-09-25 19:19:42
ddot.f 应该是 blas  包中的函数,之所以写成这样,呵呵,或许是受那个时代计算机的计算能力的限制吧,里面有一些手工的向量化操作,呵呵……

在 Fortran 90 后,可以用内置函数dot_product来做这个工作了……
2楼2011-09-25 16:43:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

songjunann

铜虫 (小有名气)

引用回帖:
2楼: Originally posted by snoopyzhao at 2011-09-25 16:43:23:
ddot.f 应该是 blas  包中的函数,之所以写成这样,呵呵,或许是受那个时代计算机的计算能力的限制吧,里面有一些手工的向量化操作,呵呵……

在 Fortran 90 后,可以用内置函数dot_product来做这个工作了……

那在Visual Compaq Fortran里面,混合用F77和F90的语法,不会冲突吧?
3楼2011-09-25 23:09:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

jjdg: 感谢参与 2011-09-27 00:42:46
songjunann(金币+20): 谢谢,再问一个小问题, 2011-09-27 01:00:08
引用回帖:
3楼: Originally posted by songjunann at 2011-09-25 23:09:13:
那在Visual Compaq Fortran里面,混合用F77和F90的语法,不会冲突吧?

应该没有什么问题,但从编程规范的角度来说,不建议这样做……
4楼2011-09-25 23:49:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

songjunann

铜虫 (小有名气)

引用回帖:
3楼: Originally posted by songjunann at 2011-09-25 23:09:13:
那在Visual Compaq Fortran里面,混合用F77和F90的语法,不会冲突吧?

F77里面:
implicit real*8 (a-h,o-z)
dimension a(*),b(*),mdiag(*)
这样的定义用在哪里呢,a,b的大小是动态的吗?
5楼2011-09-27 01:01:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)


余泽成(金币+1): 谢谢参与应助! 2011-09-28 10:31:43
引用回帖:
5楼: Originally posted by songjunann at 2011-09-27 01:01:29:
F77里面:
implicit real*8 (a-h,o-z)
dimension a(*),b(*),mdiag(*)
这样的定义用在哪里呢,a,b的大小是动态的吗?

这个不叫动态的,而叫 assumed size array,一般用在子程序中,用以表示 dummy variable 的维度是由实际传递的参数决定的。
6楼2011-09-27 01:28:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 songjunann 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 290求调剂085701 +11 1314捧花 2026-04-02 11/550 2026-04-06 13:31 by zllcz
[考研] 求调剂 +19 111623 2026-04-04 21/1050 2026-04-06 09:35 by guanxin1001
[考研] 调剂 +3 李广火 2026-04-05 3/150 2026-04-05 18:57 by 蓝云思雨
[考研] 341求调剂 +3 学无止境,冲 2026-04-05 3/150 2026-04-05 09:40 by lbsjt
[考研] 413求调剂 +4 柯某某 2026-03-31 4/200 2026-04-04 22:18 by 学员6BFVa3
[考研] 调剂 +4 是可乐不是可乐 2026-04-04 4/200 2026-04-04 19:41 by 唐沐儿
[考研] 359求调剂 +7 hhhhaaaa$ 2026-04-04 7/350 2026-04-04 18:49 by imissbao
[考研] 调剂0855-288 +5 x熊二a 2026-04-03 5/250 2026-04-04 00:19 by 猪会飞
[考研] 数二英二348求调剂 +4 hxdzj1 2026-04-03 5/250 2026-04-03 21:25 by zhq0425
[考研] 求调剂不挑专业 +3 xrh030412 2026-04-01 3/150 2026-04-03 14:40 by 氮气气气
[考研] 专硕085601求调剂 +7 suyifei 2026-04-03 8/400 2026-04-03 14:00 by 欣喜777
[考研] 302求调剂 +9 zyx上岸! 2026-04-02 9/450 2026-04-02 23:07 by 马儿快快地跑
[考研] 293求调剂 +4 珂珂乐 2026-04-02 4/200 2026-04-02 20:10 by 6781022
[考研] 318求调剂,计算材料方向 +10 吸喵有害笙命 2026-04-01 11/550 2026-04-02 16:29 by oooqiao
[考研] 初试301,代码085701环境工程,本硕一致,四六级已过,有二区一作,共发表5篇论文 +6 axibli 2026-04-01 6/300 2026-04-02 13:42 by Ecowxq666!
[考研] 302求调剂一志愿北航070300,本科郑大化学 +8 圣日耳曼条 2026-04-01 11/550 2026-04-02 07:40 by chemdavid
[考研] 化学工程专硕324分,一志愿中国矿业大学求调剂 +7 耿耿1314 2026-04-01 7/350 2026-04-02 07:40 by 尚水阁主
[考研] 求调剂 +4 DADA怪 2026-03-31 4/200 2026-04-01 14:30 by ZXlzxl0425
[硕博家园] 博一被送出联培感觉不适应怎么办 +3 全村的狗 2026-03-31 3/150 2026-04-01 10:44 by 328838485
[考研] 生物考研337分求调剂 +4 cgxin 2026-03-30 6/300 2026-03-31 14:18 by 记事本2026
信息提示
请填处理意见