Simulink is stricter than MATLAB when it comes to variable sizes. In MATLAB, you can change the size of a variable at will, but in Simulink, the dimensions of signals are generally expected to be fixed. This is because Simulink models are often used for code generation and real-time execution, where dynamic memory allocation is not allowed.
If you're seeing an error related to a varying-size signal, here's what you should do:
- Variable Sizing: Firstly, ensure that all variables you are using in your MATLAB function block have a fixed size. If you're declaring matrices or vectors, their sizes shouldn't change throughout the code.
- Ode45: ODE solvers, like ode45, often return varying-size outputs based on their adaptive step size. This could be a problem in Simulink.
- Consider setting the 'MaxStep' option of ode45 to ensure the number of steps does not exceed a certain limit.
- Or use a fixed step solver like ode4 (Runge-Kutta) if appropriate for your problem.
Alternative :
- If it's not strictly necessary to solve the ODE inside Simulink, solve it in MATLAB and import the results into Simulink as needed.
- Consider using the built-in ODE solvers in Simulink. For example, use the "From Workspace" block to provide inputs to the system, and the "To Workspace" block to retrieve outputs.