?? seqfis.asv
字號:
% 序列預測建立Fuzzy模型clc;clear;% 產生序列,序列為正值,否則ceil函數要變k = 0:.1:100;y = [0 0];g = 0.6.*sin(k.*pi)+0.3.*sin(3.*pi.*k)+0.1.*sin(5.*pi.*k);for i = 3: 101 y = [y 0.3*y(i-1)+0.6*y(i-2)+g(i-2)];endg = 2+cos(k);SLen = [fix(length(k)/2)] ;% 窗口長4,表示四個輸入變量,輸出變量1個n = 4;% 序列的邊界gMin = ceil(min(g));gMax = ceil(max(g));% 輸入的標準模糊集設15個,輸出的標準模糊集設7個InNum = 15;InStep = (gMax-gMin)/(InNum-1);OutNum = 10;OutStep = (gMax-gMin)/(OutNum-1);% 三角隸屬度函數參數表InMFP = [gMin,gMin,gMin+InStep];for i = 1:InNum-2 InMFP = [InMFP;gMin+(i-1)*InStep,gMin+i*InStep,gMin+(i+1)*InStep];endInMFP = [InMFP;gMax-InStep,gMax,gMax];OutMFP = [gMin,gMin,gMin+OutStep];for i = 1:OutNum-2 OutMFP = [OutMFP;gMin+(i-1)*OutStep,gMin+i*OutStep,gMin+(i+1)*OutStep];endOutMFP = [OutMFP;gMax-OutStep,gMax,gMax];% 顯示序列figure(1);subplot(3,1,1);plot(k,g);xlabel('產生的序列(x)');ylabel('g(x)');% 顯示輸入隸屬度函數xx = linspace(gMin,gMax,1000);subplot(3,1,2);hold on;for i =1:InNum yy = trimf(xx,InMFP(i,:)); plot(xx,yy);endxlabel('輸入隸屬度函數(xx)');% 顯示輸出隸屬度函數subplot(3,1,3);hold on;for i =1:OutNum yy = trimf(xx,OutMFP(i,:)); plot(xx,yy);endxlabel('輸出隸屬度函數(xx)');% 取50個點,建立規則庫% 規則庫變量,最后列為強度Rule = [];for i = 1:SLen-n+1 % 對一對輸入數據求最大隸屬度的模糊集 In0 = zeros(1,n); % 初始選擇的輸入數據對對應第一個模糊集 InMF = ones(1,n); Out0 = zeros(1); % 初始選擇的輸出數據對對應第一個模糊集 OutMF = ones(1); for j = 1:InNum % 得到隸屬度 In = [evalmf(g(i),InMFP(j,:),'trimf'),evalmf(g(i+1),InMFP(j,:),'trimf'),... evalmf(g(i+2),InMFP(j,:),'trimf'),evalmf(g(i+3),InMFP(j,:),'trimf')]; % 取最大隸屬度的那個模糊集 for ii = 1:n if In(ii)>In0(ii) InMF(ii) = j; In0(ii) = In(ii); end end end % 對一對輸出數據求最大隸屬度的模糊集 for j = 1:OutNum % 得到隸屬度 Out = evalmf(g(i+4),OutMFP(j,:),'trimf'); % 取最大隸屬度的那個模糊集 if Out>Out0 OutMF = j; Out0 = Out; end end % 強度 Dens = prod(In0)*Out0; % 消除沖突規則 if isempty(Rule) Rule = [Rule;InMF,OutMF,Dens]; else % 沖突序號 Coll = 0; for jj=1:size(Rule,1) % 沖突 if (Rule(jj,1:n+1)==[InMF,OutMF]) Coll = jj; break; end end if (Coll>0) if (Rule(Coll,end)<Dens) Rule(Coll,end) = Dens; end else Rule = [Rule;InMF,OutMF,Dens]; end end end% 調用預測文件 Predict;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -