Fortran Coder

查看: 6258|回复: 9
打印 上一主题 下一主题

[微分方程] 计算结果出现问题

[复制链接]

6

帖子

1

主题

0

精华

入门

F 币
33 元
贡献
16 点
跳转到指定楼层
楼主
发表于 2018-9-25 11:24:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下图的源代码所示,我要用fortran计算一个有初值和边界条件限制的微分方程,但结果一直不如心意,希望能够在论坛得到解答。


主程序                 子程序
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

沙发
发表于 2018-9-25 16:20:58 | 只看该作者
数理方程的课程大作业吗?
建议不要纠结编程,先把梁昆淼老师那本教材的课后习题都做一遍或者答案认真抄三遍
很多时候,习题不做的滚瓜烂熟或者解题过程倒背如流,编程计算就是水中捞月

6

帖子

1

主题

0

精华

入门

F 币
33 元
贡献
16 点
板凳
 楼主| 发表于 2018-9-25 19:58:48 | 只看该作者
pasuka 发表于 2018-9-25 16:20
数理方程的课程大作业吗?
建议不要纠结编程,先把梁昆淼老师那本教材的课后习题都做一遍或者答案认真抄三 ...

不是作业,是导师让我入门做的东西。原理都很清楚,调试也是正确的,就是结果不是很满意

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

地板
发表于 2018-9-25 21:53:00 | 只看该作者
为啥不去问导师呢?

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

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

QQ
5#
发表于 2018-9-26 06:44:43 | 只看该作者
没看见代码呀,楼主自己能看见?

6

帖子

1

主题

0

精华

入门

F 币
33 元
贡献
16 点
6#
 楼主| 发表于 2018-9-26 08:52:19 | 只看该作者
不好意思,没把代码贴全。
[Fortran] 纯文本查看 复制代码
program main
  implicit none
  integer,parameter::N=11
  integer t
 real*8::A(N),B(N),C(N),D(N),H(N)
 integer,parameter::Dx=10,Dt=1
  !空间和时间的步长
 real,parameter:: k=0.1
 real,parameter:: lemad=real(k*Dt)/real(Dx**2)
  !含水层参数
 integer i,j
  !声明
    do i=2,N-1
     A(i)=-lemad
     B(i)=1+2*lemad
     C(i)=-lemad
     end do
    write(*,20)lemad
     20	format(/,5X,'lemad=',F9.6)

    do i =1,N
    H(i)=10
    end do
    write (*,*) H(2:N-1)
    H(1)=10
    H(N)=12
    write(*,15)
     15   format(5X,'TIME',5X,'HEAD')!赋初值和边界值
     t = 0
    do j=1,101
    t=t+Dt 
    do  i=2,N-1
       D(i)=H(i)
    D(2)=D(2)+H(1)*lemad
    D(N-1)=D(N-1)+H(N)*lemad
    end do
    call  chase (N,A,B,C,D,H)
     write(*,30) t,H(i)
    30	format(1X,I3,5X,11F9.6)
    end do
    read(*,*)t
    end program

    subroutine chase (N,A,B,C,D,H)
     !追赶法计算三对角线方程组
     implicit none
      integer:: N
     real*8::A(N),B(N),C(N),D(N),H(N)   
     real*8::L(N),U(N)
    integer::i,j
     L(2)=B(2)
     U(2)=D(2)/L(2)
     do  i = 3,N-1
      L(i) = B(i)-A(i)*C(i-1)/L(i-1)
      U(i) =(D(i)-A(i)*U(i-1))/L(i)
   end do
    !回代求H
    H(N-1)=U(N-1)
     do j= 2,N-3
     i=N-1-j
     H(i)=U(i)-C(i)*H(i+1)/L(i)
    end do
    return
    end subroutine chase

6

帖子

1

主题

0

精华

入门

F 币
33 元
贡献
16 点
7#
 楼主| 发表于 2018-9-26 08:53:04 | 只看该作者
vvt 发表于 2018-9-26 06:44
没看见代码呀,楼主自己能看见?

不好意思,我现在把代码贴出来了,您能帮我看一下吗

6

帖子

1

主题

0

精华

入门

F 币
33 元
贡献
16 点
8#
 楼主| 发表于 2018-9-26 08:54:22 | 只看该作者
pasuka 发表于 2018-9-25 21:53
为啥不去问导师呢?

老师最近有点忙,人还不在国内

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

9#
发表于 2018-9-26 11:03:27 | 只看该作者
dididada 发表于 2018-9-26 08:54
老师最近有点忙,人还不在国内

老板不在,总有小老板在吧?
没有小老板,总有师兄师姐吧?
另外,lz就不能写个汇报总结把已经解决的和亟待解决的问题列举出来,再发送邮件给老板?

6

帖子

1

主题

0

精华

入门

F 币
33 元
贡献
16 点
10#
 楼主| 发表于 2018-9-26 12:24:12 | 只看该作者
pasuka 发表于 2018-9-26 11:03
老板不在,总有小老板在吧?
没有小老板,总有师兄师姐吧?
另外,lz就不能写个汇报总结把已经解决的和亟 ...

哈哈,好的,你说的很有道理。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-23 18:25

Powered by Tencent X3.4

© 2013-2024 Tencent

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