ControlSystems.jl icon indicating copy to clipboard operation
ControlSystems.jl copied to clipboard

pass through kwargs to norm calculations

Open baggepinnen opened this issue 3 years ago • 5 comments

hinfnorm fails to converge quite often and requires argument tuning, this PR allows you to set those arguments

baggepinnen avatar Jun 29 '21 07:06 baggepinnen

Something failed when generating plots. See the log at https://github.com/JuliaControl/ControlExamplePlots.jl/actions/runs/981759170?check_suite_focus=true for more details.

JuliaControlBot avatar Jun 29 '21 07:06 JuliaControlBot

That's annoying. But it works if you make the tolerance smaller? Is it for discrete-time or continuous-time systems that you are seeing problems? Perhaps the default settings should be changed or some logic should be added? My feeling is that it should be possible to handle most cases decently without having to manually changing the tolerance.

Regarding this PR, I think it would be better to avoid the issue altogether by getting rid of norm, and just introduce h2norm and l2norm. In analogy with Base, hinfnorm should be opnorm, but the h2norm is not quite an operator norm.

olof3 avatar Jun 29 '21 07:06 olof3

That's annoying. But it works if you make the tolerance smaller? Is it for discrete-time or continuous-time systems that you are seeing problems?

Both, usually high-order systems that arise as the difference between two medium-order systems. Mostly argument approximag needs occasional tuning (increasing in my latest case).

Regarding this PR, I think it would be better to avoid the issue altogether by getting rid of norm, and just introduce h2norm and l2norm. In analogy with Base, hinfnorm should be opnorm, but the h2norm is not quite an operator norm.

Every time there is a tolerance to be set there will e cases where it must be changed, so tuning the defaults is orthogonal to this PR, they still must be settable no matter what we call the function. norm is not the only function I passed kwargs through, it applies to hinfnorm etc. as well

baggepinnen avatar Jun 29 '21 08:06 baggepinnen

Here's an example that fails

