Fortran Coder

查看: 13068|回复: 5
打印 上一主题 下一主题

[求助] R不能设置成动态数组

[复制链接]

31

帖子

5

主题

0

精华

入门

F 币
105 元
贡献
54 点
跳转到指定楼层
楼主
发表于 2014-7-22 11:43:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 FLY 于 2014-7-22 14:09 编辑

[Fortran] 纯文本查看 复制代码
do i=1,200,1
         R(1,1)=sqrt(dot_product(A(:,1),A(:,1)))!用Gram_Schmidt分解求QR分解
         Q(:,1)=A(:,1)/R(1,1)
         do k=2,N,1
            forall(j=1:k-1) R(j,k)=dot_product(Q(:,j),A(:,k))   
            Temp=A(:,k)
            do j=1,k-1!此处使用Forall会产生一个警告
               Temp=Temp-Q(:,j)*R(j,k)
            end do   
            R(k,k)=sqrt(dot_product(Temp,Temp))
            Q(:,k)=Temp/R(k,k)
         end do
        A=matmul(R,Q)!分解完成,开始迭代
end do

给位,上面的一段程序中,不知为何R不能设置成动态数组,我用的最新的IVF编译器。QA都可以设置成动态数组。
事实上,当把R设置成动态数组后,也不会报错,但是计算的结果是不对的。(注:这段程序是用来求解全部的特征值)
求指点。。。


解决了,谢谢围观朋友。特别感谢五楼。我fortran用的时间不长,我以前一直用的VB,搞混了。VB变量不用初始化,默认为0,而FORTRAN需要。
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2014-7-22 11:52:54 | 只看该作者
建议你给全代码。或者稍微全一些的代码。最好是给两种:一种是固定大小,一种是动态数组。

31

帖子

5

主题

0

精华

入门

F 币
105 元
贡献
54 点
板凳
 楼主| 发表于 2014-7-22 12:21:55 | 只看该作者
vvt 发表于 2014-7-22 11:52
建议你给全代码。或者稍微全一些的代码。最好是给两种:一种是固定大小,一种是动态数组。 ...

前面都是最基本的声明部分
[Fortran] 纯文本查看 复制代码
implicit none
      real::P_reaArr_A(:,:),EigenValue(:)
      real::R(N,N)
      real,allocatable::A(:,:),Q(:,:),Temp(:)
      real::Err,ds
      integer::i,j,k,N,Error
      Err=1E-6
      N=size(P_reaArr_A,1)
      allocate(A(N,N),stat=Error)
      allocate(Q(N,N),stat=Error)
      !allocate(R(N,N),stat=Error)
      !write(*,*) Error
      allocate(Temp(N),stat=Error)
      A=P_reaArr_A


31

帖子

5

主题

0

精华

入门

F 币
105 元
贡献
54 点
地板
 楼主| 发表于 2014-7-22 12:23:32 | 只看该作者
vvt 发表于 2014-7-22 11:52
建议你给全代码。或者稍微全一些的代码。最好是给两种:一种是固定大小,一种是动态数组。 ...

你看我的声明部分,按理说A,Q,Temp能运行,那么R也能啊,但是如果R是动态数组,那么计算结果是错的

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

5#
发表于 2014-7-22 12:53:09 | 只看该作者
因为你的代码不全,无法帮你跑启动动态调试,只能看代码猜。

你试试 R 分配以后,令 R = 0.0 试试。再把 forall 改为 Do 循环试试。

评分

参与人数 1F 币 +5 贡献 +5 收起 理由
FLY + 5 + 5 很给力!

查看全部评分

31

帖子

5

主题

0

精华

入门

F 币
105 元
贡献
54 点
6#
 楼主| 发表于 2014-7-22 14:07:08 | 只看该作者
fcode 发表于 2014-7-22 12:53
因为你的代码不全,无法帮你跑启动动态调试,只能看代码猜。

你试试 R 分配以后,令 R = 0.0 试试。再把 f ...

谢谢,果然如你所说,应该初始化一下
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-23 23:47

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表