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

📄 flc3_samplea_acc.c

📁 其中提到遺傳學的程式碼與應用提供給次淚相向的研究者參考下載
💻 C
📖 第 1 页 / 共 2 页
字号:

  rtb_Exponentialgaussmf_b = exp(rtb_Productgaussmf_i * rtb_Productgaussmf_i *
    flc3_sampleA_P->Gain_Gain_fi);

  rtb_Weighting_m = flc3_sampleA_B->Weight_ka * (rtb_Exponentialgaussmf_b *
    rtb_Exponentialgaussmf_a);

  if (ssIsSampleHit(S, 1, tid)) {       /* Sample time: [0.0s, 1.0s] */

    flc3_sampleA_B->Weight_i = flc3_sampleA_P->Weight_Value_k;
  }

  rtb_Weighting_j = flc3_sampleA_B->Weight_i * (rtb_Exponentialgaussmf_b *
    rtb_Exponentialgaussmf_g);

  if (ssIsSampleHit(S, 1, tid)) {       /* Sample time: [0.0s, 1.0s] */

    flc3_sampleA_B->Weight_kb = flc3_sampleA_P->Weight_Value_ne;
  }

  rtb_Weighting_o = flc3_sampleA_B->Weight_kb * (rtb_Exponentialgaussmf_b *
    rtb_Exponentialgaussmf_i);

  flc3_sampleA_B->TotalFiringStrength = (((((((rtb_Weighting + rtb_Weighting_l)
    + rtb_Weighting_g) + rtb_Weighting_gv) + rtb_Weighting_f) + rtb_Weighting_h)
    + rtb_Weighting_m) + rtb_Weighting_j) + rtb_Weighting_o;

  /* If: '<S5>/If' */
  {
    int8_T rtPrevAction = flc3_sampleA_DWork->If_ActiveSubsystem;
    int8_T rtAction = -1;
    if (ssIsMajorTimeStep(S)) {
      if (flc3_sampleA_B->TotalFiringStrength < 0.0) { /* u1 < 0 */
        rtAction = 0;
      } else {
        rtAction = 1;
      }
      flc3_sampleA_DWork->If_ActiveSubsystem = rtAction;
    } else {
      rtAction = flc3_sampleA_DWork->If_ActiveSubsystem;
    }
    switch (rtAction) {
     case 0:

      /* Output and update for action system: '<S5>/Action: One' */
      {
        /* simstruct variables */
        flc3_sampleA_BlockIO *flc3_sampleA_B = (flc3_sampleA_BlockIO *)
          _ssGetBlockIO(S);
        flc3_sampleA_D_Work *flc3_sampleA_DWork = (flc3_sampleA_D_Work *)
          ssGetRootDWork(S);
        flc3_sampleA_Parameters *flc3_sampleA_P = (flc3_sampleA_Parameters *)
          ssGetDefaultParam(S);

        flc3_sampleA_B->Merge = flc3_sampleA_P->One_Value;

        if (ssIsMajorTimeStep(S)) {
          srUpdateBC(&flc3_sampleA_DWork->ActionOne_SubsysRanBC);
        }
      }

      break;
     case 1:

      /* Output and update for action system: '<S5>/Action: u1' */
      {
        /* simstruct variables */
        flc3_sampleA_BlockIO *flc3_sampleA_B = (flc3_sampleA_BlockIO *)
          _ssGetBlockIO(S);
        flc3_sampleA_D_Work *flc3_sampleA_DWork = (flc3_sampleA_D_Work *)
          ssGetRootDWork(S);

        /* Inport: '<S19>/u1' */
        flc3_sampleA_B->Merge = flc3_sampleA_B->TotalFiringStrength;

        if (ssIsMajorTimeStep(S)) {
          srUpdateBC(&flc3_sampleA_DWork->Actionu1_SubsysRanBC);
        }
      }

      break;
     default:
      break;
    }
    /* Disable the previously true ifaction subsystem */
    if (rtPrevAction != rtAction) {
      switch (rtPrevAction) {
       case 0:
        ssSetSolverNeedsReset(S);

        break;
       case 1:
        ssSetSolverNeedsReset(S);

        break;
       default:
        break;
      }
    }
  }

  if (ssIsSampleHit(S, 1, tid)) {       /* Sample time: [0.0s, 1.0s] */

    flc3_sampleA_B->LinearCoeff[0] = flc3_sampleA_P->LinearCoeff_Value[0];
    flc3_sampleA_B->LinearCoeff[1] = flc3_sampleA_P->LinearCoeff_Value[1];

    flc3_sampleA_B->ConstantCoeff = flc3_sampleA_P->ConstantCoeff_Value;

    flc3_sampleA_B->LinearCoeff_c[0] = flc3_sampleA_P->LinearCoeff_Value_b[0];
    flc3_sampleA_B->LinearCoeff_c[1] = flc3_sampleA_P->LinearCoeff_Value_b[1];

    flc3_sampleA_B->ConstantCoeff_o = flc3_sampleA_P->ConstantCoeff_Value_d;

    flc3_sampleA_B->LinearCoeff_g[0] = flc3_sampleA_P->LinearCoeff_Value_a[0];
    flc3_sampleA_B->LinearCoeff_g[1] = flc3_sampleA_P->LinearCoeff_Value_a[1];

    flc3_sampleA_B->ConstantCoeff_h = flc3_sampleA_P->ConstantCoeff_Value_g;

    flc3_sampleA_B->LinearCoeff_m[0] = flc3_sampleA_P->LinearCoeff_Value_i[0];
    flc3_sampleA_B->LinearCoeff_m[1] = flc3_sampleA_P->LinearCoeff_Value_i[1];

    flc3_sampleA_B->ConstantCoeff_oe = flc3_sampleA_P->ConstantCoeff_Value_m;

    flc3_sampleA_B->LinearCoeff_k[0] = flc3_sampleA_P->LinearCoeff_Value_m[0];
    flc3_sampleA_B->LinearCoeff_k[1] = flc3_sampleA_P->LinearCoeff_Value_m[1];

    flc3_sampleA_B->ConstantCoeff_f = flc3_sampleA_P->ConstantCoeff_Value_e;

    flc3_sampleA_B->MidRange = flc3_sampleA_P->MidRange_Value;

    flc3_sampleA_B->Zero = flc3_sampleA_P->Zero_Value;

    /* RelationalOperator: '<S4>/Zero Firing Strength?' */
    if (ssIsMajorTimeStep(S)) {
      flc3_sampleA_DWork->ZeroFiringStrength_Mode =
        (boolean_T)(flc3_sampleA_B->TotalFiringStrength > flc3_sampleA_B->Zero);
    }
    flc3_sampleA_B->ZeroFiringStrength =
      (real_T)(flc3_sampleA_DWork->ZeroFiringStrength_Mode);
  }

  if(flc3_sampleA_B->ZeroFiringStrength >= flc3_sampleA_P->Switch_Threshold) {

    {
      /* simstruct variables */
      flc3_sampleA_BlockIO *flc3_sampleA_B = (flc3_sampleA_BlockIO *)
        _ssGetBlockIO(S);

      rtb_Prod1[0] = flc3_sampleA_B->LinearCoeff_k[0] * rtb_Saturation;
      rtb_Prod1[1] = flc3_sampleA_B->LinearCoeff_k[1] * rtb_Saturation1;

      /* Sum: '<S28>/Sum_1' */
      rtb_Sum_1 = rtb_Prod1[0];
      rtb_Sum_1 += rtb_Prod1[1];

      rtb_impMethod = rtb_Weighting_o * (rtb_Sum_1 +
        flc3_sampleA_B->ConstantCoeff_f);

      rtb_Prod1_f[0] = flc3_sampleA_B->LinearCoeff_m[0] * rtb_Saturation;
      rtb_Prod1_f[1] = flc3_sampleA_B->LinearCoeff_m[1] * rtb_Saturation1;

      /* Sum: '<S29>/Sum_1' */
      rtb_Sum_1_c = rtb_Prod1_f[0];
      rtb_Sum_1_c += rtb_Prod1_f[1];

      rtb_Sum1_l = rtb_Sum_1_c + flc3_sampleA_B->ConstantCoeff_oe;

      rtb_impMethod_n = rtb_Weighting_j * rtb_Sum1_l;

      rtb_Prod1_c[0] = flc3_sampleA_B->LinearCoeff_g[0] * rtb_Saturation;
      rtb_Prod1_c[1] = flc3_sampleA_B->LinearCoeff_g[1] * rtb_Saturation1;

      /* Sum: '<S30>/Sum_1' */
      rtb_Sum_1_a = rtb_Prod1_c[0];
      rtb_Sum_1_a += rtb_Prod1_c[1];

      rtb_Sum1_e = rtb_Sum_1_a + flc3_sampleA_B->ConstantCoeff_h;

      rtb_impMethod_ne = rtb_Weighting_m * rtb_Sum1_e;

      rtb_impMethod_b = rtb_Weighting_h * rtb_Sum1_l;

      rtb_impMethod_nv = rtb_Weighting_f * rtb_Sum1_e;

      rtb_Prod1_p[0] = flc3_sampleA_B->LinearCoeff_c[0] * rtb_Saturation;
      rtb_Prod1_p[1] = flc3_sampleA_B->LinearCoeff_c[1] * rtb_Saturation1;

      /* Sum: '<S27>/Sum_1' */
      rtb_Sum_1_h = rtb_Prod1_p[0];
      rtb_Sum_1_h += rtb_Prod1_p[1];

      rtb_Sum1_n = rtb_Sum_1_h + flc3_sampleA_B->ConstantCoeff_o;

      rtb_impMethod_p = rtb_Weighting_gv * rtb_Sum1_n;

      rtb_impMethod_c = rtb_Weighting_g * rtb_Sum1_e;

      rtb_impMethod_k = rtb_Weighting_l * rtb_Sum1_n;

      rtb_Prod1_i[0] = flc3_sampleA_B->LinearCoeff[0] * rtb_Saturation;
      rtb_Prod1_i[1] = flc3_sampleA_B->LinearCoeff[1] * rtb_Saturation1;

      rtb_impMethod_cp = rtb_Weighting * ((rtb_Prod1_i[0] + rtb_Prod1_i[1]) +
        flc3_sampleA_B->ConstantCoeff);

      /* Sum: '<S5>/Sum1' */
      rtb_Sum1_h = rtb_impMethod_cp;
      rtb_Sum1_h += rtb_impMethod_k;
      rtb_Sum1_h += rtb_impMethod_c;
      rtb_Sum1_h += rtb_impMethod_p;
      rtb_Sum1_h += rtb_impMethod_nv;
      rtb_Sum1_h += rtb_impMethod_b;
      rtb_Sum1_h += rtb_impMethod_ne;
      rtb_Sum1_h += rtb_impMethod_n;
      rtb_Sum1_h += rtb_impMethod;
    }

    rtb_Switch = (rtb_Sum1_h / flc3_sampleA_B->Merge);
  } else {
    rtb_Switch = flc3_sampleA_B->MidRange;
  }

  flc3_sampleA_B->Gain4 = flc3_sampleA_B->Sum * flc3_sampleA_P->Gain4_Gain;

  /* Integrator: '<S1>/Integrator' */
  rtb_Integrator = flc3_sampleA_X->Integrator_CSTATE;

  if (ssIsSampleHit(S, 1, tid)) {       /* Sample time: [0.0s, 1.0s] */

    flc3_sampleA_B->Gain4_m = flc3_sampleA_B->Gain *
      flc3_sampleA_P->Gain4_Gain_e;
  }

  flc3_sampleA_B->Sum2 = flc3_sampleA_B->Gain4_m + ((rtb_Switch *
    flc3_sampleA_P->Gain3_Gain) + rtb_Integrator);
}

