Pharos University ME 253 Fluid Mechanics II - ppt video online download

Pharos University ME 253 Fluid Mechanics II - ppt video online download : External External Flows Bodies in motion, experience fluid forces and moments. Examples include: aircraft, automobiles, buildings, ships, submarines, turbo machines. Fuel economy, speed, acceleration, stability, and control are related to the forces and moments. Airplane in level steady flight: drag = thrust & lift = weight.

매트랩 기초 - Easy way (Slicing, 벡터 및 행렬 표현법)

매트랩 기초 과정에서는 Matlab에서 어떠한 연산이 이뤄지는지 대략적인 설명을 다루고 있습니다. Matlab은 (Matrix Labatory)의 약자로 행렬연산에 매우 유용합니다. 즉, Linear system 해석에 굉장히 유리하다고 말할 수 있습니다.

벡터와 행렬의 표현법

기본적으로 행렬 연산을 다룰 때에는 벡터는 Column vector 형태로 표현해줍니다. 그렇다면, 행렬은 여러 개의 Column vector들을 연결 시켜주는 작업이 됩니다.

기본 Vector 표현

여기서 R은 real number, N은 Natural number(자연수) i는 integer의 약자로 많이 위와 같이 표현합니다. 위 식의 의미는 i번째 column의 Vector들은 n by 1 vector이다. 각 "원소는 실수이다"라는 의미 입니다.

Concat

행렬은 Column vector를 옆으로 차곡 쌓아둔 것이 됩니다. 이 쌓아가는 과정을 Matlab에서는 Concat이라고 표현합니다.

행렬 및 matlab의 Concat

Matlab에서 옆으로 쌓아가는 과정을 스페이스바 또는 ,로 이뤄집니다. 수직으로 쌓을 때에는 세미콜론; 을 사용해서 합니다. 이는 여러 parameter들을 하나의 Vector로 묶을 때 많이 사용합니다.

X=[ X1 X2 X3]   size(X)=[n,3]X=[ X1, X2, X3] size(X)=[n,3]Y=[X1; X2] -> size(Y)=[2n,1]

위의 구조를 알게 되면, plot 에서도 쉽게 응용해줄 수 있습니다. x축을 Vector로 두고, y값을 행렬로 가지는 경우 다음과 같은 과정을 거쳐 plot이 되게됩니다.

plot 과정

Preallocation

preallocation은 사전할당이라고 해서, 컴퓨터의 속도를 올리는데 있습니다. 우리가 사용하고자 하는 변수명에 대한 구조와 Size를 결정해주는 것입니다. 보통 행렬을 만들기 위해서는 zeros, ones, eye를 사용하게 되는데, 옆에 사이지는 fun(m,n) 이렇게 됩니다.

그러면 m by n 행렬이 지정이 되고, 이에 따라서 각 point에 값만 넣어주면 됩니다. 사전할당을 해주지 않는 경우, size가 변동이 되기 때문에 사이즈를 늘리는 작업이 요구되어 컴퓨팅 속도가 굉장히 안좋아지게 됩니다.

Slicing

1. 값 불러오기

A라는 m by n matrix가 있을 때, i행, j열에 있는 vector를 받기 위해서는 기본적으로 아래와 같이 수행 할 수 있습니다.

A(i th row, j th column)A(i,j)
2. : 의 사용

이제 여러개의 값들을 불러올 때 사용하는 방법입니다. Matlab에서 colon ” :” 의 의미는 span의 뜻을 가지고 있으면 좋습니다.

쉽게 말하자면, 시작점과 끝점에 대해서 시작점: 끝점을 해주면 시작점에서 +1씩 해서 끝점 까지 +1씩 증가하는 vector를 만들어 줍니다.

(ex. 1:5=[1 2 3 4 5])

Matlab이나 다른 python에서는 vector들은 값을 불러오는데도 사용해줄 수 있습니다.

A(1:5,1:5) => 5 by 5A(1:5,1) => 5 by 1A(1,1:5) => 1 by 5

그러면 여기서 조금만 단계를 올려서 보게 되면 전체를 쉽게 불러 올 수 있는 명령어가 있습니다. A(:,:)

이렇게하면 A행렬 전체를 불러오게되죠!, 하지만 이경우는 쓸모가 없게 되겠쬬?? 그냥 A만 해도 똑같습니다.다만, 여기서 중요해야 할 것은 시작점과 끝점을 정해주지도 않았는데, 모든 값들이 쏟아져 나왔다는 것입니다.

matlab의 경우 : 이 단독으로 쓰일 경우 처음부터 끝까지를 말해주는 것을 알 수 있습니다.

