2013-03-22 1 views
2

이 궁금 [R에 초보자 가이드]

> Q 
    [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 4 2 1 
[3,] 2 3 0 
> solve(Q) 
     [,1] [,2] [,3] 
[1,] -0.12 0.36 -0.16 
[2,] 0.08 -0.24 0.44 
[3,] 0.32 0.04 -0.24 
> solve(Q)%*%Q 
    [,1]   [,2] [,3] 
[1,] 1 -2.775558e-17 0 
[2,] 0 1.000000e+00 0 
[3,] 0 0.000000e+00 1 

의 운동에서 내 해결 프로세스입니다 매트릭스가 나옵니다.

+2

-2.77e-17이 어떤 의미에서 0과 다른 점은 무엇이라고 생각하십니까? – joran

+0

더 설명 할 수 있습니까? –

+0

아래에 언급했듯이 부동 소수점 문제로 인해 모든 상황에서 _exact_ 계산을 수행 할 수있는 컴퓨터 (모든 언어)가 없습니다. 이것에 대한 정식 참조는 [여기] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)입니다 (Google의 경우 다른 많은 장소 중에서). 감사합니다. – joran

답변

4

이것은 프로그래밍 오류가 아니며 "부동 소수점 산술"의 결과입니다.

Q2 <- solve(Q)%*%Q 
round(Q2, 4) 

는 소수점 연산 go here 부동에 대한 자세한 내용을 보려면하려면 : 둥근 적당한 길이로, 당신은 행렬을 얻을 것이다.

+0

답변 해 주셔서 감사합니다. 정말 도움이되었습니다. –

5

최종 결과에 zapsmall 기능을 사용하십시오. 부동 소수점 표현과 반올림 오류로 인해 단순한 arithmatic (그리고 심지어 가끔) 이상의 값은 매우 가깝지만 예상했던 것과 정확히 일치하지는 않습니다. 이 경우 첫 0이 아닌 숫자 앞에 소수점 뒤에 16 0이있는 값이 표시됩니다. zapsmall 함수는이 작고 본질적으로 0 인 값을 0으로 변환하여 사용자가 보는 내용이 예상 한 것과 일치하도록합니다.

+0

와우 !! 완전히 해결되었습니다. 고마워. –

+0

+1 - 나중에 매일 새로운 것을 배웁니다. 이 기능을 이용해 주셔서 감사합니다. – Chase