/* Update for root system: '<Root>' */
#define MDL_UPDATE
static void mdlUpdate(SimStruct *S, int_T tid)
{

  /* simstruct variables */
  flc3_sampleA_BlockIO *flc3_sampleA_B = (flc3_sampleA_BlockIO *)
    _ssGetBlockIO(S);
  flc3_sampleA_D_Work *flc3_sampleA_DWork = (flc3_sampleA_D_Work *)
    ssGetRootDWork(S);

  /* Derivative Block: <Root>/Derivative */
  {
    real_T timeStampA = flc3_sampleA_DWork->Derivative_RWORK.TimeStampA;
    real_T timeStampB = flc3_sampleA_DWork->Derivative_RWORK.TimeStampB;
    real_T *lastBank = &flc3_sampleA_DWork->Derivative_RWORK.TimeStampA;

    if (timeStampA != rtInf) {
      if (timeStampB == rtInf) {
        lastBank += 2;
      } else if (timeStampA >= timeStampB) {
        lastBank += 2;
      }
    }
    *lastBank++ = ssGetTaskTime(S,tid);
    *lastBank++ = flc3_sampleA_B->Sum;
  }
}

/* Derivatives for root system: '<Root>' */
#define MDL_DERIVATIVES
static void mdlDerivatives(SimStruct *S)
{
  /* simstruct variables */
  flc3_sampleA_BlockIO *flc3_sampleA_B = (flc3_sampleA_BlockIO *)
    _ssGetBlockIO(S);
  flc3_sampleA_ContinuousStates *flc3_sampleA_X =
    (flc3_sampleA_ContinuousStates*) ssGetContStates(S);
  flc3_sampleA_StateDerivatives *flc3_sampleA_Xdot =
    (flc3_sampleA_StateDerivatives*) ssGetdX(S);
  flc3_sampleA_Parameters *flc3_sampleA_P = (flc3_sampleA_Parameters *)
    ssGetDefaultParam(S);

  /* TransferFcn Block: <Root>/Transfer Fcn2 */
  {

    flc3_sampleA_Xdot->TransferFcn2_CSTATE[0] =
      flc3_sampleA_P->TransferFcn2_B*flc3_sampleA_B->Sum2;
    flc3_sampleA_Xdot->TransferFcn2_CSTATE[0] +=
      (flc3_sampleA_P->TransferFcn2_A[0])*flc3_sampleA_X->TransferFcn2_CSTATE[0]
      +
      (flc3_sampleA_P->TransferFcn2_A[1])*flc3_sampleA_X->TransferFcn2_CSTATE[1]
      +
      (flc3_sampleA_P->TransferFcn2_A[2])*flc3_sampleA_X->TransferFcn2_CSTATE[2];

    flc3_sampleA_Xdot->TransferFcn2_CSTATE[1] =
      (flc3_sampleA_P->TransferFcn2_A[3])*flc3_sampleA_X->TransferFcn2_CSTATE[0];

    flc3_sampleA_Xdot->TransferFcn2_CSTATE[2] =
      (flc3_sampleA_P->TransferFcn2_A[4])*flc3_sampleA_X->TransferFcn2_CSTATE[1];
  }

  /* Integrator Block: <S1>/Integrator */
  {

    flc3_sampleA_Xdot->Integrator_CSTATE = flc3_sampleA_B->Gain4;
  }
}

