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

📄 mfdrag.m

📁 模糊逻辑工具箱 模糊逻辑工具箱 模糊逻辑工具箱 模糊逻辑工具箱 模糊逻辑工具箱
💻 M
📖 第 1 页 / 共 3 页
字号:
                        if tmp == 0,
                                param(2) = eps;
                        elseif tmp == 1,
                                param(2) = realmax;
                        else
                                param(2) = log(1/height-1)/(2*log(tmp));
                        end
                        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]);

       eval(['fis.',varType '(' num2str(varIndex) ').mf('...
              num2str(paramLine.CurrMF) ').params =' mat2str(param, 3) ';']);
       oldfis{1}=fis;
       set(gcf, 'Userdata', oldfis);
 %%%      pushundo(gcf, fis);
      end
 case 'mouse_action3',
        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');
        fis=oldfis{1};
        updtfis(gcf,fis,[4 5 6]);
        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
 case 'info',
        winhelp(mfilename);
end

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 + -