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

📄 sfdnls.c

📁 ASUFIT-Matlab-全局拟合程序
💻 C
📖 第 1 页 / 共 2 页
字号:
            /*
             * A = sparse(i,j,full(val),m,n);
             */
            mlfAssign(&A, mlfSparse(i, j, mlfFull(val), m, n, NULL));
            /*
             * J = J + A;
             */
            mlfAssign(&J, mlfPlus(J, A));
        /*
         * end
         */
        }
    /*
     * else % ncol ==n
     */
    } else {
        /*
         * J = full(J);
         */
        mlfAssign(&J, mlfFull(J));
        /*
         * for k = 1:n
         */
        for (mclForStart(&iterator_0, mlfScalar(1.0), n, NULL);
             mclForNext(&iterator_0, &k);
             ) {
            /*
             * if nargin < 5
             */
            if (mlfTobool(mlfLt(nargin_, mlfScalar(5.0)))) {
                /*
                 * xnrm = norm(x(k));
                 */
                mlfAssign(&xnrm, mlfNorm(mlfIndexRef(x, "(?)", k), NULL));
                /*
                 * xnrm = max(xnrm,1);
                 */
                mlfAssign(&xnrm, mlfMax(NULL, xnrm, mlfScalar(1.0), NULL));
                /*
                 * alpha(k) = alpha(k)*xnrm;
                 */
                mlfIndexAssign(
                  &alpha,
                  "(?)",
                  k,
                  mlfMtimes(mlfIndexRef(alpha, "(?)", k), xnrm));
            /*
             * end
             */
            }
            /*
             * y = x;
             */
            mlfAssign(&y, x);
            /*
             * y(k) = y(k) + alpha(k);
             */
            mlfIndexAssign(
              &y,
              "(?)",
              k,
              mlfPlus(mlfIndexRef(y, "(?)", k), mlfIndexRef(alpha, "(?)", k)));
            /*
             * %v = feval(fun,y,fdata);
             * xcurr(:) = y;  % reshape for userfunction
             */
            mlfIndexAssign(&xcurr, "(?)", mlfCreateColonIndex(), y);
            /*
             * v = feval(fun,xcurr,varargin{:});
             */
            mlfAssign(
              &v,
              mlfFeval(
                mclValueVarargout(),
                mclFevalLookup(fun, 0, NULL),
                xcurr,
                mlfIndexRef(varargin, "{?}", mlfCreateColonIndex()),
                NULL));
            /*
             * if ~isempty(YDATA)
             */
            if (mlfTobool(mlfNot(mlfIsempty(YDATA)))) {
                /*
                 * v = v - YDATA;
                 */
                mlfAssign(&v, mlfMinus(v, YDATA));
            /*
             * end
             */
            }
            /*
             * v = v(:);
             */
            mlfAssign(&v, mlfIndexRef(v, "(?)", mlfCreateColonIndex()));
            /*
             * J(:,k) = (v-valx)/alpha(k);
             */
            mlfIndexAssign(
              &J,
              "(?,?)",
              mlfCreateColonIndex(),
              k,
              mlfMrdivide(mlfMinus(v, valx), mlfIndexRef(alpha, "(?)", k)));
        /*
         * end
         */
        }
    /*
     * end
     */
    }
    mclValidateOutputs("sfdnls", 2, nargout_, &J, ncol);
    mxDestroyArray(A);
    mxDestroyArray(YDATA);
    mxDestroyArray(alpha);
    mxDestroyArray(cols);
    mxDestroyArray(d);
    mxDestroyArray(epsi);
    mxDestroyArray(i);
    mxDestroyArray(ind);
    mxDestroyArray(j);
    mxDestroyArray(k);
    mxDestroyArray(lpoint);
    mxDestroyArray(m);
    mxDestroyArray(n);
    mxDestroyArray(nargin_);
    mxDestroyArray(p);
    mxDestroyArray(v);
    mxDestroyArray(val);
    mxDestroyArray(w);
    mxDestroyArray(x);
    mxDestroyArray(xcurr);
    mxDestroyArray(xnrm);
    mxDestroyArray(y);
    /*
     * 
     * 
     */
    return J;
}