/* ZeroCrossings for root system: '<Root>' */
#define MDL_ZERO_CROSSINGS
static void mdlZeroCrossings(SimStruct *S)
{
  /* simstruct variables */
  flc3_sampleA_BlockIO *flc3_sampleA_B = (flc3_sampleA_BlockIO *)
    _ssGetBlockIO(S);
  flc3_sampleA_Parameters *flc3_sampleA_P = (flc3_sampleA_Parameters *)
    ssGetDefaultParam(S);
  flc3_sampleA_NonsampledZCs *flc3_sampleA_NonsampledZC =
    (flc3_sampleA_NonsampledZCs *) ssGetNonsampledZCs(S);

  /* Saturate Block: '<S2>/Saturation' */
  /* Do zero crossings for the upper limit */
  flc3_sampleA_NonsampledZC->Saturation_NSZC[0] = flc3_sampleA_B->Gain1 -
    flc3_sampleA_P->Saturation_UpperSat;
  /* Do zero crossings for the lower limit */
  flc3_sampleA_NonsampledZC->Saturation_NSZC[1] = flc3_sampleA_B->Gain1 -
    flc3_sampleA_P->Saturation_LowerSat;

  /* Saturate Block: '<S2>/Saturation1' */
  /* Do zero crossings for the upper limit */
  flc3_sampleA_NonsampledZC->Saturation1_NSZC[0] = flc3_sampleA_B->Gain2 -
    flc3_sampleA_P->Saturation1_UpperSat;
  /* Do zero crossings for the lower limit */
  flc3_sampleA_NonsampledZC->Saturation1_NSZC[1] = flc3_sampleA_B->Gain2 -
    flc3_sampleA_P->Saturation1_LowerSat;

  /* If Block: <S5>/If */
  flc3_sampleA_NonsampledZC->If_NSZC = 0.0;
  if (flc3_sampleA_B->TotalFiringStrength < 0.0) {
    flc3_sampleA_NonsampledZC->If_NSZC = 1.0;
  }

  /* RelationalOperator Block: <S4>/Zero Firing Strength? */
  flc3_sampleA_NonsampledZC->ZeroFiringStrength_NSZC =
    flc3_sampleA_B->TotalFiringStrength - flc3_sampleA_B->Zero;
}

