Red de conocimiento informático - Material del sitio web - Cómo usar el algoritmo ts para programar problemas tsd en matlabIngrese editsfuntmpl en el espacio de trabajo de matlab (esta es la plantilla de función s proporcionada por el propio matlab), analicemos la estructura de la función s en detalle . Su primera línea es así: function [sys, x0, str, ts] = sfuntmpl (t, x, u, flag) La primera es el significado de las variables de entrada y salida: t es el tiempo de muestreo, x es el estado variable, u es la cantidad de entrada (es la cantidad de entrada realizada en el módulo simulink) y el indicador es el indicador de estado del proceso de simulación (para determinar si está actualmente inicializado o en ejecución, etc.). La salida de sys varía según el indicador (analizaremos sys junto con el significado del indicador a continuación. Déjelo en blanco, str=[]), ts es un vector de 1×2, ts(1) es el. período de muestreo, y ts(2) es el desplazamiento. Hablemos de la estructura específica basada en el código en sfuntmpl.m: switchflag, juzgue la bandera para ver en qué estado se encuentra actualmente, case0, [sys, x0, str, ts]=mdlInitializeflag=0 significa que está en; el estado de inicialización. En este momento, la función mdlInitializeSizes se utiliza para la inicialización. Esta función está en la línea 149 de sfuntmpl.m. En la línea 149 de mdlInitializeSizes.m, encontramos que está en el estado de inicialización. sys es una estructura que se utiliza para configurar algunos parámetros del módulo. La descripción detallada de varios parámetros es la siguiente: size=simsizes La estructura. utilizado para configurar los parámetros del módulo está dado por los tamaños sim que se generan con NumContStates = 0; el número de variables de estado continuas del módulo. NumDiscStates=0; número de variables de estado discretas para el tamaño del módulo. NumOutputs=0; número de variables de salida para el tamaño del módulo. NumInputs=0; número de variables de entrada para el tamaño del módulo. .DirFeedthrough=1; si el módulo tiene paso directo (paso directo significa que la entrada puede controlar directamente la salida). NumSampleTimes=1; el número de muestras del módulo, al menos una vez sys=simsizes(sizes); asigna la salida a sys después de configurar el módulo. Por ejemplo, se puede considerar el siguiente modelo: dx/dt=fc(t, x, u) también se puede utilizar. Se puede describir mediante una ecuación de estado continua: dx/dt=A*x B*ux(k 1)=fd(t,x,u) También se puede describir mediante una ecuación de estado discreta: x(k 1)=H*x(k) G*u(k)y=fo(t,x,u) también se puede describir mediante la ecuación de estado de salida: y=C*x D*u Supongamos que el Las variables de estado, las variables de estado discretas, las variables de entrada y las variables de salida del modelo anterior son todas 1. Solo necesitamos realizar las siguientes modificaciones al código anterior: (Generalmente, los estados continuos y los estados discretos no se usan juntos, estoy aquí para facilitar la explicación) tamaños.NumContStates=1; tamaños.NumDiscStates=1; tamaños.NumOutputs= 1; tamaños.NumOutputs=1NumOutputs=1;

