본문 바로가기

프로그램/MATLAB

【MATLAB】 소구간별 함수 예제 풀이

- Chapra의 응용수치해석 연습문제 3.14 풀이

[문제]

소구간별 함수(piecewise function)는 독립변수와 종속변수 사이의 관계를 단일 방정식으로 표현하기 어려울 경우에 유용하다. 예를 들어 로켓의 속도는 다음과 같이 기술될 수 있다.


t의 함수로 v를 계산하는 M-파일 함수를 작성하라. 그리고 이 함수를 사용하여 t가 -5에서 50까지 t에 대한 v의 그래프를 생성하는 스크립트를 작성하라.


[문제풀이]

소구간별 함수라는 어려운 말을 사용했지만, 위에서 주어진 로켓의 속도처럼 일정한 구간별로 다른 함수값을 갖는 함수를 보고 말합니다. 문제에서는 이 함수를 주어주고 함수값과 그래프를 구해보라고 지시하고 있습니다. 결국 문제에서 원하는게 2가지 입니다.

1) t를 함수로 v를 계산하는 함수파일 작성
2) t가 -5 ~ 50까지 t-v 그래프를 그리는 스크립트파일 작성

위 2가지를 풀 것을 문제에서 원하고 있습니다. 순서대로 풀어보겠습니다.

>> 풀이 1) t를 함수로 v를 계산하는 함수파일 작성


우선 위와 같이 New > Function으로 함수파일을 만들어서 코드를 작성합니다.


우선 위와 같이 코드를 작성할 수 있습니다. if~elseif 루프구조를 통해서 t의 범위에 따라서 함수값이 결정될 수 있게 해줍니다. 그리고 t = -5 : 50; 가 위 코드에 포함되어 있고 실행(F5)하면 아래와 같이 명령창에 속도의 값이 나타나게 됩니다.

즉, t에 따라서 구간을 정해줄 때에는 if~elseif 루프구조를 이용해서 분리해주고 각각에 t에 맞는 함수를 넣어주어 속도를 구하는 것입니다. 또한, 위 코드에서 출력되는 값을 output_veloc라는 이름을 사용했으니, 마지막 18번째줄에 output_veloc = v; 라고 입력해주어서 출력값이 중간에 계산한 v값이다 라고 알려주게됩니다.


위에서 말했던 것 처럼, 다.  t = -5 : 50; 를 입력해놓은 상태에서 위 함수를 실행시키면 위와 같은 결과를 볼 수 있습니다.


>> 풀이 2) t가 -5 ~ 50까지 t-v 그래프를 그리는 스크립트파일 작성


이번엔 New > Script 파일을 만들어서 코드를 작성합니다.


우선, 코드이름은 ex3_14_2.m로 했습니다. 같은 문제라는 것을 표시하기 위해서입니다. 이것은 크게 중요하지 않고 위 코드를 보시게 되면, 우선 t를 콜론표기법으로 나타내었습니다. -5에서 50까지 1씩 커지는 t의 행벡터가 저장됩니다.

그리고 for 루프구조를 이용할텐데, k를 사용해서 속도를 벡터화해주려고 k를 우선 0이라는 초기값을 주었습니다. 그래프를 그려야하므로 속도의 값이 1개만 있어서는 안되므로 veloc(k) 처럼 작성하여 각각의 함수값들이 저장되게 하는 것입니다. 시간축도 마찬가지로 t(k)로 표현했습니다. 제가 이부분에서 골치좀 썩였었는데 위에서 작성한 함수를 한개의 파일에 작성하는 것이 아니라서 위와 같이 해줘야하는 것 같습니다. 물론, 변수이름은 작성자 마음대로 할 수 있습니다.

그리고 마지막으로 plot 명령을 통해 아래와 같이 그래프를 그릴 수 있습니다.


최종적으로 스크립트 파일을 실행하면 위와 같이 그래프를 표현할 수 있습니다. 스크립트 파일에서는 실제적인 계산이 없지만, 함수파일을 통해서 계산을하고 스크립트 파일을 통해서 위와 같이 그래프를 출력하는 형태의 문제였습니다. 이상!