2026a
M 语言

# initial


状态空间模型的初始条件响应

# 语法

initial(sys, x0)
initial(sys, x0, Tfinal)
initial(sys, x0, t)
initial(sys1, sys2, ..., sysN, x0)
initial(sys1, sys2, ..., sysN, x0, Tfinal)
initial(sys1, sys2, ..., sysN, x0, t)
[y, t, x] = initial(sys, x0)
[y, t, x] = initial(sys, x0, Tfinal)
[y, t, x] = initial(sys, x0, t)

# 说明

initial(sys, x0) 计算状态空间(ss)模型 sys 在由向量 x0 指定的状态初始条件下不受外力的响应:

此函数适用于连续时间或离散时间模型。如果没有提供输出参数,initial 会在屏幕上绘制初始条件响应。


initial(sys, x0, Tfinal) 从 t = 0 模拟到最终时间 t = Tfinal 的响应。以系统时间单位(在 sys 的 TimeUnit 属性中指定)表示 Tfinal。对于采样时间未指定(Ts = -1)的离散时间系统,initial 将 Tfinal 解释为要模拟的采样周期数。


initial(sys, x0, t) 使用用户提供的向量 t 进行模拟。以系统时间单位(在 sys 的 TimeUnit 属性中指定)表示 t。对于离散时间模型,t 应为 0:Ts:Tf 的形式,其中 Ts 是采样时间。对于连续时间模型,t 应为 0:dt:Tf 的形式,其中 dt 成为连续系统的离散近似的采样时间。


要将多个 LTI 模型的初始条件响应绘制在同一个图形上,使用以下命令:

initial(sys1, sys2, ..., sysN, x0)
initial(sys1, sys2, ..., sysN, x0, Tfinal)
initial(sys1, sys2, ..., sysN, x0, t)

如果使用输出参数调用:

[y, t, x] = initial(sys, x0)
[y, t, x] = initial(sys, x0, Tfinal)
[y, t, x] = initial(sys, x0, t)

返回输出响应 y、用于模拟的时间向量 t 和状态轨迹 x。不会在屏幕上绘制图形。数组 y 的行数与时间样本数(t 的长度)相同,列数与输出数相同。类似地,x 有 length(t) 行,列数与状态数相同。

# 示例

状态空间模型对初始条件的响应

绘制以下状态空间模型的响应:

取以下初始条件:

a = [-0.5572, -0.7814; 0.7814, 0];
c = [1.9691  6.4493];
x0 = [1 ; 0];

sys = ss(a, [], c, []);
initial(sys, x0)
指定终止时间
clc;clear;
sys = ss([-0.5 1; -1 -0.5], [0; 1], [1 0], 0); % 创建状态空间模型
x0 = [1; 0]; % 初始状态
Tfinal = 10; % 仿真终止时间
initial(sys, x0, Tfinal); % 绘制10秒内的响应
title('指定终止时间: initial(sys, x0, Tfinal)');
grid on;

完整显示系统在 10 秒内的动态过程:

使用自定义时间向量
clc;clear;

sys = ss([-0.5 1; -1 -0.5], [0; 1], [1 0], 0); % 创建状态空间模型
x0 = [1; 0]; % 初始状态
t = 0:1:15; % 自定义时间点
initial(sys, x0, t); % 按指定时间点仿真
title('自定义时间向量: initial(sys, x0, t)');
grid on;

自定义采样时间间隔:

多系统比较

考虑如下两个系统:

系统 1:

系统 2:

clc;clear;
x0 = [1; 0]; % 初始状态
sys1 = ss([-0.2 1; -1 -0.2], [0; 1], [1 0], 0);
sys2 = ss([-1 1; -1 -1], [0; 1], [1 0], 0);
initial(sys1, sys2, x0); % 比较两个系统
title('多系统比较: initial(sys1, sys2, x0)');
legend('System 1', 'System 2');
grid on;
多系统有限时间比较

考虑如下两个系统:

系统 1:

系统 2:

指定终止时间为 8 秒:

clc;clear;
sys1 = ss([-0.2 1; -1 -0.2], [0; 1], [1 0], 0);
sys2 = ss([-1 1; -1 -1], [0; 1], [1 0], 0);
x0 = [1; 0]; % 初始状态
initial(sys1, sys2, x0, 8); % 比较8秒内的响应
title('多系统带终止时间: initial(sys1, sys2, x0, Tfinal)');
legend('System 1', 'System 2');
grid on;
多系统自定义时间向量

考虑如下两个系统:

  • sys1:弱阻尼系统(特征值实部较小,振荡明显)
  • sys2:强阻尼系统(特征值实部较大,快速收敛)

在 12 秒内生成 500 个等间隔时间点,确保高频动态被精确捕获。

clc;clear;
sys1 = ss([-0.2 1; -1 -0.2], [0; 1], [1 0], 0);
sys2 = ss([-1 1; -1 -1], [0; 1], [1 0], 0);
x0 = [1; 0]; % 初始状态
t = linspace(0, 12, 500); % 500个时间点
initial(sys1, sys2, x0, t); % 高精度比较
title('多系统带时间向量: initial(sys1, sys2, x0, t)');
legend('System 1', 'System 2');
grid on;
状态空间模型零输入响应数据获取

示例演示如何通过 [y, t, x] = initial(sys, x0) 获取状态空间模型的零输入响应数据,并分别可视化输出响应和状态轨迹。代码创建了一个二维状态空间模型,从初始状态 x0=[1;0] 开始仿真,在子图中同时显示输出变量 y 和状态变量 x1、x2 随时间的变化曲线,适用于需要定量分析系统动态特性的场景。

clc;clear;

sys = ss([-0.5 1; -1 -0.5], [0; 1], [1 0], 0); % 创建状态空间模型
x0 = [1; 0]; % 初始状态
[y, t, x] = initial(sys, x0); % 获取数据而不绘图
figure;
subplot(2, 1, 1); plot(t, y); title('输出响应'); ylabel('y');
subplot(2, 1, 2); plot(t, x); title('状态轨迹'); xlabel('t'); ylabel('x');
legend('x1', 'x2');
grid on;
有限时间响应数据获取

示例演示如何使用 [y, t, x] = initial(sys, x0, Tfinal) 获取状态空间模型在指定时间范围内的零输入响应数据。代码创建了一个二维状态空间模型,从初始状态 x0=[1;0] 开始仿真 5 秒内的系统响应,并输出数据点数量。

clc;clear;

sys = ss([-0.5 1; -1 -0.5], [0; 1], [1 0], 0); % 创建状态空间模型
x0 = [1; 0]; % 初始状态
[y, t, x] = initial(sys, x0, 5); % 获取5秒内的数据
disp(['数据点数: ', num2str(length(t))]);
数据点数: 101
状态空间模型对初始条件的响应

示例演示如何使用 initial 函数在用户定义的时间点 t_custom 上进行高精度仿真。代码创建了一个二维状态空间模型,从初始状态 x0=[1;0] 出发,在 0 到 3 秒内以 0.05 秒间隔(共 61 个点)计算系统响应。

clc;clear;

sys = ss([-0.5 1; -1 -0.5], [0; 1], [1 0], 0); % 创建状态空间模型
x0 = [1; 0]; % 初始状态

t_custom = 0:0.05:3; % 高密度采样
[y, t, x] = initial(sys, x0, t_custom);
disp(['自定义时间点数: ', num2str(length(t))]);
自定义时间点数: 61

# 提示

您可以更改图表的属性,例如单位。

# 另请参阅

impulse | lsim | step