📄 leve_mao.m
字号:
function [centers, bases]=leve_mao(inputs,centers,bases,par,bias,output)%LEVE_MAO LEVEMBERG-MARQUARDT % % [centers, bases]=leve_mao(inputs,centers,bases,par,output)%% centers[no_rules,no_var] centers of the membership functions% bases[no_rules,no_var] bases of the membership functions %% inputs[no_data,no_var]% centers[no_rules,no_var] centers (initial value)% bases[no_rules,no_var] bases (initial value)% par[no_rules,no_par] parameters of the consequent of each rule% bias[1,1]% output[no_data,1]% % The following global variable is required:% fid_h %% LEVENBERG-MARQUARDT is used to determine % the CENTERS and the BASES%%_______________________________________________________8 April 1996____global fid_hme=3;grad_min=.25;mu_init=0.001 ;mu_inc=10;mu_dec=0.1;mu_max= 1e10;no_data=size(inputs,1);[no_rules,no_var]=size(centers);mu=mu_init;[errors,Jacobian] = err_fuz ( inputs,centers,bases,par,bias,output);premise=[centers(:) ; bases(:)];SSE=sumsqr(errors); message = sprintf('Premise optimization: %%g/%g epochs, mu = %%g, SSE= %%g.\n',me); fprintf(fid_h,message,0,mu_init,SSE);for i=1:me % CHECK MAGNITUDE OF GRADIENT if (norm(Jacobian'*errors)/no_data < grad_min), break, end % INNER LOOP, INCREASE MU UNTIL THE ERRORS ARE REDUCED while (mu <= mu_max) H=Jacobian'*Jacobian; g=Jacobian'*errors; A=H+mu*no_data*eye(2*no_rules*no_var); tol=1e-9; new_premise=premise-pinv(A,tol)*g; centers=reshape(new_premise(1:no_var*no_rules),[no_rules no_var]); bases=reshape(new_premise(no_var*no_rules+1:2*no_var*no_rules),[no_rules no_var]); bases=bases+(bases<0.1)*0.1; % EVALUATE NEW NETWORK [new_errors,new_Jacobian]= err_fuz ( inputs,centers,bases,par,bias,output); new_SSE=sumsqr(new_errors); if (new_SSE < SSE), break, end mu = mu * mu_inc; end if (mu > mu_max), break, end mu = mu * mu_dec; % UPDATE NETWORK premise = new_premise; SSE = new_SSE; Jacobian=new_Jacobian; fprintf(fid_h,message,i,mu,SSE);end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -