討論區快速選單
知識庫快速選單
網路投保旅行平安險 政府補助!學嵌入式+物聯網 傑米的攝影旅遊筆記
[ 回上頁 ] [ 討論區發言規則 ]
有一個求根的問題..
更改我的閱讀文章字型大小
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/12 上午 11:40:38
這邊的程式是我用R寫的..
x <- rnorm(1000)
edf <- function(x)
 function(c) {
sum(x <= c)/length(x)
}
##another 反求c2
antcov.prr <- function(c1, pr=0.05) {
uniroot(function(c1) (edf(x)(c1) - edf(x)(-c1) - 0.05),
c(min(x), max(x)))
}
這個問題像是P(-c1<x<c1)=0.05 , x已知, 想要求解c1之值..
不過我老師說要用Fortran改寫,我跟本不知道求根函數(In IMSL)要怎麼呼叫? 使用?
麻煩大家喔!!
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/12 下午 08:15:30
你的X是呈那種分佈?
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/12 下午 09:00:45
呼..這是個問題..x並沒有分配..
因為這是bootstrap出來後的結果...Hence, 我們不能假設分配已知(雖然跟本就是T分配)
呼...麻煩您...
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/12 下午 09:53:13
我沒有用過R, 可以請你把問題用文字再說明一次嗎?
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/12 下午 10:48:08
沒問題..現在我simulation 出來後有一個樣本分配..
長得像是常態分配(mu=0,sd=2)..現在呢! 我要尋找我的臨界點..必須要符合
Probability(-c<x<c)=0.05, where c=-c對稱於0
因此呢! 想要解根求c..
因為數值方法我不熟,所以我用了統計上面類似CDF的概念來寫function
所以呢! 問題就變成Fun(c)-Fun(-c)=0.05求解c...
這樣的解釋可以嗎?! 非常感激!! 謝謝您的回應..
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/1/18 上午 10:11:33
Without assuming the type of distribution for X, you can try to use the following approach to get the answer:

1. sort the X ascendingly
2. compute the cumulative number of observation stating from zero
3. fine the cutting point where the cumulated number of observation is 2.5% (=5% / 2) of the number of positive observation

作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/18 下午 02:10:21
恩恩 我懂您的意思..不過現在我最大的問題在於如何在Fortran中..
去寫function找cutting point呢??!!
對不起喔!! 學的不精有賴前輩給我指導~~
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/19 上午 10:44:53
對哩! 前輩您的第2個step我有點不懂為何要降下手阿??!!
麻煩您幫我解釋一下好嗎?!
Best Regards
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/1/19 上午 11:11:37
假設 X(1) , …, X(500) 內存由小到大排列的X值, 而且X大於零
另外定義Y(1), …, Y(500)

Do I = 1, 500
   Y(I) = Float(I)/5Float(500)
EndDo

將 X 與 Y 併列, 即可看出由零到 X(K) 之間的樣本比例為 Y(K)

另外, 如果你有IMSL, 可以看看EQITL的功能。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/23 下午 10:05:36
對哩! 請問一下我還是不知道怎麼下手去找cutting point~~
對不起喔~~ 小弟愚蠢..能否請您給我個小例子參考呢?!
Best Regards
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/1/24 下午 11:15:10
假設 X(245)=2.10 Y(245)=.9821 , 則我們可以說 98.21% 樣本分布於0 和 2.10中間

如果你要找95% 的cutting point, 只要在Y(*) 中找到 0.95所在的位置, 例如 Y(212) = 0.95 則X(212) 的值即是你要的cutting point

也有可能 Y(211)=0.9450 Y(212)=0.9550, 這時你可以用內插法找到答案
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/28 上午 08:21:30
^^ 大哥 還有一個問題想請教一下...
我試出來了..不過粉不妙的是我在假設我的simulation count=1時把他output在txt上面By 手工看出來的, however, 如果我現在需要在整個程式中請電腦幫我尋找那個cutting point..
那該如何下手呢?! 非常感謝您!! :)
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/1/28 下午 10:15:55
The simplest example is :

Target = 0.05 ! Just an example

Do I = 1, 500
  IF(Y(I).EQ.Target) Then
    CuttingPoint = X(I)
    Exit
  ELSE IF(Y(I).LT.Target .AND. Y(I+1).GT. Target) Then
    Target = X(I) +(CuttingPoint-Y(I))/(Y(I+1)-Y(I))*(X(I+1)-X(I))
    Exit
  End IF
End Do
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/29 上午 08:31:25
Cool~~ 我知道了~~ 麻煩您喔~~ ^^ 有問題再請教您....感激不已....
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/30 下午 04:08:29
大哥您好我又遇到個小問題囉!一開始我的資料從-0.3~0.3依序sorting..
然而,當我想取正值時,我的寫法中新的Matrix "tt"..沒辦法把不是大於等於0的數字拿掉..
, otherwise, 取得真實array的長度是用"len_trim"嗎??!!
這邊是我的program可以幫我修正一下嗎?!
 DO j=1,b
  tt(j)=0
 End DO
