📄 unknownfunc.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% For plotting training data from the "unknown function" G(x,z)%% By: Kevin Passino% Version: 1/13/99%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear% For the M=7 casex7=-6:2:6;M=length(x7)for i=1:M, G7(i)=exp(-50*(x7(i)-1)^2)-0.5*exp(-100*(x7(i)-1.2)^2)+atan(2*x7(i))+2.15+... 0.2*exp(-10*(x7(i)+1)^2)-0.25*exp(-20*(x7(i)+1.5)^2)+0.1*exp(-10*(x7(i)+2)^2)-0.2*exp(-10*(x7(i)+3)^2); if x7(i) >= 0 G7(i)=G7(i)+0.1*(x7(i)-2)^2-0.4; endend% For the M=121 casex121=-6:0.1:6;M=length(x121)for i=1:M, z(i)=0.15*(rand-0.5)*2; % Define the auxiliary variable G121(i)=exp(-50*(x121(i)-1)^2)-0.5*exp(-100*(x121(i)-1.2)^2)+atan(2*x121(i))+2.15+... 0.2*exp(-10*(x121(i)+1)^2)-0.25*exp(-20*(x121(i)+1.5)^2)+0.1*exp(-10*(x121(i)+2)^2)-0.2*exp(-10*(x121(i)+3)^2); if x121(i) >= 0 G121(i)=G121(i)+0.1*(x121(i)-2)^2-0.4; end G121n(i)=G121(i)+z(i); % Adds in the influence of the auxiliary variable% fpoly(i)=0.6+0.1*x(i);end% Next, plot the functions:figure(1)plot(x7,G7,'ko')xlabel('x(i)')ylabel('y(i)=G(x(i))')title('M=7')gridaxis([min(x7) max(x7) 0 max(G7)])figure(2)plot(x121,G121,'ko')xlabel('x(i)')ylabel('y(i)=G(x(i))')title('M=121')gridaxis([min(x121) max(x121) 0 max(G121)])figure(3)plot(x121,G121n,'ko')xlabel('x(i)')ylabel('y(i)=G(x(i),z(i))')title('M=121')gridaxis([min(x121) max(x121) 0 max(G121)])% Next, plot some approximator fits to the function% First, a linefor i=1:M, Flinear(i)=((4.5-0.5)/(6-(-6)))*x121(i)+2.5;endfigure(4)plot(x121,G121n,'ko',x121,Flinear,'k')xlabel('x(i)')ylabel('y(i)=G(x(i),z(i)), and line')title('Linear approximation')gridaxis([min(x121) max(x121) 0 max(G121)])% Next, a polynomial (parabola)for i=1:M, Fpoly(i)=0.6+0.035*(x121(i)+6)^2;endfigure(5)plot(x121,G121n,'ko',x121,Fpoly,'k')xlabel('x(i)')ylabel('y(i)=G(x(i),z(i)), and parabola')title('Polynomial approximation')gridaxis([min(x121) max(x121) 0 max(G121)])% Next, a single hidden layer perceptron, n1=1w1=[1.5]';b1=0;w=[3]'; b=0.6;for i=1:M, phi1=inv(1+exp(-b1-w1*x121(i))); phi=[phi1]'; Fmlp(i)=b+w'*phi;endfigure(6)plot(x121,G121n,'ko',x121,Fmlp,'k')xlabel('x(i)')ylabel('y(i)=G(x(i),z(i)), and perceptron output')title('Neural network approximation, one neuron')gridaxis([min(x121) max(x121) 0 max(G121)])% Next, a single hidden layer perceptron, n1=2w1=[1.5]';b1=0;w2=[1.25]'; b2=-6;w=[3 1]'; b=0.6;for i=1:M, phi1=inv(1+exp(-b1-w1*x121(i))); phi2=inv(1+exp(-b2-w2*x121(i))); phi=[phi1 phi2]'; Fmlp(i)=b+w'*phi;endfigure(7)plot(x121,G121n,'ko',x121,Fmlp,'k')xlabel('x(i)')ylabel('y(i)=G(x(i),z(i)), and perceptron output')title('Neural network approximation, two neurons')gridaxis([min(x121) max(x121) 0 max(G121)])% Next, we plot the premise membership functions for% a Takagi-Sugeno fuzzy system approximatorc11=-3.5;sigma11=0.8;c12=-0.25;sigma12=0.6;c13=2;sigma13=0.4;c14=4.5;sigma14=0.8; for i=1:M, mu1(i)=exp(-0.5*((x121(i)-c11)/sigma11)^2); mu2(i)=exp(-0.5*((x121(i)-c12)/sigma12)^2); mu3(i)=exp(-0.5*((x121(i)-c13)/sigma13)^2); mu4(i)=exp(-0.5*((x121(i)-c14)/sigma14)^2); denominator(i)=mu1(i)+mu2(i)+mu3(i)+mu4(i); % Used belowendfigure(8)plot(x121,G121n,'ko',x121,mu1,'k',x121,mu2,'k',x121,mu3,'k',x121,mu4,'k')xlabel('x(i)')ylabel('y(i)=G(x(i),z(i)) and premise membership function values')title('Training data and premise membership functions')grid% Next, we plot the basis functions for% a Takagi-Sugeno fuzzy system approximatorfor i=1:M, xi1(i)=mu1(i)/denominator(i); xi2(i)=mu2(i)/denominator(i); xi3(i)=mu3(i)/denominator(i); xi4(i)=mu4(i)/denominator(i);endfigure(9)plot(x121,G121n,'ko',x121,xi1,'k',x121,xi2,'k',x121,xi3,'k',x121,xi4,'k')xlabel('x(i)')ylabel('y(i)=G(x(i),z(i)) and basis function values')title('Training data and basis functions')grid% Next, we plot the Takagi-Sugeno fuzzy system approximatora10=1; a11=0.5/6;a20=2.25;a21=4.4/4;a30=2.9;a31=1/12;a40=1.3; a41=4.8/8;for i=1:M, g1(i)=a10+a11*x121(i); g2(i)=a20+a21*x121(i); g3(i)=a30+a31*x121(i); g4(i)=a40+a41*x121(i); numerator=g1(i)*mu1(i)+g2(i)*mu2(i)+g3(i)*mu3(i)+g4(i)*mu4(i); Fts(i)=numerator/(mu1(i)+mu2(i)+mu3(i)+mu4(i));endfigure(10)plot(x121,G121n,'ko',x121,Fts,'k')xlabel('x(i)')ylabel('y(i)=G(x(i),z(i)), and fuzzy system output')title('Takagi-Sugeno approximation')gridaxis([min(x121) max(x121) 0 max(G121)])%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of program%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -