MATLAB에서 미분(차분) 및 적분하는 간단한 코드를 소개하겠습니다. 어떤 형태든 계측기를 사용하든지 하면 ADC든 혹은 해당 계측기의 통신방법을 통해 데이터를 받게 됩니다. 이때, 미분-디지털값이 들어오니까 엄밀히 말하면 차분-과 적분을 수행하게 됩니다. 이를 MATLAB에서 간단히 수행해 보겠습니다. 먼저 대상 함수를 만들어야 할테니 간단히 y = sin(omega * t)를 대상으로 하겠습니다. 이때 샘플타임을 10ms로 하죠.
ts = 0.01;
t=0:ts:10;
omega = pi/5;
y = sin(omega*t);
이제 미분해 보겠습니다. MATLAB 명령어 " diff " 를 사용할 겁니다. 이는 단순히 앞선값에서 바로 뒤의 값을 빼는 것입니다. 차분을 할려면 그 상태에서 샘플 타임으로 나눠줘야하니까
diff_y = [0, diff(y)/ts];
를 사용하도록 합니다. 이때, 앞에다가 "0"의 값을 추가하는 것은, 차분을 사용하면 데이터 개수가 하나 작습니다. 둘씩 빼니까요... 데이터가 1번,2번,3번이 있으면 2번-1번, 3번-2번... 이러면 2개로 줄자나요. 그래서 갯수를 맞춰줄려고 하나 집어넣습니다. 적분은 구분구적분처럼 샘플링타임으로 잘린 사각형의 넓이의 합으로 구하면 됩니다. 일명, ZOH (Zero-Order Hold) 방법이라고 하죠. 여하튼, " cumsum "이라는 함수는 누적도수를 구하는 함수입니다. 여기다가 샘플 타임을 곱해주면, 나눠진 사각형마다의 넓이를 구해 누적해서 더하는 것이 되겠죠. 그러면 적분(정적분)이 수행됩니다.
int_y = cumsum(y)*ts;
figure plot(t, y, 'LineWidth',2) hold on grid on plot(t, diff_y,'r', 'LineWidth',2) plot(t, int_y,'c', 'LineWidth',2) legend('t', 'y_{diff}', 'y_{int}') hold off
프로그램 전체 코드입니다.
ts = 0.01; t = 0:ts:10; oemga = pi/5; y = sin(omega*t); diff_y = [0, diff(y)/ts]; int_y = cumsum(y)*ts; figure plot(t, y, 'LineWidth',2) hold on grid on plot(t, diff_y,'r', 'LineWidth',2) plot(t, int_y,'c', 'LineWidth',2) legend('t', 'y_{diff}', 'y_{int}') hold off
그 실행 결과 입니다.
티스토리로 이전하면서 몇몇 글들을 이렇게 옮기고 있습니다.
'Software > MATLAB' 카테고리의 다른 글
MATLAB/Simulink Scope 창에서 데이터 축출하기 (16) | 2009.07.11 |
---|---|
Embedded Block을 이용해보자. (2) | 2009.04.15 |
MATLAB/Simulink 기동시 읽기나 쓰기 실패(에러)하는 경우 (2) | 2009.04.15 |
sptool을 이용한 간단한 필터적용법 (filter) (6) | 2009.04.15 |
cftool 명령으로 Curve Fitting 간단히 하기 (2) | 2009.04.15 |
Figure에서 Legend사용시 아랫첨자 구현하기 (0) | 2009.04.15 |
Simulink에서 Annotation 사용하기 (4) | 2009.04.15 |