DO j=1,b
 IF(t(j)<0) then
    cycle
 Else
    tt(j)=t(j)
    End IF
End Do
麻煩您~~
Best Regards
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/1/30 下午 11:36:04
!, otherwise, 取得真實array的長度是用"len_trim"嗎??!!
這個要用 SIZE, Len_Trim 是用於 String 的
!
jcount = 0
!
!DO j=1,b
! IF(t(j)<0) then
! cycle
! Else
    jcount = jcount + 1
    tt(jcount)=t(j)
! End IF
End Do
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/30 下午 11:59:12
恩恩 我的問題就是發生再於一開始我set , real :: tt(1000)
不過後來我陣列的後半段元素值都是0..那如果不想要這堆0值..
一開始設定該用可變陣列嘛??!!
麻煩您~~ ^^
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/31 上午 12:05:09
real,allocatable:: tt(:)
allocate(tt(b))
我是降設定的, 不過粉不妙的是矩陣還是有b那摸大...
可是我的正值根本就沒那摸大阿?!
這邊要如何解決呢?!
麻煩您~~ ^^
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/1/31 上午 12:31:31
USE

ALLOCATE TT(COUNT(T.GE.0.0))

COUNT is a function to get the number of array element meets the condition specified in the COUNT(...) statement

作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/31 上午 10:08:09
不過我試了後,出現一個錯誤:
C:\Program Files\DevStudio\MyProjects\0131\1.f90(225) : Error: The highest data type rank permitted is INTEGER(KIND=4). [COUNT]
呼! 這是為什麼呢?!
麻煩您~~ ^^
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/1/31 下午 08:16:03
我不知道你的編碼出問題的理由, 但是我用下面的編碼測試時, 可以的到正確的結果﹕

Implicit None
Real T(100)
Real, ALLOCATABLE :: TT(:)
Integer :: N
Do N = 1,100
T(N) = Float(N)
End Do
T(10)=-1.24
T(20) = -2.3
Print *, Count(T.GE.0.0)
ALLOCATE (TT(COUNT(T.GE.0.0)))
Print *,"Size of TT = ",Size(TT)
TT = PACK(T, MASK=T.GE.0.0)
Print *,TT
End
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/1/31 下午 10:05:01
^^ 粉奇怪我自己也不知道錯在哪邊:P
Anyway, 我會再仔細檢查一下!! 多謝您的幫忙喔 ~~ 感激...
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/1 下午 05:11:04
前輩! 您好! 還有一問題請教,當我增加我的simulation count時!
complier會出現一個錯誤訊息:
"forrtl : server<151> : allocatable array is already allocated"
請問一下這該怎麼解決呢??!!
麻煩您~~ ^^
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/1 下午 07:29:16
先 DEALLOCATE 再 ALLOCATE 即可
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/1 下午 09:13:13
嗯 ! 我本來就降試的阿(有把DEALLOCATE放上去)~~
Btw, 再ALLOCATE這段要怎麼放呢?!
可以麻煩您幫我修改一下嗎?!
sim=1
DO G=1,sim
......
  .....
    ALLOCATE (matrixx(COUNT(T.GE.0.0),2))
Do j=1,Size(TT)
 matrixx(j,1)=TT(j)
 matrixx(j,2)=YY(j)
End Do
  DEALLOCATE( matrixx)
....
End DO
 stop
end
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/2 上午 05:01:48
在下面這行
>'forrtl : server<151> : allocatable array is already allocated'
的下面, 應該還有一些信息 像﹕
Image PC Routine Line Source
T0201.exe 00408869 Unknown Unknown Unknown
T0201.exe 004086C7 Unknown Unknown Unknown
T0201.exe 004078A4 Unknown Unknown Unknown
T0201.exe 0040337A Unknown Unknown Unknown
T0201.exe 004012F4 MAIN$T0201 15 T0201.f90
T0201.exe 004404E9 Unknown Unknown Unknown
T0201.exe 00428969 Unknown Unknown Unknown
KERNEL32.dll 7C59893D Unknown Unknown Unknown

你可以把這些信習也post一下嗎?
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/2 上午 09:16:48
嗯..不知道為何我的計憶體亦位..
有個錯誤訊息: forrtl : severe : Program Exception access violation
我想應該是我釋放可變矩陣的地方出錯哩:'(
可以救救我嘛~~
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/2 上午 09:57:56
我看這個問題和Array的 Allocate/deallocate 有關, 請你先提供我對你前一個問題回應中想要知道的信息。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/2 上午 10:38:32
沒有這些訊息說??!! 自從我加上了DEALLOCATE後..
就只出現" Program Exception access violation"...
好奇怪喔..我想八成是我釋放計憶體出現的問題...
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/2 上午 10:50:53
OK, 那麼在
'Program Exception access violation'
之外還有那些信息?
我問這些的原因是這些信息可能告知引起問題的statement是那一個。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/2 上午 11:00:46
呼..大哥..粉神奇的complier上面只出現了"
forrtl : severe : Program Exception access violation
press any key to continue"
這段文字...我已經被這個問題困擾了好幾天喔 :'(
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/2 上午 11:19:18

