回 帖 发 新 帖 刷新版面

主题:重复,迭代,循环?

变量定义:
integer:: m=4,n=3
complex t0(2*m,2*m),t1(2*m,2*m),tt(2*m,2*m),t2(2*m,2*m),tt_(2*m,2*m),t3(2*m,2*m),t4(2*m,2*m) ,t(2*m,2*m),t5(2*m,2*m)
complex energy1(2*m,2*m),identity(2*m,2*m)       !w用energy1表示
complex h0(2*m,2*m),h2(2*m,2*m),h1(2*m,2*m) !都是已知矩阵,且h0表示H00,h1表示(H01+),h2表示H01,tt表示ti,tt_表示ti_。



这样循环看下好不好:
  t0=energy1-h0
  t0=.i.t0
  t0=t0.x.h2 !求t0,初始值
  tt=t0 !第一个t0值

  t1=energy1-h0 
  t1=.i.t1
  t1=t1.x.h1 !求t0_,初始值
  t2=t1 !将第一个t1赋给t2保存
 

 do i=2,u !循环,计算第i个t0值
  
  t4=-t1.x.t0
  t5=-t0.x.t1
  t4=identity+t4+t5
  t4=.i.t4
  t0=t4.x.(t0**2) !ti
  t2=t2.x.t0

     tt=tt+t2

  t1=t4.x.(t1**2) !t1_
!  if(all(t1<eps*fi) .and. all(t0<eps*fi)) exit
  t2=t2.x.t1

 end do


  t0=energy1-h0
  t0=.i.t0
  t0=t0.x.h2 !求t0,初始值
  t2=t0

  t1=energy1-h0 
  t1=.i.t1
  t1=t1.x.h1 !求t0_,初始值
  tt_=t1

 do i=2,u
  
  t3=-t1.x.t0
  t5=-t0.x.t1
  t3=identity+t5+t3

  t3=.i.t3
  t1=t3.x.(t1**2)  !ti_
  t2=t2.x.t1
  tt_=tt_+t2
 
  t0=t3.x.(t0**2)  !ti
!  if(all(t1<eps*fi) .and. all(t0<eps*fi)) exit
  t2=t2.x.t0

 end do

回复列表 (共21个回复)

沙发

矩阵自乘不能用**2,我早在另一个帖子说了。

板凳

学习啦!

3 楼

[quote]矩阵自乘不能用**2,我早在另一个帖子说了。[/quote]
忘记了,用.x. 吗?

4 楼

[quote]矩阵自乘不能用**2,我早在另一个帖子说了。[/quote]
[em8][em8][em8][em8][em8][em7][em7][em7][em6][em6][em6][em5][em5][em5][em2][em2][em2]

这样循环有错吗?

5 楼

[quote]矩阵自乘不能用**2,我早在另一个帖子说了。[/quote]
复数矩阵也可以用 .x. 表示矩阵相乘的吧?

6 楼

简单平方,只是各个元素自己平方,完全不是矩阵运算法则,用个简单的复数矩阵检验一下。

7 楼

[quote]简单平方,只是各个元素自己平方,完全不是矩阵运算法则,用个简单的复数矩阵检验一下。[/quote]
[em15][em15][em15]
大姐麻烦看下,我这样循环能满足公式条件吗?

8 楼

T的公式我怎么就看不出规律呢?

9 楼

以T为例,第一项 t0,第二项t0~.x.t1,t0~下面加~表示头上加~;第三项 t0~.x.t1~.x.t2;第四项 t0~.x.t1~.x.t2~.x.t3,依次类推,初值T=t0,将t0,t0~带入ti,ti~公式,i每循环一次,得到一组t和t~,将它们带入T公式中求T。

10 楼


循环看上去很乱,费很大劲看不清楚,早建议你声明一个包含复数矩阵的type,再用type定义一个复数矩阵数组。这样去运算看起来就清晰多了。

    integer,parameter :: Max=1000,i
    type cpx
      complex,dimension(8,8) :: a
      complex,dimension(8,8) :: b
    end type cpx
    type(cpx),dimension(Max) :: t

引用的时候
t(:).a 用于存放一个序列的复数矩阵。
t(:).b 用于存放这个序列的复数矩阵的共轭。

再写程序,循环就是针对下标了,应该就清晰多了,试试吧。

我来回复

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