/* Function to initialize sizes */
static void mdlInitializeSizes(SimStruct *S)
{

  /* checksum */
  ssSetChecksumVal(S, 0, 852606577U);
  ssSetChecksumVal(S, 1, 650250284U);
  ssSetChecksumVal(S, 2, 852284662U);
  ssSetChecksumVal(S, 3, 57438922U);

  /* options */
  ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);

  /* Accelerator check memory map size match for DWork */
  if (ssGetSizeofDWork(S) != sizeof(flc3_sampleA_D_Work)) {
    ssSetErrorStatus(S,"Unexpected error: Internal DWork sizes do "
     "not match for accelerator mex file.");
  }

  /* Accelerator check memory map size match for BlockIO */
  if (ssGetSizeofGlobalBlockIO(S) != sizeof(flc3_sampleA_BlockIO)) {
    ssSetErrorStatus(S,"Unexpected error: Internal BlockIO sizes do "
     "not match for accelerator mex file.");
  }

  /* model parameters */
  _ssSetDefaultParam(S, (real_T *) &flc3_sampleA_DefaultParameters);

  /* non-finites */
  rt_InitInfAndNaN(sizeof(real_T));
}

/* Empty mdlInitializeSampleTimes function (never called) */
static void mdlInitializeSampleTimes(SimStruct *S) { }

/* Empty mdlTerminate function (never called) */
static void mdlTerminate(SimStruct *S) { }

/* MATLAB MEX Glue */
#include "simulink.c"

⌨️ 快捷键说明

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