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

📄 mfdrag.m

📁 交流 模糊控制 交流 模糊控制
💻 M
📖 第 1 页 / 共 3 页
字号:
            a = param(1); b = param(2); c = param(3);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(righthighH, 'xdata', curr_info(1,1)+real(square));
            set(lefthighH, 'xdata', 2*c-curr_info(1,1)+real(square));
            set(paramH, 'string', mat2str(param, 3));
        elseif gco == lineH,
            paramHndl = findobj(gcf, 'Tag', 'mfparams');
            tmp = get(paramHndl, 'Userdata');
            %   tmp = str2mat(tmpstr);
            %   tmp = get(lineH, 'userdata');
            param(3) = curr_info(1,1) - tmp(1) + tmp(4);
            a = param(1); b = param(2); c = param(3);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(leftlowH, 'xdata', c-a+real(square));
            set(rightlowH, 'xdata', c+a+real(square));
            set(lefthighH, 'xdata', ...
                c-a*(1/height-1)^(1/(2*b)) + real(square));
            set(righthighH, 'xdata', ...
                c+a*(1/height-1)^(1/(2*b)) + real(square));
            set(paramH, 'string', mat2str(param, 3));
        end
    elseif strcmp(mf_type, 'smf'),
        if get(leftlowH, 'userdata'),
            if curr_info(1,1) <= param(2),
                param(1) = curr_info(1,1);
                set(lineH, 'ydata', evalmf(x, param, mf_type));
                set(leftlowH, 'xdata', curr_info(1,1)+real(square));
                set(paramH, 'string', mat2str(param, 3));
            end
        elseif get(righthighH, 'userdata'),
            if curr_info(1,1) >= param(1),
                param(2) = curr_info(1,1);
                set(lineH, 'ydata', evalmf(x, param, mf_type));
                set(righthighH, 'xdata', curr_info(1,1)+real(square));
                set(paramH, 'string', mat2str(param, 3));
            end
        elseif gco == lineH,
            paramHndl = findobj(gcf, 'Tag', 'mfparams');
            tmp = get(paramHndl, 'Userdata');
            % tmp = str2mat(tmpstr);
            % tmp = get(lineH, 'userdata');
            param = curr_info(1,1) - tmp(1) + tmp(2:3);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(leftlowH, 'xdata', param(1)+real(square));
            set(righthighH, 'xdata', param(2)+real(square));
            set(paramH, 'string', mat2str(param, 3));
        end
    elseif strcmp(mf_type, 'zmf'),
        if get(lefthighH, 'userdata'),
            if curr_info(1,1) <= param(2),
                param(1) = curr_info(1,1);
                set(lineH, 'ydata', evalmf(x, param, mf_type));
                set(lefthighH, 'xdata', curr_info(1,1)+real(square));
                set(paramH, 'string', mat2str(param, 3));
            end
        elseif get(rightlowH, 'userdata'),
            if curr_info(1,1) >= param(1),
                param(2) = curr_info(1,1);
                set(lineH, 'ydata', evalmf(x, param, mf_type));
                set(rightlowH, 'xdata', curr_info(1,1)+real(square));
                set(paramH, 'string', mat2str(param, 3));
            end
        elseif gco == lineH,
            paramHndl = findobj(gcf, 'Tag', 'mfparams');
            tmp = get(paramHndl, 'Userdata');
            %     tmp = str2mat(tmpstr);
            %     tmp = get(lineH, 'userdata');
            param = curr_info(1,1) - tmp(1) + tmp(2:3);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(lefthighH, 'xdata', param(1)+real(square));
            set(rightlowH, 'xdata', param(2)+real(square));
            set(paramH, 'string', mat2str(param, 3));
        end
    elseif strcmp(mf_type, 'psigmf'),
        height = 0.9;
        if get(leftlowH, 'userdata'),
            param(2) = curr_info(1,1);
            a1=param(1); c1=param(2); a2=param(3); c2=param(4);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(leftlowH, 'xdata', curr_info(1,1)+real(square));
            set(lefthighH, 'xdata',c1-log(1/height-1)/a1+real(square));
            set(paramH, 'string', mat2str(param, 3));
        elseif get(rightlowH, 'userdata'),
            param(4) = curr_info(1,1);
            a1=param(1); c1=param(2); a2=param(3); c2=param(4);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(rightlowH, 'xdata', curr_info(1,1)+real(square));
            set(righthighH, 'xdata',c2-log(1/height-1)/a2+real(square));
            set(paramH, 'string', mat2str(param, 3));
        elseif get(lefthighH, 'userdata'),
            %if curr_info(1,1) == param(2),
            %       param(1) = realmax;
            %else
            %       param(1) = -log(1/height-1)/(curr_info(1,1)-param(2));
            %end
            if curr_info(1,1) > param(2),
                param(1) = -log(1/height-1)/(curr_info(1,1)-param(2));
                a = param(1); c = param(2);
                set(lineH, 'ydata', evalmf(x, param, mf_type));
                set(lefthighH, 'xdata', real(square)+curr_info(1,1));
                set(paramH, 'string', mat2str(param, 3));
            end
        elseif get(righthighH, 'userdata'),
            %if curr_info(1,1) == param(4),
            %       param(3) = realmax;
            %else
            %       param(3) = -log(1/height-1)/(curr_info(1,1)-param(4));
            %end
            if curr_info(1,1) < param(4),
                param(3) = -log(1/height-1)/(curr_info(1,1)-param(4));
                a = param(3); c = param(4);
                set(lineH, 'ydata', evalmf(x, param, mf_type));
                set(righthighH, 'xdata', real(square)+curr_info(1,1));
                set(paramH, 'string', mat2str(param, 3));
            end
        elseif gco == lineH,
            paramHndl = findobj(gcf, 'Tag', 'mfparams');
            tmp = get(paramHndl, 'Userdata');
            param(2) = curr_info(1,1) - tmp(1) + tmp(3);
            param(4) = curr_info(1,1) - tmp(1) + tmp(5);
            a1=param(1); c1=param(2); a2=param(3); c2=param(4);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(leftlowH, 'xdata', c1+real(square));
            set(rightlowH, 'xdata', c2+real(square));
            set(lefthighH, 'xdata', ...
                c1-log(1/height-1)/a1+real(square));
            set(righthighH, 'xdata', ...
                c2-log(1/height-1)/a2+real(square));
            set(paramH, 'string', mat2str(param, 3));
        end
    elseif strcmp(mf_type, 'dsigmf'),
        height = 0.9;
        if get(leftlowH, 'userdata'),
            param(2) = curr_info(1,1);
            a1=param(1); c1=param(2); a2=param(3); c2=param(4);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(leftlowH, 'xdata', curr_info(1,1)+real(square));
            set(lefthighH, 'xdata',c1-log(1/height-1)/a1+real(square));
            set(paramH, 'string', mat2str(param, 3));
        elseif get(rightlowH, 'userdata'),
            param(4) = curr_info(1,1);
            a1=param(1); c1=param(2); a2=param(3); c2=param(4);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(rightlowH, 'xdata', curr_info(1,1)+real(square));
            set(righthighH, 'xdata',c2+log(1/height-1)/a2+real(square));
            set(paramH, 'string', mat2str(param, 3));
        elseif get(lefthighH, 'userdata'),
            if curr_info(1,1) == param(2),
                param(1) = realmax;
            else
                param(1) = -log(1/height-1)/(curr_info(1,1)-param(2));
            end
            a = param(1); c = param(2);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(lefthighH, 'xdata', real(square)+curr_info(1,1));
            set(paramH, 'string', mat2str(param, 3));
        elseif get(righthighH, 'userdata'),
            if curr_info(1,1) == param(4),
                param(3) = realmax;
            else
                param(3) = log(1/height-1)/(curr_info(1,1)-param(4));
            end
            a = param(3); c = param(4);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(righthighH, 'xdata', real(square)+curr_info(1,1));
            set(paramH, 'string', mat2str(param, 3));
        elseif gco == lineH,
            paramHndl = findobj(gcf, 'Tag', 'mfparams');
            tmp = get(paramHndl, 'Userdata');
            param(2) = curr_info(1,1) - tmp(1) + tmp(3);
            param(4) = curr_info(1,1) - tmp(1) + tmp(5);
            a1=param(1); c1=param(2); a2=param(3); c2=param(4);
            set(lineH, 'ydata', evalmf(x, param, mf_type));
            set(leftlowH, 'xdata', c1+real(square));
            set(rightlowH, 'xdata', c2+real(square));
            set(lefthighH, 'xdata', ...
                c1-log(1/height-1)/a1+real(square));
            set(righthighH, 'xdata', ...
                c2+log(1/height-1)/a2+real(square));
            set(paramH, 'string', mat2str(param, 3));
        end
    else
        error('Unknown MF type!');
    end
    %      y=evalmf(x, param, mf_type);
    %      centerIndex=find(y==max(y));
    %      centerIndex=round(mean(centerIndex));
    %      textHndl=findobj(gcf, 'Tag', 'mftext', 'Userdata', paramLine.CurrMF);
    %      set(textHndl, 'Position', [x(centerIndex), 1.1, 0]);
    
    fis.(varType)(varIndex).mf(paramLine.CurrMF).params = param;
    
    % update the most recent state.
    oldfis{1} = fis;
    set(gcf, 'Userdata', oldfis);