>呼..大哥..粉神奇的complier上面只出現了'
>forrtl : severe : Program Exception access violation
>press any key to continue'
>這段文字...我已經被這個問題困擾了好幾天喔 :''(

看來你只能用Debugger來找出問題了!

Program Exception access violation的原因是Array的index超出範圍。 在你的情況下, 最可能的是在一個Array沒有Allocate之前就使用它。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/2 下午 06:38:56
>:< 可以幫我忙嗎?!
我真的對它無言哩~~
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/2 下午 08:45:54
在CVF之內, 按F5 即可啟動Debugger. 當它碰到問題時, 會出現一個Dialog box. 將這個box關閉之後, 在左手邊你可以看到source code listing. 在引起問題的statement的左邊會有一個黃顏色的箭頭。

同時在左下角的panel, 會出現各個變數在當時的數值。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/2 下午 09:32:51
對不起..我還是看不出來自己那邊錯誤??!!
sim=10
DO G=1,sim
...
  ...
call Tanderson( ytbar,yrbar,vard,t)
call QUICK(t,b)
write(20,*) Count(T.GE.0.0)

ALLOCATE (TT(COUNT(T.GE.0.0)))
jcount = 0
DO j=1,b
 IF(t(j)<0) then
 cycle
 Else
    jcount = jcount + 1
    TT(jcount)=t(j)
 End IF
End Do
DEALLOCATE(TT)

DO j=1,Size(TT)
 YY(j)=0
END DO
DO j=1,Size(TT)
 YY(j)=Float(j)/Float(Size(TT))
END DO
write(21,"(F9.4)") YY

ALLOCATE (matrixx(COUNT(T.GE.0.0),2))
Do j=1,Size(TT)
 matrixx(j,1)=TT(j)
 matrixx(j,2)=YY(j)
End Do
DEALLOCATE(matrixx)

do 10 j=1,Size(TT)
     write(22, "(2F9.4)") matrixx(j,1), matrixx(j,2)
10 continue
...
  ...
END DO
 stop
end

Debug後出現在下面視窗的message為:
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
First-chance exception in 0202.exe: 0xC0000005: Access Violation.
The thread 0x148 has exited with code 0 (0x0).
The program 'C:\Program Files\DevStudio\MyProjects\0202\Debug\0202.exe' has exited with code 0 (0x0).

這到底是怎麼一回事阿?! 麻煩您!! ^^
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/2 下午 10:26:32
你的code中有二個DEALLOCATE. 你要注意在DEALLOCATE之後, 被DEALLOCATE的Array即不存在了。 你在TT and matrixx被deallocate後又用到它們, 我想這是問題的本原。 你的code可以簡化成﹕(DEALLOCATE移至Do-Loop結束之前)

sim=10
DO G=1,sim
  ...
  ...
  call Tanderson( ytbar,yrbar,vard,t)
  call QUICK(t,b)
!
  JCOUNT = Count(T.GE.0.0)
  write(20,*) JCOUNT
  ALLOCATE (TT(JCOUNT))
  ALLOCATE (YY(JCOUNT))
  TT = PACK(T, MASK=T.GE.0.0)
!
  DO j=1,JCOUNT
    YY(j)=Float(j)/Float(JCOUNT)
  END DO
  write(21,"(F9.4)") YY
!
  ALLOCATE (matrixx(JCOUNT,2))
  Matrixx(:,1) = TT
  Matrixx(:,2) = YY
!
  Do j=1,JCOUNT
     write(22, "(2F9.4)") matrixx(j,1), matrixx(j,2)
  End Do
  ...
  ...
  DEALLOCATE (TT)
  DEALLOCATE (YY)
  DEALLOCATE (Matrixx)
END DO
stop
end
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/2 下午 10:53:59
哇! 前輩果然厲害..我看好幾天都沒發現到..
您一眼就看透哩...小弟感激不盡...:) 謝謝囉!!
有機會請您喝個咖啡好哩~~ ^^
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/5 下午 09:05:50
大哥您好, 再請教一個問題喔...
在這段程式中我試著改便Target的宣告..
real, parameter :: Target=0.025
不過出現一個錯誤訊息..
C:\Program Files\DevStudio\MyProjects\0205\1.f90(226) : Error: This PARAMETER constant name is invalid in this context. [TARGET]
    Target = TT(j) +abs((CuttingPoint-YY(j))/(YY(j+1)-YY(j)))*(TT(j+1)-TT(j))
----^
Error executing df.exe.

