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

📄 graderr.c

📁 ASUFIT-Matlab-全局拟合程序
💻 C
字号:
/*
 * MATLAB Compiler: 2.0.1
 * Date: Tue May 08 21:28:22 2001
 * Arguments: "-B" "sgl" "-m" "-W" "mainhg" "-L" "C" "asufit.m" "absfun.m"
 * "absfunfree.m" "absfunshift.m" "absfunwidth.m" "dispfit.m" "dispfitdisp.m"
 * "dispfitfree.m" "dispfitwidth.m" "seqmodfree.m" "spcfun.m" "spcfun1.m"
 * "atamult.m" "aprecon.m" 
 */
#include "graderr.h"

/*
 * The function "Mgraderr" is the implementation version of the "graderr"
 * M-function from file "C:\MATLABR11\toolbox\optim\graderr.m" (lines 1-22). It
 * contains the actual compiled code for that M-function. It is a static
 * function and must only be called from one of the interface functions,
 * appearing below.
 */
/*
 * function graderr(finite_diff_deriv, analytic_deriv, evalstr2)
 */
static void Mgraderr(mxArray * finite_diff_deriv,
                     mxArray * analytic_deriv,
                     mxArray * evalstr2) {
    mxArray * ans = mclInitializeAns();
    mxArray * err = mclGetUninitializedArray();
    mclValidateInputs(
      "graderr", 3, &finite_diff_deriv, &analytic_deriv, &evalstr2);
    mclCopyArray(&finite_diff_deriv);
    mclCopyArray(&analytic_deriv);
    /*
     * %GRADERR Used to check gradient discrepancy in optimization routines. 
     * 
     * %   Copyright (c) 1990-98 by The MathWorks, Inc.
     * %   $Revision: 1.11 $  $Date: 1998/07/22 23:08:32 $
     * 
     * finite_diff_deriv = full(finite_diff_deriv); 
     */
    mlfAssign(&finite_diff_deriv, mlfFull(finite_diff_deriv));
    /*
     * analytic_deriv = full(analytic_deriv);
     */
    mlfAssign(&analytic_deriv, mlfFull(analytic_deriv));
    /*
     * err=max(max(abs(analytic_deriv-finite_diff_deriv)));
     */
    mlfAssign(
      &err,
      mlfMax(
        NULL,
        mlfMax(
          NULL,
          mlfAbs(mlfMinus(analytic_deriv, finite_diff_deriv)),
          NULL,
          NULL),
        NULL,
        NULL));
    /*
     * disp(sprintf('Maximum discrepancy between derivatives  = %g',err));
     */
    mlfDisp(
      mlfSprintf(
        NULL,
        mxCreateString("Maximum discrepancy between derivatives  = %g"),
        err,
        NULL));
    /*
     * if (err > 1e-6*norm(analytic_deriv) + 1e-5) 
     */
    if (mlfTobool(
          mlfGt(
            err,
            mlfPlus(
              mlfMtimes(mlfScalar(1e-6), mlfNorm(analytic_deriv, NULL)),
              mlfScalar(1e-5))))) {
        /*
         * disp('Warning: Derivatives do not match within tolerance')
         */
        mlfDisp(
          mxCreateString("Warning: Derivatives do not match within tolerance"));
        /*
         * disp('Derivative from finite difference calculation:')
         */
        mlfDisp(
          mxCreateString("Derivative from finite difference calculation:"));
        /*
         * finite_diff_deriv
         */
        mclPrintArray(finite_diff_deriv, "finite_diff_deriv");
        /*
         * disp(['User-supplied derivative, ', evalstr2, ' : '])
         */
        mlfDisp(
          mlfHorzcat(
            mxCreateString("User-supplied derivative, "),
            evalstr2,
            mxCreateString(" : "),
            NULL));
        /*
         * analytic_deriv
         */
        mclPrintArray(analytic_deriv, "analytic_deriv");
        /*
         * disp('Difference:')
         */
        mlfDisp(mxCreateString("Difference:"));
        /*
         * analytic_deriv - finite_diff_deriv
         */
        mclPrintAns(&ans, mlfMinus(analytic_deriv, finite_diff_deriv));
    /*
     * %disp('Strike any key to continue or Ctrl-C to abort')
     * %pause 
     * end
     */
    }
    mxDestroyArray(analytic_deriv);
    mxDestroyArray(ans);
    mxDestroyArray(err);
    mxDestroyArray(finite_diff_deriv);
}

/*
 * The function "mlfGraderr" contains the normal interface for the "graderr"
 * M-function from file "C:\MATLABR11\toolbox\optim\graderr.m" (lines 1-22).
 * This function processes any input arguments and passes them to the
 * implementation version of the function, appearing above.
 */
void mlfGraderr(mxArray * finite_diff_deriv,
                mxArray * analytic_deriv,
                mxArray * evalstr2) {
    mlfEnterNewContext(0, 3, finite_diff_deriv, analytic_deriv, evalstr2);
    Mgraderr(finite_diff_deriv, analytic_deriv, evalstr2);
    mlfRestorePreviousContext(
      0, 3, finite_diff_deriv, analytic_deriv, evalstr2);
}

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

⌨️ 快捷键说明

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