亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? scsb_sfun.c

?? CheckMate is a MATLAB-based tool for modeling, simulating and investigating properties of hybrid dyn
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* File: scsb_sfun.c * Abstract: *   C-MEX S-function for the Switched Continuous System Block (SCSB) *   in the CheckMate library. To compile the S-function, type "mex *   scsb_sfun.c" in the MATLAB command window. * Author: Alongkrit Chutinan * Date: March 21, 2002 * Altered by Jim Kapinski * April, 2002 * Altered by Ansgar Fehnker * July, 2003 * Note: *   This function has been adapted for the template provided by The *   MathWorks.  For more details about S-functions, see *   simulink/src/sfuntmpl_doc.c. */#define S_FUNCTION_NAME  scsb_sfun#define S_FUNCTION_LEVEL 2#include "simstruc.h"/* Data indices for S-Function parameter. */#define NPARAM          12#define PARAM_NX        0#define PARAM_NUP       1#define PARAM_NZ        2#define PARAM_NU        3#define PARAM_X0        4#define PARAM_SWFUNC    5#define PARAM_P0        6#define PARAM_USE_RESET 7#define PARAM_USE_PARAM 8#define PARAM_USE_SD    9#define PARAM_AR_CI     10#define PARAM_AR_DI     11/* Data indices for pointer work vector. */#define NPWORK             4#define PWORK_X_DOT        0#define PWORK_X_RESET      1#define PWORK_Z            2#define PWORK_U_OUT        3/* Data indices for integer work vector. */#define NIWORK              8#define IWORK_U_PORT        0#define IWORK_RESET_PORT    1#define IWORK_USE_RESET     2#define IWORK_LAST_RESET    3#define IWORK_USE_PARAM     4#define IWORK_SD_PORT       5#define IWORK_USE_SD        6#define IWORK_LAST_SD       7void computeDerivativeAndReset(SimStruct *S);/*====================* * S-function methods * *====================*/#define MDL_CHECK_PARAMETERS   /* Change to #undef to remove function */#if defined(MDL_CHECK_PARAMETERS) && defined(MATLAB_MEX_FILE)static void mdlCheckParameters(SimStruct *S){  mxArray *mxTemp;  int_T nx,nup,nz,nu,nAR,use_sd,use_param;  real_T temp;  use_sd = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_USE_SD));  use_param = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_USE_PARAM));    /* nx must be scalar integer. */  mxTemp = ssGetSFcnParam(S,PARAM_NX);  if (!mxIsNumeric(mxTemp)) {    ssSetErrorStatus(S,"Number of continuous states must be numeric. ");    return;  }  if ((mxGetM(mxTemp) != 1) || (mxGetN(mxTemp) != 1)) {    ssSetErrorStatus(S,"Number of continuous states must be scalar. ");    return;  }  temp = mxGetScalar(mxTemp);  nx = (int_T) temp;  if (temp != (real_T) nx) {    ssSetErrorStatus(S,"Number of continuous states must be integer. ");    return;  }  if (nx < 0) {     ssSetErrorStatus(S,"Number of continuous states must be non-negative. ");     return;  }  if (use_sd) {    /* nup must be scalar integer. */    mxTemp = ssGetSFcnParam(S,PARAM_NUP);    if (!mxIsNumeric(mxTemp)) {        ssSetErrorStatus(S,"Number of discrete-time controller outputs must be numeric. ");        return;    }    if ((mxGetM(mxTemp) != 1) || (mxGetN(mxTemp) != 1)) {        ssSetErrorStatus(S,"Number of discrete-time controller outputs must be scalar. ");        return;    }    temp = mxGetScalar(mxTemp);    nup = (int_T) temp;    if (temp != (real_T) nup) {        ssSetErrorStatus(S,"Number of discrete-time controller outputs must be integer. ");        return;    }    if (nup < 0) {        ssSetErrorStatus(S,"Number of discrete-time controller outputs must be non-negative. ");        return;    }      /* nz must be scalar integer. */    mxTemp = ssGetSFcnParam(S,PARAM_NZ);    if (!mxIsNumeric(mxTemp)) {        ssSetErrorStatus(S,"Number of discrete-time controller states must be numeric. ");        return;    }    if ((mxGetM(mxTemp) != 1) || (mxGetN(mxTemp) != 1)) {        ssSetErrorStatus(S,"Number of discrete-time controller states must be scalar. ");        return;    }    temp = mxGetScalar(mxTemp);    nz = (int_T) temp;    if (temp != (real_T) nz) {        ssSetErrorStatus(S,"Number of discrete-time controller states must be integer. ");        return;    }    if (nz < 0) {        ssSetErrorStatus(S,"Number of discrete-time controller states must be non-negative. ");        return;    }  }  /* nu must be scalar integer. */  mxTemp = ssGetSFcnParam(S,PARAM_NU);  if (!mxIsNumeric(mxTemp)) {    ssSetErrorStatus(S,"Number of discrete inputs must be numeric. ");    return;  }  if ((mxGetM(mxTemp) != 1) || (mxGetN(mxTemp) != 1)) {    ssSetErrorStatus(S,"Number of discrete inputs must be scalar. ");    return;  }  temp = mxGetScalar(mxTemp);  nu = (int_T) temp;  if (temp != (real_T) nu) {    ssSetErrorStatus(S,"Number of discrete inputs must be integer. ");    return;  }  if (nu < 0) {    ssSetErrorStatus(S,"Number of discrete inputs must be non-negative. ");    return;  }/* x0 must be a column vector of length nx. */  mxTemp = ssGetSFcnParam(S,PARAM_X0);  if (!mxIsNumeric(mxTemp)) {    ssSetErrorStatus(S,"Initial conditions must be numeric. ");    return;  }    /*Check Initial conditions.  If Sampled-Data Analysis is used, then the initial  conditions should be in the form [x0;z0]*/  if (!use_sd) {    if ((nx == 0 && !mxIsEmpty(mxTemp)) ||           (nx !=0 && (mxGetM(mxTemp) != nx || mxGetN(mxTemp) != 1))) {        ssSetErrorStatus(S,"Initial condition and number of continuous states must be consistent. ");        return;    }  }    if (use_sd) {     if (((nx == 0 && nz == 0 )&& !mxIsEmpty(mxTemp)) ||           (nx !=0 && (mxGetM(mxTemp) != nx +nz || mxGetN(mxTemp) != 1))) {        ssSetErrorStatus(S,"Initial condition and number of continuous states must be consistent. ");        return;     }  }      /* swfunc must be a string */  mxTemp = ssGetSFcnParam(S,PARAM_SWFUNC);  if (!mxIsChar(mxTemp)) {    ssSetErrorStatus(S,"Switching Function must be a string. ");    return;  }    if (use_param) {      /* p0 must be numeric. */    mxTemp = ssGetSFcnParam(S,PARAM_P0);    if (!mxIsNumeric(mxTemp)) {        ssSetErrorStatus(S,"Default parameter must be numeric. ");        return;    }  }  /* reset flag must be scalar and real. */  mxTemp = ssGetSFcnParam(S,PARAM_USE_RESET);  if (!mxIsNumeric(mxTemp)) {    ssSetErrorStatus(S,"Reset flag must be numeric. ");    return;  }  if ((mxGetM(mxTemp) != 1) || (mxGetN(mxTemp) != 1)) {    ssSetErrorStatus(S,"Reset flag must be scalar. ");    return;  }    /* AR CI must be a double matrix with nx columns. */  mxTemp = ssGetSFcnParam(S,PARAM_AR_CI);  if (!mxIsDouble(mxTemp)) {    ssSetErrorStatus(S,"Matrix CI for analysis region must be of class 'double'. ");    return;  }  if (use_sd) {    if (!mxIsEmpty(mxTemp) && mxGetN(mxTemp) != (nx+nz)) {        ssSetErrorStatus(S,"Matrix CI for analysis region must have same number of columns as number of plant and controller states. ");        return;    }  }  if (!use_sd) {    if (!mxIsEmpty(mxTemp) && mxGetN(mxTemp) != nx) {        ssSetErrorStatus(S,"Matrix CI for analysis region must have same number of columns as number of continuous states. ");        return;    }  }  if (mxIsEmpty(mxTemp)) {    nAR = 0;  }  else {    nAR = mxGetM(mxTemp);  }  /* AR dI must be a double column vector with nAR rows. */  mxTemp = ssGetSFcnParam(S,PARAM_AR_DI);  if (!mxIsDouble(mxTemp)) {    ssSetErrorStatus(S,"Vector dI for analysis region must be of class 'double'. ");    return;  }  if ((nAR == 0 && !mxIsEmpty(mxTemp)) ||       (nAR != 0 && (mxGetM(mxTemp) != nAR || mxGetN(mxTemp) != 1))) {    ssSetErrorStatus(S,"Vector dI for analysis region must be consistent with matrix CI. ");    return;  }  }#endif /* MDL_CHECK_PARAMETERS */static void mdlInitializeSizes(SimStruct *S){  int_T nx,nup,nz,nu,use_reset,use_sd;  int_T ninput,noutput;  int_T u_port,reset_port,x_port,sd_port;  int_T zero_crossings;    ssSetNumSFcnParams(S,NPARAM);  /* Number of expected parameters */  if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {    return; /* Parameter mismatch will be reported by Simulink */  }  else {    mdlCheckParameters(S);    if (ssGetErrorStatus(S) != NULL) return;  }  /* Assume that all parameters have been checked above. */  nx = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_NX));  nu = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_NU));  use_reset = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_USE_RESET));  use_sd = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_USE_SD));  if (use_sd) {    nup = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_NUP));    nz = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_NZ));  }      /* Initialize number of continuous and discrete states.  There are only  discrete states if sampled-data analysis is used.*/  if (use_sd) {    ssSetNumContStates(S,nx+1);    ssSetNumDiscStates(S,nz+nup);  }  else {  ssSetNumContStates(S,nx+1);  ssSetNumDiscStates(S,0);  }    /* Compute port index for the input u. Port index is -1 if there is     no input signal u. */  if (nu > 0)    u_port = 0;  else    u_port = -1;    /* Compute port index for the SD clock input.*/    if (use_sd)    sd_port = u_port + 1;  else    sd_port = u_port;        /* Compute port index for the reset signal. Port index is -1 if     there is no reset signal.  Note that the sampled-data clock input is now the first     input port after the discrete-location inputs. */  if (use_reset)    reset_port = sd_port + 1;  else    reset_port = -1;    ninput = (nu > 0) + use_sd + use_reset;     if (!ssSetNumInputPorts(S,ninput)) return;  /* Initialize size and direct feedthrough status for u port. */  if (u_port != -1) {    ssSetInputPortWidth(S,u_port,nu);    ssSetInputPortDirectFeedThrough(S,u_port,0);  }  /* Initialize size and direct feedthrough status for sampled-data clock input port. */  if (use_sd) {    ssSetInputPortWidth(S,sd_port,1);    ssSetInputPortDirectFeedThrough(S,sd_port,0);  }  /* Initialize size, type, and direct feedthrough status for reset port. */  if (reset_port != -1) {    ssSetInputPortWidth(S,reset_port,1);    ssSetInputPortDirectFeedThrough(S,reset_port,0);       ssSetInputPortDataType(S,reset_port,DYNAMICALLY_TYPED);  }  /* Compute port index for the state output port x. Port index is -1     if the output x is not available. */  if ((nx > 0)||(nz>0))    x_port = 0;  else    x_port = -1;  noutput = (nx > 0)||(nz > 0);  if (!ssSetNumOutputPorts(S,noutput)) return;    /* Initialize the size for the x port.  If sampled-data analysis is used,  then make the output the continuous-time state, the controller output, and   the discrete-time controller state.*/  if (x_port != -1) {    if (use_sd)        ssSetOutputPortWidth(S,x_port,nx+nz);    else        ssSetOutputPortWidth(S,x_port,nx);   }          ssSetNumSampleTimes(S,1);  ssSetNumRWork(S,0);  ssSetNumDWork(S,0);  ssSetNumIWork(S,NIWORK);  ssSetNumPWork(S,NPWORK);    zero_crossings = 0;  if (use_reset) {    /* Declare that we will track one zero crossing signal, namely the       reset signal. */    zero_crossings = 1;     }  if (use_sd) {    zero_crossings++;  }  ssSetNumNonsampledZCs(S,zero_crossings);    }static void mdlInitializeSampleTimes(SimStruct *S){  /* Specify that we have a continuous sample time. */  ssSetSampleTime(S,0,CONTINUOUS_SAMPLE_TIME);  ssSetOffsetTime(S,0,0.0);}#define MDL_START  /* Change to #undef to remove function */static void mdlStart(SimStruct *S){  int_T nx,nu,nz,nup,use_reset,u_port,reset_port,use_param,use_sd,sd_port;  real_T *z_and_u,*temp,zero,*cont_states;      /* Assume that all parameters have been checked previously. */  use_reset = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_USE_RESET));  use_param = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_USE_PARAM));  use_sd = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_USE_SD));   nx = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_NX));  if (use_sd) {    nup = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_NUP));    nz = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_NZ));  }  nu = (int_T) *mxGetPr(ssGetSFcnParam(S,PARAM_NU));      /* Compute port index for the input u. Port index is -1 if there is     no input signal u. */  if ((nu > 0))    u_port = 0;  else    u_port = -1;    /* Compute port index for the SD clock input.*/    if (use_sd)    sd_port = u_port + 1;  else    sd_port = u_port;        /* Compute port index for the reset signal. Port index is -1 if     there is no reset signal.  Note that the sampled-data clock input is now the first     input port after the discrete-location inputs. */  if (use_reset)    reset_port = sd_port + 1;  else    reset_port = -1;    /* Store port indices in the integer work vector so that we don't     have to compute them again. */  ssSetIWorkValue(S,IWORK_U_PORT,u_port);  ssSetIWorkValue(S,IWORK_RESET_PORT,reset_port);  ssSetIWorkValue(S,IWORK_USE_RESET,use_reset);  ssSetIWorkValue(S,IWORK_USE_PARAM,use_param);  ssSetIWorkValue(S,IWORK_USE_SD,use_sd);  ssSetIWorkValue(S,IWORK_SD_PORT,sd_port);      /* Initialize pointer work vector and allocate some mxArrays to     store arguments for the SCSB wrapper function. */  ssSetPWorkValue(S,PWORK_X_DOT,calloc((nx+1),sizeof(real_T)));  ssSetPWorkValue(S,PWORK_X_RESET,calloc(nx,sizeof(real_T)));  if (use_sd){    ssSetPWorkValue(S,PWORK_Z,calloc(nz,sizeof(real_T)));    ssSetPWorkValue(S,PWORK_U_OUT,calloc(nup,sizeof(real_T)));  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美一区二区三区久本道91| 精油按摩中文字幕久久| 国产精品久久久久7777按摩| 久久久国产精华| 久久久久久久久一| 久久久精品欧美丰满| 久久久久久电影| 亚洲国产精品激情在线观看| 欧美国产视频在线| 国产精品大尺度| 亚洲免费成人av| 亚洲一区二区精品久久av| 亚洲国产另类精品专区| 日韩高清一区二区| 久久国产人妖系列| 国产福利视频一区二区三区| 成人福利视频在线看| 91小宝寻花一区二区三区| 色香蕉成人二区免费| 欧美日韩精品一区二区三区四区| 欧美一区二区三区四区高清| 久久综合狠狠综合| 中文字幕av在线一区二区三区| 中文字幕中文字幕在线一区| 亚洲激情图片qvod| 视频一区二区欧美| 国产真实乱子伦精品视频| 处破女av一区二区| 欧美在线观看视频在线| 日韩欧美国产精品| 日本一区二区三区四区| 色伊人久久综合中文字幕| 国产高清在线精品| 韩国三级中文字幕hd久久精品| 国产福利91精品一区| 亚洲欧美视频一区| 亚洲成人av一区| 韩国精品一区二区| 色老头久久综合| 日韩免费福利电影在线观看| 国产精品美女久久久久aⅴ国产馆| 亚洲五码中文字幕| 国产乱色国产精品免费视频| 一本一本大道香蕉久在线精品| 777欧美精品| 中文一区一区三区高中清不卡| 亚洲国产成人va在线观看天堂| 国产综合色在线| 欧美色综合网站| 久久精品人人做| 亚洲国产视频一区二区| 国产精品一区二区无线| 91福利精品视频| 国产日产亚洲精品系列| 亚洲aⅴ怡春院| 粗大黑人巨茎大战欧美成人| 欧美一区二区视频网站| 亚洲视频免费观看| 国产在线日韩欧美| 欧美日韩一级黄| 国产精品乱码一区二三区小蝌蚪| 五月婷婷久久综合| www.成人网.com| 精品国产乱码91久久久久久网站| 亚洲人成亚洲人成在线观看图片 | 九九久久精品视频| 色88888久久久久久影院按摩| 精品少妇一区二区三区日产乱码 | 欧洲精品中文字幕| 国产午夜精品福利| 免费观看一级特黄欧美大片| 91麻豆蜜桃一区二区三区| 欧美电影免费观看高清完整版在 | 一本一道波多野结衣一区二区| 久久香蕉国产线看观看99| 香港成人在线视频| 在线影院国内精品| 中文字幕在线观看不卡| 国产另类ts人妖一区二区| 91精选在线观看| 亚洲一二三专区| 91麻豆免费看| 一区精品在线播放| 中文在线免费一区三区高中清不卡 | 亚洲成人中文在线| 色婷婷国产精品综合在线观看| 国产精品热久久久久夜色精品三区| 奇米影视一区二区三区| 欧美视频完全免费看| 一区二区三区av电影| 91网站在线播放| 一色桃子久久精品亚洲| 99免费精品视频| 国产精品午夜免费| 丁香天五香天堂综合| 久久精品一区二区三区不卡牛牛| 人妖欧美一区二区| 67194成人在线观看| 丝袜美腿高跟呻吟高潮一区| 欧美精品粉嫩高潮一区二区| 亚洲观看高清完整版在线观看| 欧美性做爰猛烈叫床潮| 亚洲大片免费看| 欧美日本在线一区| 日日摸夜夜添夜夜添精品视频| 精品视频1区2区| 亚洲成人资源网| 91精品欧美综合在线观看最新| 首页国产丝袜综合| 欧美一区二区三区免费大片| 蜜桃久久久久久久| 精品国产三级电影在线观看| 精品一区二区在线观看| www久久久久| 成人免费电影视频| 亚洲欧美日韩国产成人精品影院| av电影天堂一区二区在线 | 男人的j进女人的j一区| 欧美一级二级在线观看| 久久国产尿小便嘘嘘尿| 亚洲精品在线观看网站| 成人综合日日夜夜| 亚洲欧洲国产日本综合| 欧美亚洲高清一区二区三区不卡| 日本中文字幕一区二区视频| 精品久久人人做人人爰| 国产成人免费视频一区| 亚洲欧美色一区| 7777精品伊人久久久大香线蕉的 | 欧美一区二区三区不卡| 久久超碰97中文字幕| 亚洲国产高清aⅴ视频| 日本久久一区二区三区| 丝袜国产日韩另类美女| 精品捆绑美女sm三区| 成人激情黄色小说| 在线观看一区不卡| 毛片不卡一区二区| 国产精品美女一区二区三区| 欧美亚洲动漫精品| 国产精品一区二区三区乱码 | 91亚洲精品乱码久久久久久蜜桃| 午夜欧美在线一二页| 久久免费国产精品| 日本久久一区二区| 国产原创一区二区三区| 亚洲乱码国产乱码精品精98午夜| 欧美高清一级片在线| 福利电影一区二区三区| 亚洲不卡一区二区三区| 欧美高清在线一区| 在线成人午夜影院| av电影天堂一区二区在线| 七七婷婷婷婷精品国产| 国产精品久久久久影院亚瑟| 欧美日韩aaaaaa| www.在线成人| 另类小说综合欧美亚洲| 亚洲男人天堂一区| 精品国产百合女同互慰| 欧美优质美女网站| 国产精品99久久不卡二区| 亚洲高清免费观看| 中文在线免费一区三区高中清不卡| 在线播放91灌醉迷j高跟美女 | 色噜噜狠狠色综合中国| 国产酒店精品激情| 日本sm残虐另类| 亚洲一区二区精品视频| 国产精品久久久久久久午夜片| 欧美精品在线观看一区二区| www.欧美精品一二区| 国产精品一级片在线观看| 亚洲va国产va欧美va观看| 1000精品久久久久久久久| 欧美大白屁股肥臀xxxxxx| 91福利视频在线| 91麻豆自制传媒国产之光| 国产福利一区二区| 美女久久久精品| 石原莉奈一区二区三区在线观看| 亚洲视频在线观看三级| 久久精品夜色噜噜亚洲a∨| 欧美一区三区四区| 欧美性受极品xxxx喷水| 91在线免费播放| 成人动漫视频在线| 国产乱人伦精品一区二区在线观看| 日本中文字幕一区| 亚洲国产精品自拍| 一区二区免费看| 1024成人网色www| 国产精品激情偷乱一区二区∴| 久久精品人人做人人爽人人| 26uuuu精品一区二区| 久久综合九色综合欧美就去吻| 91精品国产综合久久精品性色| 欧美图片一区二区三区| 色老综合老女人久久久| 色香蕉久久蜜桃|