其實因為我原本宣告real Target
     Target=0.025
不過明明我的array TT & YY 都是正值..不過出來的Cuttingpoint居然全部都是不對的負值..
這才是我頭痛的地方阿?!
麻煩您~~ 祝您新年快樂..
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/6 上午 03:58:21
1: FORTRAN program 中的 parameter的值是不能更改的,

2: 我在一月二十八日post的code有錯誤,正確的應是
Do I = 1, 500
  IF(Y(I).EQ.Target) Then
    CuttingPoint = X(I)
    Exit
  ELSE IF(Y(I).LT.Target .AND. Y(I+1).GT. Target) Then
    CuttingPoint = X(I) +(Target-Y(I))/(Y(I+1)-Y(I))*(X(I+1)-X(I))
    Exit
  End IF
End Do

  引起你的困擾, 謹致歉意。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/7 上午 08:13:50
大哥..千萬別這麼說..您願意教我這個新手上路我就非常感動哩!!
謝謝您囉..我可以放心去過個年囉!!
也祝您新年快樂,萬事如意!! ^^
ps.可以麻煩您給我您的E-mail嗎?! 不然這樣對話好像對其他網友...我的: weibowei@yahoo.com.tw
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/7 上午 10:40:34
>:< 話說的太早哩!!
我終於發現我的問題所在啦!! for example:
  X Y
0.00 0.01
0.00 0.02
0.00 0.03
0.01 0.04
... ...
0.04 0.58
0.04 0.59
0.04 0.60

因為我的X陣列中有許多的Tie, as a result of this, 我的CuttingPoint會出現負值..
請問前輩...這各問題有辦法解決嗎??!!
麻煩您..謝謝... ^^
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/8 上午 02:31:37
不對呀, 用你給的X 和 Y的值, 當Target = 0.585 時,CuttingPoint應當是0.4, 請再檢查一下你的code.

不過如果X的值是由你產生的, 小數點後你應該多留幾位。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/8 下午 12:55:42
那我再來試看看好哩!!
^^ 先祝您新年快樂阿~~
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/10 上午 09:15:07
新年快樂! 不過我的頭粉痛...我重新檢查了我的Program後真的不知道為何我的Cuttingpoint跑出來會全都是負值說..>'<
可以麻煩您幫我看一下嗎?!
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/10 下午 08:24:00

>新年快樂! 不過我的頭粉痛...我重新檢查了我的Program後真的不知道為何我的Cuttingpoint跑出來會全都是負值說..>''<
>可以麻煩您幫我看一下嗎?!

請把code中決定CuttingPoint的那一部分再post一次。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/10 下午 08:50:42
Target=0.025
!開始simulation
sim=10
DO G=1,sim
...
  ...
call Tanderson( ytbar,yrbar,vard,t)
!這邊之前都是在做運算得到"t"
call QUICK(t,b)
!排序

JCOUNT = Count(T.GE.0.0)
write(20,*) JCOUNT
ALLOCATE (TT(JCOUNT))
ALLOCATE (YY(JCOUNT))
TT = PACK(T, MASK=T.GE.0.0)

DO j=1,b
 IF(t(j)<0) then
 cycle
 Else
    JCOUNT = JCOUNT + 1
    TT(JCOUNT)=t(j)
 End IF
End Do
write(11,*) "Size of TT = ",Size(TT)
write(11,"(F9.4)") TT

DO j=1,JCOUNT
 YY(j)=0
END DO
DO j=1,JCOUNT
    YY(j)=Float(j)/Float(JCOUNT)
END DO

ALLOCATE (matrixx(JCOUNT,2))
  Matrixx(:,1)=TT
  Matrixx(:,2)=YY

Do j=1,JCOUNT
    write(9, "(2F9.4)") Matrixx(j,1), Matrixx(j,2)
End Do

!! 粉沒道理的..我這邊的output也全都是正值阿..
Do j=1,JCOUNT
  IF(YY(j).EQ.Target) Then
    CuttingPoint = TT(j)
    Exit
  ELSE IF(YY(j) .LT. Target .AND. YY(j+1) .GT. Target) Then
    CuttingPoint = TT(j) + (Target-YY(j))*(TT(j+1)-TT(j))/(YY(j+1)-YY(j))
    Exit
  End IF
End Do

write(10,*) CuttingPoint
!不過我這邊的output全部都是負值..我看了好幾天..就是不知道該怎麼辦..
 麻煩您囉... ^^
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/10 下午 09:26:44

>Target=0.025
>!開始simulation
>sim=10
>DO G=1,sim
>...
>JCOUNT = Count(T.GE.0.0)
>write(20,*) JCOUNT
>ALLOCATE (TT(JCOUNT))
>ALLOCATE (YY(JCOUNT))
>TT = PACK(T, MASK=T.GE.0.0)
>
以下這一段應該移走。 因為上面 TT=PACK(T, Mask=T.GE.0.0) 就已經把正值的T放入TT之內。 把這段留著會使 JCOUNT 的值成為正確值的兩倍。

