【MATLAB】1 자유도 이너탄스 모델로의 커브 피트
개요
이너탄스를 실험 동정할 필요가 있고, 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;
에서
실험 데이터 ○에 대해, 동정 결과는 청선이 되었다.
참고
위 그림과 같은 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;
에서
실험 데이터 ○에 대해, 동정 결과는 청선이 되었다.
참고
Reference
이 문제에 관하여(【MATLAB】1 자유도 이너탄스 모델로의 커브 피트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moko_middo/items/e6d4c1e33c1bc1045023텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)