Represent Simulink Integrator block as Matlab Function

31 visualizaciones (últimos 30 días)
River Rock
River Rock el 4 de Dic. de 2012
Comentada: Edward Rodriguez el 10 de Ag. de 2020
Hi.
I need to implement the following behavior :
The Integrator and my_Integrator blocks have to be equivalent I/O.
How should I write the Matlab Function ?
Thanks for any reply.

Respuesta aceptada

Ryan G
Ryan G el 4 de Dic. de 2012
As this looks like a homework problem, I can't answer directly. However I will point you in the direction of persistent variables.

Más respuestas (4)

Azzi Abdelmalek
Azzi Abdelmalek el 7 de Dic. de 2012
Editada: Azzi Abdelmalek el 8 de Dic. de 2012
I don't know why do you need this, maybe if you explain exactly what you need, there is better way
  9 comentarios
Azzi Abdelmalek
Azzi Abdelmalek el 8 de Dic. de 2012
Editada: Azzi Abdelmalek el 8 de Dic. de 2012
Ok, I see, If T is constant, you must then set, in model configuration parameters your fixed step time to T, and also your step block sample time to T. In this case you don't need a clock.
function y = fcn(u)
persistent uold yold
T=0.01;
if isempty(uold)
uold=0;yold=0;
end
y = u*T+yold-(u-uold)*T/2
yold=y;uold=u;
River Rock
River Rock el 8 de Dic. de 2012
Changing the sample time of the Step block to 0.01 removed the previous offset. Thanks

Iniciar sesión para comentar.


Guy Rouleau
Guy Rouleau el 5 de Dic. de 2012
This is not a good idea. The MATLAB function is not designed for this purpose.
  1 comentario
Edward Rodriguez
Edward Rodriguez el 10 de Ag. de 2020
Excuse me, so, What would be a good idea to implement numerical integration methods in blocks in Simulink?

Iniciar sesión para comentar.


River Rock
River Rock el 5 de Dic. de 2012
Editada: River Rock el 6 de Dic. de 2012
My main goal is to implement the differential equations of a physical system using a single Matlab Function. As the sums and gains were easy to represent, I couldn't find any alternative for the integration.
  4 comentarios
Ryan G
Ryan G el 5 de Dic. de 2012
What you have written is close it would be more like:
y(z) = yOld+u(z)/SampleTime
You cannot use the ODE solver in the MATLAB function block.
River Rock
River Rock el 7 de Dic. de 2012
Any idea on how to get rid of this offset ?
Code looks like:
function y = fcn(u)
%#codegen
T=0.01;
persistent yOld;
persistent uOld;
if (isempty(yOld))
yOld = 0;
end
if (isempty(uOld))
uOld = 0;
end
y = yOld + (T/2)* (u + uOld);
%y=yOld + u*T;
yOld = y;
uOld = u;

Iniciar sesión para comentar.


River Rock
River Rock el 5 de Dic. de 2012
Can anybody suggest a better way of implementing the numerical integration ? The code has to be written inside the Matlab Function Block though.
  1 comentario
Kiran Mahmood
Kiran Mahmood el 21 de Oct. de 2018
I'm working on a similar problem. Did u find the solution ? Need help.

Iniciar sesión para comentar.

Categorías

Más información sobre Simulink Functions en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by