Variable-size signal error
显示 更早的评论
Hello,
So, I wrote the code for tether dynamics in matlab script, and when I solve it using ode45 it is executing the code without any errors. However, when I am using this code in Matlab function block in Simulink it is giving me an error that my output variable is varying-size signal. So , can anyone help me with this?
回答(1 个)
Mrutyunjaya Hiremath
2023-8-19
0 个投票
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.
7 个评论
Walter Roberson
2023-8-21
Are you using a tspan with a length of 2, or are you using a tspan with a length of at least 3? Length 2 requires dynamic memory allocation.
Dhruvit
2023-8-21
Walter Roberson
2023-8-21
If you had used tspan = [0, 10] then that would be a vector length 2, and ode45() would generate an unknown number of results needing dynamic memory. But with your tspan = 0:0.01:10 then the outputs will only be at those locations and dynamic memory would not be needed for that purpose.
Dhruvit
2023-8-21
Walter Roberson
2023-8-21
Did you pre-allocate all arrays?
Are you using event functions?
Walter Roberson
2023-8-21
It would not astonish me if ode45() is just considered too complex to analyze statically, and so effectively could not be run inside a MATLAB Function Block unless dynamic memory allocation is enabled.
类别
在 帮助中心 和 File Exchange 中查找有关 General Applications 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!