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

📄 mfdrag.m

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

⌨️ 快捷键说明

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