Represent Simulink Integrator block as Matlab Function

30 ビュー (過去 30 日間)
River Rock
River Rock 2012 年 12 月 4 日
コメント済み: Edward Rodriguez 2020 年 8 月 10 日
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.
  2 件のコメント
Azzi Abdelmalek
Azzi Abdelmalek 2012 年 12 月 4 日
What is your goal?

サインインしてコメントする。

採用された回答

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

その他の回答 (4 件)

Azzi Abdelmalek
Azzi Abdelmalek 2012 年 12 月 7 日
編集済み: Azzi Abdelmalek 2012 年 12 月 8 日
I don't know why do you need this, maybe if you explain exactly what you need, there is better way
  9 件のコメント
Azzi Abdelmalek
Azzi Abdelmalek 2012 年 12 月 8 日
編集済み: Azzi Abdelmalek 2012 年 12 月 8 日
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 2012 年 12 月 8 日
Changing the sample time of the Step block to 0.01 removed the previous offset. Thanks

サインインしてコメントする。


Guy Rouleau
Guy Rouleau 2012 年 12 月 5 日
This is not a good idea. The MATLAB function is not designed for this purpose.
  1 件のコメント
Edward Rodriguez
Edward Rodriguez 2020 年 8 月 10 日
Excuse me, so, What would be a good idea to implement numerical integration methods in blocks in Simulink?

サインインしてコメントする。


River Rock
River Rock 2012 年 12 月 5 日
編集済み: River Rock 2012 年 12 月 6 日
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 件のコメント
Ryan G
Ryan G 2012 年 12 月 5 日
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 2012 年 12 月 7 日
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;

サインインしてコメントする。


River Rock
River Rock 2012 年 12 月 5 日
Can anybody suggest a better way of implementing the numerical integration ? The code has to be written inside the Matlab Function Block though.
  1 件のコメント
Kiran Mahmood
Kiran Mahmood 2018 年 10 月 21 日
I'm working on a similar problem. Did u find the solution ? Need help.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSimulink Functions についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by