logical array를 만들어 내는 함수 중 하나인 strcmp는 두개의 문자열을 비교하여 둘이 동일하면 1(true)을 반환하고, 동일하지 않으면 0(false)을 반환하는 함수이다.
다음과 같은 코드를 실행해보면 논리값 1이 나오는 것을 알 수 있다.
s1 = 'Yes';
s2 = 'No';
tf = strcmp(s1,s2)
(PS. 방금 코드블럭이란 것을 알았다....)
겉보기엔 두개의 문자열이 같냐 다르냐만 비교할 수 있어보이지만 이 함수는 문자형 벡터로 구성된 셀형 배열과 하나의 문자열을 넣으면 동일한 문자열을 가진 인덱스에 true를 반환하는 logical array를 만들어낸다.
무슨소린지 긴가민가 하니 예시를 들어보자.
s1 = {'O2', 'N2', 'O', 'N', 'CO2'};
s2 = 'N';
tf = strcmp(s1,s2)
{}는 셀형 배열을 나타내고, 배열의 성분은 각각 문자열을 가지고 있다.
이 셀형 배열에서 문자열과 'N'이라는 문자열을 비교하여 logical array를 만들어 낼 수 있다.
즉, 'N'과 정확히 일치하는 4번째 성분에 1(true)를 반환하는 logical array를 얻을 수 있다.
이 logical array로 행렬에서 원하는 값을 얻어낼 수 있다.
s1과 동일한 순서로 각 원소의 분자량을 나타내는 행렬을 만들고, s3(tf)를 실행해보자.
s1 = {'O2', 'N2', 'O', 'N', 'CO2'};
s2 = 'N';
tf = strcmp(s1,s2);
s3 = [32 28 16 14 44];
s3(tf)
s3(tf)를 함으로써 tf의 1이었던 성분의 인덱스에 해당하는 s3의 값이 나온 것을 확인할 수 있다.
따라서 우리가 원하는 문자를 대입하면 그에 해당하는 분자량을 얻을 수 있는 함수를 만들 수 있는 것이다.
자, 이제 이걸 활용해서 원하는 원소를 입력하면 분자량을 나오게 하는 함수를 만들어 보자.
ANS=Input_Molecular('O2')
function Molecular_Weight = Input_Molecular(input)
s1 = {'O2', 'N2', 'O', 'N', 'CO2'}; % 이름
s2 = [32 28 16 14 44]; % 분자량
tf = strcmp(s1,input);
Molecular_Weight = s2(tf);
end
s1의 문자열 중 하나를 입력하고, strcmp를 이용하여 logical array tf를 만들고, 이를 s2 행렬에 대입하여 분자량을 얻는 함수가 생성되었다.
이 코드를 실행해 'O2'에 대한 분자량을 ANS 변수로 저장하면 다음과 같은 결과가 나온다.
이렇게 strcmp를 활용해서 재료의 이름과 값을 저장하면, 재료를 입력했을때 원하는 값을 얻을 수 있는 함수를 만들 수 있다.
여기서 대문자, 소문자 구별을 하지 않고 일치하는 logical array를 얻고 싶으면, strcmpi 함수를 이용하여 해결 할 수 있다.
'Matlab' 카테고리의 다른 글
[Matlab] 1 2 2 3 3 3 4 4 4 4 만들기 : repelem(v,n) (0) | 2023.04.29 |
---|---|
[Matlab] 완전 제곱수를 찾는 방법 : any(), ismember() (0) | 2023.04.28 |
[Matlab] logical 배열(array)? (0) | 2023.04.24 |
[Matlab] z = f(x,y) 푸는 방법 : meshgrid (0) | 2023.04.24 |
[Matlab] 조건을 하나씩 대입하며 작동하는 함수 만들기 : 익명함수, arrayfun, 함수 핸들 (0) | 2023.04.23 |
댓글