Octave Atelier

코드와 해설을 함께 읽는 학습 문서

Code Detail

main-01-05

Control & Dynamics + Visualization 중심의 Octave 학습 예제

ex-01/main-01-05.m

목록으로

코드를 복사해 Octave에서 바로 실행할 수 있습니다.

카테고리

Exercise 01

exercise-01

코드 길이

56

lines

작성자

-

날짜 정보 없음

패키지

none

pkg load

함수 시그니처

function out = my_diff(in)

전체 코드

56 lines

# - 입력 데이터 준비
# - 데이터 범위 산정
# - 데이터 출력
# - 연산
# - 시각화
# - 함수 사용
# - 형식있는 출력
# - 자동 레전드
# - figure parameter
clc; clear all; close all;

function out = my_diff(in)
    # in: 대상 다항식
    # out: 다항식의 변화량 
    out = in(2:end) - in(1:end-1);
end

function [tt, dt] = timeaxis(tspan, nn)
    # tspan: 시간 구간
    # nn: 시간 간격
    # tt: 시간 배열 (end point is not included)
    if nargin < 1; tspan = [0, 1]; end
    if nargin < 2; nn = 100; end
    T1 = tspan(1);
    T2 = tspan(2);
    if T1 > T2; error("T1 > T2"); end
    dt = (T2 - T1) / nn;
    tt = (0:nn-1) * dt + T1;
end

pp = poly([1, 2, 3]);
dp = polyder(pp);

tspan = [0.8, 3.2]; 
nn = 10000;
[tt, dt] = timeaxis(tspan, nn);
t_ = tt(2:end);

pp_val = polyval(pp, tt);
dp_val = polyval(dp, tt);

printf("tt     min: %6.2f, max: %6.2f\n", min(tt), max(tt));
printf("pp_val min: %6.2f, max: %6.2f\n", min(pp_val), max(pp_val));
printf("dp_val min: %6.2f, max: %6.2f\n", min(dp_val), max(dp_val));

dp_v_0 = diff(pp_val) / dt;
dp_v_1 = my_diff(pp_val) / dt;

figure("position", [320, 180, 1280, 720], "color", "w", "Name", "Polinomial", "NumberTitle", "off");
hold on
grid on
plot(tt, pp_val, ";pp;");
plot(tt, dp_val, ";dp;");
plot(t_, dp_v_0, ";dp_v_0;");
plot(t_, dp_v_1, ";dp_v_1;");

코드 해설

목적

  • Control & Dynamics + Visualization 중심의 Octave 학습 예제

입력

  • 파라미터: in

출력

  • 반환값: out
  • 그래프/figure 출력
  • 콘솔 텍스트 출력

실행 흐름

  1. - 입력 데이터 준비
  2. - 데이터 범위 산정
  3. - 데이터 출력
  4. - 연산
  5. - 시각화
  6. - 형식있는 출력

핵심 함수

  • plot
  • max
  • min
  • printf
  • in
  • polyval
  • timeaxis
  • tspan

실습 과제

  • 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
  • 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.
  • 핵심 함수 plot의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.

학습 팁

  • 그래프 비교 시 축 범위(XLim/YLim)와 단위를 먼저 고정하면 해석 오류를 줄일 수 있습니다.

같은 카테고리 코드

이전 코드 main-01-04 다음 코드 main-01-06