용수철 운동은 세 가지로 나뉜다.
1. 저감쇠 (Under Damping) 2. 임계감쇠 (Critical Damping) 3. 과감쇠 (Over Damping)
하나하나 다뤄보기 전에 기본적인 용수철 운동의 공식을 알아보자.
좌변은 질량 m 인 추의 합력을, 우변은 감쇠력과 용수철 복원력의 합이다. 즉, 추에 가해진 힘 = 합력(감쇠력+복원력).
y'' : 추의 가속도, y' : 추의 속도, y : 추의 변위
my'' = -cy' - ky m : 용수철에 매달린 추의 질량, c : 감쇠 상수, k : 용수철 상수
감쇠 상수를 제외하고 나머지 상수들은 임의로 정해준다.
% mass
m = 5;
% string constant
k = 10;
감쇠 상수는 3가지를 array의 형태로 변수 c에 저장한다.
% Damping Constant
c = [10*sqrt(3), 10*sqrt(2), 2];
1. 과감쇠 (Over Damping)
1. 상계미분방정식 설정. 용수철 문제에 맞는 공식 사용. my'' = -cy' - ky
과감쇠는 감쇠상수(c)를 제일 큰 값인
을 고른다.
용수철 공식에 따라서 2계 상미분방정식을 작성해 준다. 초기조건 적용을 위해 y'을 Dy 안에 따로 저장해준다.
% Overdamping
% damping constant
c1 = c(1);
syms y(t);
ode = diff(y,t,2)*m == -(c1)*diff(y) -k*y;
Dy = diff(y);
2. 초기값 설정. 이때 여러 경우를 보기 위해 2개의 초기값을 설정해주자. 각 초기값에 맞는 상미분방정식을 풀자! (dsolve)
% initial conditions
cond1 = y(0) == 6;
cond2 = Dy(0) == 1;
cond3 = Dy(0) == -1;
conds1 = [cond1 cond2];
conds2 = [cond1 cond3];
ySol_over1 = dsolve(ode, conds1);
ySol_over2 = dsolve(ode, conds2);
3. 그래프 그리기. x축을 원래의 축으로 표시해주고, hold on/off 를 사용해서 그래프를 한 figure에 동시에 그리자.
subplot(3,1,1);
fplot(ySol_over1, [0 10]);
hold on
fplot(ySol_over2, [0 10]);
set(gca, 'XAxisLocation', 'origin');
hold off
빠르게 0 에 도달하는 그래프를 볼 수 있다!
2. 임계 감쇠 (Critical Damping)
임계감쇠는 감쇠 상수가 두번째로 큰 값을 사용한다.
c2 = c(2);
위의 방식과 동일하게 진행해준다!
ode1 = diff(y,t,2)*m == -(c2)*diff(y) - k*y;
ySol_crit1 = dsolve(ode1, conds1);
ySol_crit2 = dsolve(ode1, conds2);
그래프를 그려준다.
fplot(ySol_crit1, [0 10]);
hold on
fplot(ySol_crit2, [0 10]);
title('Critical Damping')
hold off
과감쇠와 유사한 그래프의 형태이다. 조금 더 x축에 빠르게 수렴하는 걸 볼 수 있다.
3. 저감쇠 (Under Damping)
c3 = c(3);
c3 안에 감쇠 상수 중 제일 작은 값인 2를 넣어준다.
나머지 과정은 위 2개의 과정과 동일하다!
ode2 = diff(y,t,2)*m == -(c3)*diff(y) -k*y;
ySol_under1 = dsolve(ode2, conds1);
ySol_under2 = dsolve(ode2, conds2);
그래프를 그려준다!
fplot(ySol_under1, [0 10]);
hold on
set(gca, 'XAxisLocation', 'origin')
fplot(ySol_under2, [0 10]);
title('Under Damping')
hold off
용수철 운동의 세 가지 대표적인 운동에 대해 알아 보았고 마지막으로 matlab 'subplot' 을 이용해서 3개의 그래프를 한번에 표시해보자.
...................................
subplot(3,1,1);
fplot(ySol_over1, [0 10]);
hold on
fplot(ySol_over2, [0 10]);
set(gca, 'XAxisLocation', 'origin');
title('Over Damping')
hold off
...................................
subplot(3,1,2);
fplot(ySol_crit1, [0 10]);
hold on
fplot(ySol_crit2, [0 10]);
title('Critical Damping')
hold off
...................................
subplot(3,1,3);
fplot(ySol_under1, [0 10]);
hold on
set(gca, 'XAxisLocation', 'origin')
fplot(ySol_under2, [0 10]);
title('Under Damping')
hold off
'Computer Science > Matlab(수학)' 카테고리의 다른 글
매트랩 [2계 상미분방정식] 라플라스 변환과 합성곱 (Laplace Transform and Convolution) (0) | 2023.03.05 |
---|---|
매트랩 [2계 상미분방정식] 라플라스 변환-단위계단함수 (Laplace Transform-Heaviside Function) (0) | 2023.02.27 |
매트랩 [2계 상미분방정식] 라플라스 변환 (Laplace Transform) (0) | 2023.02.19 |
매트랩 [2계 상미분방정식]의 연립 방정식으로의 변환 (수치적, 해석적 풀이) (0) | 2023.02.16 |
매트랩 [1계 상미분방정식] 초기값 문제. 기울기 벡터장 그리기. (0) | 2023.02.05 |