end

%---------------------------------------------------------
function localButtonUpFcn(eventSrc,eventData,storedfis)
% local function for mouse button up action

leftlowH = findobj(gcf, 'tag', 'leftlow');
lefthighH = findobj(gcf, 'tag', 'lefthigh');
centerH = findobj(gcf, 'tag', 'center');
righthighH = findobj(gcf, 'tag', 'righthigh');
rightlowH = findobj(gcf, 'tag', 'rightlow');
lineH = findobj(gcf, 'tag', 'mfline');
allH = [leftlowH lefthighH centerH righthighH rightlowH];  % lineH'];
set(allH, 'erasemode', 'normal', 'userdata', []);
oldfis = get(gcf, 'Userdata');
currentfis = oldfis{1};
if ~isequalwithequalnans(currentfis,storedfis) % REVISIT: isequalwithequalnans 
    oldfis{1} = storedfis;
    set(gcf, 'Userdata',oldfis);
    pushundo(gcf,currentfis);
    updtfis(gcf,currentfis,[4 5 6]);
end
param=get(findobj(gcf, 'Tag', 'mainaxes'), 'Userdata');
textHndl=findobj(gcf, 'Tag', 'mftext', 'Userdata', param.CurrMF);
lineHndl=findobj(gcf, 'Tag', 'mfline', 'Userdata', param.CurrMF);
if ~isempty(lineHndl)
    y=get(lineHndl, 'Ydata');
    x=get(lineHndl, 'Xdata');
    centerIndex=find(y==max(y));
    centerIndex=round(mean(centerIndex));
    set(textHndl, 'Position', [x(centerIndex), 1.1, 0]);
end
set(gcf,'WindowButtonMotionFcn','');

%--------------------------------------------------------------------------
function out = local_get_control_square
% create a perfect square

set(gca, 'unit', 'pixel');
axes_pos = get(gca, 'pos'); w = axes_pos(3); h = axes_pos(4);
out = 0.02*([-1 1 1 -1 -1]*h/w*...
    (max(get(gca, 'xlim'))- min(get(gca, 'xlim')))/...
    (max(get(gca, 'ylim'))- min(get(gca, 'ylim'))) +...
    sqrt(-1)*[-1 -1 1 1 -1]);
set(gca, 'unit', 'normalize');

⌨️ 快捷键说明

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