카테고리
Exercise 01exercise-01
코드와 해설을 함께 읽는 학습 문서
Code Detail
Control & Dynamics + Visualization 중심의 Octave 학습 예제
ex-01/main-01-10.m
코드를 복사해 Octave에서 바로 실행할 수 있습니다.
function out = my_diff(in)
80 lines
# - 입력 데이터 준비
# - 데이터 범위 산정
# - 데이터 출력
# - 연산
# - 시각화
# - 함수 사용
# - 형식있는 출력
# - 자동 레전드
# - figure parameter
# - axis parameter
# - default parameter
# - text
# - animation
# - movie
clc; clear all; close all; addpath(genpath("."));
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};
param.t = {"Units", "Normalized", "FontSize", 20, "FontWeight", "bold", "Interpreter", "none"};
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{:});
ax = axes(param.a{:});
h1 = plot(tt(1:1), pp_val(1:1), param.p{:}, ";pp;");
h2 = plot(tt(1:1), dp_val(1:1), param.p{:}, ";dp;");
text(0.05, 0.90, ["pp = " num2str(pp)], param.t{:});
text(0.05, 0.85, ["pp = " num2str(dp)], param.t{:});
set(ax, "XLim", [0.5, 3.5], "YLim", [-2, 4]);
anim = Animator("output.mp4", "FrameRate", 30, "SaveFlag", false);
for i = 1:20:length(tt)
set(h1, "Xdata", tt(1:i), "Ydata", pp_val(1:i));
set(h2, "Xdata", tt(1:i), "Ydata", dp_val(1:i));
drawnow;
anim.captureFrame();
end
anim.close(); ex-01/main-01-01.m
ex-01/main-01-02.m
ex-01/main-01-03.m
ex-01/main-01-04.m
ex-01/main-01-05.m
ex-01/main-01-06.m
ex-01/main-01-07.m
ex-01/main-01-08.m