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

📄 tau_damp.c

📁 一个simulink中调用m函数的例子
💻 C
📖 第 1 页 / 共 3 页
字号:
        mlfFeval(
          mclValueVarargout(),
          mlxVp,
          mlfIndexRef(
            vr, "(?)", mlfColon(mlfScalar(4.0), mlfScalar(6.0), NULL)),
          mlfIndexRef(veh, ".P6_b"),
          NULL)));
    /*
     * 
     * % relative velocity of fin6 middle point wrt c in 6
     * v_6c6=R_6b'*v_6cb;
     */
    mlfAssign(&v_6c6, mlfMtimes(mlfCtranspose(R_6b), v_6cb));
    /*
     * 
     * % attack angle
     * a6=atan2(v_6c6(3),v_6c6(1));
     */
    mlfAssign(
      &a6,
      mlfAtan2(
        mlfIndexRef(v_6c6, "(?)", mlfScalar(3.0)),
        mlfIndexRef(v_6c6, "(?)", mlfScalar(1.0))));
    /*
     * 
     * % fin6 wind frame rotation matrix
     * R_w6=[cos(a6) 0 -sin(a6); 0 1 0; sin(a6) 0 cos(a6)];
     */
    mlfAssign(
      &R_w6,
      mlfVertcat(
        mlfHorzcat(mlfCos(a6), mlfScalar(0.0), mlfUminus(mlfSin(a6)), NULL),
        mlfDoubleMatrix(1, 3, __Array25_r, NULL),
        mlfHorzcat(mlfSin(a6), mlfScalar(0.0), mlfCos(a6), NULL),
        NULL));
    /*
     * 
     * % cl and cd computation
     * [cl,cd]=a2clcd(a6);
     */
    mlfAssign(&cl, mlfA2clcd(&cd, a6));
    /*
     * 
     * % damping forces on 6 wrt w 
     * F_6w=-0.5*veh.rho*veh.st*(v_6c6(1)^2+v_6c6(3)^2)*[cd; 0; cl];
     */
    mlfAssign(
      &F_6w,
      mlfMtimes(
        mlfMtimes(
          mlfFeval(
            mclValueVarargout(),
            mlxMtimes,
            mlfFeval(
              mclValueVarargout(),
              mlxMtimes,
              mlfScalar(-0.5),
              mlfIndexRef(veh, ".rho"),
              NULL),
            mlfIndexRef(veh, ".st"),
            NULL),
          mlfPlus(
            mlfMpower(
              mlfIndexRef(v_6c6, "(?)", mlfScalar(1.0)), mlfScalar(2.0)),
            mlfMpower(
              mlfIndexRef(v_6c6, "(?)", mlfScalar(3.0)), mlfScalar(2.0)))),
        mlfVertcat(
          mlfHorzcat(cd, NULL),
          mlfDoubleMatrix(1, 1, __Array26_r, NULL),
          mlfHorzcat(cl, NULL),
          NULL)));
    /*
     * 
     * % damping forces on 6 wrt b 
     * F_6b=R_6b*R_w6*F_6w;
     */
    mlfAssign(&F_6b, mlfMtimes(mlfMtimes(R_6b, R_w6), F_6w));
    /*
     * 
     * % moments on 6 with pole in b wrt b
     * M_6bb=vp(veh.P6_b,F_6b);
     */
    mlfAssign(
      &M_6bb,
      mlfFeval(
        mclValueVarargout(), mlxVp, mlfIndexRef(veh, ".P6_b"), F_6b, NULL));
    /*
     * 
     * t6=[F_6b;M_6bb];
     */
    mlfAssign(
      &t6, mlfVertcat(mlfHorzcat(F_6b, NULL), mlfHorzcat(M_6bb, NULL), NULL));
    /*
     * 
     * % --------------------------------------------------------------
     * % forces on FIN 7 
     * 
     * % fin7 rotation matrix
     * R_7b=[cos(de(7)) 0 sin(de(7));  0 -1 0; sin(de(7)) 0 -cos(de(7))];
     */
    mlfAssign(
      &R_7b,
      mlfVertcat(
        mlfHorzcat(
          mlfCos(mlfIndexRef(de, "(?)", mlfScalar(7.0))),
          mlfScalar(0.0),
          mlfSin(mlfIndexRef(de, "(?)", mlfScalar(7.0))),
          NULL),
        mlfDoubleMatrix(1, 3, __Array27_r, NULL),
        mlfHorzcat(
          mlfSin(mlfIndexRef(de, "(?)", mlfScalar(7.0))),
          mlfScalar(0.0),
          mlfUminus(mlfCos(mlfIndexRef(de, "(?)", mlfScalar(7.0)))),
          NULL),
        NULL));
    /*
     * 
     * % relative velocity of fin7 middle point wrt c in b
     * v_7cb=vr(1:3)+vp(vr(4:6),veh.P7_b);
     */
    mlfAssign(
      &v_7cb,
      mlfPlus(
        mlfIndexRef(vr, "(?)", mlfColon(mlfScalar(1.0), mlfScalar(3.0), NULL)),
        mlfFeval(
          mclValueVarargout(),
          mlxVp,
          mlfIndexRef(
            vr, "(?)", mlfColon(mlfScalar(4.0), mlfScalar(6.0), NULL)),
          mlfIndexRef(veh, ".P7_b"),
          NULL)));
    /*
     * 
     * % relative velocity of fin7 middle point wrt c in 7
     * v_7c7=R_7b'*v_7cb;
     */
    mlfAssign(&v_7c7, mlfMtimes(mlfCtranspose(R_7b), v_7cb));
    /*
     * 
     * % attack angle
     * a7=atan2(v_7c7(3),v_7c7(1));
     */
    mlfAssign(
      &a7,
      mlfAtan2(
        mlfIndexRef(v_7c7, "(?)", mlfScalar(3.0)),
        mlfIndexRef(v_7c7, "(?)", mlfScalar(1.0))));
    /*
     * 
     * % fin7 wind frame rotation matrix
     * R_w7=[cos(a7) 0 -sin(a7); 0 1 0; sin(a7) 0 cos(a7)];
     */
    mlfAssign(
      &R_w7,
      mlfVertcat(
        mlfHorzcat(mlfCos(a7), mlfScalar(0.0), mlfUminus(mlfSin(a7)), NULL),
        mlfDoubleMatrix(1, 3, __Array28_r, NULL),
        mlfHorzcat(mlfSin(a7), mlfScalar(0.0), mlfCos(a7), NULL),
        NULL));
    /*
     * 
     * % cl and cd computation
     * [cl,cd]=a2clcd(a7);
     */
    mlfAssign(&cl, mlfA2clcd(&cd, a7));
    /*
     * 
     * % damping forces on 7 wrt w 
     * F_7w=-0.5*veh.rho*veh.st*(v_7c7(1)^2+v_7c7(3)^2)*[cd; 0; cl];
     */
    mlfAssign(
      &F_7w,
      mlfMtimes(
        mlfMtimes(
          mlfFeval(
            mclValueVarargout(),
            mlxMtimes,
            mlfFeval(
              mclValueVarargout(),
              mlxMtimes,
              mlfScalar(-0.5),
              mlfIndexRef(veh, ".rho"),
              NULL),
            mlfIndexRef(veh, ".st"),
            NULL),
          mlfPlus(
            mlfMpower(
              mlfIndexRef(v_7c7, "(?)", mlfScalar(1.0)), mlfScalar(2.0)),
            mlfMpower(
              mlfIndexRef(v_7c7, "(?)", mlfScalar(3.0)), mlfScalar(2.0)))),
        mlfVertcat(
          mlfHorzcat(cd, NULL),
          mlfDoubleMatrix(1, 1, __Array29_r, NULL),
          mlfHorzcat(cl, NULL),
          NULL)));
    /*
     * 
     * % damping forces on 7 wrt b 
     * F_7b=R_7b*R_w7*F_7w;
     */
    mlfAssign(&F_7b, mlfMtimes(mlfMtimes(R_7b, R_w7), F_7w));
    /*
     * 
     * % moments on 7 with pole in b wrt b
     * M_7bb=vp(veh.P7_b,F_7b);
     */
    mlfAssign(
      &M_7bb,
      mlfFeval(
        mclValueVarargout(), mlxVp, mlfIndexRef(veh, ".P7_b"), F_7b, NULL));
    /*
     * 
     * t7=[F_7b;M_7bb];
     */
    mlfAssign(
      &t7, mlfVertcat(mlfHorzcat(F_7b, NULL), mlfHorzcat(M_7bb, NULL), NULL));
    /*
     * 
     * % --------------------------------------------------------------
     * % forces on FIN 8 
     * 
     * % fin8 rotation matrix
     * R_8b=[cos(de(8)) 0 sin(de(8)); -sin(de(8)) 0 cos(de(8));  0 -1 0];
     */
    mlfAssign(
      &R_8b,
      mlfVertcat(
        mlfHorzcat(
          mlfCos(mlfIndexRef(de, "(?)", mlfScalar(8.0))),
          mlfScalar(0.0),
          mlfSin(mlfIndexRef(de, "(?)", mlfScalar(8.0))),
          NULL),
        mlfHorzcat(
          mlfUminus(mlfSin(mlfIndexRef(de, "(?)", mlfScalar(8.0)))),
          mlfScalar(0.0),
          mlfCos(mlfIndexRef(de, "(?)", mlfScalar(8.0))),
          NULL),
        mlfDoubleMatrix(1, 3, __Array30_r, NULL),
        NULL));
    /*
     * 
     * % relative velocity of fin8 middle point wrt c in b
     * v_8cb=vr(1:3)+vp(vr(4:6),veh.P8_b);
     */
    mlfAssign(
      &v_8cb,
      mlfPlus(
        mlfIndexRef(vr, "(?)", mlfColon(mlfScalar(1.0), mlfScalar(3.0), NULL)),
        mlfFeval(
          mclValueVarargout(),
          mlxVp,
          mlfIndexRef(
            vr, "(?)", mlfColon(mlfScalar(4.0), mlfScalar(6.0), NULL)),
          mlfIndexRef(veh, ".P8_b"),
          NULL)));
    /*
     * 
     * % relative velocity of fin8 middle point wrt c in 8
     * v_8c8=R_8b'*v_8cb;
     */
    mlfAssign(&v_8c8, mlfMtimes(mlfCtranspose(R_8b), v_8cb));
    /*
     * 
     * % attack angle
     * a8=atan2(v_8c8(3),v_8c8(1));
     */
    mlfAssign(
      &a8,
      mlfAtan2(
        mlfIndexRef(v_8c8, "(?)", mlfScalar(3.0)),
        mlfIndexRef(v_8c8, "(?)", mlfScalar(1.0))));
    /*
     * 
     * % fin8 wind frame rotation matrix
     * R_w8=[cos(a8) 0 -sin(a8); 0 1 0; sin(a8) 0 cos(a8)];
     */
    mlfAssign(
      &R_w8,
      mlfVertcat(
        mlfHorzcat(mlfCos(a8), mlfScalar(0.0), mlfUminus(mlfSin(a8)), NULL),
        mlfDoubleMatrix(1, 3, __Array31_r, NULL),
        mlfHorzcat(mlfSin(a8), mlfScalar(0.0), mlfCos(a8), NULL),
        NULL));
    /*
     * 
     * % cl and cd computation
     * [cl,cd]=a2clcd(a8);
     */
    mlfAssign(&cl, mlfA2clcd(&cd, a8));
    /*
     * 
     * % damping forces on 8 wrt w 
     * F_8w=-0.5*veh.rho*veh.st*(v_8c8(1)^2+v_8c8(3)^2)*[cd; 0; cl];
     */
    mlfAssign(
      &F_8w,
      mlfMtimes(
        mlfMtimes(
          mlfFeval(
            mclValueVarargout(),
            mlxMtimes,
            mlfFeval(
              mclValueVarargout(),
              mlxMtimes,
              mlfScalar(-0.5),
              mlfIndexRef(veh, ".rho"),
              NULL),
            mlfIndexRef(veh, ".st"),
            NULL),
          mlfPlus(
            mlfMpower(
              mlfIndexRef(v_8c8, "(?)", mlfScalar(1.0)), mlfScalar(2.0)),
            mlfMpower(
              mlfIndexRef(v_8c8, "(?)", mlfScalar(3.0)), mlfScalar(2.0)))),
        mlfVertcat(
          mlfHorzcat(cd, NULL),
          mlfDoubleMatrix(1, 1, __Array32_r, NULL),
          mlfHorzcat(cl, NULL),
          NULL)));
    /*
     * 
     * % damping forces on 8 wrt b 
     * F_8b=R_8b*R_w8*F_8w;
     */
    mlfAssign(&F_8b, mlfMtimes(mlfMtimes(R_8b, R_w8), F_8w));
    /*
     * 
     * % moments on 8 with pole in b wrt b
     * M_8bb=vp(veh.P8_b,F_8b);
     */
    mlfAssign(
      &M_8bb,
      mlfFeval(
        mclValueVarargout(), mlxVp, mlfIndexRef(veh, ".P8_b"), F_8b, NULL));
    /*
     * 
     * t8=[F_8b;M_8bb];
     */
    mlfAssign(
      &t8, mlfVertcat(mlfHorzcat(F_8b, NULL), mlfHorzcat(M_8bb, NULL), NULL));
    /*
     * 
     * % --------------------------------------------------------------
     * % resulting hydrodynamic force and moment with pole in b wrt b
     * 
     * td=tf+t1+t2+t3+t4+t5+t6+t7+t8; 
     */
    mlfAssign(
      &td,
      mlfPlus(
        mlfPlus(
          mlfPlus(
            mlfPlus(mlfPlus(mlfPlus(mlfPlus(mlfPlus(tf, t1), t2), t3), t4), t5),
            t6),
          t7),
        t8));
    mclValidateOutputs("tau_damp", 1, nargout_, &td);
    mxDestroyArray(F_1b);
    mxDestroyArray(F_1w);
    mxDestroyArray(F_2b);
    mxDestroyArray(F_2w);
    mxDestroyArray(F_3b);
    mxDestroyArray(F_3w);
    mxDestroyArray(F_4b);
    mxDestroyArray(F_4w);
    mxDestroyArray(F_5b);
    mxDestroyArray(F_5w);
    mxDestroyArray(F_6b);
    mxDestroyArray(F_6w);
    mxDestroyArray(F_7b);
    mxDestroyArray(F_7w);
    mxDestroyArray(F_8b);
    mxDestroyArray(F_8w);
    mxDestroyArray(F_Bb);
    mxDestroyArray(F_Bw);
    mxDestroyArray(M_1bb);
    mxDestroyArray(M_2bb);
    mxDestroyArray(M_3bb);
    mxDestroyArray(M_4bb);
    mxDestroyArray(M_5bb);
    mxDestroyArray(M_6bb);
    mxDestroyArray(M_7bb);
    mxDestroyArray(M_8bb);
    mxDestroyArray(M_Bbb);
    mxDestroyArray(Pf_b);
    mxDestroyArray(R_1b);
    mxDestroyArray(R_2b);
    mxDestroyArray(R_3b);
    mxDestroyArray(R_4b);
    mxDestroyArray(R_5b);
    mxDestroyArray(R_6b);
    mxDestroyArray(R_7b);
    mxDestroyArray(R_8b);
    mxDestroyArray(R_fb);
    mxDestroyArray(R_w1);
    mxDestroyArray(R_w2);
    mxDestroyArray(R_w3);
    mxDestroyArray(R_w4);
    mxDestroyArray(R_w5);
    mxDestroyArray(R_w6);
    mxDestroyArray(R_w7);
    mxDestroyArray(R_w8);
    mxDestroyArray(R_wf);
    mxDestroyArray(a1);
    mxDestroyArray(a2);
    mxDestroyArray(a3);
    mxDestroyArray(a4);
    mxDestroyArray(a5);
    mxDestroyArray(a6);
    mxDestroyArray(a7);
    mxDestroyArray(a8);
    mxDestroyArray(af);
    mxDestroyArray(cd);
    mxDestroyArray(cl);
    mxDestroyArray(i_fb);
    mxDestroyArray(k_fb);
    mxDestroyArray(sf);
    mxDestroyArray(t1);
    mxDestroyArray(t2);
    mxDestroyArray(t3);
    mxDestroyArray(t4);
    mxDestroyArray(t5);
    mxDestroyArray(t6);
    mxDestroyArray(t7);
    mxDestroyArray(t8);
    mxDestroyArray(tf);
    mxDestroyArray(v_1c1);
    mxDestroyArray(v_1cb);
    mxDestroyArray(v_2c2);
    mxDestroyArray(v_2cb);
    mxDestroyArray(v_3c3);
    mxDestroyArray(v_3cb);
    mxDestroyArray(v_4c4);
    mxDestroyArray(v_4cb);
    mxDestroyArray(v_5c5);
    mxDestroyArray(v_5cb);
    mxDestroyArray(v_6c6);
    mxDestroyArray(v_6cb);
    mxDestroyArray(v_7c7);
    mxDestroyArray(v_7cb);
    mxDestroyArray(v_8c8);
    mxDestroyArray(v_8cb);
    mxDestroyArray(v_Bcb);
    mxDestroyArray(v_Bcf);
    mxDestroyArray(xcp);
    return td;
}

