Simplify Transfer Function Matrix from State Space Form

조회 수: 8 (최근 30일)
Diego Torres-Siclait
Diego Torres-Siclait 2022년 5월 8일
댓글: Diego Torres-Siclait 2022년 5월 8일
Hello,
So I am trying to find the transfer function based on a given state space.
I have 4 state space variables and 2 input variables
I solve for the matrix by solving for it via:
M=inv(s*eye(4)-A)*B(:,1) where s is the transfer function variable
A and B are a 4x4 and a 4x2 matrix, respectively.
I only want to know the transfer function of the last state variable based on the 1st input and so I ran the code to get M(4)
The result is:
(291092572962188544*(52192918614186625698444518236820348728735495618560*s^2 + 11252397011746677728245236731359753030204089434112*s + 444373219855405652822261463840068999419504203635))/(67399866667876599486667537717549076684092861056351431202759025623040*s^4 + 42464278741089363000296954579309245873406204871934648171073988722688*s^3 + 2297488914641467386088601099487479294998500605751388518061919174656*s^2 - 2440319864177907270599586997470126899570878247883142511440169009152*s - 349746435404782601645659492711056495443542480131034307368768072445) + (179449926349046518120448*(16703017991267559745434935388614455463159204413440*s^2 + 9694255099214075385675054328905457782285043499008*s + 1200327659673728889951461375690725495294778934073))/(78125*(67399866667876599486667537717549076684092861056351431202759025623040*s^4 + 42464278741089363000296954579309245873406204871934648171073988722688*s^3 + 2297488914641467386088601099487479294998500605751388518061919174656*s^2 - 2440319864177907270599586997470126899570878247883142511440169009152*s - 349746435404782601645659492711056495443542480131034307368768072445)) + (12453065286370507543289888743877440*(81129638414606681695789005144064*s^2 + 54732842176865668872273383129088*s + 8898770669723102454779195279849))/(67399866667876599486667537717549076684092861056351431202759025623040*s^4 + 42464278741089363000296954579309245873406204871934648171073988722688*s^3 + 2297488914641467386088601099487479294998500605751388518061919174656*s^2 - 2440319864177907270599586997470126899570878247883142511440169009152*s - 349746435404782601645659492711056495443542480131034307368768072445) - (498460498419343452338927647605129216*(5*s + 1)*(9007199254740992*s + 2461747390280677)*(9007199254740992*s + 3614818768512437))/(125*(67399866667876599486667537717549076684092861056351431202759025623040*s^4 + 42464278741089363000296954579309245873406204871934648171073988722688*s^3 + 2297488914641467386088601099487479294998500605751388518061919174656*s^2 - 2440319864177907270599586997470126899570878247883142511440169009152*s - 349746435404782601645659492711056495443542480131034307368768072445))
How Can I simplify this line of code to get my answer with decimals vs these awful integers?
I tried using 'format', but that didn't change. I still want my output to be in terms of s of course.
Future thanks!

채택된 답변

Paul
Paul 2022년 5월 8일
편집: Paul 2022년 5월 8일
Hi Diego,
It looks like the code used the Symbolic Math Toolbox? If so, there's no need to go that route unless you really need extended precision. Have you tried using the Control Systems Toolbox?
If you want the TF to the last state variable from the first input, try:
tf(ss(A,B(:,1),[0 0 0 1],0))
or
sys = ss(A,B,[0 0 0 1],0);
tf(sys(1,1))
If the symbolic approach is desired then
M = vpa([0 0 0 1]*inv(s*eye(4)-A)*B(:,1))
See the doc page for vpa() to see how to control the number of digits in each term in the result.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Symbolic Math Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by