?????????????????????????????
>DO j=1,b
> IF(t(j)<0) then
> cycle
> Else
> JCOUNT = JCOUNT + 1
> TT(JCOUNT)=t(j)
> End IF
>End Do
?????????????????????????????
>write(11,*) 'Size of TT = ',Size(TT)
>write(11,'(F9.4)') TT
>
>DO j=1,JCOUNT
> YY(j)=0
>END DO
>DO j=1,JCOUNT
> YY(j)=Float(j)/Float(JCOUNT)
>END DO
>
>ALLOCATE (matrixx(JCOUNT,2))
> Matrixx(:,1)=TT
> Matrixx(:,2)=YY
>
>Do j=1,JCOUNT
> write(9, '(2F9.4)') Matrixx(j,1), Matrixx(j,2)
>End Do
>
>!! 粉沒道理的..我這邊的output也全都是正值阿..
>Do j=1,JCOUNT
> IF(YY(j).EQ.Target) Then
> CuttingPoint = TT(j)
> Exit
> ELSE IF(YY(j) .LT. Target .AND. YY(j+1) .GT. Target) Then
> CuttingPoint = TT(j) + (Target-YY(j))*(TT(j+1)-TT(j))/(YY(j+1)-YY(j))
> Exit
> End IF
>End Do
>
>write(10,*) CuttingPoint
>!不過我這邊的output全部都是負值..我看了好幾天..就是不知道該怎麼辦..
> 麻煩您囉... ^^
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/10 下午 09:40:27
前輩 我的數值算出來依然不對勁呢?!
after 10times simulation, my cuttingpoint value:
-7.5495243E-02
 -0.1368372
 -0.1368372
 -0.1368372
 -0.1368372
 -0.1368372
 -0.1368372
 -0.1368372
 -0.1368372
 -0.1368372
這一定不對吧!!
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/10 下午 09:56:09
By the way, 我的Matrix output出來為, for example:
   0.0000 0.0013
   0.0000 0.0025
   0.0000 0.0038
   0.0000 0.0051
   0.0000 0.0064
   0.0000 0.0076
   0.0001 0.0089
   0.0005 0.0102
   0.0007 0.0114
   0.0009 0.0127
   0.0016 0.0140
   0.0017 0.0152
   0.0020 0.0165
   0.0024 0.0178
   0.0028 0.0191
   0.0029 0.0203
   0.0029 0.0216
這是怎麼一回事阿 >:<
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/11 上午 04:31:07
我現在也看不出什麼道理, 不過你可以把最後一個Write Statement 改成﹕

Write(10,*) "G J JCOUNT TT(1) TT(*) YY(1) YY(*) Target CuttingPoint = "
Write(10,*) G, J, Jcount, TT(1), TT(Jcount), YY(1), YY(Jcount), Target, CuttingPoint

看看
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/11 上午 08:42:59
阿..這樣子找出來的Target為何等於0 ; Cuttingpoint=0.2231也是我的上界值(不可能阿).. >:<
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/11 上午 11:29:16
1。 請把code中和TARGET有關的部分再查一次
2。 JCOUNT的值合理嗎?
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/11 下午 05:09:37
Target=0.025
!開始simulation
sim=10
DO G=1,sim
...
  ...
call Tanderson( ytbar,yrbar,vard,t)
call QUICK(t,b)

JCOUNT = Count(T.GE.0.0)
write(20,*) JCOUNT
ALLOCATE (TT(JCOUNT))
ALLOCATE (YY(JCOUNT))
TT = PACK(T, MASK=T.GE.0.0)

write(11,*) "Size of TT = ",Size(TT)
write(11,"(F9.4)") TT

DO j=1,JCOUNT
 YY(j)=0
END DO
DO j=1,JCOUNT
    YY(j)=Float(j)/Float(JCOUNT)
END DO
write(8,*) YY

ALLOCATE (matrixx(JCOUNT,2))
  Matrixx(:,1)=TT
  Matrixx(:,2)=YY

Do j=1,JCOUNT
    write(9, "(2F9.4)") Matrixx(j,1), Matrixx(j,2)
End Do

Do j=1,JCOUNT
  IF(YY(j).EQ.Target) Then
    CuttingPoint = TT(j)
    Exit
  ELSE IF(YY(j) .LT. Target .AND. YY(j+1) .GT. Target) Then
    CuttingPoint = TT(j) + (Target-YY(j))*(TT(j+1)-TT(j))/(YY(j+1)-YY(j))
    Exit
  End IF
End Do

Write(10,*) "G J JCOUNT TT(1) TT(*) YY(1) YY(*) Target CuttingPoint = "
Write(10,*) G, J, Jcount, TT(1), TT(Jcount), YY(1), YY(Jcount), Target, CuttingPoint

Do j=1,JCOUNT
IF( TT(j) .LT. CuttingPoint) then
  count1=count1+1
End IF
End DO
write(6,*) count1

DEALLOCATE (TT)
DEALLOCATE (YY)
DEALLOCATE (Matrixx)

END DO
stop
end
@@@@@@@@@@@@
看了一下午還是看不出個所以然 >:< By the way, JCOUNT的值也不合理..沒道理每次都是1000, 全部的J也才1000不可能全部都是正值阿..!! Help me~~
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/11 下午 08:13:04
>看了一下午還是看不出個所以然 >:< By the way, JCOUNT的值也不合理..沒道理每次都是1000, 全部的J也才1000不可能全部都是正值阿..!! Help me~~

我得建議是在TANDRSON 和 QUICK之後, 立刻把 T的值Dump出來。 你可以把G的值設為 1 (暫時的), 也可以把樣本的數目暫時變小。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/11 下午 08:55:47
前輩, G=1後的Output為:
G J JCOUNT TT(1) TT(*) YY(1) YY(*) Target CuttingPoint =
 -1111505536 685 684 0.0000000E+00 0.1375821
  1.4619883E-03 1.000000 0.0000000E+00 -0.1093230
@@@@@@@@ @@@@@@@@ @@@@@@
These three parts should be failure~~???
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/11 下午 09:46:56
我得建議是在TANDRSON 和 QUICK之後, 立刻把 T的值Dump出來。
     @@@@@@@@@@@
     前輩 我不太懂這邊為何要降?! 麻煩您囉..
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/11 下午 09:49:00

>前輩, G=1後的Output為:
>G J JCOUNT TT(1) TT(*) YY(1) YY(*) Target CuttingPoint =
> -1111505536 685 684 0.0000000E+00 0.1375821
> 1.4619883E-03 1.000000 0.0000000E+00 -0.1093230
>@@@@@@@@ @@@@@@@@ @@@@@@
>These three parts should be failure~~???

1. 你的G是否定為整數? 因為output 中G的值 -1111505536不對; 但是如果G只是用為LOOP的指標, 而未進入任何statement, 根本的問題不在這里
2. J Jcount TT(1) TT(Jcount) YY(1) YY(Jcount)的值都合理, 只是為何Target 會變成零?

3. 如果你願意, 你可以把完整的code寄到 spruce42@sympatico.ca, 我可以再看看。
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/12 上午 12:56:55
Sorry, SInce my mail server rejected to send mail to yahoo, I got to post it here.

I have checked your program, there are two places you may want to check:

Line#11 -- Dif2(max,10), should it be Dif2(max,b)

Subroutine QUICK caused other problem, you may want to replace it with the following code:

Subroutine Quick(A,N)
Real ::A(N), Temp
Integer :: I
! Move the largest element to the top
DO I = N, 2, -1
Temp=MAXVAL(A(1:I))
A(MAXLOC(A(1:I),1)) = A(I)
A(I) = Temp
End Do
Return
End Subroutine Quick
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/12 上午 10:36:26
哇!! 太誇張哩~~ 我看了兩週都看不太出來問題...您只花了短短的時間就看出來..
真是太感謝您~~ ^^ 我跑出來結果囉~~ 謝謝您送我這個新年禮物!!
那我有問題再請教您囉!
Best Regards
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/12 上午 11:04:23
^^ 再請教一個小問題喔..昨天忘了問:p
我這邊的程式當我想統計在全部的simulation times算出到底有多少次TT會小於Cuttingpoint, 那要怎麼改寫呢?! 我寫的這段它只會出現每一次simualtion的..
Program:
sim=10
DO G=1,sim
..........
Do j=1,JCOUNT
IF( TT(j) .LT. CuttingPoint) then
  count1=count1+1
End IF
End Do
write(6,*) count1/b

output就會像是:
...
 P-value of Tanderson
  0.1280000
 P-value of Tanderson
  0.1300000
 P-value of Tanderson
  0.1460000

不過我想看的全部simulation times後的值, such as mean( P-value of Tanderson )??
麻煩您囉!! ^^

作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/12 下午 07:47:01

>^^ 再請教一個小問題喔..昨天忘了問:p
>我這邊的程式當我想統計在全部的simulation times算出到底有多少次TT會小於Cuttingpoint, 那要怎麼改寫呢?! 我寫的這段它只會出現每一次simualtion的..

Just define two real variables like J_sum, Jcount_sum

>Program:
>sim=10

J_sum = 0.0
Jcount_sum = 0,0

>DO G=1,sim
>..........
>Do j=1,JCOUNT
>IF( TT(j) .LT. CuttingPoint) then
> count1=count1+1
>End IF
>End Do

J_sum = J_sum + Real(count1)
Jcount_sum = Jcount_sum + real(b)

>write(6,*) count1/b
>

When the Loop is over, the ratio J_sum/Jcount_sum will be what you want.
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/12 下午 08:33:25

