본문 바로가기

프로그램/MATLAB

【MATLAB】 Manning 방정식 개수로 행렬문제 풀이

- chapra의 응용수치해석 3판 문제 2.10

[문제]

Manning 방정식은 직사각형 단면의 개수로 내에서 물의 속도를 계산하는데 사용된다.


여기서 U는 속도(m/s), S는 수로의 기울기, n은 거칠기 계수, B는 폭(m), 그리고 H는 깊이(m)이다. 다음의 데이터는 5개의 수로에서 얻은 것이다.


거칠기 계수 n
수로의 기울기 S
수로의 폭 B
수로의 깊이 H
0.035
0.0001
10
2
0.020
0.0002
8
1
0.015
0.0010
20
1.5
0.030
0.0007
24
3
0.022
0.0003
15
2.5

이 값을 행렬에 저장하는데, 각 행은 각 수로를 표현하고 각 열은 각 매개변수를 표현하도록 하라. 매개변수 행렬 내의 값을 기초로 속도의 열벡터를 계산하는 MATLAB 문장을 한 줄로 기술하라.


[문제풀이]

우선, 위에 표에 적힌 값들을 행과 열을 유지한채 행렬에 저장해야 합니다. 각 표내의 값을 matlab 내에서 불러일으킬 수는 없기때문에 아래와 같이 일일이 입력해주었습니다. 입력하는 방법은 여러가지가 있지만, 처음에 생각난데로 바로 적용했습니다.


처음에 clear는 혹시나 변수가 겹치는 문제를 막기위해서 일부러 적어둔 것입니다. 3번째 줄에서 A행렬을 zeros로 입력해주었습니다. 어차피 4~23줄에서 일일이 입력해주기 때문에 행렬의 틀만을 만들기 위해서 적은 것입니다. 이것보다 편리하게 작성하셔도 좋을 것 같습니다. 그리고 마지막에 disp(A)는 A행렬을 보여주라는 명령인데, 아래에서 A행렬을 보여드리려고 적은 것입니다.


위처럼 A라고 입력해주면 행렬을 확인할 수 있습니다.


이제 문제에서 주어진 Manning 방정식을 위와 같이 표현할 수 있습니다.

우선, i를 1에서 5까지 반복시킵니다. 그리고 A행렬의 각 열이 뜻하는 바가 문제에서 나온 표에 값에 일치하기 때문에 위와 같이 표현해줄 수 있습니다. 문제에서 한줄로 표현하라고 했으므로 위와 같이 작성해도 무방할 듯 합니다. disp(U)는 일부러 제가 적어둔 것입니다.

이제 실행시키면 다음과 같이 나타납니다.


스크립트 제목을 ex2_10으로 저장했기 때문에 제일 위에는 그렇게 적혀있는 것이고, 바로 아래의 행렬은 A행렬을 보여주고 있고 그 다음에 적힌 숫자 5개가 U를 뜻하는 것입니다. 즉, 위에서 만든 for구문을 통해 속도벡터 U를 구할 수 있었습니다. 이상!