/*
 * The function "mlfTau_damp" contains the normal interface for the "tau_damp"
 * M-function from file "E:\RTW\NEW3\TAU_DAMP.M" (lines 1-307). This function
 * processes any input arguments and passes them to the implementation version
 * of the function, appearing above.
 */
mxArray * mlfTau_damp(mxArray * veh, mxArray * vr, mxArray * de) {
    int nargout = 1;
    mxArray * td = mclGetUninitializedArray();
    mlfEnterNewContext(0, 3, veh, vr, de);
    td = Mtau_damp(nargout, veh, vr, de);
    mlfRestorePreviousContext(0, 3, veh, vr, de);
    return mlfReturnValue(td);
}

/*
 * The function "mlxTau_damp" contains the feval interface for the "tau_damp"
 * M-function from file "E:\RTW\NEW3\TAU_DAMP.M" (lines 1-307). The feval
 * function calls the implementation version of tau_damp through this function.
 * This function processes any input arguments and passes them to the
 * implementation version of the function, appearing above.
 */
void mlxTau_damp(int nlhs, mxArray * plhs[], int nrhs, mxArray * prhs[]) {
    mxArray * mprhs[3];
    mxArray * mplhs[1];
    int i;
    if (nlhs > 1) {
        mlfError(
          mxCreateString(
            "Run-time Error: File: tau_damp Line: 1 Column:"
            " 0 The function \"tau_damp\" was called with m"
            "ore than the declared number of outputs (1)"));
    }
    if (nrhs > 3) {
        mlfError(
          mxCreateString(
            "Run-time Error: File: tau_damp Line: 1 Column:"
            " 0 The function \"tau_damp\" was called with m"
            "ore than the declared number of inputs (3)"));
    }
    for (i = 0; i < 1; ++i) {
        mplhs[i] = NULL;
    }
    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]);
    mplhs[0] = Mtau_damp(nlhs, mprhs[0], mprhs[1], mprhs[2]);
    mlfRestorePreviousContext(0, 3, mprhs[0], mprhs[1], mprhs[2]);
    plhs[0] = mplhs[0];
}

⌨️ 快捷键说明

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