게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

프로젝트 2번 테스트데이터 및 조교님께 질문드립니다.

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2012)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
윤형석



가입: 2012년 9월 5일
올린 글: 26

올리기올려짐: 2012년12월21일 16:54    주제: 프로젝트 2번 테스트데이터 및 조교님께 질문드립니다. 인용과 함께 답변

테스트케이스입니다.
코드:

let matrix_printer mat =
let (cs,rs) = Markov.size mat in
for j=0 to rs-1 do
for i=0 to cs-1 do
print_string "\t";
(print_float (Markov.ij mat i j))
    done;
print_newline ()
    done ;
print_newline ()


let _ = (*doc*)
    let m2 =
    Markov.add_column [0.0000001;0.;0.;0.9999999]
    (Markov.add_column [1.;0.;0.;0.]
    (Markov.add_column [0.;0.;1.;0.]
     (Markov.column [0.;1.;0.;0.])) )
    in
    let minit = (Markov.column [1.;2.;3.;4.]) in
matrix_printer (Markov.markov_limit m2 minit)



답은
코드:

        3.33333333
        3.33333333
        3.33333333
        0

정도 나오면 됩니다.



조교님께! 오차범위가 너무나도 좁은 것 같아 질문드립니다.

위와 같은 테스트케이스의 경우, 0.9999999가 수렴에 이르기까지의 곱셈의 회수가 약 2억번이 필요합니다.
한 번의 연산에 매우작은 오차(대충 2^-50정도라고 생각을 할게요)가 생기지만, 이 연산이 2억번 실행되면 오차가 눈에 띄는 정도로 커지게 됩니다.

조교님께서 제시한 0.00000001의 경우에는 저런 입력을 커버하기에 조금 작은 오차범위가 아닌가 싶습니다.
조금 널널하게 해주심이 어떨까요?
위로
사용자 정보 보기 비밀 메시지 보내기
박준호



가입: 2012년 9월 15일
올린 글: 71

올리기올려짐: 2012년12월21일 17:01    주제: 흠...장난아니네 인용과 함께 답변

지금 오차한계 0.000001일때는 저값 도달도 못하네.....

0.0000001로하나 늘렸더니 계속 돌고있다ㅋㅋㅋㅋㅋ
위로
사용자 정보 보기 비밀 메시지 보내기
이대근



가입: 2012년 10월 26일
올린 글: 5

올리기올려짐: 2012년12월21일 17:46    주제: 저는 인용과 함께 답변

저는 계산하는데 0.05초 정도 걸렸어요.

3.33333331959
3.33333331959
3.33333331959
1.14983554174e-11

Rolling Eyes
위로
사용자 정보 보기 비밀 메시지 보내기
강동옥



가입: 2009년 9월 18일
올린 글: 602

올리기올려짐: 2012년12월21일 18:00    주제: 인용과 함께 답변

글쎄요 사실 제대로 했다면 몇번만 곱해도 굉장히 극한값에 가까워질텐데요?
위로
사용자 정보 보기 비밀 메시지 보내기
윤형석



가입: 2012년 9월 5일
올린 글: 26

올리기올려짐: 2012년12월21일 18:15    주제: 인용과 함께 답변

그렇다면 초기값의 범위를 제한시켜주셔야 할 것 같습니다..

아마 제가 올린 테스트케이스가 오차범위 안에서 잘 나오는 분들이 그렇게 많지 않을 듯 한데, 사실 초기값의 합을 1로 normalize 시키면 어느정도 개선이 될 것 같아서요 Smile
(위의 이대근 학우의 오차도 이 부분만 개선이 되면 허용범위 내인 것 같네요.)
위로
사용자 정보 보기 비밀 메시지 보내기
최지헌



가입: 2012년 9월 6일
올린 글: 35

올리기올려짐: 2012년12월21일 19:07    주제: 인용과 함께 답변

저도 답은 나오는데 차이가 꽤 많이 나네요...ㅠㅠ
비교의 정확도를 0.0000001 까지 같은 걸로 치면

3.25637143502
3.25637142732
3.25637141962
0.230885704151

이 나오고, 대폭 정확도를 늘려서 0.0000000000001까지 같은걸로 치면

3.33333328433
3.33333328433
3.33333328433
4.9289726407e-10

이 나옵니다.

비교할때 허용하는 차이를 더 작게하면 될것같긴 한데 이렇게 하면 오히려 부동소수점 연산 오차같은거 때문에 무한루프에 빠질것 같아서 고민이네요..

허용 오차 범위를 0.0000001이라고 하셨는데 위 행렬에는 0.9999999처럼 1이랑 엄청 가까운 엔트리가 있어서 그런 것 같은데 저런 입력도 들어오나요?
위로
사용자 정보 보기 비밀 메시지 보내기
강동옥



가입: 2009년 9월 18일
올린 글: 602

올리기올려짐: 2012년12월21일 19:25    주제: 인용과 함께 답변

너무 극단적인 케이스는 넣지않겠으니 걱정하지마세요Smile

오차는 공지ㅘㄴ 수준보다는 약간 널럴한 수준에서 검사할 생각입이다.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2012) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay