回 帖 发 新 帖 刷新版面

主题:这样的do循环有影响 吗

t0=energy1-h0 
  t0=.i.t0
  t0=t0.x.h2 !求t0
  t1=transpose(t0) !t0转置
  tt=t0
  tt_=t1

 do i=2,n
   if (all(t0<eps).or. all(t1<eps)) exit
  t3=energy1-t0.x.t1-t1.x.t0
  t3=.i.t3
  t0=t3.x.(t0**2) !ti
  t2=t1.x.t0
  tt=tt+t2
  t1=t1.x.(transpose(t0))  !ti的转置乘积
 end do

 do i=2,n
   if (all(t0<eps).or. all(t1<eps)) exit 
   t4=energy1-t0.x.t1-t1.x.t0
   t4=.i.t4
  t1=t4.x.(transpose(t0**2))
  t2=t0.x.t1
  tt_=tt_+t2
  t0=t0.x.(transpose(t1))
 end do

前面是赋初始值,后面两个do循环能都用这个初始值不?两个循环互不影响吧?不会发生第一个循环得到的值在第二个循环里用吧?

回复列表 (共3个回复)

沙发

只要循环没改变初值就不影响

板凳

[quote]只要循环没改变初值就不影响[/quote]

问题是循环一直在改变T0!我没理解T等式,另一个帖子的图片看不出规律。

3 楼

姑且不论你的循环做对了没有,先指出程序中的一点问题:
对于操作符**,对于矩阵操作用这个操作符是很危险的,甚至是完全错误的!矩阵的平方也应该用.x.对其进行操作!用**只是对数组的各个元素进行了自乘,完全不是按照矩阵运算规则进行的!除非你的本意就是对各元素进行平方。

我来回复

您尚未登录,请登录后再回复。点此登录或注册