[MATLAB] 3차원 vector field diagram과 시뮬레이션 결과 mapping

2022. 9. 26. 10:08·연구 Research/제어 Control

 

저번 글에서 phase plane과 vector field diagram을 그려주는 MATLAB app을 소개했었다.

그런데 이 프로그램은 2차원에서만 가능하기 때문에 변수가 하나 더 늘면 구현이 불가능했다.

 

그래서 간단하게 3차원 공간에서 벡터 필드를 그리고, 실제 초기 조건에 대하여 시뮬레이션까지 수행하여서 그려보는 코드를 작성하였다.

 


1. 시스템

 

 

$\dot{x}=-x+y$

$\dot{y}=-0.1x^3-y-10\sin x$

$\dot{z}=y-z$

 

다음과 같은 시스템이 있다고 할 때

 

interval = pi/2 ;
start_pt = -pi ;
end_pt = -start_pt ;

[x1,y1,z1] = meshgrid(start_pt:interval:end_pt, start_pt:interval:end_pt, start_pt:interval:end_pt );

위와 같이 mapping할 구간을 정해준다. $[-\pi,\pi]$를 $\pi/2$ 간격으로 구한다.

 

그리고 위의 시스템 식을 코드 맨 아래에 다음과 같이 정의해준다.

 

function f = system(t, state)

    x = state(1) ;
    y = state(2) ;
    z = state(3) ;

    dx = -x + y ;
    dy = -0.1 * x^3 - y - 10*sin(x) ;
    dz = y - z ;

    f = [ dx ; dy ; dz ] ;
end

 

시스템이라는 함수는 시간과 state값을 받아서 변화율을 되돌려주는 함수이다. 여기서 함수의 argument 중 시간값을 포함한 이유는 시뮬레이션을 위해서이다. (뒤에서 나온다.)

 

2. Vector field 계산

 

이제 각 점에 대한 vector값을 계산한다. x,y,z에 대한 변화율을 u,v,w라는 변수라고 생각하고 구한다.

 

u = zeros(size(x1));
v = zeros(size(y1));
w = zeros(size(z1));

t = 0 ;
for i = 1:numel(x1)
    Yprime = system(t, [x1(i); y1(i); z1(i)]);
    u(i) = Yprime(1);
    v(i) = Yprime(2);
    w(i) = Yprime(3);
end

 

 

3. 시뮬레이션

 

시뮬레이션은 매트랩에 내장되어있는 시뮬레이션 함수 ode45를 사용한다. 다른 솔버들도 있지만 ode45가 범용적으로 쓰이기 때문이다.

 

x0 = [pi/2, pi/2, pi/2] ;
Tmax = 25 ;
func_handle = @system ;
[time, solvec] = ode45(func_handle, [0,Tmax], x0) ;

 

x0는 초기 state이고, Tmax는 시뮬레이션 하고자하는 최대 시간이다. 시작시간은 0으로 설정하였다. 앞에서 정의했었던 system이라는 함수의 handle을 넘겨주어야 솔버가 계산을 할 수 있다.

 

 

4. Plot

 

이제 구한 값들을 plot할 때이다. 

figure ;
quiver3(x1, y1, z1, u, v, w, 'b','LineWidth', 1.0) ;
xlabel('$x$') ;
ylabel('$y$') ;
zlabel('$z$') ;
hold on;
plot3(solvec(:,1), solvec(:,2), solvec(:,3),'r') ;
plot3(solvec(1,1), solvec(1,2), solvec(1,3),'k*') ;

각 축은 x,y,z 이름을 붙였다. 기본 interpreter를 LaTeX로 해놔서 $$를 붙여서 표현했다.

시작점은 검은색 마커로 표시했다.

 

 

결과는 다음과 같다.

참고로 이런 3D plot은 

 

view(90,0)

과 같은 코드를 추가하여 어떤 각도에서 바라볼지 정할 수 있다.

 

 

view_array = [90,0 ; 0,0 ; 0,90] ;

for i = 1:3
    figure ;
    quiver3(x1,y1,z1,u,v,w, 'b','LineWidth', 1.0) ;
    xlabel('$x$') ;
    ylabel('$y$') ;
    zlabel('$z$') ;
    hold on;
    plot3(solvec(:,1),solvec(:,2),solvec(:,3),'r') ;
    plot3(solvec(1,1),solvec(1,2),solvec(1,3),'k*') ;
    view(view_array(i,1), view_array(i,2)) ;
