Represent Simulink Integrator block as Matlab Function

30 Ansichten (letzte 30 Tage)
River Rock
River Rock am 4 Dez. 2012
Kommentiert: Edward Rodriguez am 10 Aug. 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.

Akzeptierte Antwort

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

Weitere Antworten (4)

Azzi Abdelmalek
Azzi Abdelmalek am 7 Dez. 2012
Bearbeitet: Azzi Abdelmalek am 8 Dez. 2012
I don't know why do you need this, maybe if you explain exactly what you need, there is better way
  9 Kommentare
Azzi Abdelmalek
Azzi Abdelmalek am 8 Dez. 2012
Bearbeitet: Azzi Abdelmalek am 8 Dez. 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 am 8 Dez. 2012
Changing the sample time of the Step block to 0.01 removed the previous offset. Thanks

Melden Sie sich an, um zu kommentieren.


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

Melden Sie sich an, um zu kommentieren.


River Rock
River Rock am 5 Dez. 2012
Bearbeitet: River Rock am 6 Dez. 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 Kommentare
Ryan G
Ryan G am 5 Dez. 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 am 7 Dez. 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;

Melden Sie sich an, um zu kommentieren.


River Rock
River Rock am 5 Dez. 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 Kommentar
Kiran Mahmood
Kiran Mahmood am 21 Okt. 2018
I'm working on a similar problem. Did u find the solution ? Need help.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Simulink Functions finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by