문
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
tsam = 0.005;
t_final2 = 2;
t = (0:tsam:t_final2)';
x>
y>
a = 5;
f1 = 0.5;
u = a1 * 2 * f1 * pi * cos(2 * f1 * pi * t);
[t, x] = ode45(@(t,x)funBoucWen(t,x), t, [0 0]);
predicted = @(a, xdata) a(1)*u(:,1)+a(2)*x(:,1)+a(3)*x(:,2);
a0 = [0.1;0.1;0.1];
[ahat,resnorm,residual,exitflag,output,lambda,jacobian] =...
lsqcurvefit(predicted,a0,xdata,ydata);
function dxdt = funBoucWen(t, x)
A = 38.012; %A
B = -1.401; %B
n = 1;
a1 = 5;
f1 = 0.5;
gamma = 4.794; %gamma
u = a1 * 2 * f1 * pi * cos(2 * f1 * pi * t);
dxdt = [(a1 * 2 * f1 * pi * cos(2 * f1 * pi * t));
-gamma*abs(u)*x(2)*abs(x(2))^(n-1)-B*u*abs(x(2))^n+A*u];
end
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Boucwen 모델을 구하는 예제입니다.
여러가지 변수를 lsqcurvefit으로 최적화하는 모델을 짰습니다.
위의 코드는 잘 작동합니다.
그런데 위의 코드에서,"A, B and gamma"의 변수들도 최적화를 시키기 위해
아래와 같이 시도를 해봤는데,
계속 오류가 발생합니다... 충고좀 해주시면 감사하겠습니다.
##
https://www.mathworks.com/matlabcentral/answers/412158-boucwen-model-parameter-error
코드를 보면 'BoucForce'라는 값이 필요한데 위의 사이트에 업로드 해놨습니다.
data불러오시고 BoucForce만 남기고 나머지 다 지우시면 됩니다... 감사합니다..
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
syms a_1 a_2 a_3 a_4 a_5 a_6
tsam = 0.005;
t_final2 = 2;
t = (0:tsam:t_final2)';
x>
y>
a2 = 5;
f2 = 0.5;
u2 = a2 * 2 * f2 * pi * cos(2 * f2 * pi * t);
[t, x] = ode45(@(t,x)funBoucWen(t,x), t, [0 0]);
FF = a_1*u2(:,1)+a_2*x(:,1)+a_3*x(:,2);
ht = matlabFunction(FF)
predicted = ht;
a = [0.1;0.1;0.1;30;-1.0;4];
[ahat,resnorm,residual,exitflag,output,lambda,jacobian] =...
lsqcurvefit(predicted,a,xdata,ydata);
function dxdt = funBoucWen(t, x)
global input
a_1=input,a_1;
a_2=input,a_2;
a_3=input,a_3;
a_4=input,a_4;
a_5=input,a_5;
a_6=input,a_6;
%A = a(4)
%B = a(5)
n = 1;
a1 = 5;
f1 = 0.5;
%gamma = a(6)
u = a1 * 2 * f1 * pi * cos(2 * f1 * pi * t);
dxdt = [(a1 * 2 * f1 * pi * cos(2 * f1 * pi * t));
-abs(u)*a_6*x(2)*abs(x(2))^(n-1)-a_5*u*abs(x(2))^n+a_4*u];
%vars = [x(1) x(2)];
end
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
코드에
xdata = t; y
xdata = t;
ydata = BoucForce(:,1);
x>, y>를 이렇게 수정해주시면 감사하겠습니다.