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

📄 mfdrag.m

📁 模糊逻辑工具箱 模糊逻辑工具箱 模糊逻辑工具箱 模糊逻辑工具箱 模糊逻辑工具箱
💻 M
📖 第 1 页 / 共 3 页
字号:
          varType=get(currVarAxes,'Tag');
          oldfis=get(gcf, 'Userdata');
          fis=oldfis{1};
          if strcmp(mf_type, 'trimf'),
                if  get(leftlowH, 'userdata') & curr_info(1,1) <= param(2),
                        param(1) = curr_info(1,1);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(leftlowH, 'xdata', real(square) + curr_info(1));
                        set(paramH, 'string', mat2str(param, 3));
                elseif get(centerH, 'userdata') & ...
                        param(1) <= curr_info(1,1) & curr_info(1,1) <= param(3),
                        param(2) = curr_info(1,1);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(centerH, 'xdata', real(square) + curr_info(1));
                        set(paramH, 'string', mat2str(param, 3));
                elseif get(rightlowH, 'userdata') & param(2) <= curr_info(1,1),
                        param(3) = curr_info(1,1);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(rightlowH, '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 = curr_info(1,1) - tmp(1) + tmp(2:length(tmp));
                        y=evalmf(x, param, mf_type);
                        set(lineH, 'ydata', y);
                        set(leftlowH, 'xdata', real(square) + param(1));
                        set(centerH, 'xdata', real(square) + param(2));
                        set(rightlowH, 'xdata', real(square) + param(3));
                        set(paramH, 'string', mat2str(param, 3));
                end
        elseif strcmp(mf_type, 'trapmf') | strcmp(mf_type, 'pimf'),
                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', real(square)+curr_info(1,1));
                        set(paramH, 'string', mat2str(param, 3));
                        end
                elseif get(rightlowH, 'userdata'),
                        if curr_info(1,1) >= param(3),
                        param(4) = curr_info(1,1);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(rightlowH, 'xdata', real(square)+curr_info(1,1));
                        set(paramH, 'string', mat2str(param, 3));
                        end
                elseif get(lefthighH, 'userdata'),
                        if curr_info(1,1) >= param(1),
                        param(2) = curr_info(1,1);
                        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) = curr_info(1,1);
                        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 = curr_info(1,1) - tmp(1) + tmp(2:length(tmp));
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(leftlowH, 'xdata', real(square) + param(1));
                        set(lefthighH, 'xdata', real(square) + param(2));
                        set(righthighH, 'xdata', real(square) + param(3));
                        set(rightlowH, 'xdata', real(square) + param(4));
                        set(paramH, 'string', mat2str(param, 3));
                end
        elseif strcmp(mf_type, 'gaussmf'),
                sigma = param(1); c = param(2);
                height = 0.5;
                if get(leftlowH, 'userdata'),
                        if curr_info(1,1) < c,
                        param(1) = (c-curr_info(1,1))/sqrt(-2*log(height));
                        sigma = param(1); c = param(2);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(leftlowH,'xdata', real(square)+curr_info(1,1));
                        set(rightlowH,'xdata', real(square)+2*c-curr_info(1,1));
                        set(paramH, 'string', mat2str(param, 3));
                        end
                elseif get(rightlowH, 'userdata'),
                        if curr_info(1,1) > c,
                        param(1) = (curr_info(1,1)-c)/sqrt(-2*log(height));
                        sigma = param(1); c = param(2);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(rightlowH,'xdata', real(square)+curr_info(1,1));
                        set(leftlowH,'xdata', real(square)+2*c-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);
                        sigma = param(1); c = param(2);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(leftlowH, 'xdata', real(square) + ...
                                c-sigma*sqrt(-2*log(height)));
                        set(rightlowH, 'xdata', real(square) + ...
                                c+sigma*sqrt(-2*log(height)));
                        set(paramH, 'string', mat2str(param, 3));
                end
        elseif strcmp(mf_type, 'gauss2mf'),
                s1=param(1); c1=param(2); s2=param(3); c2=param(4);
                height = 0.5;
                if get(leftlowH, 'userdata'),
                        spread = param(1)*sqrt(-2*log(height));
                        param(2) = curr_info(1,1)+spread;
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(lefthighH,'xdata', real(square)+param(2));
                        set(leftlowH,'xdata', param(2)-spread+real(square));
                        set(paramH, 'string', mat2str(param, 3));
                elseif get(rightlowH, 'userdata'),
                        spread = param(3)*sqrt(-2*log(height));
                        param(4) = curr_info(1,1)-spread;
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(righthighH,'xdata', real(square)+param(4));
                        set(rightlowH,'xdata', param(4)+spread+real(square));
                        set(paramH, 'string', mat2str(param, 3));
                elseif get(lefthighH, 'userdata'),
                        spread = curr_info(1,1)-(c1-s1*sqrt(-2*log(height)));
                        if spread > 0,
                        param(1) = spread/sqrt(-2*log(height));
                        param(2) = curr_info(1,1);
                        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'),
                        spread = -(curr_info(1,1) - ...
                                (c2+s2*sqrt(-2*log(height))));
                        if spread > 0,
                        param(3) = spread/sqrt(-2*log(height));
                        param(4) = curr_info(1,1);
                        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');
                    %    tmp = str2mat(tmpstr);
                     %   tmp = get(lineH, 'userdata');
                        param(2) = curr_info(1,1) - tmp(1) + tmp(3);
                        param(4) = curr_info(1,1) - tmp(1) + tmp(5);
                        s1=param(1); c1=param(2); s2=param(3); c2=param(4);
                        height = 0.5;
                        x_left = c1 - s1*sqrt(-2*log(height));
                        x_right = c2 + s2*sqrt(-2*log(height));
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(leftlowH, 'xdata', x_left+real(square));
                        set(rightlowH, 'xdata', x_right+real(square));
                        set(lefthighH, 'xdata',  param(2)+real(square));
                        set(righthighH, 'xdata',  param(4)+real(square));
                        set(paramH, 'string', mat2str(param, 3));
                end
        elseif strcmp(mf_type, 'sigmf'),
                a = param(1); c = param(2);
                height = 0.1;
                if get(leftlowH, 'userdata'),
                        if curr_info(1,1) == c,
                                param(1) = realmax;
                        else
                                param(1) = -log(1/height-1)/(curr_info(1,1)-c);
                        end
                        a = param(1); c = param(2);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(leftlowH,'xdata',real(square)+curr_info(1,1));
                        set(righthighH,'xdata',real(square)+2*c-curr_info(1,1));
                        set(paramH, 'string', mat2str(param, 3));
                elseif get(righthighH, 'userdata'),
                        if curr_info(1,1) == c,
                                param(1) = realmax;
                        else
                                param(1) = -log(1/(1-height)-1)/(curr_info(1,1)-c);
                        end
                        a = param(1); c = param(2);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(righthighH, 'xdata', real(square)+curr_info(1,1));
                        set(leftlowH, 'xdata', real(square)+2*c-curr_info(1,1));
                        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(2) = curr_info(1,1) - tmp(1) + tmp(3);
                        a = param(1); c = param(2);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(leftlowH, 'xdata', ...
                                c-log(1/height-1)/a + real(square));
                        set(righthighH, 'xdata', ...
                                c-log(1/(1-height)-1)/a + real(square));
                        set(paramH, 'string', mat2str(param, 3));
                end
        elseif strcmp(mf_type, 'gbellmf'),
                height = 0.9;
                if get(leftlowH, 'userdata'),
                        if curr_info(1,1) < param(3),
                        param(1) = param(3)-curr_info(1,1);
                        a = param(1); b = param(2); c = param(3);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(leftlowH, 'xdata', curr_info(1,1)+real(square));
                        set(rightlowH, 'xdata',2*c-curr_info(1,1)+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 get(rightlowH, 'userdata'),
                        if curr_info(1,1) > param(3),
                        param(1) = curr_info(1,1)-param(3);
                        a = param(1); b = param(2); c = param(3);
                        set(lineH, 'ydata', evalmf(x, param, mf_type));
                        set(rightlowH, 'xdata', curr_info(1,1)+real(square));
                        set(leftlowH, 'xdata', 2*c-curr_info(1,1)+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 get(lefthighH, 'userdata'),
                        tmp = abs((curr_info(1,1)-param(3))/param(1));
                        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(lefthighH, 'xdata', curr_info(1,1)+real(square));
                        set(righthighH, 'xdata', 2*c-curr_info(1,1)+real(square));
                        set(paramH, 'string', mat2str(param, 3));
                elseif get(righthighH, 'userdata'),
                        tmp = abs((curr_info(1,1)-param(3))/param(1));

⌨️ 快捷键说明

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