이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
감쇠 조화 진동자의 물리학
이 예제에서는 구동력이 없는 경우의 운동 방정식을 풀어 감쇠 조화 진동자의 물리학을 살펴봅니다. 이 예제에서는 저감쇠, 과감쇠, 임계감쇠의 경우를 조사합니다.
목차
운동 방정식 도출하기
운동 방정식 풀기(F = 0)
저감쇠의 경우()
과감쇠의 경우()
임계감쇠의 경우()
결론
1. 운동 방정식 도출하기
아래에 표시된 것처럼 감쇠가 있는 강제 조화 진동자를 가정해 보겠습니다. 진동자가 움직이는 속도에 비례하는 저항력을 모델링합니다.
운동 방정식을 정의합니다. 여기서 각각은 다음과 같습니다.
은 질량입니다.
는 감쇠 계수입니다.
는 스프링 상수입니다.
는 구동력입니다.
syms x(t) m c k F(t) eq = m*diff(x,t,t) + c*diff(x,t) + k*x == F
eq(t) =
와 을 사용하여 방정식을 재작성합니다.
syms gamma omega_0 eq = subs(eq, [c k], [m*gamma, m*omega_0^2])
eq(t) =
질량 을 나눕니다. 이제 해석하기에 편리한 형식의 방정식이 만들어졌습니다.
eq = collect(eq, m)/m
eq(t) =
2. 운동 방정식 풀기(F = 0)
외력이 없는 경우(즉, ) dsolve
를 사용하여 운동 방정식을 풉니다. 단위 변위와 속도 0을 초기 조건으로 사용합니다.
vel = diff(x,t); cond = [x(0) == 1, vel(0) == 0]; eq = subs(eq,F,0); sol = dsolve(eq, cond)
sol =
해를 전개하여 해를 단순화하는 방법을 검토합니다.
sol = expand(sol)
sol =
각 항에는 인수 또는 인수가 있으며 collect
를 사용하여 이들 항을 수집합니다.
sol = collect(sol, exp(-gamma*t/2))
sol =
항 은 해의 여러 부분에 나타납니다. 감쇠비 를 적용하여 더 단순한 형식으로 재작성합니다.
ζ를 위의 항에 대입하면 다음과 같습니다.
syms zeta; sol = subs(sol, ... sqrt(gamma^2 - 4*omega_0^2), ... 2*omega_0*sqrt(zeta^2-1))
sol =
및 를 에 대입하여 해를 더욱 단순화합니다.
sol = subs(sol, gamma, 2*zeta*omega_0)
sol =
구동력이 없는 감쇠 조화 진동자의 운동에 대한 일반해를 도출해 보았습니다. 다음으로 감쇠비 의 3가지 특수한 경우를 살펴보겠습니다. 이 경우, 운동은 더 단순한 형태를 갖습니다. 이러한 3가지 경우는 다음과 같이 불립니다.
저감쇠
과감쇠
임계감쇠
3. 저감쇠의 경우()
이면 은 순수 허수입니다.
solUnder = subs(sol, sqrt(zeta^2-1), 1i*sqrt(1-zeta^2))
solUnder =
위 방정식에 있는 항 에 주목하고 항등식 를 다시 살펴봅니다.
해를 에 대해 재작성합니다
solUnder = coeffs(solUnder, zeta);
solUnder = solUnder(1);
c = exp(-omega_0 * zeta * t);
solUnder = c * rewrite(solUnder / c, 'cos')
solUnder =
solUnder(t, omega_0, zeta) = solUnder
solUnder(t, omega_0, zeta) =
시스템은 의 고유 주파수에서 진동하고 의 지수적 레이트로 감쇠합니다.
및 의 함수로 나타낸 fplot
으로 해를 플로팅합니다.
z = [0 1/4 1/2 3/4]; w = 1; T = 4*pi; lineStyle = {'-','--',':k','-.'}; fplot(@(t)solUnder(t, w, z(1)), [0 T], lineStyle{1}); hold on; for k = 2:numel(z) fplot(@(t)solUnder(t, w, z(k)), [0 T], lineStyle{k}); end hold off; grid on; xticks(T*linspace(0,1,5)); xticklabels({'0','\pi','2\pi','3\pi','4\pi'}); xlabel('t / \omega_0'); ylabel('amplitude'); lgd = legend('0','1/4','1/2','3/4'); title(lgd,'\zeta'); title('Underdamped');
4. 과감쇠의 경우()
이면 은 순수 실수이며 해는 다음으로 재작성할 수 있습니다.
solOver = sol
solOver =
solOver = coeffs(solOver, zeta); solOver = solOver(1)
solOver =
항 에 주목하고 항등식 을 다시 살펴봅니다.
표현식을 에 대해 재작성합니다.
c = exp(-omega_0*t*zeta);
solOver = c*rewrite(solOver / c, 'cosh')
solOver =
solOver(t, omega_0, zeta) = solOver
solOver(t, omega_0, zeta) =
해를 플로팅하여 진동 없이 감쇠하는지 확인합니다.
z = 1 + [1/4 1/2 3/4 1]; w = 1; T = 4*pi; lineStyle = {'-','--',':k','-.'}; fplot(@(t)solOver(t, w, z(1)), [0 T], lineStyle{1}); hold on; for k = 2:numel(z) fplot(@(t)solOver(t, w, z(k)), [0 T], lineStyle{k}); end hold off; grid on; xticks(T*linspace(0,1,5)); xticklabels({'0','\pi','2\pi','3\pi','4\pi'}); xlabel('\omega_0 t'); ylabel('amplitude'); lgd = legend('1+1/4','1+1/2','1+3/4','2'); title(lgd,'\zeta'); title('Overdamped');
5. 임계감쇠의 경우()
이면 해는 다음과 같이 단순화됩니다.
solCritical(t, omega_0) = limit(sol, zeta, 1)
solCritical(t, omega_0) =
임계감쇠된 경우에 대한 해를 플로팅합니다.
w = 1; T = 4*pi; fplot(solCritical(t, w), [0 T]) xlabel('\omega_0 t'); ylabel('x'); title('Critically damped, \zeta = 1'); grid on; xticks(T*linspace(0,1,5)); xticklabels({'0','\pi','2\pi','3\pi','4\pi'});
6. 결론
감쇠비 를 사용해 조화 진동자의 운동을 표현하는 ODE의 해를 구하여 조화 진동자에 대한 다양한 감쇠 상태를 검토해 보았습니다. 3가지 경우 모두를 함께 플로팅하여 비교하고 대조합니다.
zOver = pi; zUnder = 1/zOver; w = 1; T = 2*pi; lineStyle = {'-','--',':k'}; fplot(@(t)solOver(t, w, zOver), [0 T], lineStyle{1},'LineWidth',2); hold on; fplot(solCritical(t, w), [0 T], lineStyle{2},'LineWidth',2) fplot(@(t)solUnder(t, w, zUnder), [0 T], lineStyle{3},'LineWidth',2); hold off; textColor = lines(3); text(3*pi/2, 0.3 , 'over-damped' ,'Color',textColor(1,:)); text(pi*3/4, 0.05, 'critically-damped','Color',textColor(2,:)); text(pi/8 , -0.1, 'under-damped'); grid on; xlabel('\omega_0 t'); ylabel('amplitude'); xticks(T*linspace(0,1,5)); xticklabels({'0','\pi/2','\pi','3\pi/2','2\pi'}); yticks((1/exp(1))*[-1 0 1 2 exp(1)]); yticklabels({'-1/e','0','1/e','2/e','1'}); lgd = legend('\pi','1','1/\pi'); title(lgd,'\zeta'); title('Damped Harmonic Oscillator');