Why matlab make this calculation error?

for this code i wrote for my home work, when i was running, SOME of the output from line 17 is not correct. Can any one explain to me why this is not correct? (I use number: 38 3,-8.9,4.1 as 4 sample input)
T = input('please enter the force: '); %%1
x = input('please enter the x coordinate: '); %%2
y = input('please enter the y coordinate: '); %%3
z = input('please enter the z coordinate: '); %%4
fprintf('\n');%%5
fprintf('\n'); %%6
fprintf(' x = %4.2f , y = %4.2f, z= %4.2f', x,y,z);%%7
fprintf('\n'); %%7
fprintf('\n'); %%8
R = sqrt(x^2+y^2+z^2); %%9
norm_x = x/R; %%10
norm_y = y/R;%%11
norm_z = z/R;%%12
fprintf('||dist|| = %4.2f',R); %%13
fprintf('\n'); %%14
fprintf(' norm= %4.3f i+%4.3fj+ %4.3f k', norm_x,norm_y,norm_z); %%15
fprintf('\n'); %%16
fprintf('T = %4.3f i + %4.3f j + %4.3f k',T*norm_x, T * norm_y, norm_z*T);%%17%%The first two output has errors.
fprintf('\n');%%18
The incorrect output is shown here, it should be 11.134, -32.984, 15.2
T = 11.124 i + -33.002 j + 15.203 k

댓글 수: 2

Star Strider
Star Strider 2016년 2월 24일
Are you sure your ‘correct’ values are in fact correct?
I see no obvious errors, and if the norm values in Line 15 are correct, and ‘T’ is correctly entered, Line 17 should be correct.
BEICHEN LIU
BEICHEN LIU 2016년 2월 24일
Either the line 15 output is correct or not, the output in this pic(line 17) is not all correct(first two incorrect, and last one correct).

댓글을 달려면 로그인하십시오.

답변 (1개)

Walter Roberson
Walter Roberson 2016년 2월 24일

0 개 추천

No, the output is correct and it is your expected output that is wrong. In particular, when you calculated the norm components, you rounded to three decimal places before doing the multiplication by the force, and that gave you your "expected" answer; when you do not round to three decimal places you get the actual answer the code shows.

댓글 수: 4

BEICHEN LIU
BEICHEN LIU 2016년 2월 24일
Here is the results from the data i gave above, but there is no way i could get 38*0.293 =11.124, and 38*-0.868 =-33.002. The third one is correct. I have no idea why this could happen
Stephen23
Stephen23 2016년 2월 24일
편집: Stephen23 2016년 2월 24일
@BEICHEN LIU: MATLAB is not making any mistakes, although your title accuses it of this. In fact you are doing two different calculations which, not surprisingly, give two different results:
>> T*0.293
ans = 11.134
>> T*norm_x
ans = 11.124
You are confusing the rounded printed value of norm_x for the actual stored numeric value of norm_x. These are, however, clearly not the same, no matter how much you imagine them to be.
Roger Stafford
Roger Stafford 2016년 2월 24일
@Beichen Liu: Please read Walter's explanation more carefully! Multiplying 38 by .293 is incorrect, because the actual value of norm_x is .292742143, and when you multiply that by 38, you get 11.12420143 which rounds to 11.124, not 11.134. You were misled by your own intermediate rounding displays using 'fprintf'.
Steven Lord
Steven Lord 2016년 2월 24일
You can easily check to convince yourself that Walter and Stephen are correct. Display (using DISP, not using FPRINTF) the value 0.293-norm_x. That value will be nonzero. [It's probably going to be somewhere in the vicinity of 2.6e-4 based on T having a value of 38.]

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 MATLAB에 대해 자세히 알아보기

제품

태그

질문:

2016년 2월 24일

댓글:

2016년 2월 24일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by