How can I round off the coefficients of sys2 polynomial(num/den)?

num=[1 0 0];
den=[1 0 0 1];
sys=tf(num,den)
sysd=c2d(sys,0.3)
sys2=d2c(sysd)

2 件のコメント

Walter Roberson
Walter Roberson 2011 年 6 月 23 日
For background, see http://www.mathworks.com/matlabcentral/answers/10096-i-m-trying-to-convert-a-system-from-c2d-and-then-from-d2c-but-the-results-are-not-the-same-why-the
Paulo Silva
Paulo Silva 2011 年 6 月 23 日
Nice catch Walter :)

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

 採用された回答

Paulo Silva
Paulo Silva 2011 年 6 月 23 日

1 投票

Hi sadel, I see another hard question :)
num=[1 0 0];
den=[1 0 0 1];
sys=tf(num,den);
sysd=c2d(sys,0.3);
sys2=d2c(sysd);
[num,den] = tfdata(sys2);
num=round(num{:});
den=round(den{:});
sys2simple=tf(num,den)
Be carefull, in your example this code works well enough but please read the documentation about the round function!!!!!
Also take a look at round2

4 件のコメント

Walter Roberson
Walter Roberson 2011 年 6 月 23 日
For example it seems to me that by the time a coefficient reaches 1/3, that the coefficient should be kept, rather than round it down to 0.
Paulo's code does what sadel asked, but I suspect it was not the right question to have asked.
sadel
sadel 2011 年 6 月 23 日
Hi guys and thank you!!! I think I will use the "round2" function.
sadel
sadel 2011 年 6 月 24 日
Ok I think now it's better, isn't it?
num=[1.5 0 0];
den=[1 0 2.3346 1];
sys=tf(num,den)
sysd=c2d(sys,0.3);
sys2=d2c(sysd);
[num,den] = tfdata(sys2);
num=round(num{:}/0.0001)*0.0001;
den=round(den{:}/0.0001)*0.0001;
sys2simple=tf(num,den)
Paulo Silva
Paulo Silva 2011 年 6 月 24 日
yes it's good

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

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeFunctions についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by