>哇!! 太誇張哩~~ 我看了兩週都看不太出來問題...您只花了短短的時間就看出來..
>真是太感謝您~~ ^^ 我跑出來結果囉~~ 謝謝您送我這個新年禮物!!
>那我有問題再請教您囉!

我猜你沒有用Boundry-Check,如果Boundry-Check is On,這些問題都很容易造到。To set the boundry-check ON (Under the CVF):

Project --> Setting --> Fortran -->select "Run Time" from the Category box -->check "Array and String Bound" from the "RunTime Error Checking" box
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/12 下午 09:24:11
喔喔 原來是降阿..那也就是說當我整個simulation 結束後..
Do G=1,sim
...
 ...
End Do
write(6,*) "ratio J_sum/Jcount_sum " J_sum/Jcount_sum
stop
end program

降寫就完成囉!! ^^
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/12 下午 09:26:33
喔喔 原來是降阿..那也就是說當我整個simulation 結束後..
Do G=1,sim
...
 ...
End Do
write(6,*) "ratio J_sum/Jcount_sum " J_sum/Jcount_sum
stop
end program

降寫就完成囉!! ^^
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/12 下午 09:35:13
By the way, 似乎我的simulation times至多只能完成到500次(My PC Only have 128Ram).. 因為再上去就會出現計憶體溢位的message..這會不會是我的Program寫的不好呢?!
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/14 下午 10:03:43
我的看法是Jcount引起的問題。 當Jcount=0, 也就是說 T-array全部不大於零時,
Write(20,*) .., TT(Jcount), ... 會引其你說的問題。

應付的辦法是Jcount決定之後立刻檢查它的值, 如果為零, 用 Cycle指令跳至 End Do.
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/14 下午 10:34:13
前輩..我試過哩!! 不過呢!! 我的JCOUNT應該是不可能等於0喔....那怎麼會降阿?! 要怎麼辦哩??!!
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 上午 01:20:00
Well, 既然你的T-array是由Monte Carlo method 產生的, extreme value就無法完全避免。 你如果將Sim 的值設為一個很大的數目 , 你會發現 Jcount的值會分布在零與 1000之間。

作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 下午 02:13:17
大哥..我試過了..
...
sim=100
DO G=1,sim
...
  ...
JCOUNT = Count(T.GE.0.0)
IF ( JCOUNT .EQ. 0.0 ) Then
goto 100
End IF
...
  ...
100 END DO
write(6,*) "P-value of Tanderson"
write(6,*) ( J_sum/Jcount_sum )/sim
stop
END Program weibo

我是這樣寫的..不過還是不行跑哩(I mean simulation times > 500 )
還是會出現"Stack Overflow"這樣的訊息...
這該怎麼辦呢?!
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 下午 05:06:58
請看前面一個名為 "請問如何使用 LINKER OPTION" 的 post.
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 下午 05:07:05
請看前面一個名為 "請問如何使用 LINKER OPTION" 的 post.
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 下午 05:20:45
前輩! 您好! 我試了還是不行呢?! 是我設定的不夠嗎? btw, i set "1000000"
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 下午 05:24:51
前輩! 您好! 我試了還是不行呢?! 是我設定的不夠嗎? btw, i set "1000000"
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 下午 05:25:45
阿...發瘋的電腦又可以哩:P 呼...真是抱歉...麻煩您了..^^
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/15 下午 09:35:01
前輩 ...我想學一下"cycle"怎麼完成上面的式子阿..我只會用GOTO..
降似乎不太高明...可以麻煩您教我一下嗎?! 謝謝您...
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/15 下午 10:12:02
最基本的用法﹕

Do I = 1, ...
...
...
IF(...) Then
   ...
   ...
   Cycle
End If
...
...
End Do

比較復雜的情況﹕

Level1: Do I = ...
...
   Level2: Do J = ...
    ...
     Level3: Do K= ...
     ...
     ...
     IF(...) Then
     ...
     ...
     Cycle ! Cycle Level3 will have same result

     Else
     ...
     ...
     Cycle Level2
     End If
     ...
     End Do Level3
     ...
   End Do Level2
   ...
End Do Level 1
...


    
  
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/16 上午 08:39:13
前輩..我一樣化葫蘆的尋找負那邊的CuttingPoint..不過不論我怎麼試答案都是"0.0"..怎摸會降呢??!!
Here is the output:
G J NCOUNT TTN(1) TTN(*) YYN(1) YYN(*) Target NCuttingPoint =
     1 2 108 -6.7512751E-02 -4.4298172E-04
  9.2592593E-03 1.000000 2.5000000E-02 0

可是我的Program只是把原本正的地方小改寫罷了..怎摸會降阿?!

麻煩您囉~~ ^^
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/16 上午 10:41:59
在開始檢查code之前, 你得考慮一個問題﹕同一個Target在正值區與負值區找到的CuttingPoints 應該是同值異號。 但是你的code 很可能得到二個絕對值差很多的結果。你要如何處理這個情況?