/*
 * The function "mlfSfdnls" contains the normal interface for the "sfdnls"
 * M-function from file "C:\MATLABR11\toolbox\optim\sfdnls.m" (lines 1-89).
 * This function processes any input arguments and passes them to the
 * implementation version of the function, appearing above.
 */
mxArray * mlfSfdnls(mxArray * * ncol,
                    mxArray * xcurr,
                    mxArray * valx,
                    mxArray * Jstr,
                    mxArray * group,
                    mxArray * alpha,
                    mxArray * fun,
                    mxArray * YDATA,
                    ...) {
    mxArray * varargin = mclUnassigned();
    int nargout = 1;
    mxArray * J = mclGetUninitializedArray();
    mxArray * ncol__ = mclGetUninitializedArray();
    mlfVarargin(&varargin, YDATA, 0);
    mlfEnterNewContext(
      1, -8, ncol, xcurr, valx, Jstr, group, alpha, fun, YDATA, varargin);
    if (ncol != NULL) {
        ++nargout;
    }
    J
      = Msfdnls(
          &ncol__,
          nargout,
          xcurr,
          valx,
          Jstr,
          group,
          alpha,
          fun,
          YDATA,
          varargin);
    mlfRestorePreviousContext(
      1, 7, ncol, xcurr, valx, Jstr, group, alpha, fun, YDATA);
    mxDestroyArray(varargin);
    if (ncol != NULL) {
        mclCopyOutputArg(ncol, ncol__);
    } else {
        mxDestroyArray(ncol__);
    }
    return mlfReturnValue(J);
}

/*
 * The function "mlxSfdnls" contains the feval interface for the "sfdnls"
 * M-function from file "C:\MATLABR11\toolbox\optim\sfdnls.m" (lines 1-89). The
 * feval function calls the implementation version of sfdnls through this
 * function. This function processes any input arguments and passes them to the
 * implementation version of the function, appearing above.
 */
void mlxSfdnls(int nlhs, mxArray * plhs[], int nrhs, mxArray * prhs[]) {
    mxArray * mprhs[8];
    mxArray * mplhs[2];
    int i;
    if (nlhs > 2) {
        mlfError(
          mxCreateString(
            "Run-time Error: File: sfdnls Line: 1 Column: "
            "0 The function \"sfdnls\" was called with mor"
            "e than the declared number of outputs (2)"));
    }
    for (i = 0; i < 2; ++i) {
        mplhs[i] = NULL;
    }
    for (i = 0; i < 7 && i < nrhs; ++i) {
        mprhs[i] = prhs[i];
    }
    for (; i < 7; ++i) {
        mprhs[i] = NULL;
    }
    mlfEnterNewContext(
      0,
      7,
      mprhs[0],
      mprhs[1],
      mprhs[2],
      mprhs[3],
      mprhs[4],
      mprhs[5],
      mprhs[6]);
    mprhs[7] = NULL;
    mlfAssign(&mprhs[7], mclCreateVararginCell(nrhs - 7, prhs + 7));
    mplhs[0]
      = Msfdnls(
          &mplhs[1],
          nlhs,
          mprhs[0],
          mprhs[1],
          mprhs[2],
          mprhs[3],
          mprhs[4],
          mprhs[5],
          mprhs[6],
          mprhs[7]);
    mlfRestorePreviousContext(
      0,
      7,
      mprhs[0],
      mprhs[1],
      mprhs[2],
      mprhs[3],
      mprhs[4],
      mprhs[5],
      mprhs[6]);
    plhs[0] = mplhs[0];
    for (i = 1; i < 2 && i < nlhs; ++i) {
        plhs[i] = mplhs[i];
    }
    for (; i < 2; ++i) {
        mxDestroyArray(mplhs[i]);
    }
    mxDestroyArray(mprhs[7]);
}

⌨️ 快捷键说明

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