본문 바로가기
반응형

전체 글68

[Matlab] 완전 제곱수를 찾는 방법 : any(), ismember() 1*N인 벡터 a의 원소 중 하나가 다른 원소의 완전 제곱수인지 판단하는 함수를 만들어보자. ismember(a,b)는 a의 데이터를 b에서 찾은 경우 논리값 1(true)를 포함하는 배열을 만들어 낸다. 예를 들어 a=[1 2 3 4], b=[2 4 6 8 10]인 경우 ismember(a,b)를 사용하면 [0 1 0 1]을 반환하고, 이는 a(2)=2, a(4)=4가 벡터 b에도 존재한다는 것을 의미한다. any(a)는 배열 A의 모든 요소가 0이 아닌 숫자이거나 논리값 1(true)인지 판단하는 함수다. any([0 0 0])은 0(false)를 반환하고, any([1 0 0])은 1(true)가 첫번째 요소에 존재하므로 1(true)를 반환한다. 이제 이를 이용해서 원소 중 하나가 다른 원소의 완.. 2023. 4. 28.
[Matlab] 문자열 행렬에서 일치하는 문자 인덱스 찾기 : strcmp, logical array 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'}; s.. 2023. 4. 24.
[Matlab] logical 배열(array)? Matlab에서 true와 false에 대해서는 많이 들어본 적이 있을 것이다. , ==, ~= 등 논리 연산자를 사용했을 때, 그 식이 true이면 1을 반환하고, false이면 0을 반환하게 된다. 예를 들어 1==1을 작성하고 코드를 실행하면 다음과 같은 논리값(logical) 1이 나온다. logical array는 이 논리값을 배열로 확장한 형태로 n*n 행렬이 하나의 논리 연산을 수행하는 경우 나타난다. 예를 들어 x=[1 2 3 4 5] 행렬이 있는 경우, x==1을 실행하면 다음과 같은 logical array가 나타난다. x=[1 2 3 4 5]; x==1 결과에서 알 수 있듯이 x 행렬의 성분이 1과 일치하면 1(true)를 반환하고, 일치하지 않으면 0(false)를 반환하는 것을 알.. 2023. 4. 24.
[Matlab] z = f(x,y) 푸는 방법 : meshgrid 공학 문제에서 다변수 함수 z = f(x,y)를 사용하는 경우가 있다. 이런 문제를 풀기 위해 for문을 돌려 x축으로 값을 나열하고, y축으로 값을 나열하여 풀 수도 있다. 하지만 matlab에서는 meshgrid를 사용하여 x,y 대한 값을 2차원 grid 형태(좌표 (x,y))로 변환하는 기능을 가지고 있다. 이를 이용하면 행렬의 성분끼리의 연산을 통해 z=f(x,y)를 쉽게 계산할 수 있다. 먼저 meshgrid에 대해 알아보면 형태는 다음과 같다. [X,Y] = meshgrid(x,y) x, y는 벡터의 형태이고(1*N 행렬), meshgrid를 사용하면 X,Y는 각각 2차원 행렬로 각 좌표에 해당하는 x,y값을 가지게 된다. 예시를 한 번 들어보자. x좌표를 0부터 10까지 2의 간격으로 가지.. 2023. 4. 24.
[Matlab] 조건을 하나씩 대입하며 작동하는 함수 만들기 : 익명함수, arrayfun, 함수 핸들 함수를 만들다 보면 여러개의 입력값을 하나하나 대입하면서 어떤 조건을 만족하는 지에 따라 다른 값을 호출하는 함수를 만들 때가 있다. 이런 경우 arrayfun 함수를 이용해서 보다 손쉽게 원하는 함수를 만들 수 있다. 예를들어 input=[1 3 5 7 9]인데 input이 5보다 크면 곱하기 2를 하고, 5보다 작거나 같으면 나누기 2를 하는 함수를 만들어 보자. 원래같으면 for 구문을 이용하여 5번 반복하며 함수를 만들겠지만 arrayfun 함수를 이용해 간단하게 만들 수 있다. arrayfun의 형태는 arrayfun(func, 변수)로 나타나는데 func라는 함수에 변수를 하나씩 넣어보며 결과를 도출하는 함수라고 할 수 있다. 이 때 func 자리에는 함수 핸들이 들어가야 한다. 함수 핸들이란.. 2023. 4. 23.
[Matlab] 여러개의 조건에서 값 계산 : 행렬 성분끼리 곱하기, try-catch 행렬의 성분끼리 곱할때, 경우에 따라 어떤 결과가 나오는지 알고 있어야 이후 코딩을 할 때 도움이 된다. 행렬의 곱하기나 나누기에서 성분끼리 곱하거나 나누려면 연산자에 .을 붙여 계산할 수 있다.( .*나 ./) 1*3행렬에 1*1행렬을 곱할때 성분곱을 하면 어떻게 될지 살펴보자. a=[1 2 3]; b=2; a.*b % 행렬에 하나의 원소 곱할때 a*b % 성분끼리 곱하기 결과에서 알 수있듯이 하나의 행렬의 원소가 1개인 경우, '.'을 사용하거나 사용하지 않는 경우 모두 성분끼리 곱하는 것을 알 수 있다. 그럼 b행렬의 원소가 2개이면 계산이 가능할까? 정답은 불가능하다. 행렬 a,b에 대해 a*b는 행렬곱을 의미하고 a.*b는 행렬의 성분끼리 곱하는 것이기 때문에 차원이 같아야 하기 때문이다. 여기.. 2023. 4. 23.
반응형