0

아닌 I가 수행값 소자 장착 동일한

T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703]); 

얻었다 :

T = 

0.2989 0.5870 0.1140 
0.5959 -0.2744 -0.3216 
0.2115 -0.5229 0.3114 

제가 수득

T(1,1)==0.2989 

한다면

ans = 

0  

은 다른 요소와 동일합니다. 이것은 왜?

답변

2

을 동일하지 때문입니다. 그것의 단지 디스플레이 유물.

fprintf('%.8f\n', T(1,1)) 

당신에게

0.29893602 
2

MATLAB은 일반적으로 보는 것보다 많은 자릿수를 저장합니다. 0.2989는 실제로 0.298936021293776입니다 (심지어 스토리의 끝이 아닙니다).

T(1,1) == 0.298936021293776 
ans = 
0 

그래서

T(1,1) - 0.298936021293776 

당신은 단지 모든 숫자가 표시되지 않습니다 시도 코드를 시도하고 여전히

format long 
T(1,1) 

하지만를 추가 . T(1,1)이 있어야합니다.

+0

어떻게 모든 자리는 볼 수 있습니다을 줄 것이다 ?? :이보고 – volperossa

+0

나는 정말로 모른다. 하지만 왜 모든 자릿수를보고 싶습니까? 평등을 확인하려면 두 숫자가 서로 어느 정도 허용 오차를 초과하는지 확인하십시오. –

+1

호출 inv 함수없이 동일한 동작을 복제해야합니다. 그래서 제품에서 사용할 숫자가 필요합니다 ... fprintf ('%. 55f \ n', T (1,1)) XD로 해결합니다. – volperossa

1

정확히 같은지 부동 소수점 수를 테스트하는 것은 위험합니다. 기본적으로 MATLAB은 64 비트를 사용하여 부동 소수점 값을 저장하며 0.1과 같은 일부 값은 임의의 비트 수로도 정확하게 표현할 수 없습니다. T(1,1)은 정밀도가 더 높은 값을 인쇄 할 때 볼 수있는, 정확히 0.2989되지 않습니다 :

>> T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703]) 
T = 
    0.2989 0.5870 0.1140 
    0.5959 -0.2744 -0.3216 
    0.2115 -0.5229 0.3114 
>> fprintf('%1.10f\n', T(1,1)) 
0.2989360213 

이 왜 T(1,1) == 0.2989 false를 반환합니다. 두 개의 부동 소수점 값이 허용 오차 값 tol에 관해서 즉, 거의 같은지 여부를 테스트하는 것이 안전하다 :

>> tol = 1/1000; 
>> abs(T(1,1) - 0.2989) < tol 
ans = 
    1 
다음

무언가 당신은 아마 읽어야 click