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

📄 sfun_eulerupd.c

📁 这也是一个关于导弹目标的Matlab程序
💻 C
字号:
#define S_FUNCTION_NAME sfun_eulerupd#define S_FUNCTION_LEVEL 2#include "simstruc.h"#include "simstruc_types.h"#include <math.h>#define FI0_IDX 0#define PARAM_FI0(S) ssGetSFcnParam(S,FI0_IDX)#define THETA0_IDX  1#define PARAM_THETA0(S) ssGetSFcnParam(S,THETA0_IDX)#define PSI0_IDX   2#define PARAM_PSI0(S) ssGetSFcnParam(S,PSI0_IDX)#define NPARAMS   3#define U(element) (*uPtrs[element])  /* Pointer to Input Port0 */static void mdlInitializeSizes(SimStruct *S){   ssSetNumSFcnParams(S, NPARAMS);     if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) { return; }   ssSetSFcnParamTunable(S, FI0_IDX, true);   ssSetSFcnParamTunable(S, THETA0_IDX, true);   ssSetSFcnParamTunable(S, PSI0_IDX, true);     ssSetNumContStates(S, 3);   ssSetNumDiscStates(S, 0);   if (!ssSetNumInputPorts(S, 1)) { return; }   ssSetInputPortWidth(S, 0, 3);      if (!ssSetNumOutputPorts(S, 1)) { return; }   ssSetOutputPortWidth(S, 0, 3);   ssSetNumSampleTimes(S, 1);   ssSetNumRWork(S, 0);   ssSetNumIWork(S, 0);   ssSetNumPWork(S, 0);   ssSetNumModes(S, 0);   ssSetNumNonsampledZCs(S, 0);   ssSetOptions(S, (SS_OPTION_WORKS_WITH_CODE_REUSE |                    SS_OPTION_USE_TLC_WITH_ACCELERATOR));   return;}static void mdlInitializeSampleTimes(SimStruct *S){    ssSetSampleTime(S, 0, CONTINUOUS_SAMPLE_TIME);    ssSetOffsetTime(S, 0, 0.0);}#define MDL_SET_WORK_WIDTHS   /* Change to #undef to remove function */#if defined(MDL_SET_WORK_WIDTHS) && defined(MATLAB_MEX_FILE)/* Function: mdlSetWorkWidths =============================================== * Abstract: *      Set up run-time parameters. */static void mdlSetWorkWidths(SimStruct *S){    const char_T *rtParamName_fi0 = "fi0";    const char_T *rtParamName_theta0 = "theta0";    const char_T *rtParamName_psi0 = "psi0";    ssSetNumRunTimeParams(S, NPARAMS);    if (ssGetErrorStatus(S) != NULL) return;    ssRegDlgParamAsRunTimeParam(S, FI0_IDX, 0, rtParamName_fi0, SS_DOUBLE);    ssRegDlgParamAsRunTimeParam(S, THETA0_IDX, 1, rtParamName_theta0, SS_DOUBLE);    ssRegDlgParamAsRunTimeParam(S, PSI0_IDX, 2, rtParamName_psi0, SS_DOUBLE);}#endif /* MDL_SET_WORK_WIDTHS */#define MDL_INITIALIZE_CONDITIONSstatic void mdlInitializeConditions(SimStruct *S){  real_T *x0    = ssGetContStates(S);  x0[0]=mxGetPr(ssGetSFcnParam(S, 0))[0];  x0[1]=mxGetPr(ssGetSFcnParam(S, 1))[0];  x0[2]=mxGetPr(ssGetSFcnParam(S, 2))[0];}static void mdlOutputs(SimStruct *S, int_T tid){  real_T *y = ssGetOutputPortRealSignal(S, 0);  real_T *x = ssGetContStates(S);    y[0]=x[0];  y[1]=x[1];  y[2]=x[2];}#define MDL_DERIVATIVESstatic void mdlDerivatives(SimStruct *S){  real_T *dx = ssGetdX(S);  real_T *x = ssGetContStates(S);  InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S, 0);    double wx,wy,wz,fi,theta,psi;  wx=U(0);  wy=U(1);  wz=U(2);  fi=x[0];  theta=x[1];  psi=x[2];  dx[0] = wx+sin(fi)*tan(theta)*wy+cos(fi)*tan(theta)*wz;  dx[1] = cos(fi)*wy-sin(fi)*wz;  dx[2] = sin(fi)/cos(theta)*wy+cos(fi)/cos(theta)*wz;}static void mdlTerminate(SimStruct *S){}#define MDL_RTW#if defined(MDL_RTW)&&(defined(MATLAB_MEX_FILE)||defined(NRT))static voidmdlRTW(SimStruct *S){/*    if (!ssWriteRTWParameters(S, 1, SSWRITE_VALUE_VECT, "", "",                               mxGetPr(ssGetSFcnParam(S,0)), 1))    {        return;    }*//*    if (!ssWriteRTWScalarParam(S, "fi0", ssGetSFcnParam(S, 0), SS_DOUBLE))    {        return;    }    if (!ssWriteRTWScalarParam(S, "theta0", ssGetSFcnParam(S, 1), SS_DOUBLE))    {        return;    }    if (!ssWriteRTWScalarParam(S, "psi0", ssGetSFcnParam(S, 2), SS_DOUBLE))    {        return;    }*/}#endif#ifdef	MATLAB_MEX_FILE    /* Is this file being compiled as a MEX-file? */#include "simulink.c"      /* MEX-file interface mechanism */#else#include "cg_sfun.h"       /* Code generation registration function */#endif

⌨️ 快捷键说明

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