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

📄 tau_damp.c

📁 一个simulink中调用m函数的例子
💻 C
📖 第 1 页 / 共 4 页
字号:
     */
    mlfAssign(
      &F_6b,
      mclMtimes(
        mclMtimes(mclVv(R_6b, "R_6b"), mclVv(R_w6, "R_w6")),
        mclVv(F_6w, "F_6w")));
    /*
     * 
     * % moments on 6 with pole in b wrt b
     * M_6bb=vp(veh.P6_b,F_6b);
     */
    mlfAssign(
      &M_6bb,
      mclFeval(
        mclValueVarargout(),
        mlxVp,
        mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".P6_b")),
        mclVv(F_6b, "F_6b"),
        NULL));
    /*
     * 
     * t6=[F_6b;M_6bb];
     */
    mlfAssign(
      &t6, mlfVertcat(mclVv(F_6b, "F_6b"), mclVv(M_6bb, "M_6bb"), 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(
          mclVe(mlfCos(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 7)))),
          _mxarray12_,
          mclVe(mlfSin(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 7)))),
          NULL),
        _mxarray19_,
        mlfHorzcat(
          mclVe(mlfSin(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 7)))),
          _mxarray12_,
          mclUminus(mclVe(mlfCos(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 7))))),
          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,
      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"), ".P7_b")),
            NULL))));
    /*
     * 
     * % relative velocity of fin7 middle point wrt c in 7
     * v_7c7=R_7b'*v_7cb;
     */
    mlfAssign(
      &v_7c7,
      mclMtimes(mlfCtranspose(mclVv(R_7b, "R_7b")), mclVv(v_7cb, "v_7cb")));
    /*
     * 
     * % attack angle
     * a7=atan2(v_7c7(3),v_7c7(1));
     */
    mlfAssign(
      &a7,
      mlfAtan2(
        mclVe(mclIntArrayRef1(mclVsv(v_7c7, "v_7c7"), 3)),
        mclVe(mclIntArrayRef1(mclVsv(v_7c7, "v_7c7"), 1))));
    /*
     * 
     * % 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(
          mclVe(mlfCos(mclVv(a7, "a7"))),
          _mxarray12_,
          mclUminus(mclVe(mlfSin(mclVv(a7, "a7")))),
          NULL),
        _mxarray16_,
        mlfHorzcat(
          mclVe(mlfSin(mclVv(a7, "a7"))),
          _mxarray12_,
          mclVe(mlfCos(mclVv(a7, "a7"))),
          NULL),
        NULL));
    /*
     * 
     * % cl and cd computation
     * [cl,cd]=a2clcd(a7);
     */
    mlfAssign(&cl, mlfA2clcd(&cd, mclVv(a7, "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,
      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_7c7, "v_7c7"), 1)), _mxarray5_),
            mclMpower(
              mclVe(mclIntArrayRef1(mclVsv(v_7c7, "v_7c7"), 3)), _mxarray5_))),
        mlfVertcat(mclVv(cd, "cd"), _mxarray12_, mclVv(cl, "cl"), NULL)));
    /*
     * 
     * % damping forces on 7 wrt b 
     * F_7b=R_7b*R_w7*F_7w;
     */
    mlfAssign(
      &F_7b,
      mclMtimes(
        mclMtimes(mclVv(R_7b, "R_7b"), mclVv(R_w7, "R_w7")),
        mclVv(F_7w, "F_7w")));
    /*
     * 
     * % moments on 7 with pole in b wrt b
     * M_7bb=vp(veh.P7_b,F_7b);
     */
    mlfAssign(
      &M_7bb,
      mclFeval(
        mclValueVarargout(),
        mlxVp,
        mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".P7_b")),
        mclVv(F_7b, "F_7b"),
        NULL));
    /*
     * 
     * t7=[F_7b;M_7bb];
     */
    mlfAssign(
      &t7, mlfVertcat(mclVv(F_7b, "F_7b"), mclVv(M_7bb, "M_7bb"), 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(
          mclVe(mlfCos(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 8)))),
          _mxarray12_,
          mclVe(mlfSin(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 8)))),
          NULL),
        mlfHorzcat(
          mclUminus(mclVe(mlfSin(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 8))))),
          _mxarray12_,
          mclVe(mlfCos(mclVe(mclIntArrayRef1(mclVsa(de, "de"), 8)))),
          NULL),
        _mxarray19_,
        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,
      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"), ".P8_b")),
            NULL))));
    /*
     * 
     * % relative velocity of fin8 middle point wrt c in 8
     * v_8c8=R_8b'*v_8cb;
     */
    mlfAssign(
      &v_8c8,
      mclMtimes(mlfCtranspose(mclVv(R_8b, "R_8b")), mclVv(v_8cb, "v_8cb")));
    /*
     * 
     * % attack angle
     * a8=atan2(v_8c8(3),v_8c8(1));
     */
    mlfAssign(
      &a8,
      mlfAtan2(
        mclVe(mclIntArrayRef1(mclVsv(v_8c8, "v_8c8"), 3)),
        mclVe(mclIntArrayRef1(mclVsv(v_8c8, "v_8c8"), 1))));
    /*
     * 
     * % 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(
          mclVe(mlfCos(mclVv(a8, "a8"))),
          _mxarray12_,
          mclUminus(mclVe(mlfSin(mclVv(a8, "a8")))),
          NULL),
        _mxarray16_,
        mlfHorzcat(
          mclVe(mlfSin(mclVv(a8, "a8"))),
          _mxarray12_,
          mclVe(mlfCos(mclVv(a8, "a8"))),
          NULL),
        NULL));
    /*
     * 
     * % cl and cd computation
     * [cl,cd]=a2clcd(a8);
     */
    mlfAssign(&cl, mlfA2clcd(&cd, mclVv(a8, "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,
      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_8c8, "v_8c8"), 1)), _mxarray5_),
            mclMpower(
              mclVe(mclIntArrayRef1(mclVsv(v_8c8, "v_8c8"), 3)), _mxarray5_))),
        mlfVertcat(mclVv(cd, "cd"), _mxarray12_, mclVv(cl, "cl"), NULL)));
    /*
     * 
     * % damping forces on 8 wrt b 
     * F_8b=R_8b*R_w8*F_8w;
     */
    mlfAssign(
      &F_8b,
      mclMtimes(
        mclMtimes(mclVv(R_8b, "R_8b"), mclVv(R_w8, "R_w8")),
        mclVv(F_8w, "F_8w")));
    /*
     * 
     * % moments on 8 with pole in b wrt b
     * M_8bb=vp(veh.P8_b,F_8b);
     */
    mlfAssign(
      &M_8bb,
      mclFeval(
        mclValueVarargout(),
        mlxVp,
        mclVe(mlfIndexRef(mclVsa(veh, "veh"), ".P8_b")),
        mclVv(F_8b, "F_8b"),
        NULL));
    /*
     * 
     * t8=[F_8b;M_8bb];
     */
    mlfAssign(
      &t8, mlfVertcat(mclVv(F_8b, "F_8b"), mclVv(M_8bb, "M_8bb"), NULL));
    /*
     * 
     * % --------------------------------------------------------------
     * % resulting hydrodynamic force and moment with pole in b wrt b
     * 
     * td=tf+t1+t2+t3+t4+t5+t6+t7+t8; 
     */
    mlfAssign(
      &td,
      mclPlus(
        mclPlus(
          mclPlus(
            mclPlus(
              mclPlus(
                mclPlus(
                  mclPlus(
                    mclPlus(mclVv(tf, "tf"), mclVv(t1, "t1")), mclVv(t2, "t2")),
                  mclVv(t3, "t3")),
                mclVv(t4, "t4")),
              mclVv(t5, "t5")),
            mclVv(t6, "t6")),
          mclVv(t7, "t7")),
        mclVv(t8, "t8")));
    mclValidateOutput(td, 1, nargout_, "td", "tau_damp");
    mxDestroyArray(sf);
    mxDestroyArray(v_Bcb);
    mxDestroyArray(i_fb);
    mxDestroyArray(k_fb);
    mxDestroyArray(R_fb);
    mxDestroyArray(v_Bcf);
    mxDestroyArray(af);
    mxDestroyArray(R_wf);
    mxDestroyArray(cl);
    mxDestroyArray(cd);
    mxDestroyArray(xcp);
    mxDestroyArray(F_Bw);
    mxDestroyArray(F_Bb);
    mxDestroyArray(Pf_b);
    mxDestroyArray(M_Bbb);
    mxDestroyArray(tf);
    mxDestroyArray(R_1b);
    mxDestroyArray(v_1cb);
    mxDestroyArray(v_1c1);
    mxDestroyArray(a1);
    mxDestroyArray(R_w1);
    mxDestroyArray(F_1w);
    mxDestroyArray(F_1b);
    mxDestroyArray(M_1bb);
    mxDestroyArray(t1);
    mxDestroyArray(R_2b);
    mxDestroyArray(v_2cb);
    mxDestroyArray(v_2c2);
    mxDestroyArray(a2);
    mxDestroyArray(R_w2);
    mxDestroyArray(F_2w);
    mxDestroyArray(F_2b);
    mxDestroyArray(M_2bb);
    mxDestroyArray(t2);
    mxDestroyArray(R_3b);
    mxDestroyArray(v_3cb);
    mxDestroyArray(v_3c3);
    mxDestroyArray(a3);
    mxDestroyArray(R_w3);
    mxDestroyArray(F_3w);
    mxDestroyArray(F_3b);
    mxDestroyArray(M_3bb);
    mxDestroyArray(t3);
    mxDestroyArray(R_4b);
    mxDestroyArray(v_4cb);
    mxDestroyArray(v_4c4);
    mxDestroyArray(a4);
    mxDestroyArray(R_w4);
    mxDestroyArray(F_4w);
    mxDestroyArray(F_4b);
    mxDestroyArray(M_4bb);
    mxDestroyArray(t4);
    mxDestroyArray(R_5b);
    mxDestroyArray(v_5cb);
    mxDestroyArray(v_5c5);
    mxDestroyArray(a5);
    mxDestroyArray(R_w5);
    mxDestroyArray(F_5w);
    mxDestroyArray(F_5b);
    mxDestroyArray(M_5bb);
    mxDestroyArray(t5);
    mxDestroyArray(R_6b);
    mxDestroyArray(v_6cb);
    mxDestroyArray(v_6c6);
    mxDestroyArray(a6);
    mxDestroyArray(R_w6);
    mxDestroyArray(F_6w);
    mxDestroyArray(F_6b);
    mxDestroyArray(M_6bb);
    mxDestroyArray(t6);
    mxDestroyArray(R_7b);
    mxDestroyArray(v_7cb);
    mxDestroyArray(v_7c7);
    mxDestroyArray(a7);
    mxDestroyArray(R_w7);
    mxDestroyArray(F_7w);
    mxDestroyArray(F_7b);
    mxDestroyArray(M_7bb);
    mxDestroyArray(t7);
    mxDestroyArray(R_8b);
    mxDestroyArray(v_8cb);
    mxDestroyArray(v_8c8);
    mxDestroyArray(a8);
    mxDestroyArray(R_w8);
    mxDestroyArray(F_8w);
    mxDestroyArray(F_8b);
    mxDestroyArray(M_8bb);
    mxDestroyArray(t8);
    mxDestroyArray(de);
    mxDestroyArray(vr);
    mxDestroyArray(veh);
    mclSetCurrentLocalFunctionTable(save_local_function_table_);
    return td;
}

⌨️ 快捷键说明

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