사실 콜론 (:)은 아래와 같은 경우에 많이 응용됩니다. A(i,:) => i 번째 row vector A(:,j) => j번째 column vector 이에 내가 원하는 부분의 vector들을 쉽게 불로 올 있습니다.

간단한 선형대수 이야기를 해보자면 다음과 같은 이유로 vector들을 불러오게 됩니다. matrix의 row vector는 출력 vector를, column vector는 입력 vector와 연관이 있습니다. 그러면, i번째 출력 값만 빠르게 보고싶거나 어떠한 조작이 필요할 때 쓰게됩니다. 반면에 column vector를 불러온다는 것은 입력 값중에 어떠한 값들을 제외 했을 때, 출력 값이 어떻게 변화하는 지 알고자 할 때사용합니다.

마지막으로 벡터화에 사용될 수 있습니다. A(:)

하나의 차원을 축소해줬기 때문에 for문을 안돌려줘도 될 것 같은 느낌을 받습니다. 최적화할 때, objective function에 활용해주면 찰떡이겠죠??​

end의 사용

matlab에서는 end라는 명령어가 있습니다. 만약 end라는 명령어가 없다면 아래와 같이 실행해서 끝에 점을 찾아 봐야겠죠? [m,n]=size(A);

A(m,n)

end를 사용하게되면 A(end,end)로 간단하게 불러올 수 있습니다. 이 end는 연산까지 가능합니다.

A(end-1,end)이렇게 되면 마지막에서 한칸 위인 행과 마지막열에 대한 정보를 불러와줄 수 있습니다.

4. Vector의 사용

여기도 간단하지만, 저는 주로 사용하기 때문에 한번 언급하겠습니다. 저 같은 경우는 반응모델링을 할 때, 원하는 화학종이 궁금하다. 이런 경우 아래와 같이 지정해놓습니다.

species =[ 5:8, 19:21]

그러면 뭔가 Plot도 쉽게 할수 있겠죠? ODE를 풀고나서 얻은 Concetration에서는 이렇게 볼 수 있겠습니다.

C_t=C(:,species);

5. Logical expression (Boolean)

제가 제일 많이 쓰는 작업 중 하나입니다. logical expression을 통한 slicing입니다.

기본적인 구동 과정은 다음과 같습니다.

예시를드리자면, A=[1,2,3,4,5,6] 이 있다면 A>5를 해주게되면 [ 0 0 0 0 0 1]을 반환해줍니다. 조건에 만족하면 1 만족하지 않으면 0을 반환해줍니다. 여기서 나온 값은 vector가 아니라 logical입니다. logical인 경우 1인경우에 해당하는 값을 반환해줍니다.

A=[1,2,3,4,5,6]A(A>5)=6

아직은 쉽죠?? Matlab이라는 프로그램은 선형 연산에서 매우 유용하게 사용할 수 있습니다.

어떠한 최적화 작업을 수행하고 있는데, boudnary에 만족하는지 안하는지 확인해보는 작업을 생각해보도록 하겠습니다. x0라는 초기 vector 값을 가지고 있고, low boundary를 lb라고 해보도록 하겠습니다.

그러면 x0가 lb보다 작은 경우라면 오류가 발생하겠죠? 그때 아래 코드로 간단히 확인해줄 수 있습니다.

x0(x0<lb)

만족하는 경우 빈행렬, 만족하지 않는 경우 값을 반환해줍니다. 만족하지 않는 경우에 대해서 뭔가의 조작이 필요한경우 다음과 같이 간단하게 해줄 수 있습니다.

Applications

1. boundary 변경

lb(x0<lb) =x0(x0<lb);

2. initial 값 변경

x0(x0<lb) =lb(x0<lb);

logical로 slicing을 하고나니, 뭔가 코드가 깔끔해질 수 있는 느낌을 받습니다. 이제 조금 더 활용해보겠습니다.

Linear한 Constraints가 있는 경우에 제약조건에 만족하는지 확인도 바로 가능합니다. A*x<=b 라는 constraints가 있다고 보면, initial 값에 대해서 코드로 바로 확인할 수 있습니다. x0(A*x0<=b) 쉽죠??

​감사합니다.

댓글

이 블로그의 인기 게시물

UE5, 위젯 간 파라미터 패싱 하는법! ( parmeter Passing widget to widget) How to Cast !), Widget Blueprint and MenuAnchor

직선의 수학적 표현 및 Bresenham Algorithm with Python 코드

[Introduction to Topology] 위상수학 Chapter1 집합 이론