# Unable to find proper solutions through "Solve" or "NSolve"

I'm working on a problem that involves a CUK converter. In control theory, a system is marginally stable if the real part of all eigenvalues are equal to zero. Actually, the eigenvalues of a matrix $A$ in a thing called the space-state model. Okay, so I have this matrix $A$ that depends of another matrices. Okay, when a system is unstable we would like to fix it using a controller. So I'm trying to figure out a gain $k_c$ that makes the system marginally stable. The code to do that is the following:

kst = 1/10;
ka = 1/20;
A = {{-64.383, 0, -22.35, 0}, {0, 0, 27.65, -50}, {1788, -2212, 0,
0}, {0, 4000, 0, -333.333}};
B = {3619.3, 3619.3, -29800, 0} ;
Cc = {0, 0, 0, 1} ;
NSolve[Re[Eigenvalues[A - Outer[Times, B ka kst kc, Cc]]] == 0, kc]
FindInstance[
Re[Eigenvalues[A - Outer[Times, B ka kst kc, Cc]]] < 0, kc, Reals]


(The part about FindInstace is to know what values of kc makes the system stable).

Okay, the output for NSolve is a huge matrix. Since it is pretty large I will write a few elements of it.

{{Re[Root[SystemReduceDumpP$77107, 3]] -> 0, Re[Root[SystemReduceDumpP$77107, 4]] -> 0,
Re[Root[SystemReduceDumpP$77107, 2]] -> 0}, {Re[Root[SystemReduceDumpP$77107, 3]] -> 0,
Re[Root[SystemReduceDumpP$77107, 4]] -> 0, Re[Root[SystemReduceDumpP$77107, 2]] ->
0}, {Re[Root[SystemReduceDumpP$77107, 3]] -> 0, Re[Root[SystemReduceDumpP$77107, 4]] -> 0,
Re[Root[SystemReduceDumpP$77107, 2]] -> 0},  • That is the output for NSolve.Here is where the first question comes up: What does it mean that output? Mathematica was unable to solve the equation or the equation just hasn't any solutions? • The output for FindInstance says kc->0. But that isn't correct. Actually If I set kc=0.8 I get the real parts of the eigenvalues negative. • If you're just interested in numerical solutions for this problem have a look at NRoots. Also some of the functions specifically for Control theory calculations in guide/ControlSystems might be useful for your problem. Sep 8, 2017 at 18:36 ## 1 Answer If you are not very particular about using Solve/NSolve, you can determine that graphically using RootLocusPlot. tfm = TransferFunctionModel[ StateSpaceModel[{A, Transpose@{B} ka kst kc, {Cc}}], s] RootLocusPlot[tfm, {kc, 0, 5}, AspectRatio -> Full] It appears that the system will become marginally stable when$kc=2.5$. Update The manual way to obtain the marginally stable value. Compute the characteristic polynomial. (The roots of this polynomial are the closed-loop eigenvalues.) charPoly = Denominator[SystemsModelFeedbackConnect[tfm][s][[1, 1]]]==0  9.30495*10^9 + 5.41032*10^9 kc + 5.05222*10^7 s - 1.1819*10^7 kc s + 322585. s^2 + 72386. kc s^2 + 397.716 s^3 + s^4 == 0 The stability test. stableQ[k_] := AllTrue[s /. NSolve[charPoly /. kc -> k, s], Re[#]<0 &] TableForm[Table[{k, stableQ[k]}, {k, 2, 3, 0.1}], TableHeadings -> {{}, {"kc", "stableQ"}}] • I'm not very familiar with Root Locus (I'm a student of control theory and we haven't seen that yet in class). It seems the graph is very clear but honestly I think I'm not getting it. Why do you say kc=2.5 makes the system M.S? Isn't it supposed to be kc=250? Sep 8, 2017 at 19:46 • I'm sure it will be clear to you once you understand the root locus plot. It will be marginally stable at$kc=250$when (for example)$kst=1/100$and$ks=1/200\$. For the values in the question it's 2.5. Sep 8, 2017 at 19:55
• I did read a lot about Root Locus method and it makes sense but I'm still unclear about how to get the k value. Because what you have there as matrices aren't the ones I need. I tried to do the same with the correct matrices and I got a different plot but I'm unsure on how to get the k value. Is there any method in Mathematica to get that "k"? Sep 8, 2017 at 21:58
• I suspect that you are mixing up the closed- and open-loop systems. I will update the answer on how to figure it out manually using NSolve. RootLocusPlot is also essentially using NSolve to get the plot. Sep 9, 2017 at 21:09
• I tried using the correct matrices for my problem. That is, AA=A-B ka kc kstC ; BB=B ka kc ; C is the same matrix you used. When doing the same you did, I get a wrong table. Actually, it says "False" for every k value. If you think I should create a new post, please let me know. Sep 9, 2017 at 22:23