end

 

다음과 같이 반복문을 통해서 view가 (90,0)일 때, (0,0)일 때, (0,90)일 때를 plot할 수 있다.

 

여기서 view 안에 들어가는 숫자는 좌표축에 대한 카메라 시선의 방위각과 고도각을 의미한다. 

 

1) view(90,0) : 방위각 90도, 고도각 0도라는 말은 x축 상에서 바라보는 그림이 된다.

 

 

2) view(0,0) : 방위각 0도, 고도각 0도. 이 때는 y축 상에서 바라본다.

 

 

3) view(0,90) : 방위각 0도, 고도각 90도라는 말은 z축 상에서 바라본다는 의미이다.

 

 

저작자표시 비영리 변경금지 (새창열림)

'연구 Research > 제어 Control' 카테고리의 다른 글

[제어] eigenvalue와 stability 분석 (algebraic multiplicity와 geometric multiplicity의 차이)  (0) 2022.12.14
[제어] Lyapunov stability theorem 증명  (0) 2022.09.29
[제어] Phase portrait 프로그램과 예시  (0) 2022.09.16
Low pass filter에서 시상수(Time constant)의 의미  (0) 2022.08.16
[Optimal Control] Optimal control problem의 performance index  (0) 2022.07.29
'연구 Research/제어 Control' 카테고리의 다른 글
  • [제어] eigenvalue와 stability 분석 (algebraic multiplicity와 geometric multiplicity의 차이)
  • [제어] Lyapunov stability theorem 증명
  • [제어] Phase portrait 프로그램과 예시
  • Low pass filter에서 시상수(Time constant)의 의미
보통의공대생
보통의공대생
수학,프로그래밍,기계항공우주 등 공부하는 기록들을 남깁니다.
  • 보통의공대생
    뛰는 놈 위에 나는 공대생
    보통의공대생
  • 전체
    오늘
    어제
    • 분류 전체보기 (459) N
      • 공지 (1)
      • 영어 공부 English Study (40)
        • 텝스 TEPS (7)
        • 글 Article (21)
        • 영상 Video (10)
      • 연구 Research (99)
        • 최적화 Optimization (3)
        • 데이터과학 Data Science (7)
        • 인공지능 Artificial Intelligent (40)
        • 제어 Control (45)
      • 프로그래밍 Programming (103)
        • 매트랩 MATLAB (25)
        • 파이썬 Python (33)
        • 줄리아 Julia (2)
        • C++ (3)
        • 리눅스 우분투 Ubuntu (6)
      • 항공우주 Aeronautical engineeri.. (21)
        • 항법 Navigation (0)
        • 유도 Guidance (0)
      • 기계공학 Mechanical engineering (13)
        • 열역학 Thermodynamics (0)
        • 고체역학 Statics & Solid mechan.. (10)
        • 동역학 Dynamics (1)
        • 유체역학 Fluid Dynamics (0)
      • 수학 Mathematics (34)
        • 선형대수학 Linear Algebra (18)
        • 미분방정식 Differential Equation (3)
        • 확률및통계 Probability & Sta.. (2)
        • 미적분학 Calculus (1)
        • 복소해석학 Complex Analysis (5)
        • 실해석학 Real Analysis (0)
      • 수치해석 Numerical Analysis (21)
      • 확률 및 랜덤프로세스 Random process (2)
      • 추론 & 추정 이론 Estimation (3)
      • 기타 (26)
        • 설계 프로젝트 System Design (8)
        • 논문작성 Writing (55)
        • 세미나 Seminar (2)
        • 생산성 Productivity (3)
      • 유학 생활 Daily (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    matplotlib
    pytorch
    ChatGPT
    teps
    옵시디언
    텝스공부
    MATLAB
    Numerical Analysis
    에러기록
    IEEE
    인공지능
    우분투
    Statics
    논문작성
    JAX
    생산성
    서버
    딥러닝
    Dear abby
    LaTeX
    Python
    WOX
    수치해석
    고체역학
    Zotero
    논문작성법
    obsidian
    Julia
    Linear algebra
    텝스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
보통의공대생
[MATLAB] 3차원 vector field diagram과 시뮬레이션 결과 mapping
상단으로

티스토리툴바