본문 바로가기
Matlab

[Matlab] 여러개의 조건에서 값 계산 : 행렬 성분끼리 곱하기, try-catch

by Mene 2023. 4. 23.
반응형

행렬의 성분끼리 곱할때, 경우에 따라 어떤 결과가 나오는지 알고 있어야 이후 코딩을 할 때 도움이 된다.

 

행렬의 곱하기나 나누기에서 성분끼리 곱하거나 나누려면 연산자에 .을 붙여 계산할 수 있다.( .*나 ./)

 

1*3행렬에 1*1행렬을 곱할때 성분곱을 하면 어떻게 될지 살펴보자.

a=[1 2 3];
b=2;
 
a.*b % 행렬에 하나의 원소 곱할때
a*b % 성분끼리 곱하기

 

결과에서 알 수있듯이 하나의 행렬의 원소가 1개인 경우, '.'을 사용하거나 사용하지 않는 경우 모두 성분끼리 곱하는 것을 알 수 있다.

 

 

 

그럼 b행렬의 원소가 2개이면 계산이 가능할까? 정답은 불가능하다. 행렬 a,b에 대해 a*b는 행렬곱을 의미하고 a.*b는 행렬의 성분끼리 곱하는 것이기 때문에 차원이 같아야 하기 때문이다.

 

여기서는 행렬의 성분끼리 곱을 구하고자 하므로 두 행렬의 차원이 같거나, 하나의 행렬의 차원이 1*1이어야 한다.

 

그럼 이걸 이용해 무엇을 할 수 있는가를 생각해보면, 압력과 온도를 받아 둘을 곱하는 함수를 만든다고 해보자. 이 때 온도와 압력의 값은 한개의 값일 수도 있고 여러개의 값일 수 있다. 즉, 여러 상황에서 온도와 압력의 곱을 도출해 내는 것이다. 

 

이를 한번에 가능하게 하려면 간단히 행렬의 성분곱으로 나타내면 된다. 

T=[10 20 30]; % 온도
P=[100 200 300]; % 압력
 
T.*P % 성분끼리 곱

이 코드를 실행시키면 다음과 같은 결과가 나온다.

그럼 P가 한개여도 이 코드는 작동할 것이란걸 알 수 있다. P를 100으로 바꾸고 실행하면 다음과 같다.

T=[10 20 30]; % 온도
P=100; % 압력
T.*P % 성분끼리 곱

이렇게 주어진 조건이 한개이거나 여러개일 때 성분끼리의 곱을 사용하면 쉽게 결과를 얻을 수 있다.

 

 

 

그럼 이제 이걸 함수로 만들어보자. 온도와 압력을 입력받아 두 값의 곱을 도출하는 함수를 만들면 다음과 같다.

 

T=[10 20 30];
P=20;
AB = multiply(T,P)

function TP=multiply(T,P)
    TP=T.*P;
end

 

T=[10 20 30];
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이 출력이 된다.

 

이런 식으로 여러 조건속에서 원하는 값을 출력할때는 행렬의 성분끼리 연산을 사용하고, 잘못된 입력에 대해 특정 값을 반환하는 함수를 만들 수 있다.

반응형

댓글