# Spectral factorization of polynomial x(s)

2 views (last 30 days)
Omar Decevic on 15 May 2022
Commented: Omar Decevic on 15 May 2022
As a part of the algorithm that is used for Optimal robust stabilization I have to find stable polynomial such that: Where and are numerator and denominator of a transfer function  , and .
I have managed to find and by using:
s = tf('s');
% input of transfer function
transfer_function = input("Input the transfer function: ")
%ex: 1/s^3
[b,a] = tfdata(transfer_function);
arrayB = cell2mat(b);
arrayA = cell2mat(a);
syms s;
b = poly2sym(arrayB,s);
a = poly2sym(arrayA,s);
% b(-s) and a(-s)
minus_b = subs(b,s,-s);
minus_a = subs(a,s,-s);
expression = a*minus_a+b*minus_b;
But I am having trouble finding and .
I have tried using spectral factorization with the function spectralfact(), but it does not seem to work. Can you give me any tips on how to procede from here?

Torsten on 15 May 2022
Edited: Torsten on 15 May 2022
Let
a(s)*a(-s)+b(s)*b(-s) = p0 + p1*s + ... + p2n*s^(2*n)
Determine the roots of
a(s)*a(-s) + b(s)*b(-s)
The 2*n roots appear in pairs
s1,-s1,s2,-s2,...,sn,-sn
Take
s1,s2,...,sn
and build the polynomial
d(s)=a*(s-s1)*(s-s2)*...*(s-sn)
with a constant "a" to be determined.
Then
d(s)*d(-s) = a^2*(-1)^n*(s+s1)*(s+s2)*...*(s+sn)*(s-s1)*(s-s2)*...*(s-sn)
This means that
a(s)*a(-s) + b(s)*b(-s) = d(s)*d(-s)
if
p2n = a^2*(-1)^n
thus
a = sqrt(p2n/(-1)^n)
I leave it to you to implement this in MATLAB.
Omar Decevic on 15 May 2022
Thank you very much!