专栏
标签
子图和控制系统响应曲线怎么结合?
一般问题
发布于 2025-01-01 12:16:39
查看 21过去544天

Typlot 中 subplot 和 TyControlSystems.step/impluse 等结合异常

现在的问题是运行后所有图都挤到第一个子图中

image.png

源码如下

using TyControlSystems:TyControlSystems, tf, feedback, step, impulse
using TyPlot

# 定义初始参数
T0_values = [10, 1, 0.1, 0.01]
num = [3.1, 230]
G0 = tf([1], [1])  # 单位负反馈

# 创建一个数组来存储所有系统
sys = Array{TyControlSystems.TransferFunction}(undef, length(T0_values), 1)

# 所有系统
for (i, T0) in enumerate(T0_values)
    den = T0 * [1, 44.7, 502, 0]
    G = tf(num, den)
    sys[i, 1] = feedback(G, G0)
end

# 创建一个2行1列的图形窗口
figure(figsize=(10, 10))

# 子图1:阶跃响应
subplot(2, 1, 1)

hold(true)

step(sys[:]..., label=["T0 = $T0" for T0 in T0_values])
title("Step Response for Different T0 Values")
xlabel("Time (s)")
ylabel("Response")
legend()

hold(false)

# 子图2:脉冲响应
subplot(2, 1, 2)

hold(true)

impulse(sys[:]..., label=["T0 = $T0" for T0 in T0_values])
title("Impulse Response for Different T0 Values")
xlabel("Time (s)")
ylabel("Response")
legend()

hold(false)

# 调整子图之间的间距
tightlayout()

手动实现:从 TyControlSystems 中获取数据再用 TyPlot.subplot 绘图

效果如下
image.png

修改后代码如下

using TyControlSystems:TyControlSystems, tf, feedback, step, impulse
using TyPlot

# 定义初始参数
T0_values = [10, 1, 0.1, 0.01]
num = [3.1, 230]
G0 = tf([1], [1])  # 单位负反馈

# 创建一个数组来存储所有系统
sys = Array{TyControlSystems.TransferFunction}(undef, length(T0_values), 1)

# 所有系统
for (i, T0) in enumerate(T0_values)
    den = T0 * [1, 44.7, 502, 0]
    G = tf(num, den)
    sys[i, 1] = feedback(G, G0)
end

# 总画布大小
figure(figsize=(10, 10))

# 子图1:阶跃响应
subplot(2, 1, 1)
hold("on")

for (i, T0) in enumerate(T0_values)
    y, t = TyControlSystems.step(sys[i, 1]; fig=false)
    plot(t, y, label="T0 = $T0")
end

title("Step Response for Different T0 Values")
xlabel("Time (s)")
ylabel("Response")
legend()
xlim(0, 100)

# 子图2:脉冲响应
subplot(2, 1, 2)
hold("on")

for (i, T0) in enumerate(T0_values)
    y, t = TyControlSystems.impulse(sys[i, 1]; fig=false)
    plot(t, y, label="T0 = $T0")
end

title("Impulse Response for Different T0 Values")
xlabel("Time (s)")
ylabel("Response")
legend()
xlim(0, 5)

# 调整子图之间的间距
tightlayout()
所属专栏:Syslab基础平台
产品信息:Syslab科学计算环境
科学计算
采纳的回答
发布于 2025-01-02 09:46:33

您好,当前暂时只能通过手动获取数据在绘制图形的方式来实现子图和控制系统响应曲线的结合,我们已将此需求作为工单提交给研发部门,并将持续追踪单据状态,感谢您的支持。

全部回答 1

发布于 2025-01-02 09:46:33

您好,当前暂时只能通过手动获取数据在绘制图形的方式来实现子图和控制系统响应曲线的结合,我们已将此需求作为工单提交给研发部门,并将持续追踪单据状态,感谢您的支持。

用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天