Fortran Coder

查看: 6628|回复: 2
打印 上一主题 下一主题

[数值问题] 求找出错误,结果运行正确,但是每当输入大于10 的时,...

[复制链接]

15

帖子

6

主题

0

精华

入门

F 币
73 元
贡献
45 点
跳转到指定楼层
楼主
发表于 2016-4-19 23:56:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
program mytp21
implicit none 
integer i,j,n
double precision h
double precision,allocatable ::x(:,:),b(:),a(:),c(:),f(:),u(:)
write(6,*)'input un nombre n'
read(5,*)n
allocate(x(n,n),a(n),b(n),c(n),f(n),u(n))
h=1.d0/n
x(1,1)=1.d0/h+1.d0*h/3
f(1)=1.d0
do i=2,n
 f(i)=0
     !write(6,'("(",i3,")=",d15.8)')i,f(i)
     enddo
do i=1,n
    do j=1,n
    if(i==j)then
    x(i+1,j+1)=2.d0*x(1,1)
    elseif(i==j+1)then
    x(i,j)=-1.d0/h+1.d0*h/6.d0
    elseif(j==i+1) then
    x(i,j)=-1.d0/h+1.d0*h/6.d0
    else
    x(i,j)=0
    endif
 enddo
enddo
 do i=1,n
    b(i)=x(i,i)
    !write(6,'("(",i3,")=",d15.8)')i,b(i)
    enddo

    do i=2,n
    a(i)=x(i,i-1)
    ! write(6,'("(",i3,")=",d15.8)')i,a(i)
    enddo
    do i=1,n-1
       c(i)=x(i,i+1)
    ! write(6,'("(",i3,")=",d15.8)')i,c(i)
    end do
    a(1)=0
    c(n)=0
    u(n)=0
    open(30, file='le solution de u(x).txt')
    call tridag(a,b,c,f,u,n)
    do i=1,n
    write(6,'("(",i3,")=",d15.8)')i,u(i)
    write(30,*)'le solution de u(x)',u(i)
    end do
    close(30)
pause


contains

subroutine tridag(a,b,c,f,u,n)
implicit none
integer n
double precision gam(n),a(n),b(n),c(n),u(n),f(n),bet
integer j,n
if (b(1)==0.) pause 'b(1)=0 dans tridag'
 bet=b(1)
u(1)=f(1)/bet
do j=2,n
    gam(j)=c(j-1)/bet
    bet=b(j)-a(j)*gam(j)
    if (bet==0.) pause 'bet=0 dans tridag'
    u(j)=(f(j)-a(j)*u(j-1))/bet
end do
do j=n-1,1,-1
    u(j)=u(j)-gam(j+1)*u(j+1)
end do
 end subroutine tridag
 end program mytp21
!  --------------------------------------------------
!  Silverfrost FTN95 for Microsoft Visual Studio
!  Free Format FTN95 Source File
!  --------------------------------------------------
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

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

沙发
发表于 2016-4-20 10:53:03 | 只看该作者
删除第 59 行 integer n
第19行,x(i+1,j+1)=2.d0*x(1,1)
   改为
   x(i,j)=2.d0*x(1,1)

如果还有问题,请告知你使用什么编译器

15

帖子

6

主题

0

精华

入门

F 币
73 元
贡献
45 点
板凳
 楼主| 发表于 2016-4-20 14:37:26 | 只看该作者
fcode 发表于 2016-4-20 10:53
删除第 59 行 integer n
第19行,x(i+1,j+1)=2.d0*x(1,1)
   改为

谢谢老师!ok了 越界了,
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-2 12:40

Powered by Tencent X3.4

© 2013-2024 Tencent

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