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

📄 tau_damp.c

📁 一个simulink中调用m函数的例子
💻 C
📖 第 1 页 / 共 4 页
字号:
    /*
     * 
     * % damping forces on 3 wrt b 
     * F_3b=R_3b*R_w3*F_3w;
     */
    mlfAssign(
      &F_3b,
      mclMtimes(
        mclMtimes(mclVv(R_3b, "R_3b"), mclVv(R_w3, "R_w3")),
        mclVv(F_3w, "F_3w")));
    /*
     * 
     * % moments on 3 with pole in b wrt b
     * M_3bb=vp(veh.P3_b,F_3b);
     */
    mlfAssign(
      &M_3bb,
      mclFeval(
        mclValueVarargout(),
        mlxVp,
        mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".P3_b")),
        mclVv(F_3b, "F_3b"),
        NULL));
    /*
     * 
     * t3=[F_3b;M_3bb];
     */
    mlfAssign(
      &t3, mlfVertcat(mclVv(F_3b, "F_3b"), mclVv(M_3bb, "M_3bb"), NULL));
    /*
     * 
     * % --------------------------------------------------------------
     * % forces on FIN 4 
     * 
     * % fin4 rotation matrix
     * R_4b=[cos(de(4)) 0 sin(de(4)); -sin(de(4)) 0 cos(de(4));  0 -1 0];
     */
    mlfAssign(
      &R_4b,
      mlfVertcat(
        mlfHorzcat(
          mclVe(mlfCos(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 4)))),
          _mxarray12_,
          mclVe(mlfSin(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 4)))),
          NULL),
        mlfHorzcat(
          mclUminus(mclVe(mlfSin(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 4))))),
          _mxarray12_,
          mclVe(mlfCos(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 4)))),
          NULL),
        _mxarray19_,
        NULL));
    /*
     * 
     * % relative velocity of fin4 middle point wrt c in b
     * v_4cb=vr(1:3)+vp(vr(4:6),veh.P4_b);
     */
    mlfAssign(
      &v_4cb,
      mclPlus(
        mclVe(
          mclArrayRef1(
            mclVsa(vr, "vr"), mlfColon(_mxarray6_, _mxarray7_, NULL))),
        mclVe(
          mclFeval(
            mclValueVarargout(),
            mlxVp,
            mclVe(
              mclArrayRef1(
                mclVsa(vr, "vr"), mlfColon(_mxarray8_, _mxarray9_, NULL))),
            mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".P4_b")),
            NULL))));
    /*
     * 
     * % relative velocity of fin4 middle point wrt c in 4
     * v_4c4=R_4b'*v_4cb;
     */
    mlfAssign(
      &v_4c4,
      mclMtimes(mlfCtranspose(mclVv(R_4b, "R_4b")), mclVv(v_4cb, "v_4cb")));
    /*
     * 
     * % attack angle
     * a4=atan2(v_4c4(3),v_4c4(1));
     */
    mlfAssign(
      &a4,
      mlfAtan2(
        mclVe(mclIntArrayRef1(mclVsv(v_4c4, "v_4c4"), 3)),
        mclVe(mclIntArrayRef1(mclVsv(v_4c4, "v_4c4"), 1))));
    /*
     * 
     * % fin4 wind frame rotation matrix
     * R_w4=[cos(a4) 0 -sin(a4); 0 1 0; sin(a4) 0 cos(a4)];
     */
    mlfAssign(
      &R_w4,
      mlfVertcat(
        mlfHorzcat(
          mclVe(mlfCos(mclVv(a4, "a4"))),
          _mxarray12_,
          mclUminus(mclVe(mlfSin(mclVv(a4, "a4")))),
          NULL),
        _mxarray16_,
        mlfHorzcat(
          mclVe(mlfSin(mclVv(a4, "a4"))),
          _mxarray12_,
          mclVe(mlfCos(mclVv(a4, "a4"))),
          NULL),
        NULL));
    /*
     * 
     * % cl and cd computation
     * [cl,cd]=a2clcd(a4);
     */
    mlfAssign(&cl, mlfA2clcd(&cd, mclVv(a4, "a4")));
    /*
     * 
     * % damping forces on 4 wrt w 
     * F_4w=-0.5*veh.rho*veh.sw*(v_4c4(1)^2+v_4c4(3)^2)*[cd; 0; cl];
     */
    mlfAssign(
      &F_4w,
      mclMtimes(
        mclMtimes(
          mclFeval(
            mclValueVarargout(),
            mlxMtimes,
            mclFeval(
              mclValueVarargout(),
              mlxMtimes,
              _mxarray18_,
              mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".rho")),
              NULL),
            mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".sw")),
            NULL),
          mclPlus(
            mclMpower(
              mclVe(mclIntArrayRef1(mclVsv(v_4c4, "v_4c4"), 1)), _mxarray5_),
            mclMpower(
              mclVe(mclIntArrayRef1(mclVsv(v_4c4, "v_4c4"), 3)), _mxarray5_))),
        mlfVertcat(mclVv(cd, "cd"), _mxarray12_, mclVv(cl, "cl"), NULL)));
    /*
     * 
     * % damping forces on 4 wrt b 
     * F_4b=R_4b*R_w4*F_4w;
     */
    mlfAssign(
      &F_4b,
      mclMtimes(
        mclMtimes(mclVv(R_4b, "R_4b"), mclVv(R_w4, "R_w4")),
        mclVv(F_4w, "F_4w")));
    /*
     * 
     * % moments on 4 with pole in b wrt b
     * M_4bb=vp(veh.P4_b,F_4b);
     */
    mlfAssign(
      &M_4bb,
      mclFeval(
        mclValueVarargout(),
        mlxVp,
        mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".P4_b")),
        mclVv(F_4b, "F_4b"),
        NULL));
    /*
     * 
     * t4=[F_4b;M_4bb];
     */
    mlfAssign(
      &t4, mlfVertcat(mclVv(F_4b, "F_4b"), mclVv(M_4bb, "M_4bb"), NULL));
    /*
     * 
     * % --------------------------------------------------------------
     * % forces on FIN 5 
     * 
     * % fin5 rotation matrix
     * R_5b=[cos(de(5)) 0 sin(de(5)); 0 1 0; -sin(de(5)) 0 cos(de(5))];
     */
    mlfAssign(
      &R_5b,
      mlfVertcat(
        mlfHorzcat(
          mclVe(mlfCos(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 5)))),
          _mxarray12_,
          mclVe(mlfSin(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 5)))),
          NULL),
        _mxarray16_,
        mlfHorzcat(
          mclUminus(mclVe(mlfSin(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 5))))),
          _mxarray12_,
          mclVe(mlfCos(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 5)))),
          NULL),
        NULL));
    /*
     * 
     * % relative velocity of fin5 middle point wrt c in b
     * v_5cb=vr(1:3)+vp(vr(4:6),veh.P5_b);
     */
    mlfAssign(
      &v_5cb,
      mclPlus(
        mclVe(
          mclArrayRef1(
            mclVsa(vr, "vr"), mlfColon(_mxarray6_, _mxarray7_, NULL))),
        mclVe(
          mclFeval(
            mclValueVarargout(),
            mlxVp,
            mclVe(
              mclArrayRef1(
                mclVsa(vr, "vr"), mlfColon(_mxarray8_, _mxarray9_, NULL))),
            mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".P5_b")),
            NULL))));
    /*
     * 
     * % relative velocity of fin5 middle point wrt c in 5
     * v_5c5=R_5b'*v_5cb;
     */
    mlfAssign(
      &v_5c5,
      mclMtimes(mlfCtranspose(mclVv(R_5b, "R_5b")), mclVv(v_5cb, "v_5cb")));
    /*
     * 
     * % attack angle
     * a5=atan2(v_5c5(3),v_5c5(1));
     */
    mlfAssign(
      &a5,
      mlfAtan2(
        mclVe(mclIntArrayRef1(mclVsv(v_5c5, "v_5c5"), 3)),
        mclVe(mclIntArrayRef1(mclVsv(v_5c5, "v_5c5"), 1))));
    /*
     * 
     * % fin5 wind frame rotation matrix
     * R_w5=[cos(a5) 0 -sin(a5); 0 1 0; sin(a5) 0 cos(a5)];
     */
    mlfAssign(
      &R_w5,
      mlfVertcat(
        mlfHorzcat(
          mclVe(mlfCos(mclVv(a5, "a5"))),
          _mxarray12_,
          mclUminus(mclVe(mlfSin(mclVv(a5, "a5")))),
          NULL),
        _mxarray16_,
        mlfHorzcat(
          mclVe(mlfSin(mclVv(a5, "a5"))),
          _mxarray12_,
          mclVe(mlfCos(mclVv(a5, "a5"))),
          NULL),
        NULL));
    /*
     * 
     * % cl and cd computation
     * [cl,cd]=a2clcd(a5);
     */
    mlfAssign(&cl, mlfA2clcd(&cd, mclVv(a5, "a5")));
    /*
     * 
     * % damping forces on 5 wrt w 
     * F_5w=-0.5*veh.rho*veh.st*(v_5c5(1)^2+v_5c5(3)^2)*[cd; 0; cl];
     */
    mlfAssign(
      &F_5w,
      mclMtimes(
        mclMtimes(
          mclFeval(
            mclValueVarargout(),
            mlxMtimes,
            mclFeval(
              mclValueVarargout(),
              mlxMtimes,
              _mxarray18_,
              mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".rho")),
              NULL),
            mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".st")),
            NULL),
          mclPlus(
            mclMpower(
              mclVe(mclIntArrayRef1(mclVsv(v_5c5, "v_5c5"), 1)), _mxarray5_),
            mclMpower(
              mclVe(mclIntArrayRef1(mclVsv(v_5c5, "v_5c5"), 3)), _mxarray5_))),
        mlfVertcat(mclVv(cd, "cd"), _mxarray12_, mclVv(cl, "cl"), NULL)));
    /*
     * 
     * % damping forces on 5 wrt b 
     * F_5b=R_5b*R_w5*F_5w;
     */
    mlfAssign(
      &F_5b,
      mclMtimes(
        mclMtimes(mclVv(R_5b, "R_5b"), mclVv(R_w5, "R_w5")),
        mclVv(F_5w, "F_5w")));
    /*
     * 
     * % moments on 5 with pole in b wrt b
     * M_5bb=vp(veh.P5_b,F_5b);
     */
    mlfAssign(
      &M_5bb,
      mclFeval(
        mclValueVarargout(),
        mlxVp,
        mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".P5_b")),
        mclVv(F_5b, "F_5b"),
        NULL));
    /*
     * 
     * t5=[F_5b;M_5bb];
     */
    mlfAssign(
      &t5, mlfVertcat(mclVv(F_5b, "F_5b"), mclVv(M_5bb, "M_5bb"), NULL));
    /*
     * 
     * % --------------------------------------------------------------
     * % forces on FIN 6 
     * 
     * % fin6 rotation matrix
     * R_6b=[cos(de(6)) 0 sin(de(6)); sin(de(6)) 0 -cos(de(6)); 0 1 0];
     */
    mlfAssign(
      &R_6b,
      mlfVertcat(
        mlfHorzcat(
          mclVe(mlfCos(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 6)))),
          _mxarray12_,
          mclVe(mlfSin(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 6)))),
          NULL),
        mlfHorzcat(
          mclVe(mlfSin(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 6)))),
          _mxarray12_,
          mclUminus(mclVe(mlfCos(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 6))))),
          NULL),
        _mxarray16_,
        NULL));
    /*
     * 
     * % relative velocity of fin6 middle point wrt c in b
     * v_6cb=vr(1:3)+vp(vr(4:6),veh.P6_b);
     */
    mlfAssign(
      &v_6cb,
      mclPlus(
        mclVe(
          mclArrayRef1(
            mclVsa(vr, "vr"), mlfColon(_mxarray6_, _mxarray7_, NULL))),
        mclVe(
          mclFeval(
            mclValueVarargout(),
            mlxVp,
            mclVe(
              mclArrayRef1(
                mclVsa(vr, "vr"), mlfColon(_mxarray8_, _mxarray9_, NULL))),
            mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".P6_b")),
            NULL))));
    /*
     * 
     * % relative velocity of fin6 middle point wrt c in 6
     * v_6c6=R_6b'*v_6cb;
     */
    mlfAssign(
      &v_6c6,
      mclMtimes(mlfCtranspose(mclVv(R_6b, "R_6b")), mclVv(v_6cb, "v_6cb")));
    /*
     * 
     * % attack angle
     * a6=atan2(v_6c6(3),v_6c6(1));
     */
    mlfAssign(
      &a6,
      mlfAtan2(
        mclVe(mclIntArrayRef1(mclVsv(v_6c6, "v_6c6"), 3)),
        mclVe(mclIntArrayRef1(mclVsv(v_6c6, "v_6c6"), 1))));
    /*
     * 
     * % 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(
          mclVe(mlfCos(mclVv(a6, "a6"))),
          _mxarray12_,
          mclUminus(mclVe(mlfSin(mclVv(a6, "a6")))),
          NULL),
        _mxarray16_,
        mlfHorzcat(
          mclVe(mlfSin(mclVv(a6, "a6"))),
          _mxarray12_,
          mclVe(mlfCos(mclVv(a6, "a6"))),
          NULL),
        NULL));
    /*
     * 
     * % cl and cd computation
     * [cl,cd]=a2clcd(a6);
     */
    mlfAssign(&cl, mlfA2clcd(&cd, mclVv(a6, "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,
      mclMtimes(
        mclMtimes(
          mclFeval(
            mclValueVarargout(),
            mlxMtimes,
            mclFeval(
              mclValueVarargout(),
              mlxMtimes,
              _mxarray18_,
              mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".rho")),
              NULL),
            mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".st")),
            NULL),
          mclPlus(
            mclMpower(
              mclVe(mclIntArrayRef1(mclVsv(v_6c6, "v_6c6"), 1)), _mxarray5_),
            mclMpower(
              mclVe(mclIntArrayRef1(mclVsv(v_6c6, "v_6c6"), 3)), _mxarray5_))),
        mlfVertcat(mclVv(cd, "cd"), _mxarray12_, mclVv(cl, "cl"), NULL)));
    /*
     * 
     * % damping forces on 6 wrt b 
     * F_6b=R_6b*R_w6*F_6w;

⌨️ 快捷键说明

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