본문 바로가기

프로그램/MATLAB

【MATLAB】 원추형+원통형 탱크의 부피 문제 풀이

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

[문제]

그림은 밑부분이 원추형인 원통형 탱크이다. 액체의 높이가 상당히 낮아 원추형 부분에만 있다면 유체의 부피는 원추형의 부피와 같을 것이다. 액체가 원통형 부분까지 차게 되면 액체의 총 부피는 원추형 부분의 액체 부피와 원통형 부분에 있는 액체 부피를 더한 것과 같다. 탱크의 부피를 R과 d 값의 함수로 계산하기 위한 M-파일을 판정구조를 이용하여 만들어라. 깊이가 3R보다 작은 경우에 대한 부피를 계산하는 함수를 설계하라. 만약 d > 3R 인 경우에는 "Overtop"이라는 에러 메시지를 반환할 수 있도록 하라. 다음의 데이터를 가지고 검증하라. 탱크의 반경이 R임에 유의하라.



R
0.9
1.5
1.3
1.3
d
1
1.25
3.8
4.0


[문제풀이]

우선, 문제에서 알려주는 조건들 중에 중요한 것은

1) d가 3R보다 크면 물이 넘친다. 작은 경우에서만 부피를 구해라.
2) d가 R보다 작으면 원추형 부피만 구하면 된다.
3) d가 R보다 커야 원통형 부피부분을 더해주어 최종 부피를 구한다.

이정도 입니다. 이 3가지 정도를 if~else 구문을 통해서 풀어보겠습니다.


우선, 함수 스크립트를 새로 만들어서 작성했습니다. 첫번째 줄에 결과와 함수이름, 입력을 나타냅니다.

그리고 4번째 줄에 if에서는 위에서 설명한 1)번 내용의 if~else 구문을 만들어 줍니다. d가 3R보다 클 경우에는 'Overtop'이라는 문구를 표시하고 아무런 부피 계산을 수행하지 않습니다.

그리고 6번째 줄의 else부터 부피를 계산하는 것입니다. 또한, 위에서 언급한 2) 3)번 내용처럼 부피를 구하는 경우가 2가지(원추형만, 원통형까지)이므로 2가지 경우로 나눠서 생각해서 if~ else 구문으로 부피를 구해줍니다. 여기서는 전부다 스칼라 형태의 입력, 출력이므로 수식을 그대로 적어주면 됩니다.

마지막으로 내포된 if구문 end, 첫 if구문 end, 함수 end 로 마무리하면 아래와 같이 결과를 도출할 수 있습니다.


우선, 함수를 저장할 때 함수이름과 파일이름을 동일하게 저장해주어야 합니다. 그리고 함수이름으로 함수를 계산합니다.

위의 경우처럼 '함수이름(입력값들)' 처럼 입력하여 계산합니다. 문제에서 주어진 4개의 경우에 대해서 수행한 결과가 위에 나타나있습니다. 마지막의 경우에는 물이 넘쳐서 overtop이라는 문구가 나타났습니다. 나머지 경우에는 부피가 계산된 것입니다. 문제에서 단위는 주어지지 않았으므로 위와 같이 마무리하면 문제풀이는 완료됩니다. 이상!