【MATLAB】1 자유도 이너탄스 모델로의 커브 피트

6538 단어 진동 공학matlab

개요



이너탄스를 실험 동정할 필요가 있고, lsqcurvefit 로 커브 피팅시키는 코드를 써서 그 비망록.

했던 일





위 그림과 같은 1 자유도 매스 스프링 댐퍼 모델에서 이너턴스를 도출한다.
운동 방정식을 쓰면
Mx''+Cx'+Kx=Fe^{j\omega t}

푸리에 변환
{-\omega^2}MX(\omega)+{j\omega}CX(\omega)+KX(\omega)=F

식변형하여 이너탄스를 구한다.
\frac{{-\omega^2}X(\omega)}{F} = \frac{1}{M+\frac{C}{j\omega}+\frac{K}{-\omega^2}}\\

코드



입력 1: $x$ ($[M,C,K]$)
입력 2: $xdata$ (n 행 1 열의 주파수 데이터)
출력: y(n행 1열의 이너턴스)
함수 dof1_Fa 만들기
function y = dof1_Fa(x,xdata)
% 1自由度イナータンスモデル作成
% x(1) = M
% x(2) = C
% x(3) = K
w = 2*pi*xdata;
A = x(1) + x(2)./(1i*w) + x(3)./(-w.^2);
X = A.\1;
y = 20 * log10(abs(X));
end

초기치$[M,C,K]=[1,50,20000]$로서 lsqcurvefit 로 커브 피트를 실시.
%% 実験データの読み込み
xdata = [17 24 31 36 41 42 43 45 48 53 56]'; % frequency
ydata = [-25 -18 -9 -4 5 9 10 8 3 -1 -3]'; % inertance

%% 1自由度イナータンスモデル呼び出し
fun = @dof1_Fa;

%% 開始点を指定してモデルの当てはめ
x = lsqcurvefit(fun,[1,50,20000],xdata,ydata);

%% 実験データと当てはめた曲線をプロット
freq = linspace(xdata(1),xdata(end));
plot(xdata,ydata,'ko',freq,fun(x,freq),'b-')
xlabel('Frequency [Hz]')
ylabel('Inertance [dB]')
legend('Data','Fitted Curve')
title('Data and Fitted Curve')

초기값은 에이야로 결정하고 있으며, 값에 따라서는 다음 경고가 나온다.

lsqcurvefit 함수 평가 제한, options.MaxFunctionEvaluations = 3.000000e+02
을 초과했기 때문에 중지되었습니다.

결과



x(1) = 3.34899555583242;
x(2) = 85.2344191122035;
x(3) = 247375.437493596;
에서
실험 데이터 ○에 대해, 동정 결과는 청선이 되었다.



참고


  • lsqcurvefit
  • 좋은 웹페이지 즐겨찾기