| 10 | 1/1 | 返回列表 |
| 查看: 3369 | 回復: 9 | ||
[求助]
為什么Fortran調(diào)試無錯誤運行不出結(jié)果 已有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文件里面啥數(shù)據(jù)都沒有 |
木蟲 (正式寫手)

木蟲 (正式寫手)

|
你的程序中最重要的部分如下: 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中寫入數(shù)據(jù)的關(guān)鍵是:t的數(shù)值相距0.5的差值是否小到0.0001以內(nèi),和其它問題完全無關(guān)。 如果分析我給出的這些語句的話,就會發(fā)現(xiàn)問題所在: t從0.003開始累加,要和0.5比???能達到相差小于0.0001的程度么? 相當于500/3,得到的余數(shù)是多少? 條件達不到,當然不會輸出。程序在邏輯上是沒錯的。 希望樓主能再審視一下相應(yīng)的條件,讓程序輸出你要的結(jié)果。 另外,希望樓主能注意以下幾個方面: 1 t1和t0都是雙精度,但是t卻沒有定義啊。!按照默認的I-N規(guī)則,t是單精度型,可能會引起誤差,從而引起不必要的麻煩哦。 2 open之后沒有對應(yīng)的close語句,這點很不好!很不好!很不好。侵髂壳皩懙氖切〕绦虿挥X得,程序一大,很容易搞混的,到時候想寫這個文件卻寫到那個文件去了,或者想寫卻發(fā)現(xiàn)文件沒打開之類的。而且這種錯誤會很難調(diào)試。 3 stop語句一般只用在這樣兩個方面:調(diào)試程序 或 出錯后的強行停止。不建議用stop來結(jié)束程序,讓程序自己運行完畢后停止豈不更好? 4 前面有program xxx的話,最后建議用end program xxx結(jié)束。這樣構(gòu)造一個封閉的block,今后也會很容易讀代碼,便于維護管理。 5 樓主的程序使用了默認的I-N規(guī)則,建議使用Implicit None,取消默認規(guī)則,使每個變量都要定義類型(和C一樣強類型)。使用默認規(guī)則的話,一旦有什么問題都是非常隱蔽極難調(diào)試的。 最后,樓主如果有程序方面的問題,歡迎移步“程序語言”版塊提問。 |

木蟲 (正式寫手)

|
dett相當于步長,t0+dett是初值,0.0001是閾值。 這些都要根據(jù)你要計算解決的問題來啊。 程序的關(guān)鍵是解決問題,所以要先理解透問題和你的需求。 按照t<=t1和abs(t-0.5)<=0.0001來看,你是希望得到最后一步或幾步的結(jié)果。 那么你希望得到哪一步/幾步?這幾步的步長是希望大一點粗一點,還是小一點精一點? 比如,如果其它條件都不變,只是希望得到最后5步的結(jié)果的話,甚至可以步長設(shè)為0.00002,這樣最后會有6步的結(jié)果因符合(abs(t-0.5)<=0.0001)的條件而輸出。 但是你要計算太多遍了,這樣做是否值得? 如果不需要如此精密的話,是否可以修改閾值為(abs(t-0.5)<=0.1),這樣就可以在少算很多的情況下得到結(jié)果? 這些都是你自己需要去考慮的。 |

| 10 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 求調(diào)劑 +5 | 十三加油 2026-03-21 | 5/250 |
|
|---|---|---|---|---|
|
[考研] 材料學碩333求調(diào)劑 +3 | 北道巷 2026-03-18 | 3/150 |
|
|
[考研] 307求調(diào)劑 +10 | 冷笙123 2026-03-17 | 10/500 |
|
|
[考研] 材料 336 求調(diào)劑 +3 | An@. 2026-03-18 | 4/200 |
|
|
[考研] 華東師范大學-071000生物學-293分-求調(diào)劑 +3 | 研究生何瑤明 2026-03-18 | 3/150 |
|
|
[考研] 304求調(diào)劑 +6 | 曼殊2266 2026-03-18 | 6/300 |
|
|
[考研] 一志愿西南交大,求調(diào)劑 +5 | 材化逐夢人 2026-03-18 | 5/250 |
|
|
[考研] 材料專碩英一數(shù)二306 +7 | z1z2z3879 2026-03-18 | 7/350 |
|
|
[考研] 308求調(diào)劑 +3 | 阿姐阿姐家啊 2026-03-18 | 3/150 |
|
|
[考研] 324求調(diào)劑 +5 | lucky呀呀呀鴨 2026-03-20 | 5/250 |
|
|
[考研] 317求調(diào)劑 +5 | 申子申申 2026-03-19 | 9/450 |
|
|
[考研] 295材料求調(diào)劑,一志愿武漢理工085601專碩 +5 | Charlieyq 2026-03-19 | 5/250 |
|
|
[考研] 材料學求調(diào)劑 +4 | Stella_Yao 2026-03-20 | 4/200 |
|
|
[考研] 353求調(diào)劑 +3 | 拉鉤不許變 2026-03-20 | 3/150 |
|
|
[考研] 266求調(diào)劑 +5 | 陽陽哇塞 2026-03-14 | 10/500 |
|
|
[考研] 301求調(diào)劑 +4 | A_JiXing 2026-03-16 | 4/200 |
|
|
[論文投稿] 有沒有大佬發(fā)小論文能帶我個二作 +3 | 增銳漏人 2026-03-17 | 4/200 |
|
|
[考研] [導師推薦]西南科技大學國防/材料導師推薦 +3 | 尖角小荷 2026-03-16 | 6/300 |
|
|
[考研] 070300化學學碩求調(diào)劑 +6 | 太想進步了0608 2026-03-16 | 6/300 |
|
|
[考研] 085601材料工程315分求調(diào)劑 +3 | yang_0104 2026-03-15 | 3/150 |
|