⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nefsim.m

📁 模糊神经网络采用matlab编程 o install NEFCON follow these steps: 1. Unpack the tar file NEFCON.TAR into your MA
💻 M
字号:
%NEFSIM Simulation loop (started by NEFGUI)
%       Script controlling the SIMULINK Simulations, including
%       storing of simulation results (in loop_x.mat files).
%       The results will be redisplayed after the last
%       learning cycle.
%       The system output must be stored in t (time),u (input)
%       and y (response) vectors.
%       This funtion uses the simulation function rk23. This can
%       be changed, if different functions must be used.
%
% See also NEFCON.  
   
% Author: Andreas Nuernberger, TU Braunschweig, August 1996; a.nuernberger@tu-bs.de
%         contact: Ludger Merz, DASA-Airbus GmbH, Hamburg; ludger.merz@airbus.de

%function nefsim(action); 
% ---------------------------------------------------------------- 
% Einlesen der Parameter 
% ---------------------------------------------------------------- 
global NEFCON_CYC NEFCON_FIS NEFCON_ACTCYC NEFCON_STOP NEFCON_STAT NEFCON_NOISE NEFCON_BTN
 
%settings of last simulation (for continue)
global NEFCON_X0 NEFCON_TIME NEFCON_YS
global NEFCON_U NEFCON_Y gut

%if strcmp(action, 'initialize') 

    sys = get_param;    % actual system 
    tstart = str2num(get_param(sys,'Start time')); 
    tend   = str2num(get_param(sys,'Stop time')); 
    dt     = str2num(get_param(sys,'Min step size')); 
    zy     = NEFCON_CYC; 
    if zy == [] 
        zy = 1; 
    end 
    if NEFCON_ACTCYC == 0
        NEFCON_ACTCYC = 1;
        gut = []; 
    end

    % ---------------------------------------------------------------- 
    % Simulation und Optimierung 
    % ---------------------------------------------------------------- 
    for i=NEFCON_ACTCYC:zy, 
        NEFCON_ACTCYC = i; 
        nefgui('status'); 
 
        % continue if stopped during simulation
        if NEFCON_X0 ~= [] & NEFCON_TIME ~= [] & size(NEFCON_TIME,1) > 2
%            [t,xs,ys] = linsim(sys, [max(NEFCON_TIME) tend], NEFCON_X0(size(NEFCON_X0,1)-1,:), [1e-3, dt, dt]); 
            [t,xs,ys] = rk23(sys, [max(NEFCON_TIME) tend], NEFCON_X0(size(NEFCON_X0,1)-1,:), [1e-3, dt, dt]); 
            t  = [NEFCON_TIME(1:size(NEFCON_TIME)-2,:); t];
            xs = [NEFCON_X0(1:size(NEFCON_X0)-2,:); xs];
%            ys = [NEFCON_YS(1:size(NEFCON_YS)-2,:); ys];
            nef_u = [NEFCON_U(1:size(NEFCON_U)-1,:); nef_u];
            nef_y = [NEFCON_Y(1:size(NEFCON_Y)-1,:); nef_y];
        else
	NEFCON_BTN = 0;	% reset button flag - use automatic status switch
%            [t,xs,ys] = linsim(sys, [tstart tend], [], [1e-3, dt, dt]); 
            [t,xs,ys] = rk23(sys, [tstart tend], [], [1e-3, dt, dt]); 
        end

        if NEFCON_STOP == 1 
            NEFCON_X0 = xs;
            NEFCON_TIME = t;
%            NEFCON_YS = ys;
            NEFCON_U = nef_u;
            NEFCON_Y = nef_y;
            nefgui('status'); 
            break; 
        else 
            NEFCON_X0 = [];
            NEFCON_TIME = [];
%            NEFCON_YS = [];
            NEFCON_U = [];
            NEFCON_Y = [];
        end         
 
        loop = 1;
        if nef_u == []
            disp('NEFCON: Could not save reference signal. u-vector undefined.');
            nef_u = zeros(1,size(t,2));
        end            
        if nef_y == []
            disp('NEFCON: Could not save system output. y-vector undefined.');
            nef_y = zeros(1,size(t,2));
        end            
    %    if loop == ok &
            gut = [gut i]; 
            nefsmat = nefmat;   % read actual settings into nefsmat 
            comand = ['save loop/loop_', num2str(i), ' t nef_u nef_y nefsmat;']; 
            catch = ['eval(''!mkdir loop'');save loop/loop_', num2str(i), ' t nef_u nef_y nefsmat;']; 
            eval(comand, catch); 
    %    end; 
    end; 

    if NEFCON_STOP ~= 1 
        NEFCON_STAT = 0;     % finish and stopped
        nefgui('status'); 
    end
    
    if gut ~= [] 
        y_ges = []; 
        t_ges = []; 
        u_ges = [];
        gutp = []; 
        for i = gut, 
            comand = ['load loop/loop_', num2str(i)];
            eval(comand);
            if (size(t,1) ~= size(t_ges,1) | size(nef_u,1) ~= size(u_ges,1) ...
                             | size(nef_y,1) ~= size(y_ges,1)) & size(t_ges,1) ~= 0
                disp(['Illegal matrix size in saved data loop_' num2str(i) ' - perhaps different simulations.']);
            elseif size(t,1) ~= size(nef_u,1) | size(t,1) ~= size(nef_y,1)
                disp(['Different matrix size in saved data loop_' num2str(i) ' - perhaps error in simulation.']);
            else
                gutp = [gutp i];
                t_ges = [t_ges t]; 
                u_ges = [u_ges nef_u]; 
                y_ges = [y_ges nef_y];
            end
        end; 
 
        % ------------------------------------------------- 
        %  calculate the number of subplots 
        % ------------------------------------------------- 
        m = size(y_ges,2); 
        if m > 0, 
            spm = ceil( sqrt(m) ); 
            spn = ceil( m / spm ); 
 
 
            % ------------------------------------------------- 
            %  plot the function 
            % ------------------------------------------------- 
            % open new window 
            figure;
            for i=1:m, 
               subplot (spm, spn, i); 
               plot(t_ges(:,i), u_ges(:,i), 'm', t_ges(:,i), y_ges(:,i), 'c'); grid 
               title(['loop_', num2str(gutp(i))]); 
               xlabel(' '); 
               ylabel(' '); 
            end; 

            set(gcf,'windowbuttondownfcn','nefsim1(''wbd'')'); 
            cl = uicontrol(gcf, 'style','pushbutton',... 
                           'position',[15 3 100 18],... 
                           'Callback', 'close(gcf);',... 
                           'string', 'Close'); 
        end; 
    end; 
 
%end 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -