24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 802  |  回复: 11
当前主题已经存档。

icecream8508

金虫 (著名写手)

[交流] 【求助】新人请教fortran编程问题![求助完成]

刚接触Fortran不久。因为自己求解的东西需要迭代,而自己对迭代的认识就是附初值,然后更新每次的值,直到收敛。大致思路也该如此,但是在程序实现的时候,总是不对的。
因此,今天就想从最简单的迭代开始算起。想先把最基本的一个迭代的例子走通,但是结果仍然不对。
也问了几个人,但是大家对于程序的编写都有自己习惯的语言,觉得问完之后,更茫然了。
在检查程序的时候,不知道错在哪里了?
不知,大家在审查程序时有什么好方法吗?

[ Last edited by wangmonk on 2009-6-7 at 20:44 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

icecream8508

金虫 (著名写手)

我今天做的简单例子的编程附着如下:
!******* 练习迭代算法*******

!******** 所需要求解的方程******
!  x(1)=0.2*x(2)+0.1*x(3)+0.3
!   x(2)=0.2*x(1)+0.1*x(3)+1.5
!   x(3)=0.2*x(1)+0.1*x(2)+2
  
!******* 1.jACOBI 迭代*******
program main

real B(3)
real A(3,3),x(3),s(30)
integer N,k
integer m
real(kind=8) :: eps
real(kind=8) :: xo
integer,parameter:: NM=1000

eps=1.0e-6
!***********系数矩阵*************
B(1)=0.3
B(2)=1.5
B(3)=2

A(1,2)=0.2
A(1,3)=0.1
A(2,1)=0.2
A(2,3)=0.1
A(3,1)=0.2
A(3,2)=0.1

!***************迭代公式************
! do k=1,NM,1
!Do i=1,3
!   x(i)=0.0
!end do

20 Do k=1,NM,1

Do i=1,3
  s(i)=0.0  
  Xo=x(i)
  x(i)=0.0
   Do j=1,3
      If(i.NE.j) then
!       S(i)=S(i)+A(i,j)*Xo
       S(i)=S(i)+A(i,j)*X(j)
      End if
   End do
x(i)=B(i)-s(i)

If(abs(xo-x(i)).gt.eps) then
Go to 20
else
  exit
end if

end do
end do

!write(*,*) (x(i),i=1,3)
do j=1,3
  write(*,*) x(j)
end do

end program main
2楼2009-06-03 11:50:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
你是想知道问题出现在哪里,还是想知道怎么找错误,
这个不是在地图上找某个城市那么公式化和简单化,有一般的调试流程,但有很大的经验成份,还有对该程序的熟悉程度以及算法,程序理论依据的熟悉程度。不是你想象的那么简单。
3楼2009-06-03 21:38:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

具体的错误以及问题,可以帮你解决,某些问题,不可言传。
4楼2009-06-03 21:39:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

icecream8508

金虫 (著名写手)

先谢谢楼上的。
一是先想找错误
二是,想知道怎么找错误的?自己已经检查了好几遍了。这个还是一个初步的迭代。我自己的问题要比这复杂的多,头大。

再者,对于我们刚接触的fortran来说,应该怎么做,最好哪?!
5楼2009-06-03 22:28:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

argo

铁杆木虫 (著名写手)

上善若水

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
wangen994(金币+1,VIP+0):谢谢你,鼓励交流 6-4 09:41
你上面的程序有问题吧。
如果我没理解错,你每次迭代都是从x(1)=0,x(2)=0,x(3)=0开始,算了一次之后,还是从这个开始。
按照我的理解,应该是先给出第一组的初值,如x(1,1),x(2,1),x(3,1),计算出第二组值x(1,2),x(2,2),x(3,2),如果这两组值的差的最大绝对值超过精度要求,把第二次值做为初值,计算第三组值,再比较二三组值的差,再判断要不要进行下一次迭代。
居善地,心善渊,与善仁,言善信,正善治,事善能,动善时。
6楼2009-06-04 09:06:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

icecream8508

金虫 (著名写手)

楼上的,多谢回复啊。就这个迭代。整的我头疼。
按照你的意思,就是采用二维数组来存储求解的值。
我原本的意思是也是采用二维数组来存放x值,一个代表着方程的个数,一个是用来表征迭代的次数。不过,因为迭代的次数不知道,觉得这种方法也过于繁琐了。

再者,上面的迭代实际是gauss-seidel迭代。
我写错了。

另外,我也知道迭代,就是每次迭代把上次迭代的值引入计算。
可是在实际的程序编写中,确是实现错误的。
7楼2009-06-04 09:25:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

argo

铁杆木虫 (著名写手)

上善若水


小木虫(金币+0.5):给个红包,谢谢回帖交流
应该是你对整个编程的思想还没有理得很清楚,我看了半天,没看懂那个S是干什么用,当然我没有去查gauss-seidel是什么意思,或许是这里用到的吧
居善地,心善渊,与善仁,言善信,正善治,事善能,动善时。
8楼2009-06-04 09:29:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

argo

铁杆木虫 (著名写手)

上善若水


wangen994(金币+1,VIP+0):谢谢交流 6-4 09:43
woshilsh(金币+0,VIP+0):有空专门答疑,嘿嘿!奖励多多哦 6-4 16:28
不一定用二维数组,用两组就够了,如x0(3)与x(3),迭代前的放在x0(3)中,迭代后的放在x(3)中,每次迭代前,把上一次迭代后的x(3)赋到新一次迭代的x0(3)中即可。当然这时候要把新的x(3)先归零一下
居善地,心善渊,与善仁,言善信,正善治,事善能,动善时。
9楼2009-06-04 09:32:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

argo

铁杆木虫 (著名写手)

上善若水

★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
woshilsh(金币+4,VIP+0):感谢回答,常来!挺认真滴!谢谢哈 6-4 16:27
试一试看以下代码是否可行:
CODE:
!******* 练习迭代算法*******

!******** 所需要求解的方程******
!  x(1)=0.2*x(2)+0.1*x(3)+0.3
!   x(2)=0.2*x(1)+0.1*x(3)+1.5
!   x(3)=0.2*x(1)+0.1*x(2)+2
  
!******* 1.jACOBI 迭代*******
program main

real B(3)
real A(3,3),x(3),s(30),x0(3)
integer N,k
integer m
real(kind=8) :: eps
integer,parameter:: NM=1000

eps=1.0e-6
!***********系数矩阵*************
B(1)=0.3
B(2)=1.5
B(3)=2.0

A(1,1)=0.0
A(1,2)=0.2
A(1,3)=0.1
A(2,1)=0.2
A(2,2)=0.0
A(2,3)=0.1
A(3,1)=0.2
A(3,2)=0.1
A(3,3)=0.0

!***************迭代公式************
Do i=1,3
        x(i)=0.0
end do

Do k=1,NM,1
        Do i=1,3
          x0(i)=x(i)
        enddo
        do i=1,3
                x(i)=a(i,1)*x0(1)+a(i,2)*x0(2)+a(i,3)*x0(3)+b(i)
        enddo  
        If((abs(x0(1)-x(1))           exit
        end if
        write(*,*) x
end do
end program main

居善地,心善渊,与善仁,言善信,正善治,事善能,动善时。
10楼2009-06-04 10:02:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 icecream8508 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 调剂310 +7 温柔的晚安 2026-03-25 8/400 2026-03-29 01:09 by 我是小康
[考研] 一志愿北京化工大学材料与化工(085600)296求调剂 +12 稻妻小编 2026-03-26 12/600 2026-03-29 01:04 by 我是小康
[考研] 各位老师好,我的一志愿为北京科技大学085601材料专硕 +7 Koxui 2026-03-28 7/350 2026-03-29 00:58 by 我是小康
[考研] 356求调剂 +3 gysy?s?a 2026-03-28 3/150 2026-03-29 00:33 by 544594351
[考研] 本科双非材料,跨考一志愿华电085801电气,283求调剂,任何专业都可以 +6 芝士雪baoo 2026-03-28 7/350 2026-03-28 21:40 by zhq0425
[考研] 315求调剂 +4 akie... 2026-03-28 5/250 2026-03-28 21:05 by zhq0425
[考研] 一志愿华北电力大学能动专硕,293,求调剂 +3 15537177284 2026-03-23 5/250 2026-03-28 16:11 by xxxsssccc
[考研] 275求调剂 +10 Micky11223 2026-03-25 14/700 2026-03-28 15:48 by Micky11223
[考研] 346求调剂 一志愿070303有机化学 +3 萝卜炖青菜 2026-03-28 3/150 2026-03-28 14:11 by 唐沐儿
[考研] 求化学调剂 +4 wulanna 2026-03-28 4/200 2026-03-28 13:37 by 唐沐儿
[考研] 085701环境工程,267求调剂 +16 minht 2026-03-26 16/800 2026-03-28 12:16 by zllcz
[考研] 283求调剂 +7 A child 2026-03-28 7/350 2026-03-28 12:05 by zllcz
[考研] 一志愿上海理工能源动力(085800)310分求调剂 +3 zhangmingc 2026-03-27 4/200 2026-03-27 19:01 by 给你你注意休息
[考研] 求调剂 +4 零八# 2026-03-27 4/200 2026-03-27 18:07 by yu221
[考研] 考研调剂 +4 Sanmu-124 2026-03-26 4/200 2026-03-27 17:49 by kiokin
[考研] 312求调剂 +9 上岸吧ZJY 2026-03-22 13/650 2026-03-27 11:24 by sanrepian
[考研] 调剂推荐 +5 清酒714 2026-03-26 6/300 2026-03-27 11:12 by 不吃魚的貓
[考研] 求调剂323材料与化工 +7 1124361 2026-03-24 7/350 2026-03-27 10:22 by wangjy2002
[考研] 一志愿吉林大学材料与化工303分求调剂 +4 为学666 2026-03-24 4/200 2026-03-25 11:27 by BruceLiu320
[考研] 336化工调剂 +4 王大坦1 2026-03-23 5/250 2026-03-23 18:32 by allen-yin
信息提示
请填处理意见