본문 바로가기

프로그램/MATLAB

【MATLAB】 기계입실론 ε 계산 문제풀이

[문제]

컴퓨터에서 기계입실론 ε은 1보다 더 큰수를 만들기 위해 더할 수 있는 가장 작은 수로 생각할 수 있다. 이 아이디어를 기초로한 알고리즘은 다음과 같다.

단계 1 : ε = 1이라 놓는다.
단계 2 : 1 + ε 이 1보다 작거나 같으면 단계 5로 가고, 그렇지 않으면 단계 3으로 간다.
단계 3 : ε = ε/2
단계 4 : 단계 2로 되돌아간다.
단계 5 : ε = 2 X ε

이 알고리즘에 기초하여 기계입실론을 계산하는 M-파일을 개발하라. 결과를 확인하기 위해 내장함수 eps로 구한 값과 비교하라.


[문제풀이]

문제에서, '기계입실론(ε)''1보다 더 큰수를 만들기 위해 더할 수 있는 가장 작은 수'라고 정의해주고 있습니다. 이번 문제는 이 ε을 구하는 문제입니다. 먼저, 내장함수 eps를 이용한 결과값은 다음과 같습니다.


eps 명령을 치게되면 위와 같이 나타나는데, 기계입실론이 상당히 작은 수라는 것을 알 수 있습니다. 이제 그 수를 직접 함수파일을 만들어서 구해보겠습니다.

문제에서 주어진 단계 1~5를 따라서 그대로 코딩하겠습니다.


초록색 글씨로 위에도 설명을 적어놓았지만, 한번더 설명해보겠습니다. 우선 1번째 줄에서 function을 통해 함수파일이라는 것을 알 수 있습니다. 그리고 출력되는 결과는 epp 이며, 함수이름은 machinalepp 입니다. 또한, 입력인자는 하나도 없으므로 (괄호)를 비워주었습니다.

6번째 줄에 단계 1이 실시됩니다. 그리고 8번째 줄부터 단계 2~5가 실시됩니다. 이때 단계 4 때문에 while(1)이라는 무한루프를 사용하게 되었습니다. 저도 처음에는 단계 2부터 적어보려고 if구문을 바로적었지만, 단계 4 때문에 계속 처음 상태로 돌아와야해서 무한루프를 사용하는 것이 편리하고 중간에 break를 통해서 빠져나가는게 좋겠다고 생각해서 위와 같이 작성한 것입니다. 그리고 순차대로 단계 3, 5가 실시되면 함수가 마무리 됩니다.


함수명을 입력하면 위와같이 기계입실론 내장함수 eps로 구한 값과 동일하다는 것을 알 수 있습니다. 많이 작은 수라 해맬 수도 있겠다 생각했지만, 한번에 성공! 이상!


- Chapra의 응용수치해석 3판 연습문제 4.4