main_02_mjy_new
Statistics + Control & Dynamics 중심의 Octave 학습 예제
ex-recv/02/02_mjy_new/main_02_mjy_new.m
전체 코드
전체 코드를 복사해서 Octave에서 바로 실행할 수 있습니다.
% 주제: 하나의 데이터 세트를 읽어서 대표값과 특징을 계산하고 그리는 연습을 합니다.
% 프로그램 설명 : 구글의 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 출력
실행 흐름
- 주제: 하나의 데이터 세트를 읽어서 대표값과 특징을 계산하고 그리는 연습을 합니다
- 프로그램 설명 : 구글의 2024년도 주가 데이터에 대해 통계 항목을 계산하고,
- 1. 구글의 2024년도 주가 데이터를 준비하라
- 데이터 읽기
- #data_date_cell = data(4:end,1); % 날짜 데이터 cell 형식
- #data_close_cell = data(4:end,2); % 종가 데이터 cell 형식
- 2. 1년치 데이터의 종가에 대해 통계 항목을 계산하라
- 직접 만든 함수로 연산 실행
- 옥타브 제공 함수로 연산 실행
- 두 계산 결과 비교
핵심 함수/주제
randlegendfprintfplotplot_dsubplotxlabelzeros
실습 과제
- 같은 연산을 내장 함수와 사용자 함수 두 방식으로 계산해 오차를 비교해보세요.
- 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
- 축 범위와 라벨을 바꿔 그래프 해석성이 어떻게 달라지는지 확인해보세요.
학습 팁
- 그래프 비교 시 축 범위(XLim/YLim)와 단위를 먼저 고정하면 해석 오류를 줄일 수 있습니다.
- 입력 파일 경로가 현재 작업 디렉터리 기준인지 먼저 확인하세요.
같은 카테고리의 다른 코드
- 수치미분
ex-recv/01/01-CJW-20250321/수치미분.m - main_cjw
ex-recv/01/01-CJW-20250321/main_cjw.m - main-my_diff
ex-recv/01/01-JKH-20250319/main-my_diff.m - hw_1_kim-gpt
ex-recv/01/01-KSG-20250318/hw_1_kim-gpt.m - hw_1_kim
ex-recv/01/01-KSG-20250318/hw_1_kim.m - [Octave] HW#1
ex-recv/01/01-LSH-20250319/[Octave] HW#1.m - Octave_Moon_250319
ex-recv/01/01-MJY-20250319/Octave_Moon_250319.m - Octave01_Park,jm_250319
ex-recv/01/01-PJM-20250319/Octave01_Park,jm_250319.m - [Octave]250318_RYU_poly,dff
ex-recv/01/01-RJW-20250321/[Octave]250318_RYU_poly,dff.m - 과제1_신찬영연구원
ex-recv/01/01-SCY-20250319/과제1_신찬영연구원.m