main-01-07
Control & Dynamics + Visualization 중심의 Octave 학습 예제
ex-01/main-01-07.m
함수 시그니처
function out = my_diff(in) 전체 코드
전체 코드를 복사해서 Octave에서 바로 실행할 수 있습니다.
# - 입력 데이터 준비
# - 데이터 범위 산정
# - 데이터 출력
# - 연산
# - 시각화
# - 함수 사용
# - 형식있는 출력
# - 자동 레전드
# - figure parameter
# - axis parameter
# - default 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
function param = default_param()
# param: plot parameter
param.f = {"position", [320, 180, 1280, 720], "color", "w", "Name", "Polinomial", "NumberTitle", "off"};
param.a = {"NextPlot", "add", "XGrid", "on", "YGrid", "on", "FontSize", 20, "Xlabel", "Time [sec]", "Ylabel", "Amplitude"};
param.p = {"LineWidth", 1.2};
end
param = default_param();
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(param.f{:});
axes(param.a{:});
plot(tt, pp_val, param.p{:}, ";pp;");
plot(tt, dp_val, param.p{:}, ";dp;");
plot(t_, dp_v_0, param.p{:}, ";dp_v_0;");
plot(t_, dp_v_1, param.p{:}, ";dp_v_1;"); 코드 해설
목적
Control & Dynamics + Visualization 중심의 Octave 학습 예제
입력
- 파라미터: in
출력
- 반환값: out
- 그래프/figure 출력
- 콘솔 텍스트 출력
실행 흐름
- - 입력 데이터 준비
- - 데이터 범위 산정
- - 데이터 출력
- - 연산
- - 시각화
- - 형식있는 출력
핵심 함수/주제
plotmaxminprintfdefault_paraminpolyvaltimeaxis
실습 과제
- 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
- 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.
- 핵심 함수 plot의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.
학습 팁
- 그래프 비교 시 축 범위(XLim/YLim)와 단위를 먼저 고정하면 해석 오류를 줄일 수 있습니다.
같은 카테고리의 다른 코드
- main-01-01
ex-01/main-01-01.m - main-01-02
ex-01/main-01-02.m - main-01-03
ex-01/main-01-03.m - main-01-04
ex-01/main-01-04.m - main-01-05
ex-01/main-01-05.m - main-01-06
ex-01/main-01-06.m - main-01-08
ex-01/main-01-08.m - main-01-09
ex-01/main-01-09.m - main-01-10
ex-01/main-01-10.m - main-01
ex-01/main-01.m