sys = let
    tempA = [-0.015948101119319734 0.0 0.04185849126302005 0.0 0.0 0.0 0.0 0.0 -146.95069642667306 289.4992329744848 -0.6214689449642664 1.0704998483003605 835.1753029801306 -1721.6495755545525 -7702.15700721084 15903.631585610927 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 -0.011069870050970518 0.0 0.03334113387614947 0.0 0.0 0.0 0.0 171.47704409013375 -5185.652046267557 3.3853119792828963 -18.510208955016036 -1295.0940843796357 30687.836682759582 12063.273549901081 -283424.94458045386 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 -0.04185849126302005 0.0 0.0 0.0 0.0 0.0 130.64917644962574 -3950.9729876324254 2.579285317548874 -14.103016346678887 -986.7383500035321 23381.208901150163 9191.065561829399 -215942.81491844106 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 -0.03334113387614947 0.0 0.0 0.0 0.0 -55.106511160002405 108.56221236543183 -0.23305085436159995 0.40143744311263524 313.190738617549 -645.6185908329572 -2888.3088777040653 5963.861844604099 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; -0.5 0.0 0.0 0.0 -0.001 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 -0.5 0.0 0.0 0.0 -0.001 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.5 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.5 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -146.96664452779237 289.49923297448487 -0.5796104537012463 1.0704998483003607 835.1753029801307 -1721.6495755545525 -7702.157007210841 15903.631585610929 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 171.47704409013372 -5185.663116137608 3.3853119792828963 -18.476867821139884 -1295.0940843796354 30687.836682759582 12063.273549901081 -283424.9445804538 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 130.64917644962574 -3950.9729876324254 2.5374268262858544 -14.103016346678887 -986.7383500035321 23381.208901150167 9191.065561829399 -215942.8149184411 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -55.106511160002405 108.56221236543182 -0.23305085436159992 0.3680963092364858 313.190738617549 -645.6185908329572 -2888.3088777040653 5963.861844604098 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; -0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.001 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 -0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.001 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.015948101119319734 0.0 0.04185849126302005 0.0 0.0 0.0 0.0 0.0 0.004690578665071557 0.0006398399358145708 0.01118190035871929 -0.015681911812312804 0.010027514385474409 -0.011629389298868609 0.20339473112213025; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.011069870050970518 0.0 0.03334113387614947 0.0 0.0 0.0 0.0 -0.0017662234961502664 0.003157798881021944 0.011480910174226058 0.009124939421717741 0.004397494815906041 -0.00489420105554904 0.005051401793661087; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.04185849126302005 0.0 0.0 0.0 0.0 0.0 -0.0013456940923049652 0.0024059420045881483 0.008747360132743664 0.006952334797499233 0.0033504722406903177 -0.0037289150899421264 0.0038486870808846383; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.03334113387614947 0.0 0.0 0.0 0.0 0.0017589669994018341 0.0002399399759304641 0.0041932126345197345 -0.005880716929617303 0.003760317894552904 -0.0043610209870757295 0.07627302417079886; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.5 0.0 0.0 0.0 -0.001 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.5 0.0 0.0 0.0 -0.001 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 -1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.4363666584525321 0.362557845392374 0.0 0.0 0.0 0.0 0.0 0.0 -0.0008848291499142228 0.0001061582446057077 0.000990837874059477 -0.002752340153101867 -0.00023260569512457825 -0.0022088222335968307 0.016692480990276395; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00968032967397838 -0.2163818771142806 0.0 0.0 0.0 0.0 0.0 0.0 0.0005725842954244927 -0.0008117178293962256 0.007084115841708504 0.0006259604877735263 -0.0012564059559961249 0.004360178779816776 -0.0681203395862217; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3070702899708752 -0.6039394816704914 0.0 0.0 0.0 0.0 0.0 0.0 -0.005644601556115492 -0.02319369209218443 -0.031240644104023642 -0.08735969799738057 0.17110673694239079 -0.39261907759479175 6.082378390491541; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5228352872992956 0.3897929030424615 0.0 0.0 0.0 0.0 0.0 0.0 0.03153039161208072 -0.010044403248080081 0.10682019709609707 -0.0427586715326576 0.05113570263190072 0.3204195908239575 -7.969471302442518; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -4.285695892581991 -9.912198831778479 0.0 0.0 0.0 0.0 0.0 0.0 -0.043762150614295225 -0.029290551640687734 -1.7301671011169644 -0.21712779704417307 -0.09884505570776442 -0.02645583454534342 1.0149889946264474; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 66.11982513396354 26.087254882472426 0.0 0.0 0.0 0.0 0.0 0.0 0.3445587746713475 -0.014446998182097577 11.553271048107813 -7.361194537228241 0.8066820208094543 -0.4147741824323043 3.894560106064139; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1865.03950916407 -61.387026027658464 0.0 0.0 0.0 0.0 0.0 0.0 -7.966357949754776 2.8858392600627543 -246.72396844717483 263.8141390592907 -18.422004802740148 10.486612870143544 -137.75226868441615]
    tempB = [0.0 0.0; 0.0 0.0; 0.0 0.0; 0.0 0.0; 1.0 0.0; 0.0 1.0; 0.0 0.0; 0.0 0.0; 0.0 0.0; 0.0 0.0; 0.0 0.0; 0.0 0.0; 1.0 0.0; 0.0 1.0; 0.0 0.0; 0.0 0.0; 0.0 0.0; 0.0 0.0; 0.0 0.0; 0.0 0.0; 1.0 0.0; 0.0 1.0; 0.0 0.0; 0.0 0.0; 0.8727333169050642 -0.725115690784748; -0.01936065934795676 0.4327637542285612; -0.6141405799417504 1.2078789633409828; -1.0456705745985913 -0.779585806084923; 8.571391785163982 19.824397663556958; -132.2396502679271 -52.17450976494485; 3730.07901832814 122.77405205531693]
    tempC = [-0.05 0.0 0.0 0.0 0.0999 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.05 -0.0 -0.0 -0.0 -0.0999 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0; 0.0 -0.05 0.0 0.0 0.0 0.0999 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 0.05 -0.0 -0.0 -0.0 -0.0999 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -17.651735306507273 34.774682639577755 -0.074650924320032 0.12858857036640967 100.321357715331 -206.80475382036664 -925.1840248901909 1910.3461364097209 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0005634328726812681 -7.685764994769618e-5 -0.0013431712142605754 0.0018837131306081445 -0.0012045062324894185 0.0013969236395037369 -0.024431799534189818; 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 27.299827914847164 -825.5764451769246 0.5389551409803617 -2.946898938112006 -206.18413283655894 4885.62574053884 1920.521162173307 -45122.37923668917 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0002811898103323808 -0.0005027341502124488 -0.001827806594901661 -0.0014527266741043172 -0.0007000986771591708 0.0007791762874505935 -0.0008042032706326109; 5.0 0.0 0.0 0.0 0.0 0.0 -9.9 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.0 -0.0 -0.0 -0.0 -0.0 -0.0 9.9 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0; 0.0 5.0 0.0 0.0 0.0 0.0 0.0 -9.9 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -0.0 -5.0 -0.0 -0.0 -0.0 -0.0 -0.0 9.9 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0]
    tempD = [0.0 0.0; 0.0 0.0; 0.0 0.0; 0.0 0.0; 0.0 0.0; 0.0 0.0]
    ss(tempA, tempB, tempC, tempD)
end

And here's a test to pass

hinfn = ControlSystems._infnorm_two_steps_ct(sys, :hinf, 1e-9, 1000, 1e-6)[1]
@test hinfn ≈ 14.88609988 rtol=1e-3

baggepinnen avatar Jun 29 '21 09:06 baggepinnen

norm is not the only function I passed kwargs through, it applies to hinfnorm etc. as well

Ah, right, didn't look too closely. Good that you added the kwargs to the *infnorm functions. I still think that we should remove norm, but I'll open a new issue for discussing that. Also, looking at this again, I guess the kwargs should really be more like imag_tol, unitmag_tol, and maxIters -> max_iters. I guess it would be good to change these, now that these kwargs are passed on directly.

Yes, the tuning parameters are definitely an orthogonal issue. Thanks for this example. I believe that the issue is largely due to that the condition number of sys.A is on the order of 1e9.

FYI, I don't think that max_iters shouldn't have to be changed, the convergence is quadratic (if I remermber correctly), and typically it only takes some tens of iterations for convergence, 17 in your mwe. The max_iter termination is primarily there to guard against infinite loops when there are problems with convergence.

olof3 avatar Jun 29 '21 11:06 olof3