본문 바로가기

프로그램/MATLAB

【MATLAB】 제곱근을 근사적으로 구하는 방법 - 나눔과 평균 문제풀이

[문제]

어떤 양의 수 a의 제곱근을 근사적으로 구하는 방법으로서 오래된 방법인 '나눔과 평균' 방법은 다음과 같다.


이 알고리즘을 실행하기 위한 잘 구조화된 함수를 그림 4.2에 서술된 알고리즘에 기초하여 작성하라.


[문제풀이]


제곱근을 근사화하는 방법 중에는 여러가지가 있다고 합니다. 이번 문제에서는 나눔과 평균이라는 방법으로 a의 제곱근을 구하고자 합니다. 우선 전체 코드는 아래와 같고 그림 4.2라고 하는 부분을 거의 그대로 이 문제에 적용한 것이기 때문에 따로 첨부하지는 않았습니다. 아래 전체 코드의 구문과 거의 일치합니다.


위에가 전체 코드입니다. 이대로 실행하면 결과를 출력할 수 있습니다. 아래부터 차근차근 설명합니다.


우선, format 함수를 통해 숫자를 길게 표현했습니다.


6~11 줄이 입력받은 인자에 대한 내용입니다. 우선, nargin이라는 함수가 아래에 설명문에 나와있는 것처럼 함수의 입력의 개수를 뜻합니다. 그래서 6번째 줄에서는 인자가 2개 이하일때, 9번재 줄에서는 인자가 3개 이하일 때를 말합니다.  그리고 12번째 줄에서 초기값을 입력해주었습니다. 


바로 위가 nargin에 대한 설명문입니다.


그리고 isempty라는 함수도 같이 사용되었습니다. 이 함수는 (괄호)내의 행렬이 비어있으면 1을, 그 외의 경우에는 0을 반환해주는 함수입니다. 즉, 참이라면 es 변수에 위에 코드에 적힌 값을 대입해주라는 뜻이 됩니다.


그리고 14번째 줄에서 while(1)을 통해서 무한루프를 돌려줍니다. 21번재 줄에서 이 구문을 빠져나가기 위한 조건문이 삽입되어있습니다. 15~20번째 줄은 문제에서 주어진 수식을 matlab 언어로 적은 것입니다. 천천히 보시면 이해가 될 것 같습니다. 마지막으로 fx값을 sol로 대입해주고 함수 전체의 end로 마무리하면 완성됩니다.


위가 출력되는 결과의 예시들입니다. 이상!

- 문제 출처 : Chapra의 응용수치해석 3판 연습문제 4.1