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

📄 fminsearch.cpp

📁 该程序为MATLAB对CDMA系统个部分的仿真
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    //
    // 
    // % sort so v(1,:) has the lowest function value 
    // [fv,j] = sort(fv);
    //
    fv = sort(&j, fv);
    //
    // v = v(:,j);
    //
    v = v(colon(), j);
    //
    // 
    // how = 'initial';
    //
    how = "initial";
    //
    // itercount = 1;
    //
    itercount = 1.0;
    //
    // func_evals = n+1;
    //
    func_evals = n + mwArray(1.0);
    //
    // if prnt == 2
    //
    if (tobool(prnt == mwArray(2.0))) {
        //
        // disp(' ')
        //
        disp(" ");
        //
        // disp(header)
        //
        disp(header);
        //
        // disp([sprintf(' %5.0f        %5.0f     %12.6g         ', itercount, func_evals, fv(1)), how]) 
        //
        disp(
          horzcat(
            mwVarargin(
              sprintf(
                mwArray(" %5.0f        %5.0f     %12.6g         "),
                mwVarargin(itercount, func_evals, fv(1.0))),
              how)));
    //
    // elseif prnt == 3
    //
    } else if (tobool(prnt == mwArray(3.0))) {
        //
        // clc
        //
        clc();
        //
        // formatsave = get(0,{'format','formatspacing'});
        //
        formatsave
          = get(
              mwVarargin(
                0.0, cellhcat(mwVarargin("format", "formatspacing"))));
        //
        // format compact
        //
        format("compact");
        //
        // format short e
        //
        format("short", "e");
        //
        // disp(' ')
        //
        disp(" ");
        //
        // disp(how)
        //
        disp(how);
        //
        // v
        //
        v.Print("v");
        //
        // fv
        //
        fv.Print("fv");
        //
        // func_evals
        //
        func_evals.Print("func_evals");
    //
    // end
    //
    }
    //
    // exitflag = 1;
    //
    *exitflag = 1.0;
    //
    // 
    // % Main algorithm
    // % Iterate until the diameter of the simplex is less than tolx
    // %   AND the function values differ from the min by less than tolf,
    // %   or the max function evaluations are exceeded. (Cannot use OR instead of AND.)
    // while func_evals < maxfun & itercount < maxiter
    //
    for (;;) {
        mwArray a_(func_evals < maxfun);
        if (tobool(a_) && tobool(a_ & itercount < maxiter)) {
        } else {
            break;
        }
        //
        // if max(max(abs(v(:,two2np1)-v(:,onesn)))) <= tolx & ...
        //
        {
            mwArray a_(max(max(abs(v(colon(), two2np1) - v(colon(), onesn))))
                       <= tolx);
            if (tobool(a_)
                && tobool(a_ & max(abs(fv(1.0) - fv(two2np1))) <= tolf)) {
                //
                // max(abs(fv(1)-fv(two2np1))) <= tolf
                // break
                //
                break;
            } else {
            }
        //
        // end
        //
        }
        //
        // how = '';
        //
        how = "";
        //
        // 
        // % Compute the reflection point
        // 
        // % xbar = average of the n (NOT n+1) best points
        // xbar = sum(v(:,one2n), 2)/n;
        //
        xbar = sum(v(colon(), one2n), 2.0) / n;
        //
        // xr = (1 + rho)*xbar - rho*v(:,end);
        //
        xr = (mwArray(1.0) + rho) * xbar - rho * v(colon(), end(v, 2, 2));
        //
        // x(:) = xr; fxr = feval(funfcn,x,varargin{:});
        //
        x(colon()) = xr;
        fxr
          = feval(
              mwValueVarargout(),
              FevalLookup(funfcn, 0, NULL),
              mwVarargin(x, varargin.cell(colon())));
        //
        // func_evals = func_evals+1;
        //
        func_evals = func_evals + mwArray(1.0);
        //
        // 
        // if fxr < fv(:,1)
        //
        if (tobool(fxr < fv(colon(), 1.0))) {
            //
            // % Calculate the expansion point
            // xe = (1 + rho*chi)*xbar - rho*chi*v(:,end);
            //
            xe
              = (mwArray(1.0) + rho * chi) * xbar
                - rho * chi * v(colon(), end(v, 2, 2));
            //
            // x(:) = xe; fxe = feval(funfcn,x,varargin{:});
            //
            x(colon()) = xe;
            fxe
              = feval(
                  mwValueVarargout(),
                  FevalLookup(funfcn, 0, NULL),
                  mwVarargin(x, varargin.cell(colon())));
            //
            // func_evals = func_evals+1;
            //
            func_evals = func_evals + mwArray(1.0);
            //
            // if fxe < fxr
            //
            if (tobool(fxe < fxr)) {
                //
                // v(:,end) = xe;
                //
                v(colon(), end(v, 2, 2)) = xe;
                //
                // fv(:,end) = fxe;
                //
                fv(colon(), end(fv, 2, 2)) = fxe;
                //
                // how = 'expand';
                //
                how = "expand";
            //
            // else
            //
            } else {
                //
                // v(:,end) = xr; 
                //
                v(colon(), end(v, 2, 2)) = xr;
                //
                // fv(:,end) = fxr;
                //
                fv(colon(), end(fv, 2, 2)) = fxr;
                //
                // how = 'reflect';
                //
                how = "reflect";
            //
            // end
            //
            }
        //
        // else % fv(:,1) <= fxr
        //
        } else {
            //
            // if fxr < fv(:,n)
            //
            if (tobool(fxr < fv(colon(), n))) {
                //
                // v(:,end) = xr; 
                //
                v(colon(), end(v, 2, 2)) = xr;
                //
                // fv(:,end) = fxr;
                //
                fv(colon(), end(fv, 2, 2)) = fxr;
                //
                // how = 'reflect';
                //
                how = "reflect";
            //
            // else % fxr >= fv(:,n) 
            //
            } else {
                //
                // % Perform contraction
                // if fxr < fv(:,end)
                //
                if (tobool(fxr < fv(colon(), end(fv, 2, 2)))) {
                    //
                    // % Perform an outside contraction
                    // xc = (1 + psi*rho)*xbar - psi*rho*v(:,end);
                    //
                    xc
                      = (mwArray(1.0) + psi * rho) * xbar
                        - psi * rho * v(colon(), end(v, 2, 2));
                    //
                    // x(:) = xc; fxc = feval(funfcn,x,varargin{:});
                    //
                    x(colon()) = xc;
                    fxc
                      = feval(
                          mwValueVarargout(),
                          FevalLookup(funfcn, 0, NULL),
                          mwVarargin(x, varargin.cell(colon())));
                    //
                    // func_evals = func_evals+1;
                    //
                    func_evals = func_evals + mwArray(1.0);
                    //
                    // 
                    // if fxc <= fxr
                    //
                    if (tobool(fxc <= fxr)) {
                        //
                        // v(:,end) = xc; 
                        //
                        v(colon(), end(v, 2, 2)) = xc;
                        //
                        // fv(:,end) = fxc;
                        //
                        fv(colon(), end(fv, 2, 2)) = fxc;
                        //
                        // how = 'contract outside';
                        //
                        how = "contract outside";
                    //
                    // else
                    //
                    } else {
                        //
                        // % perform a shrink
                        // how = 'shrink'; 
                        //
                        how = "shrink";
                    //
                    // end
                    //
                    }
                //
                // else
                //
                } else {
                    //
                    // % Perform an inside contraction
                    // xcc = (1-psi)*xbar + psi*v(:,end);
                    //
                    xcc
                      = (mwArray(1.0) - psi) * xbar
                        + psi * v(colon(), end(v, 2, 2));
                    //
                    // x(:) = xcc; fxcc = feval(funfcn,x,varargin{:});
                    //
                    x(colon()) = xcc;
                    fxcc
                      = feval(
                          mwValueVarargout(),
                          FevalLookup(funfcn, 0, NULL),
                          mwVarargin(x, varargin.cell(colon())));
                    //
                    // func_evals = func_evals+1;
                    //
                    func_evals = func_evals + mwArray(1.0);
                    //
                    // 
                    // if fxcc < fv(:,end)
                    //
                    if (tobool(fxcc < fv(colon(), end(fv, 2, 2)))) {
                        //
                        // v(:,end) = xcc;
                        //
                        v(colon(), end(v, 2, 2)) = xcc;
                        //
                        // fv(:,end) = fxcc;
                        //
                        fv(colon(), end(fv, 2, 2)) = fxcc;
                        //
                        // how = 'contract inside';
                        //
                        how = "contract inside";
                    //
                    // else
                    //
                    } else {
                        //
                        // % perform a shrink
                        // how = 'shrink';
                        //
                        how = "shrink";
                    //
                    // end
                    //
                    }
                //
                // end
                //
                }
                //
                // if strcmp(how,'shrink')
                //
                if (tobool(strcmp(how, mwArray("shrink")))) {
                    //
                    // for j=two2np1
                    //
                    for (iterator_0.Start(two2np1, mwArray::DIN, mwArray::DIN);
                         iterator_0.Next(&j);
                         ) {
                        //
                        // v(:,j)=v(:,1)+sigma*(v(:,j) - v(:,1));
                        //
                        v(colon(), j)
                        = v(colon(), 1.0)
                          + sigma * (v(colon(), j) - v(colon(), 1.0));
                        //
                        // x(:) = v(:,j); fv(:,j) = feval(funfcn,x,varargin{:});
                        //
                        x(colon()) = v(colon(), j);
                        fv(colon(), j)
                        = feval(
                            mwValueVarargout(),
                            FevalLookup(funfcn, 0, NULL),
                            mwVarargin(x, varargin.cell(colon())));
                    //
                    // end
                    //
                    }
                    //
                    // func_evals = func_evals + n;
                    //
                    func_evals = func_evals + n;
                //
                // end
                //
                }
            //
            // end
            //
            }
        //
        // end
        //
        }
        //
        // [fv,j] = sort(fv);
        //

⌨️ 快捷键说明

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