| 查看: 3251 | 回复: 9 | ||
[求助]
为什么Fortran调试无错误运行不出结果 已有2人参与
|
|
program main parameter n=600 double precision u(0:n),u1(0:n),x0,x1,x,t0,t1,h,dett,lambda,y(0:n) integer i,j x0=0.0d0 x1=6.0d0 t0=0.0d0 lambda=0.3d0 t1=0.5d0 h=0.01d0 dett=0.003d0 x=x0 !do i=0,n,1 !if(i<=250)then !y(i)=1.0 !else ! y(i)=0 !end if ! end do do i=0,n,1 if(x>=1 .and. x<=3) then u(i)=1.0d0 else u(i)=0.0d0 end if x=x+h end do open(1,file="yingfeng.dat" ![]() t=t0+dett x=x0 do while(t<=t1) x=x0+h do j=1,n,1 u1(j)=u(j)-3*lambda*(u(j)-u(j-1)) if(abs(t-0.5)<=0.0001)then write(1,*)x,u1(j),y(j) end if x=x+h end do do j=1,n-1 u(j)=u1(j) u(0)=1 u(1)=0 end do t=t+dett end do stop end 求大神指导,为啥这个程序运行后yingfeng.dat文件里面啥数据都没有 |
» 猜你喜欢
求标准粉末衍射卡号 ICDD 01-076-1802
已经有0人回复
新西兰Robinson研究所招收全奖PhD
已经有0人回复
物理学I论文润色/翻译怎么收费?
已经有211人回复
石墨烯转移--二氧化硅衬底石墨烯
已经有0人回复
笼目材料中量子自旋液体基态的证据
已经有0人回复
数学教学论硕士可以读数学物理博士吗?
已经有0人回复
德国亥姆霍兹Hereon中心汉堡分部招镁合金腐蚀裂变SCC课题方向2026公派博士生
已经有4人回复
澳门大学 应用物理及材料工程研究院 潘晖教授课题组诚招博士后
已经有11人回复
求助NH4V4O10晶体的CIF文件
已经有0人回复
英国全奖博士招聘-深度学习与量子物理
已经有0人回复
间接带隙半导体有效质量求助
已经有0人回复
» 本主题相关价值贴推荐,对您同样有帮助:
Intel fortran与visual fortran
已经有11人回复
FORTRAN
已经有0人回复
Fortran
已经有7人回复
已经安装studio,为什么还是不能安装Fortran呢?
已经有0人回复
开始学习FORTRAN,结果杀毒软件总是认为生成的exe程序是木马,要求删掉,为什么呢?
已经有7人回复
fortran
已经有4人回复
Fortran77 代码调试中提示有Syntax error,但却不知道为什么出错。望高人指点!
已经有4人回复
fortran循环求助
已经有3人回复
Fortran 求解复数矩阵SVD时,用到cgesvd,结果与matlab不同,为什么?
已经有15人回复
fortran里的intrisic function: precision()x结果表示什么意思
已经有5人回复
fortran 程序修改后改回来,计算结果不同???为什么会这样
已经有2人回复
data 给fortran 的二维数组如何命名?为什么老出错,解决送金币
已经有1人回复
fortran输出结果为0
已经有3人回复
fortran 程序有write和没有write两种情况计算的结果为什么会不一样?
已经有14人回复
fortran输出求助
已经有6人回复
帮忙把公式转化为FORTRAN子程序
已经有6人回复
fortran中计算数据写入文本为 NAN的问题
已经有4人回复
刚开始学Fortran 帮忙看一下这个程序 为什么算不出结果
已经有3人回复
fortran断点
已经有2人回复
fortran 运行问题
已经有2人回复
【求助】请问有什么软件可以将C语言代码转换为fortran吗?
已经有7人回复
bennett_14
木虫 (正式写手)
- 应助: 11 (小学生)
- 金币: 7204.8
- 红花: 4
- 沙发: 1
- 帖子: 932
- 在线: 421.5小时
- 虫号: 1073877
- 注册: 2010-08-13
- 性别: GG
- 专业: 计算机科学

2楼2016-01-02 16:09:59
bennett_14
木虫 (正式写手)
- 应助: 11 (小学生)
- 金币: 7204.8
- 红花: 4
- 沙发: 1
- 帖子: 932
- 在线: 421.5小时
- 虫号: 1073877
- 注册: 2010-08-13
- 性别: GG
- 专业: 计算机科学

3楼2016-01-02 16:35:26
4楼2016-01-02 17:51:51
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
夜月丨噩梦: 金币+30, ★★★很有帮助 2016-01-05 11:42:26
夜月丨噩梦: 金币+30, ★★★很有帮助 2016-01-05 11:42:26
|
你的程序中最重要的部分如下: double precision ...t0,t1,...,dett... t0=0.0d0 t1=0.5d0 dett=0.003d0 ... t=t0+dett do while(t<=t1) ... if(abs(t-0.5)<=0.0001) then write(1,*)x,u1(j),y(j) endif ... 可以看到,这个程序能否向yingfeng.dat中写入数据的关键是:t的数值相距0.5的差值是否小到0.0001以内,和其它问题完全无关。 如果分析我给出的这些语句的话,就会发现问题所在: t从0.003开始累加,要和0.5比???能达到相差小于0.0001的程度么? 相当于500/3,得到的余数是多少? 条件达不到,当然不会输出。程序在逻辑上是没错的。 希望楼主能再审视一下相应的条件,让程序输出你要的结果。 另外,希望楼主能注意以下几个方面: 1 t1和t0都是双精度,但是t却没有定义啊!!!按照默认的I-N规则,t是单精度型,可能会引起误差,从而引起不必要的麻烦哦。 2 open之后没有对应的close语句,这点很不好!!很不好!!很不好!!楼主目前写的是小程序不觉得,程序一大,很容易搞混的,到时候想写这个文件却写到那个文件去了,或者想写却发现文件没打开之类的。而且这种错误会很难调试。 3 stop语句一般只用在这样两个方面:调试程序 或 出错后的强行停止。不建议用stop来结束程序,让程序自己运行完毕后停止岂不更好? 4 前面有program xxx的话,最后建议用end program xxx结束。这样构造一个封闭的block,今后也会很容易读代码,便于维护管理。 5 楼主的程序使用了默认的I-N规则,建议使用Implicit None,取消默认规则,使每个变量都要定义类型(和C一样强类型)。使用默认规则的话,一旦有什么问题都是非常隐蔽极难调试的。 最后,楼主如果有程序方面的问题,欢迎移步“程序语言”版块提问。 |
» 本帖已获得的红花(最新10朵)

5楼2016-01-02 19:32:34
bennett_14
木虫 (正式写手)
- 应助: 11 (小学生)
- 金币: 7204.8
- 红花: 4
- 沙发: 1
- 帖子: 932
- 在线: 421.5小时
- 虫号: 1073877
- 注册: 2010-08-13
- 性别: GG
- 专业: 计算机科学

6楼2016-01-03 07:16:55
7楼2016-01-03 09:34:43
8楼2016-01-04 09:18:34
|
dett相当于步长,t0+dett是初值,0.0001是阈值。 这些都要根据你要计算解决的问题来啊。 程序的关键是解决问题,所以要先理解透问题和你的需求。 按照t<=t1和abs(t-0.5)<=0.0001来看,你是希望得到最后一步或几步的结果。 那么你希望得到哪一步/几步?这几步的步长是希望大一点粗一点,还是小一点精一点? 比如,如果其它条件都不变,只是希望得到最后5步的结果的话,甚至可以步长设为0.00002,这样最后会有6步的结果因符合(abs(t-0.5)<=0.0001)的条件而输出。 但是你要计算太多遍了,这样做是否值得? 如果不需要如此精密的话,是否可以修改阈值为(abs(t-0.5)<=0.1),这样就可以在少算很多的情况下得到结果? 这些都是你自己需要去考虑的。 |

9楼2016-01-04 17:02:08
10楼2016-01-05 11:05:56












回复此楼
夜月丨噩梦