Fortran Coder

查看: 7587|回复: 4
打印 上一主题 下一主题

[数值问题] do循环,数组越界1位(value 4 超过bound 3)

[复制链接]

1

帖子

1

主题

0

精华

新人

F 币
10 元
贡献
4 点
跳转到指定楼层
楼主
发表于 2018-12-22 20:06:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
黑框见附件图,显示在第7行.求助!!!感谢!!!
[Fortran] 纯文本查看 复制代码
program main
    implicit none
    real::a(3,3)=(/10,-1,-1,-1,10,-1,-2,-2,5/)
    real::b(3)=(/7.2,8.3,4.2/)
    real x(3)
    real i,j,time,k,ii,o(3),keep(3),ans,ans1,ans2
    call Jacobi(i,j,time,ans,o,keep,x,a,b)
    call Gauss_Seidel(i,j,time,k,ii,o,keep,ans1,ans2,a,b,x)
    pause
    end program main
    
    subroutine Jacobi(i,j,time,ans,o,keep,x,a,b)
    implicit none
    real ans,o(3),keep(3),x(3),a(3,3),b(3),i,j,time
    x(1)=0
    x(2)=0
    x(3)=0
    do time=1,10
        do i=1,3
        keep(i)=x(i)
        ans=0
           do j=1,3
              if(j==i) cycle
              ans=ans+a(i,j)*x(j)
           end do
        x(i)=(b(i)-ans)/a(i,i)
        o(i)=abs(x(i)-keep(i))
        end do
        write(*,*) x(1),x(2),x(3)
    if(o(1)<0.001 .and.o(2)<0.001 .and.o(3)<0.001 ) exit
    write(*,*) 'This is the answer!'
    end do
    return
    pause
    end
    
    subroutine Gauss_Seidel(i,j,time,k,ii,o,keep,ans1,ans2,a,b,x)
    implicit none
    real o(3),keep(3),a(3,3),b(3),x(3)
    real ans1,ans2,i,j,time,k,ii
    x(1:3)=0
    do time=1,10
        do i=1,3
        keep(i)=x(i)
        end do
        ans1=0
        ans2=0
           do j=2,3
           ans1=ans1+a(1,j)*x(j)
           end do
           x(1)=(b(1)-ans1)/a(1,1)
           x(2)=(b(2)-a(2,1)*x(1)-a(2,3)*x(3))/a(2,2)
           do k=1,2
           ans2=ans2+a(3,k)*x(k)
           end do
           x(3)=(b(3)-ans2)/a(3,3)
        do ii=1,3
        o(ii)=abs(x(ii)-keep(ii))
        end do
        write(*,*) x(1),x(2),x(3)
    if(o(1)<0.001 .and.o(2)<0.001 .and.o(3)<0.001) exit
    write(*,*) 'This is the answer!'
    end do
    return
    pause
    end


QQ截图20181222200355.png (86.9 KB, 下载次数: 220)

QQ截图20181222200355.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

3

帖子

0

主题

0

精华

新人

F 币
20 元
贡献
8 点
沙发
发表于 2018-12-22 22:17:54 | 只看该作者
复制源程序,编译运行正常。

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

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

板凳
发表于 2018-12-22 22:19:09 | 只看该作者
i,j,time,k,ii 这些都定义为整数试试。

此外,为什么要把他们从主程序传递过去?完全没必要呀。参数应在满足要求的情况下,越少越好。

3

帖子

0

主题

0

精华

新人

F 币
20 元
贡献
8 点
地板
发表于 2018-12-22 22:47:12 | 只看该作者
fcode 发表于 2018-12-22 22:19
i,j,time,k,ii 这些都定义为整数试试。

此外,为什么要把他们从主程序传递过去?完全没必要呀。参数应在满 ...

你好,请问有没有关于Fortran2008和Fortran2018的参考资料文献?
我知道网站上有一个英文的包含2008的modern  Fortran。

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1339 元
贡献
565 点

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

5#
发表于 2018-12-24 09:03:25 | 只看该作者
那本就足够了。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-19 16:00

Powered by Tencent X3.4

© 2013-2024 Tencent

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