행렬의 성분끼리 곱할때, 경우에 따라 어떤 결과가 나오는지 알고 있어야 이후 코딩을 할 때 도움이 된다.
행렬의 곱하기나 나누기에서 성분끼리 곱하거나 나누려면 연산자에 .을 붙여 계산할 수 있다.( .*나 ./)
1*3행렬에 1*1행렬을 곱할때 성분곱을 하면 어떻게 될지 살펴보자.
결과에서 알 수있듯이 하나의 행렬의 원소가 1개인 경우, '.'을 사용하거나 사용하지 않는 경우 모두 성분끼리 곱하는 것을 알 수 있다.
그럼 b행렬의 원소가 2개이면 계산이 가능할까? 정답은 불가능하다. 행렬 a,b에 대해 a*b는 행렬곱을 의미하고 a.*b는 행렬의 성분끼리 곱하는 것이기 때문에 차원이 같아야 하기 때문이다.
여기서는 행렬의 성분끼리 곱을 구하고자 하므로 두 행렬의 차원이 같거나, 하나의 행렬의 차원이 1*1이어야 한다.
그럼 이걸 이용해 무엇을 할 수 있는가를 생각해보면, 압력과 온도를 받아 둘을 곱하는 함수를 만든다고 해보자. 이 때 온도와 압력의 값은 한개의 값일 수도 있고 여러개의 값일 수 있다. 즉, 여러 상황에서 온도와 압력의 곱을 도출해 내는 것이다.
이를 한번에 가능하게 하려면 간단히 행렬의 성분곱으로 나타내면 된다.
이 코드를 실행시키면 다음과 같은 결과가 나온다.
그럼 P가 한개여도 이 코드는 작동할 것이란걸 알 수 있다. P를 100으로 바꾸고 실행하면 다음과 같다.
이렇게 주어진 조건이 한개이거나 여러개일 때 성분끼리의 곱을 사용하면 쉽게 결과를 얻을 수 있다.
그럼 이제 이걸 함수로 만들어보자. 온도와 압력을 입력받아 두 값의 곱을 도출하는 함수를 만들면 다음과 같다.
T=[10 20 30];
P=20;
AB = multiply(T,P)
function TP=multiply(T,P)
TP=T.*P;
end
P=[20 30 40];
AB = multiply(T,P)
function TP=multiply(T,P)
TP=T.*P;
end
이렇게 행렬의 성분 곱을 이용하면 행렬이 하나의 성분을 가지고 있든 여러개의 성분을 가지고 있든 각각의 경우에 대해 계산할 수 있다.
이 함수는 T와 P의 성분의 개수가 1이 아니고 서로 다르다면 에러가 난다. 그런 경우 try, catch함수를 이용해서 잘못된 입력에 대해 원하는 값을 반환하는 함수를 만들 수 있다.
T=[10 20 30];
P=[20 30];
AB = multiply(T,P)
function TP=multiply(T,P)
try
TP=T.*P;
catch
TP=-1;
end
end
이렇게 코드를 작성하고 실행하면 T와 P의 차원이 다르기 때문에 -1이 출력이 된다.
이런 식으로 여러 조건속에서 원하는 값을 출력할때는 행렬의 성분끼리 연산을 사용하고, 잘못된 입력에 대해 특정 값을 반환하는 함수를 만들 수 있다.
'Matlab' 카테고리의 다른 글
[Matlab] z = f(x,y) 푸는 방법 : meshgrid (0) | 2023.04.24 |
---|---|
[Matlab] 조건을 하나씩 대입하며 작동하는 함수 만들기 : 익명함수, arrayfun, 함수 핸들 (0) | 2023.04.23 |
Matlab 실습 15.mesh, surf (0) | 2022.12.24 |
Matlab 실습 14. 3D 그래프 그리기 (0) | 2022.12.24 |
Matlab 실습 13. 버튼을 이용하여 색깔 설정하기 (0) | 2022.12.24 |
댓글