matlab遗传工具箱ga,用遗传算法工具箱(GA)识别Bouc-Wen模型微分方程参数
本帖最后由 hgrhgr520 于 2016-3-20 14:30 編輯
Bouc-Wen模型因數(shù)字處理方便簡單而得到較為廣泛的應(yīng)用,力可以表示為:
QQ截圖20160320125352.jpg (3.2 KB, 下載次數(shù): 21)
2016-3-20 12:49 上傳
利用遺傳算法工具箱(GA)對Bouc-Wen模型進行參數(shù)識別。
實驗數(shù)據(jù)來源于對磁流變阻尼器(MR damper)進行性能測試,試驗獲得的數(shù)據(jù)包括力F,位移x,采用頻率已知,速度和加速度可以由位移求導(dǎo)得出。
參數(shù)識別出現(xiàn)程序如下:(文件名:Copy_0_of_BoucWen)
function j=myfung(x)
y0=[0];
yy=y0;
tspan=[]';
s=[]';
v=[]';
Ft=[]';
rr=max(size(s));%計算數(shù)據(jù)個數(shù)
i=1;
while (i1e5))%%判斷是否出現(xiàn)奇異點,具體忘了。。
[t y]=ode45(@uubird,[tspan(i),tspan(i+1)],y0,[],v(i),x);%參考論壇的
y0=y(end,:);
yy=[yy;y0];
i=i+1;
kk=max(size(y));
if kk>150? ???%微分方程計算,停止是有條件的(具體沒去研究),這邊設(shè)置150次,不管有沒有收斂,都停止,不然整個程序運行的實際太久,你也可以改成其他的,慢慢研究
break;
end
end
if??(i==rr)&(~isnan(yy(1,1)))==1%判斷是否出現(xiàn)奇異點(就是NAN),如果沒有出現(xiàn),就是正常的
F=x(:,4)*yy(:,1)+x(:,5)*(s-ones(size(s))*x(:,6))+x(:,7)*v;%x(:,4)代表alpha 5代表k0,6代表s0? ?7代表c0? ? 位移s就是公式中的x
j=sum((F-Ft).*(F-Ft));
i=i+1;
else??i
j=1e10;%因為出現(xiàn)奇異值,所以隨便給一個目標函數(shù)值(這個要足夠大),目的是排除這組優(yōu)化值(也就是這個種群不要)
i=rr;
end
function dy=uubird(t,y,v,x)
dy=-x(:,1)*abs(v)*y*abs(y)-x(:,2)*(v)*y^2+x(:,3)*v;% 1r 2beita 3A??取n=2
結(jié)果.jpg (112.33 KB, 下載次數(shù): 31)
2016-3-20 14:19 上傳
運行結(jié)果
擬合效果對比程序(文件名BoucWenjianyan247):
clc
clear
datasorce=load('247-0.txt');
II=1;
a=2000;
b=3000;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?%為了擬合。。
datasorce=datasorce(a:b,:);%去一個周期進行對比
s=datasorce(:,1)*0.7857-0.027860;%位移換算(你不用管)
Ft=datasorce(:,4)*1000/3.44;? ???%力換算
sa=(max(s)-min(s))/2-max(s);
s=s+sa;
sFt=(max(Ft)-min(Ft))/2-max(Ft);
Ft=Ft+sFt;
for i=1:(b-a+1)
A(i)=i*0.001;
end
T=A';
p=polyfit(T,s(:),10);%擬合,用于求解
y10=polyval(p,T);
syms x
y= p(1)*x^10 + p(2)*x^9 +p(3)*x^8 + p(4)*x^7 + p(5)*x^6 + p(6)*x^5 + p(7)*x^4 + p(8)*x^3 +p(9)*x^2 + p(10)*x +p(11);
f=diff(y);
ac=diff(y,2);
for i=1:(b-a+1)
x=i*0.001;
v(i)=eval(f);
acc(i)=eval(ac);
vm(i)=(v(i)*v(i)-s(i)*acc(i))^0.5;
I(i)=0;
end
v=v';
T=T';
y0=[0];
yy=y0;
rr=max(size(s));
tspan=0:0.001:(rr-1)*0.001;
i=1;
x=[0.764? ?? ???-0.7651? ?? ???2.291? ?? ???3.108? ?? ???4.994? ?? ???2.163925? ?? ???3.002];%%參數(shù)識別出出來的結(jié)果
while (i
[t y]=ode45(@uubird,[tspan(i),tspan(i+1)],y0,[],v(i),x);
y0=y(end,:);
yy=[yy;y0];
i=i+1;
end
F=x(:,4)*yy(:,1)+x(:,5)*(s-ones(size(s))*x(:,6))+x(:,7)*v;%4alpha 5k0 6x0 7c0
s=s(100:2:800,:);
v=v(100:2:800,:);
F=F(100:2:800,:);
Ft=Ft(100:2:800,:);
figure(1),plot(v,Ft,'k',v,F,'r--'),hold on
figure(2),plot(s,Ft,'k',s,F,'r--'),hold on
擬合效果.jpg (77.58 KB, 下載次數(shù): 19)
2016-3-20 14:18 上傳
實線是試驗測得的結(jié)果。
Bouc-Wen參數(shù)識別參考程序.rar
(59.77 KB, 下載次數(shù): 14324)
2016-3-20 14:28 上傳
點擊文件名下載附件
如果覺得效果不夠好,可以增加迭代次數(shù)。
完整程序參見附件
總結(jié)
以上是生活随笔為你收集整理的matlab遗传工具箱ga,用遗传算法工具箱(GA)识别Bouc-Wen模型微分方程参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【开发】 eclipse汉化包
- 下一篇: [css] 为什么要使用sass/le