Octave Atelier

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

Code Detail

main_02_mjy_new

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

ex-recv/02/02_mjy_new/main_02_mjy_new.m

목록으로

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

카테고리

Submission Archive

submission

코드 길이

88

lines

작성자

-

날짜 정보 없음

패키지

io

pkg load

전체 코드

88 lines

% 주제: 하나의 데이터 세트를 읽어서 대표값과 특징을 계산하고 그리는 연습을 합니다.
% 프로그램 설명 : 구글의 2024년도 주가 데이터에 대해 통계 항목을 계산하고,
%               30일 기간을 기준으로 통계치를 계산하여 차트를 그리는 프로그램입니다.
% 작성자 : 문제영
% 작성 날짜 : 20250326
clc;clear
pkg load io
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1. 구글의 2024년도 주가 데이터를 준비하라.
% 데이터 읽기
[data_date, data_close] = read_data('google_data_2024.csv');
##data_date_cell = data(4:end,1); % 날짜 데이터 cell 형식
##data_close_cell = data(4:end,2); % 종가 데이터 cell 형식
##data_date = cellfun(@(x) datenum(x, "yyyy-mm-dd"), data_date_cell);
##data_close = cell2mat(data_close_cell);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2. 1년치 데이터의 종가에 대해 통계 항목을 계산하라.
% 직접 만든 함수로 연산 실행
d_mean = data_m(data_close);
d_var = data_var(data_close);
d_dev = data_dev(data_close);
d_rms = data_rms(data_close);

% 옥타브 제공 함수로 연산 실행
d_O_mean = mean(data_close);
d_O_var = var(data_close,1);
d_O_dev = std(data_close,1);
d_O_rms = sqrt(mean(data_close.^2));

% 두 계산 결과 비교
fprintf("직접 평균: %f, Octave 평균: %f\n", d_mean, d_O_mean);
fprintf("직접 분산: %f, Octave 분산: %f\n", d_var, d_O_var);
fprintf("직접 표준편차: %f, Octave 표준편차: %f\n", d_dev, d_O_dev);
fprintf("직접 RMS: %f, Octave RMS: %f\n", d_rms, d_O_rms);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 3. 같은 데이터에서 30일째 이후부터 직전 30일에 대해서 통계 항목을 계산하고 차트를 그려라.
n_data = length(data_close);
after_days = 30;
data_date_after = data_date(after_days+1:end);

data_close_m = zeros(n_data-after_days,1);
data_close_v = zeros(n_data-after_days,1);
data_close_d = zeros(n_data-after_days,1);
data_close_rms = zeros(n_data-after_days,1);

for i = after_days+1 : n_data

  data_after_days = data_close(i-after_days:i-1);

  data_close_m(i-after_days) = data_m(data_after_days); % 직전 30일 평균
  data_close_v(i-after_days) = data_var(data_after_days); % 직전 30일 분산
  data_close_d(i-after_days) = data_dev(data_after_days); % 직전 30일 표준편차
  data_close_rms(i-after_days) = data_rms(data_after_days); % 직전 30일 rms

end

% 차트 그리기
width = 1300; height = 800;
# set(figure(1),'Position',[200 100 width height])
set(figure(1))

subplot(2,2,1)
plot_d(data_date_after, data_close_m, 'r', "종가 평균", "Mean");
xlabel('Date'); legend('평균');

subplot(2,2,2)
plot_d(data_date_after, data_close_v, 'b', "종가 분산", "Variance");
xlabel('Date'); legend('분산');

subplot(2,2,3)
plot_d(data_date_after, data_close_d, 'g', "종가 표준편차", "Standard Deviation");
xlabel('Date'); legend('표준편차');

subplot(2,2,4)
plot_d(data_date_after, data_close_rms, 'm', "종가 RMS", "RMS");
xlabel('Date'); legend('RMS');


figure(342)
plot(rand(1,10),rand(1,10)); hold on
plot(rand(1,10),rand(1,10)); hold on
plot(rand(1,10),rand(1,10),"DisplayName","test"); hold on
plot(rand(1,10),rand(1,10)); hold on
hold off
legend({'test1','test2'},'Location','SouthEast');

코드 해설

목적

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

입력

  • 입력 파일: google_data_2024.csv

출력

  • 그래프/figure 출력

실행 흐름

  1. 주제: 하나의 데이터 세트를 읽어서 대표값과 특징을 계산하고 그리는 연습을 합니다
  2. 프로그램 설명 : 구글의 2024년도 주가 데이터에 대해 통계 항목을 계산하고,
  3. 1. 구글의 2024년도 주가 데이터를 준비하라
  4. 데이터 읽기
  5. #data_date_cell = data(4:end,1); % 날짜 데이터 cell 형식
  6. #data_close_cell = data(4:end,2); % 종가 데이터 cell 형식
  7. 2. 1년치 데이터의 종가에 대해 통계 항목을 계산하라
  8. 직접 만든 함수로 연산 실행
  9. 옥타브 제공 함수로 연산 실행
  10. 두 계산 결과 비교

핵심 함수

  • rand
  • legend
  • fprintf
  • plot
  • plot_d
  • subplot
  • xlabel
  • zeros

실습 과제

  • 같은 연산을 내장 함수와 사용자 함수 두 방식으로 계산해 오차를 비교해보세요.
  • 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
  • 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.

학습 팁

  • 그래프 비교 시 축 범위(XLim/YLim)와 단위를 먼저 고정하면 해석 오류를 줄일 수 있습니다.
  • 입력 파일 경로가 현재 작업 디렉터리 기준인지 먼저 확인하세요.

같은 카테고리 코드

이전 코드 data_var 다음 코드 plot_d