简单控制系统的频域指标计算器。本科自动化算系统参数时可以提供较大的帮助。
在做作业写系统校正时,愈发感觉到受自动化荼毒之深(bushi),于是为了简化计算,写了这么个玩意儿。仅供写作业用,不要扔生产环境里哈哈、、
我会时不时根据写作业时遇到的情况更新程序,大家注意看一下类的文档,使用新的用法。
只需要Python 3.6或更高,其他都不需要~~
这个程序最好在Python命令行里用,毕竟还得算其他值嘛。(Python是最爽的计算器!)
只需在fuxk.py
目录内运行一个Python终端,然后
>>> from fuxk import *
就能用辣!
来个实例:(创建系统对象,输出指标,二级校正,输出逐级校正后的指标和对数幅频计算式)
>>> from fuxk import *
算TM的系统校正!
>>> g0 = G(30, [], [0.1,0.2])
>>> g0.showinfo()
30
------------------------
s*(0.2*s + 1)(0.1*s + 1)
开环指标精确值们:
Wc = 9.771 rad/s
Wg = 7.071 rad/s
Gamma = -17.23673506765857°
Kg = 0.49999041002043737
开环指标对数简化运算得到的值:
Wc = 11.447 rad/s
Wg = 7.071 rad/s
Gamma = -25.264321992402216°
20lg Kg = -9.542591691354176 dB
闭环频域近似指标:
Wb = 13.428 rad/s
相角裕度过小,无法计算谐振
闭环时域指标(经验公式、近似指标):
ts = 6.840676521240146 s
相角裕度超出范围,超调量无法用经验公式计算
>>> gc1 = g.correct4(4)
返回了一个校正系统嗷,你可以将它与原系统相乘~~
校正过程参数:beta=7.499999999999997, tau=1.75
返回的系统有点高级哦,没法自动算指标嗷:(
>>> gg = gc1*g
>>> gg.showinfo()
30*(1.75*s + 1)
--------------------------------------
s*(13.125*s + 1)(0.2*s + 1)(0.1*s + 1)
开环指标精确值们:
Wc = 3.241 rad/s
Wg = 6.525 rad/s
Gamma = 30.4386719638901°
Kg = 3.19035317161703
开环指标对数简化运算得到的值:
Wc = 4.0 rad/s
Wg = 6.525 rad/s
Gamma = 22.499896130664695°
20lg Kg = 6.562620727133117 dB
闭环频域近似指标:
Wb = 5.605 rad/s
Mr = 261.31373665075137 %
闭环时域指标(经验公式、近似指标):
ts = 8.580660648653305 s
相角裕度超出范围,超调量无法用经验公式计算
>>> gg.showlogexp()
20lg A(w) =
20( lg 30 -lg w ) , 0 < w < 0.076
20( lg 30 -lg w -lg 13.125w ) , 0.076 < w < 0.571
20( lg 30 -lg w -lg 13.125w +lg 1.75w ) , 0.571 < w < 5.0
20( lg 30 -lg w -lg 13.125w +lg 1.75w -lg 0.2w ) , 5.0 < w < 10.0
20( lg 30 -lg w -lg 13.125w +lg 1.75w -lg 0.2w -lg 0.1w ) , w > 10.0
>>> gc2 = gg.correct1(67)
返回了一个校正系统嗷,你可以将它与原系统相乘~~
校正过程参数:alpha=24.15876864008868, T=0.020521716706041908
返回的系统有点高级哦,没法自动算指标嗷:(
>>> ggg = gc2*gg
>>> ggg.showinfo()
30*(1.75*s + 1)(0.496*s + 1)
---------------------------------------------------
s*(13.125*s + 1)(0.2*s + 1)(0.1*s + 1)(0.021*s + 1)
开环指标精确值们:
Wc = 6.845 rad/s
Wg = 25.106 rad/s
Gamma = 63.20584529821694°
Kg = 7.82121508841985
开环指标对数简化运算得到的值:
Wc = 9.917 rad/s
Wg = 25.106 rad/s
Gamma = 46.13769423125129°
20lg Kg = 16.064731410168605 dB
闭环频域近似指标:
Wb = 12.021 rad/s
Mr = 138.69488234028546 %
闭环时域指标(经验公式、近似指标):
ts = 0.9360301071758413 s
sigma_p = 31.477952936114185 %
>>> ggg.showlogexp()
20lg A(w) =
20( lg 30 -lg w ) , 0 < w < 0.076
20( lg 30 -lg w -lg 13.125w ) , 0.076 < w < 0.571
20( lg 30 -lg w -lg 13.125w +lg 1.75w ) , 0.571 < w < 2.017
20( lg 30 -lg w -lg 13.125w +lg 1.75w +lg 0.496w ) , 2.017 < w < 5.0
20( lg 30 -lg w -lg 13.125w +lg 1.75w +lg 0.496w -lg 0.2w ) , 5.0 < w < 10.0
20( lg 30 -lg w -lg 13.125w +lg 1.75w +lg 0.496w -lg 0.2w -lg 0.1w ) , 10.0 < w < 48.729
20( lg 30 -lg w -lg 13.125w +lg 1.75w +lg 0.496w -lg 0.2w -lg 0.1w -lg 0.021w ) , w > 48.729
>>>
更详细的可以看注释,或者print(G.__doc__)
看文档。
嫌输出太吵闹的话,可以shutup = True
让程序闭嘴。
由于精度问题,所以注意验算!此外二分法解方程时默认函数单调,如果系统比较复杂,推荐手算,否则程序有可能卡死。