Azzera filtri
Azzera filtri

Error in 'fsw/Reactor S-Function' while executing MATLAB S-function 'rod', flag = 1 (derivatives), at time 0.0. Index exceeds matrix dimensions.

1 visualizzazione (ultimi 30 giorni)
función [sys, x0, str, ts, simStateCompliance] = destilación (t, y, u, flag)
cambiar de bandera,
%%%%%%%%%%%%%%%%%%%
% Inicialización%
%%%%%%%%%%%%%%%%%%%
caso 0,
[sys, x0, str, ts, simStateCompliance] = mdlInitializeSizes ();
%%%%%%%%%%%%%%%%
% Derivados%
%%%%%%%%%%%%%%%%
caso 1,
sys = mdlDerivados (t, y, u);
%%%%%%%%%%
% Actualización%
%%%%%%%%%%
caso 2,
sys = mdlUpdate (t, y, u);
%%%%%%%%%%%%
% Salidas%
%%%%%%%%%%%%
caso 3,
sys = mdlOutputs (t, y, u);
%%%%%%%%%%%%%%%%%%%%%%%
% GetTimeOfNextVarHit%
%%%%%%%%%%%%%%%%%%%%%%%
caso 4,
sys = mdlGetTimeOfNextVarHit (t, y, u);
%%%%%%%%%%%%%%
% Terminar %
%%%%%%%%%%%%%%
caso 9,
sys = mdlTerminate (t, y, u);
%%%%%%%%%%%%%%%%%%%%%
% Banderas inesperadas%
%%%%%%%%%%%%%%%%%%%%%
de otra manera
DAStudio.error ('Simulink: blocks: unhandledFlag', num2str (flag));
final
% end sfuntmpl
%
% ================================================= ============================
% mdlInitializeSizes
% Devuelve los tamaños, las condiciones iniciales y los tiempos de muestra para la función S.
% ================================================= ============================
%
función [sys, x0, str, ts, simStateCompliance] = mdlInitializeSizes ()
%
% call simsizes para una estructura de tamaños, complétala y conviértela en
Matriz de% de tamaños.
%
% Tenga en cuenta que en este ejemplo, los valores están codificados. Esto no es una
% de práctica recomendada ya que las características del bloque son típicamente
% definido por los parámetros de la función S.
%
tamaños = simsizes;
tamaños.NumContStates = 20;
tamaños.NumDiscStates = 0;
tamaños.NumOutputs = 5;
tamaños.NumInputs = 4;
tamaños.DirFeedthrough = 0;
tamaños.NumSampleTimes = 1; % se necesita al menos un tiempo de muestra
sys = simsizes (tamaños);
%
% inicializar las condiciones iniciales
x0 = unos (20,1) * 298.0;
%
% str es siempre una matriz vacía
%
str = [];
%
% inicializa la matriz de tiempos de muestra
%
ts = [0 0];
% Especifique el bloque simStateCompliance. Los valores permitidos son:
% 'UnknownSimState', <La configuración predeterminada; advertir y asumir DefaultSimState
% 'DefaultSimState', <Mismo estado sim que un bloque incorporado
% 'HasNoSimState', <Sin estado sim
% 'DisallowSimState' <Error al guardar o restaurar el estado del modelo sim
simStateCompliance = 'UnknownSimState';
% end mdlInitializeSizes
% ================================================= =========
% mdlDerivados
% Devuelve las derivadas para los estados continuos.
% ================================================= ============================
%
función sys = mdlDerivados (t, x, u)
%
% De conducción de calor 1-D, estado inestable
n = tamaño (x, 1);
% De entradas (3):
% De temperatura de la superficie izquierda (K)
Tem (1) = u (1);
% De temperatura del entorno
% T_amb = u (2); % 298,15;
% Del coeficiente global de transferencia de calor
% h = u (3); % 2;
% Tipo de material (0 = plata, 1 = aluminio)
tipo = u (4);
material = redondo (tipo);
% Estados (n):
% De temperaturas en puntos a lo largo de la barra
Temp (2: n + 1) = x (1: n, 1) ';
Parámetros%
% Radio de la barra
% radio = 0.03; % 3 cm
% De longitud de la barra
longitud = 0.10; % 30 centimetros
m = 0,50;
theta_s = 0.520;
theta_r = 0.218;
alfa = 0.0115;
K_s = 31,6;
% Conductividad térmica
% k_silver = [436.13 -0.011922 -0.000084465 3.3463E-08 0];
% k_alum = [165.84 0.49305 -0.0011114 9.8024E-07 -3.2368E-10];
% si material == 0;
% A = k_silver;
%más
% A = k_alum;
%final
para i = 1: n + 1,
K (i) = K_s * (Temp (i) ^ 0.5) * ((1- (1-Temp (i) ^ (1 / m)) ^ m) ^ 2);
final
% usa la media armónica para estimar la conductividad térmica en los bordes del volumen de control
% para i = 1: n
% D (i) = K_s * ((1-m) / (alpha * m * (theta_s-theta_r))) * ((theta (i) ^ (0.5- (1 / m))) / ((1- theta (i) ^ (1 / m)))) * ((1- (1-theta (i) ^ (1 / m)) ^ m) ^ 2);
%final
% De densidad sólida
% rho_silver = [102.79 -0.0186 0 0 0];
% rho_alum = [102.83 -0.00873 0 0 0];
% si material == 0;
% A = rho_silver;
%más
% A = rho_alum;
%final
para i = 1: n + 1
D (i) = K_s * ((1-m) / (alpha * m * (theta_s-theta_r))) * ((Temp (i) ^ (0.5- (1 / m))) / ((1-Temp (i) ^ (1 / m)))) * ((1- (1-Temp (i) ^ (1 / m)) ^ m) ^ 2);
final
% De capacidad de calor sólido
% cp_silver = [24710 1.14 0.00388 0 0];
% cp_alum = [22149 5.7062 0.0067408 0 0];
% si material == 0;
% A = cp_silver;
%más
% A = cp_alum;
%final
% para i = 1: n + 1,
% cp (i) = A (1) + A (2) * Temp (i) + A (3) * Temp (i) ^ 2 + A (4) * Temp (i) ^ 3 + A (5) * Temp (i) ^ 4;
%final
% Determinar el espacio igual entre nodos
dx = longitud / n;
% De superficie para cada sección
% As = 2 * pi * radio * dx;
% Del área de superficie para las áreas finales o de sección transversal
% Ae = pi * radio ^ 2;
% Calcular xdot:
para i = 2: n,
xdot (i-1,1) = (1 / (2 * (dx) ^ 2)) ...
* (D (i + 1) + D (i)) * (Temp (i + 1) -Temp (i)) ...
-1 / (2 * (dx) ^ 2) ...
* ((D (i-1) -D (i)) * (Temp (i) -Temp (i-1))) ...
+ 1 / dx ...
* (K (i) -K (i-1));
final
xdot (n, 1) = (1 / (2 * (dx) ^ 2)) ...
* (D (n + 1) + D (n)) * (Temp (n + 1) -Temp (n)) ...
+ 1 / dx ...
* (K (n + 1));
% derivados
sys = xdot;
% final mdlDerivados
%
% ================================================= ============================
% mdlUpdate
% Manejar actualizaciones de estado discretas, tiempos de muestra y paso de tiempo importante
% requisitos
% ================================================= ============================
%
función sys = mdlUpdate (t, y, u)
sys = [];
% end mdlUpdate
%
% ================================================= ============================
% mdlOutputs
% Devuelve las salidas del bloque.
% ================================================= ============================
%
función sys = mdlOutputs (t, y, u)
sys = [y (1) y (5) y (10) y (15) y (20)];
% end mdlOutputs
%
% ================================================= ============================
% mdlGetTimeOfNextVarHit
% Devuelve el tiempo del próximo golpe para este bloque. Tenga en cuenta que el resultado es
% tiempo absoluto. Tenga en cuenta que esta función solo se utiliza cuando especifica un
% de tiempo de muestra de tiempo discreto variable [-2 0] en la matriz de tiempo de muestra en
% mdlInitializeSizes.
% ================================================= ============================
%
función sys = mdlGetTimeOfNextVarHit (t, y, u)
sampleTime = 1; % Ejemplo, establece el siguiente golpe para que sea un segundo después.
sys = t + sampleTime;
% end mdlGetTimeOfNextVarHit
%
% ================================================= ============================
% mdlTerminate
% Realizar cualquier fin de las tareas de simulación.
% ================================================= ============================
%
función sys = mdlTerminate (t, y, u)
sys = [];
% end mdlTerminate

Risposte (0)

Categorie

Scopri di più su General Applications in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by