Cómo usar el algoritmo ts para programar problemas tsd en matlabIngrese editsfuntmpl en el espacio de trabajo de matlab (esta es la plantilla de función s proporcionada por el propio matlab), analicemos la estructura de la función s en detalle . Su primera línea es así: function [sys, x0, str, ts] = sfuntmpl (t, x, u, flag) La primera es el significado de las variables de entrada y salida: t es el tiempo de muestreo, x es el estado variable, u es la cantidad de entrada (es la cantidad de entrada realizada en el módulo simulink) y el indicador es el indicador de estado del proceso de simulación (para determinar si está actualmente inicializado o en ejecución, etc.). La salida de sys varía según el indicador (analizaremos sys junto con el significado del indicador a continuación. Déjelo en blanco, str=[]), ts es un vector de 1×2, ts(1) es el. período de muestreo, y ts(2) es el desplazamiento. Hablemos de la estructura específica basada en el código en sfuntmpl.m: switchflag, juzgue la bandera para ver en qué estado se encuentra actualmente, case0, [sys, x0, str, ts]=mdlInitializeflag=0 significa que está en; el estado de inicialización. En este momento, la función mdlInitializeSizes se utiliza para la inicialización. Esta función está en la línea 149 de sfuntmpl.m. En la línea 149 de mdlInitializeSizes.m, encontramos que está en el estado de inicialización. sys es una estructura que se utiliza para configurar algunos parámetros del módulo. La descripción detallada de varios parámetros es la siguiente: size=simsizes La estructura. utilizado para configurar los parámetros del módulo está dado por los tamaños sim que se generan con NumContStates = 0; el número de variables de estado continuas del módulo. NumDiscStates=0; número de variables de estado discretas para el tamaño del módulo. NumOutputs=0; número de variables de salida para el tamaño del módulo. NumInputs=0; número de variables de entrada para el tamaño del módulo. .DirFeedthrough=1; si el módulo tiene paso directo (paso directo significa que la entrada puede controlar directamente la salida). NumSampleTimes=1; el número de muestras del módulo, al menos una vez sys=simsizes(sizes); asigna la salida a sys después de configurar el módulo. Por ejemplo, se puede considerar el siguiente modelo: dx/dt=fc(t, x, u) también se puede utilizar. Se puede describir mediante una ecuación de estado continua: dx/dt=A*x B*ux(k 1)=fd(t,x,u) También se puede describir mediante una ecuación de estado discreta: x(k 1)=H*x(k) G*u(k)y=fo(t,x,u) también se puede describir mediante la ecuación de estado de salida: y=C*x D*u Supongamos que el Las variables de estado, las variables de estado discretas, las variables de entrada y las variables de salida del modelo anterior son todas 1. Solo necesitamos realizar las siguientes modificaciones al código anterior: (Generalmente, los estados continuos y los estados discretos no se usan juntos, estoy aquí para facilitar la explicación) tamaños.NumContStates=1; tamaños.NumDiscStates=1; tamaños.NumOutputs= 1; tamaños.NumOutputs=1NumOutputs=1;

Continúe mirando hacia abajo en la función mdlInitializeSizes: x0 = []; La variable de estado está configurada como vacía, es decir, no hay ninguna variable de estado, según nuestras suposiciones anteriores, se puede cambiar como valor inicial. ) str = []; No hace falta decir que mantenga los parámetros, simplemente configúrelo en [], ¡no importa de todos modos! El uso de cancan7.0 le dará un cierto significado ts=[00]; si el período de muestreo se establece en 0, es un sistema continuo. Si es un sistema discreto, se presenta en detalle en la función mdlGetTimeOfNextVarHit a continuación. Jeje, finalmente terminado, lo que sigue La inicialización debe ser rápida, continúe leyendo en la línea 106 de sfuntmpl: case1, sys=mdlDerivatives(t, x, u flag=1 significa que el diferencial del estado continuo se debe calcular en este); tiempo, que es el dx/dt=fc mencionado anteriormente. Para dx/dt en (t, x, u), si establece el número de variables de estado continuas en 0 cuando busca la función mdlDerivatives (en la línea 193), solo necesita sys=[] aquí; puede (como) sfuntmpl), de acuerdo con lo anterior. El modelo discutido aquí se cambia a sys=fc(t, x(1), u) o sys=A*x(1) B. *u. Aquí x (1) es una variable de estado continua y x (2) son variables de estado discretas. Aquí solo se utilizan variables de estado continua. En este momento, la salida de sys es una continuación diferencial. case2, sys=mdlUpdate(t, x, u); flag=2 significa que la siguiente variable de estado discreta se calculará en este momento, es decir, x(k 1)=fd(t, x, u) Como se mencionó anteriormente, busque la función mdlUpdate (en la línea 206) aquí es sys=[]; lo que indica que no hay un estado discreto, podemos cambiarlo a sys=fd (t,x(2),u). ), u) o sys=H*x(2) G*u; sys es x(k 1) Parece que una o dos oraciones en las siguientes oraciones son suficientes, jaja, en caso3 en la línea 118 de sfuntmpl, sys =mdlOutputs(t, x, u); flag=3 significa calcular la salida en este momento, es decir, y=fo (t, x, u), encontrar mdlGetTimeOfNextVarHit (t, x, u flag=4); para calcular el siguiente tiempo de muestreo en este momento, solo es útil en sistemas de muestreo discretos (es decir, la configuración ts(1) mencionada en mdlInitializeSizes no es 0. En sistemas continuos, solo escriba sys=[] en la función mdlGetTimeOfNextVarHit; esta función se usa principalmente para cambiar el paso. Para configuraciones largas, para implementaciones específicas, puede usar editvsfunc para ver vsfunc en el ejemplo anterior. m, en case9 en la línea 130 de sfuntmpl, sys=mdlTerminate(t, x, u); flag=9 indica que el sistema finalizará en este momento, escribiéndolo en la función mdlTerminate y escribiéndolo en sys=[ ] es suficiente, si desea establecer algo al final de la función, simplemente escriba esta función en la plantilla de la función s sfuntmpl y listo.