본문 바로가기

프로그램/MATLAB

【MATLAB】 sin 함수를 무한급수로 푸는 문제 풀이

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

[문제]

sin함수는 다음의 무한급수에 의해 계산된다.


이 무한급수에서 각 항이 더해질 때마다 sin x의 값을 계산하고 출력하는 M-파일을 만들어라. 다시 말하면 다음 식에 대해 선택할 수 있는 차수의 항까지의 값을 순차적으로 계산하고 출력하라.


각각의 경우에 대해 다음의 백분율 상대오차를 계산하고 출력하라.


sin(0.9)를 계산하기 위해 시범적으로 8번째 항까지 포함하도록 프로그램을 수행하라.


[문제풀이]

이번 문제는 sin함수를 계산하기 위한 sin(x)라는 내장함수를 사용하지 않고, 무한급수를 통해서 계산해보고 참값인 sin(x)와 상대오차로 비교해보는 것입니다.

우선 1번째에서 5번째 줄까지 아래에서 잠시보시면, clc, clear는 예의상 해주고, 나중에 보기쉽게 format short e로 공학표기법으로 나타내줍니다. 그리고 x값은 문제에서 주어진 0.9를 입력해주고 sum_y는 아래에서 설명하겠지만, y라는 변수를 만들어주고 그것의 합을 누적시키기 위해서 초기값을 0으로 지정한 것입니다.


7번째 줄부터가 중요한 곳입니다. 우선 for구문을 통해서 n을 1~8까지 반복시켜주면서 문장을 수행합니다. 이때, 위에서 사용한 변수 y는 제가 임의로 추가한 것이고 이 뜻은 무한급수를 계산한 결과를 임시로 저장하는 것입니다. 그리고 sum_y 변수를 통해서 그 값들을 누적시켜주어서 무한급수를 표현한 것입니다.

10번째 줄에서 yy는 문제에서 주어진 %오차 입니다.

그리고 11번째 줄에서 disp() 함수로 [배열]을 통해 값을 출력해보겠습니다.

14~15번째 줄은 비교해보기 위해서 그냥 추가한 것입니다. 

이제 실행한 결과가 아래와 같습니다.


실행하면 위와 같은 계산 결과가 나옵니다. 위에서 disp([y yy])로 적어두었으므로 1열의 값들은 무한급수로 계산한 값이고 2열의 값들은 %오차입니다. 

1열에 무한급수의 값들이 4번째행부터는 같은 값으로 나오는 것을 볼 수 있습니다. 풀이할 때 제일 위에서 포맷을 format short e로 지정했기 때문에 뒤에 소수점이 표현되지 않아서이지만, 뒤에 많은 숫자들이 있다는 걸 알아두면 좋습니다. (위 상태에서 format long e로 바꿔주면 소수점 이하 길게 더 볼 수 있습니다.)

2열에는 %오차의 값들입니다. 처음에는 14%나 차이가 나지만 점점 내려갈수록 공학표기법에서 e뒤의 숫자가 계속 커지는 것을 볼수 있습니다. 마지막에는 5.6693e-14로 그냥 표현하자면, 0.000000000000056693 % 이라는 숫자입니다. 매우 작은 오차로 떨어지는 것을 볼 수 있습니다.

마지막에 참값인 sin(0.9)를 비교하기 위해 출력해보았습니다.



(참고) 아래는 추가적으로, 포맷을 format long e로 표현해본 것입니다.


이상!!