日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

标准PSO辨识NARMAX模型源码程序

發布時間:2025/4/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 标准PSO辨识NARMAX模型源码程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

% 用標準PSO辨識NARMAX模型
% y=[-0.4 0.2 0.4 0.8 0.2 0.3]*...
% ? [y0(k-1) y0(k-2)*y0(k-3) y0(k-4) u(k-1)^3 y0(k-2)^2 u(k-3)]'
% +e(k)
% function [iter,Xgbest,fgbest]=sPso(err,var,Nc_max)
clc,clear,format long
%-----------------------------------------------------------paramters setup
var=0.001; ? ? ? ? % 噪聲方差
% iter_max=Nc_max*4;
err=0.01;
iter_max=1000; ? ?% 最大迭代次數
L=15; ? ? ? ? ? % 窗口寬度
N=30; ? ? ? ? ? ?% 種群規模
C1=2; ? ? ? ? ? ?% 加速度常數
C2=C1;
Xmin=-3; ? ? ? ? % 解取值范圍[Xmin,Xmax]
Xmax=3;
p=6; ? ? ? ? ? ? % 粒子維數
w=linspace(0.9,0.5,iter_max); ? % 慣性權重
X=Xmin+(Xmax-Xmin)*rand(p,N); ? % 粒子位置
Xpbest=X; ? ? ? ? ? ? ? ? ? ? ? % 個體最佳位置
Xgbest=Xmin+(Xmax-Xmin)*rand(p,1); ? % 種群最佳位置
fpbest=0*rand(1,N); ? ? ? ? ? % 個體最佳適應度值
fgbest=0; ? ? ? ? ? ? ? ? ? ? % 種群最佳適應度值
fgbest_fig=zeros(1,iter_max);?
Xgbest_fig=zeros(p,iter_max);
Vmax=(Xmax-Xmin)*0.2;
V=Vmax*(2*rand(p,N)-1);

u=idinput(L,'rgs',[0 1],[-1 1]); ? ? ?% 隨機白噪聲序列,取L個,均值為0,方差為1
e=idinput(L,'rgs',[0 1],[-var var]); ?% 高斯白噪聲,均值為0,方差為var


theta0=[-0.4 0.2 0.4 0.8 0.2 0.3]; ? ?% 待辨識參數真值

%-----------------------------------------------output of theoretical value?
y0(1:4)=0;
y(1:4)=0;
for k=5:L
? ? y0(k)=theta0*[y0(k-1) y0(k-2)*y0(k-3) y0(k-4) u(k-1)^3 y0(k-2)^2 u(k-3)]'+e(k);
end
%----------------------------------------------------------------------main
iter=0;
while iter<iter_max
? ? iter=iter+1;
? ? for i=1:N
? ? ? ? for k=5:L
? ? ? ? ? ? y(k)=X(:,i)'*[y(k-1) y(k-2)*y(k-3) y(k-4) u(k-1)^3 y(k-2)^2 u(k-3)]';
? ? ? ? end
? ? ? ? J=1/(1+(y-y0)*(y-y0)');
? ? ? ? if J>fpbest(i)
? ? ? ? ? ? fpbest(i)=J;
? ? ? ? ? ? Xpbest(:,i)=X(:,i);
? ? ? ? end?
? ? end
? ? [fitnessmax,index]=max(fpbest);
? ? if fitnessmax>fgbest
? ? ? ? fgbest=fitnessmax;
? ? ? ? Xgbest=X(:,index);
? ? end
? ? for i=1:N
? ? ? ? r1=rand;?
? ? ? ? r2=rand;
? ? ? ? fai1=C1*r1;
? ? ? ? fai2=C2*r2; ?
? ? ? ??
? ? ? ? % 速度更新
? ? ? ? V(:,i)=w(iter)*V(:,i)+fai1*(Xpbest(:,i)-X(:,i))+fai2*(Xgbest(:,1)-X(:,i));

? ? ? ? % 若速度超過限定值,則讓其等于邊界值
? ? ? ? index=find(abs(V(:,i))>Vmax);
? ? ? ? if(any(index))
? ? ? ? ? ? V(index,i)=V(index,i)./abs(V(index,i)).*Vmax;
? ? ? ? end
? ? ? ??
? ? ? ? % 位置更新
? ? ? ? X(:,i)=X(:,i)+V(:,i);
? ? end
% ? ? if (1-fgbest)<err ? ? ??
% ? ? ? ? return ?
% ? ? end
? ? fgbest_fig(iter)=fgbest;
? ? Xgbest_fig(:,iter)=Xgbest;
end
%--------------------------------------------------------------------figure
% hold on
figure
plot(1:iter_max,fgbest_fig,'-.');
figure
plot(1:iter_max,Xgbest_fig);
%----------------------------------------------------------------------disp
disp(Xgbest)

?

B-55

總結

以上是生活随笔為你收集整理的标准PSO辨识NARMAX模型源码程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。