コード例 #1
0
ファイル: myminus.c プロジェクト: liyuqiao/MatVB
/*
 * function y=myminus(a,b)
 */
static mxArray * Mmyminus(int nargout_, mxArray * a, mxArray * b) {
    mexLocalFunctionTable save_local_function_table_
      = mclSetCurrentLocalFunctionTable(&_local_function_table_myminus);
    mxArray * y = NULL;
    mxArray * ans = NULL;
    mclCopyArray(&a);
    mclCopyArray(&b);
    /*
     * y=a-b;
     */
    mlfAssign(&y, mclMinus(mclVa(a, "a"), mclVa(b, "b")));
    /*
     * format rat;
     */
    mlfFormat(_mxarray0_, NULL);
    /*
     * y=rats(y);
     */
    mlfAssign(&y, mlfRats(mclVv(y, "y"), NULL));
    mclValidateOutput(y, 1, nargout_, "y", "myminus");
    mxDestroyArray(ans);
    mxDestroyArray(b);
    mxDestroyArray(a);
    mclSetCurrentLocalFunctionTable(save_local_function_table_);
    return y;
}
コード例 #2
0
ファイル: rank.c プロジェクト: jiazhengzhou/fhlin_toolbox
/*
 * function r = rank(A,tol)
 */
static mxArray * Mrank(int nargout_, mxArray * A, mxArray * tol) {
    mexLocalFunctionTable save_local_function_table_
      = mclSetCurrentLocalFunctionTable(&_local_function_table_rank);
    int nargin_ = mclNargin(2, A, tol, NULL);
    mxArray * r = mclGetUninitializedArray();
    mxArray * s = mclGetUninitializedArray();
    mclCopyArray(&A);
    mclCopyArray(&tol);
    /*
     * %RANK   Matrix rank.
     * %   RANK(A) provides an estimate of the number of linearly
     * %   independent rows or columns of a matrix A.
     * %   RANK(A,tol) is the number of singular values of A
     * %   that are larger than tol.
     * %   RANK(A) uses the default tol = max(size(A)) * norm(A) * eps.
     * 
     * %   Copyright 1984-2001 The MathWorks, Inc. 
     * %   $Revision: 5.10 $  $Date: 2001/04/15 12:01:33 $
     * 
     * s = svd(A);
     */
    mlfAssign(&s, mlfSvd(NULL, NULL, mclVa(A, "A"), NULL));
    /*
     * if nargin==1
     */
    if (nargin_ == 1) {
        /*
         * tol = max(size(A)') * max(s) * eps;
         */
        mlfAssign(
          &tol,
          mclMtimes(
            mclMtimes(
              mclVe(
                mlfMax(
                  NULL,
                  mlfCtranspose(
                    mclVe(mlfSize(mclValueVarargout(), mclVa(A, "A"), NULL))),
                  NULL,
                  NULL)),
              mclVe(mlfMax(NULL, mclVv(s, "s"), NULL, NULL))),
            _mxarray4_));
    /*
     * end
     */
    }
    /*
     * r = sum(s > tol);
     */
    mlfAssign(&r, mlfSum(mclGt(mclVv(s, "s"), mclVa(tol, "tol")), NULL));
    mclValidateOutput(r, 1, nargout_, "r", "rank");
    mxDestroyArray(s);
    mxDestroyArray(tol);
    mxDestroyArray(A);
    mclSetCurrentLocalFunctionTable(save_local_function_table_);
    return r;
}
コード例 #3
0
ファイル: mrank.c プロジェクト: sleepandeat/Matlab
/*
 * function r=mrank(n)
 */
static mxArray * Mmrank(int nargout_, mxArray * n) {
    mexLocalFunctionTable save_local_function_table_
      = mclSetCurrentLocalFunctionTable(&_local_function_table_mrank);
    mxArray * r = NULL;
    mxArray * ans = NULL;
    mxArray * k = NULL;
    mclCopyArray(&n);
    /*
     * r=zeros(n,1);
     */
    mlfAssign(&r, mlfZeros(mclVa(n, "n"), _mxarray0_, NULL));
    /*
     * for k=1:n
     */
    {
        int v_ = mclForIntStart(1);
        int e_ = mclForIntEnd(mclVa(n, "n"));
        if (v_ > e_) {
            mlfAssign(&k, _mxarray1_);
        } else {
            /*
             * r(k)=my_rank(magic(k));
             * end
             */
            for (; ; ) {
                mclIntArrayAssign1(
                  &r, mlfMy_rank(mlfMagic(mlfScalar(v_)), NULL), v_);
                if (v_ == e_) {
                    break;
                }
                ++v_;
            }
            mlfAssign(&k, mlfScalar(v_));
        }
    }
    /*
     * r
     */
    mclPrintArray(mclVv(r, "r"), "r");
    mclValidateOutput(r, 1, nargout_, "r", "mrank");
    mxDestroyArray(k);
    mxDestroyArray(ans);
    mxDestroyArray(n);
    mclSetCurrentLocalFunctionTable(save_local_function_table_);
    return r;
}
コード例 #4
0
ファイル: myeye.c プロジェクト: liyuqiao/MatVB
/*
 * function y=myeye(x)
 */
static mxArray * Mmyeye(int nargout_, mxArray * x) {
    mexLocalFunctionTable save_local_function_table_
      = mclSetCurrentLocalFunctionTable(&_local_function_table_myeye);
    mxArray * y = NULL;
    mclCopyArray(&x);
    /*
     * y=eye(x);
     */
    mlfAssign(&y, mlfEye(mclVa(x, "x"), NULL));
    mclValidateOutput(y, 1, nargout_, "y", "myeye");
    mxDestroyArray(x);
    mclSetCurrentLocalFunctionTable(save_local_function_table_);
    return y;
}
コード例 #5
0
ファイル: myrot.c プロジェクト: liyuqiao/MatVB
/*
 * function y=myrot(x)
 */
static mxArray * Mmyrot(int nargout_, mxArray * x) {
    mexLocalFunctionTable save_local_function_table_
      = mclSetCurrentLocalFunctionTable(&_local_function_table_myrot);
    mxArray * y = NULL;
    mxArray * ans = NULL;
    mclCopyArray(&x);
    /*
     * y=inv(x);
     */
    mlfAssign(&y, mlfInv(mclVa(x, "x")));
    /*
     * format rat;
     */
    mlfFormat(_mxarray0_, NULL);
    /*
     * y=rats(y);
     */
    mlfAssign(&y, mlfRats(mclVv(y, "y"), NULL));
    mclValidateOutput(y, 1, nargout_, "y", "myrot");
    mxDestroyArray(ans);
    mxDestroyArray(x);
    mclSetCurrentLocalFunctionTable(save_local_function_table_);
    return y;
}
コード例 #6
0
ファイル: gasket.c プロジェクト: sleepandeat/Matlab
/*
 * function theImage=gasket(numPoints)
 */
static mxArray * Mgasket(int nargout_, mxArray * numPoints) {
    mexLocalFunctionTable save_local_function_table_
      = mclSetCurrentLocalFunctionTable(&_local_function_table_gasket);
    mxArray * theImage = NULL;
    mxArray * i = NULL;
    mxArray * theRand = NULL;
    mxArray * startPoint = NULL;
    mxArray * corners = NULL;
    mclCopyArray(&numPoints);
    /*
     * theImage =zeros(1000,1000);
     */
    mlfAssign(&theImage, mlfZeros(_mxarray0_, _mxarray0_, NULL));
    /*
     * corners=[866 1;1 500;866 1000];
     */
    mlfAssign(&corners, _mxarray1_);
    /*
     * startPoint=[866 1];
     */
    mlfAssign(&startPoint, _mxarray3_);
    /*
     * theRand=rand(numPoints,1);
     */
    mlfAssign(
      &theRand, mlfNRand(1, mclVa(numPoints, "numPoints"), _mxarray5_, NULL));
    /*
     * theRand=ceil(theRand*3);
     */
    mlfAssign(
      &theRand, mlfCeil(mclMtimes(mclVv(theRand, "theRand"), _mxarray6_)));
    /*
     * for i=1:numPoints
     */
    {
        int v_ = mclForIntStart(1);
        int e_ = mclForIntEnd(mclVa(numPoints, "numPoints"));
        if (v_ > e_) {
            mlfAssign(&i, _mxarray7_);
        } else {
            /*
             * startPoint=floor((corners(theRand(i),:)+startPoint)/2);
             * theImage(startPoint(1),startPoint(2))=1;
             * end
             */
            for (; ; ) {
                mlfAssign(
                  &startPoint,
                  mlfFloor(
                    mclMrdivide(
                      mclPlus(
                        mclArrayRef2(
                          mclVv(corners, "corners"),
                          mclIntArrayRef1(mclVv(theRand, "theRand"), v_),
                          mlfCreateColonIndex()),
                        mclVv(startPoint, "startPoint")),
                      _mxarray8_)));
                mclArrayAssign2(
                  &theImage,
                  _mxarray5_,
                  mclIntArrayRef1(mclVv(startPoint, "startPoint"), 1),
                  mclIntArrayRef1(mclVv(startPoint, "startPoint"), 2));
                if (v_ == e_) {
                    break;
                }
                ++v_;
            }
            mlfAssign(&i, mlfScalar(v_));
        }
    }
    mclValidateOutput(theImage, 1, nargout_, "theImage", "gasket");
    mxDestroyArray(corners);
    mxDestroyArray(startPoint);
    mxDestroyArray(theRand);
    mxDestroyArray(i);
    mxDestroyArray(numPoints);
    mclSetCurrentLocalFunctionTable(save_local_function_table_);
    return theImage;
}