作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/16 上午 11:29:20
因為在理想狀況下,CuttingPoint應該要是同質異號的, btw, 我現在的結果好像不是..
可以考慮分正的看一邊,負的看一邊嗎?!
在0的左右兩邊個找一個CuttingPoint使得cover probability=0.05(2*Target)
不過如果0值粉多的話那就遭了~~
您覺得呢?!
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/17 上午 01:39:08
我再看了一下你的code, 覺得有幾個地方還需要想一下﹕

1. 你德主程式並未使用"Implicit None", 有可能使變數的類型有誤, 建議你在"Program ge..." 之後加一行Implicit None再 compile一次。

2. Subroutine Tanderson中有一行﹕
t= ((ytbar-yrbar)-(thetau+thetal)/2)/( ((vard)*(1/n1+1/n2))**(1/2) )

你要小心 1/n1, 1/n2, 1/2都可能被視為零, 建議改成 1.0/n1 or 1./rea(n1), 1.0/n2 or 1.0/real(n2), 1.0/2.0 or 0.5.
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/17 上午 09:37:38
有點詭異..為何當我加上implicit none後..
當我的sim>1時, 又會出現"allocate array is already allocate"這段訊息呢?!
我可以把程式寄給您看嗎?! 麻煩您喔:)
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/17 上午 10:09:01

>有點詭異..為何當我加上implicit none後..
>當我的sim>1時, 又會出現'allocate array is already allocate'這段訊息呢?!
>我可以把程式寄給您看嗎?! 麻煩您喔:)
>
OK, Just do it.
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/17 下午 09:56:05
你的程序中有一個如果"Jcount.eq.0 就 GoTo 100" 的部分, 這一跳就使的一些DEALLOCATE的指令都未執行。 在下一個LOOP時, ALLOCATE就會出問題。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/17 下午 10:16:28
你的程序中有一個如果"Jcount.eq.0 就 GoTo 100" 的部分, 這一跳就使的一些DEALLOCATE的指令都未執行。 在下一個LOOP時, ALLOCATE就會出問題。
^^^^^^^^^^^^^^^^^
  哇! 那要怎麼辦呢?!
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/17 下午 10:21:43
我是改寫成這樣:
NCOUNT = Count(T.LE.0.0)
IF ( NCOUNT .EQ. 0.0 ) Then
cycle
End IF

Btw, the same message is also appear >:<
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/17 下午 10:59:41
改成這樣﹕

IF ( JCOUNT .EQ. 0 ) Then
IF(ALLOCATED(TT)) DEALLOCATE (TT)
IF(ALLOCATED(YY)) DEALLOCATE (YY)
IF(ALLOCATED(matrixX)) DEALLOCATE (matrixX)
goto 100 ! (or Cycle)
End IF


IF ( NCOUNT .EQ. 0 ) Then
IF(ALLOCATED(TT)) DEALLOCATE (TT)
IF(ALLOCATED(YY)) DEALLOCATE (YY)
IF(ALLOCATED(matrixX)) DEALLOCATE (matrixX)
IF(ALLOCATED(TTN)) DEALLOCATE (TTN)
IF(ALLOCATED(YYN)) DEALLOCATE (YYN)
IF(ALLOCATED(NmatrixX)) DEALLOCATE (NmatrixX)
goto 100 !(or Cycle)
End IF

改了以後, 程式可以跑了, 但是你會發現到 T-陣列全部是正值。下一步是把 CALL TANDERSON 之前的code 再看一次。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/18 上午 09:14:55
前輩..不過我加上去後..Output中都是"NULL VALUE"
怎麼會變降阿! >"<
我又mail給您囉:P
作者 : f77f95(f77f95) Fortran頂尖高手貼文超過500則
[ 貼文 548 | 人氣 9 | 評價 3370 | 評價/貼文 6.15 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人weibo註記此篇回應為最佳解答 2005/2/18 下午 11:12:00
我看了一下 0218.txt 發現有兩個statement:
Jcount = Count(T.GE.0.0)
and
NCount = Count(T.LE.0.0)
被拿掉了。
作者 : weibo(韋)
[ 貼文 69 | 人氣 3662 | 評價 0 | 評價/貼文 0 | 送出評價 26 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/2/19 上午 10:30:52
嗯! 我昨晚也發現只是網路掛了沒辦法跟您說:p
Sorry! 感謝您阿! 前輩!
那我有問題再請教您囉!! ^^
 板主 : 徵求中
 > Fortran - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Fortran - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Fortran
1 f77f95 3300 
2 dennis 470 
3 cc 350 
4 smallpotato 320 
5 qq 290 
6 冼鏡光 230 
7 eraser 220 
8 小文 210 
9 iner 200 
10 wuda 160 
Fortran
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.25