MATLAB中lsim()函数无法正常使用,奇异E矩阵模型初始条件仿真报错
解决MATLAB中PID+状态空间闭环系统仿真初始条件报错问题
问题场景
尝试用MATLAB代码复现Simulink中的PID+状态空间闭环系统响应,运行代码后出现如下报错:
Cannot simulate response with initial condition for models with singular E matrix. Use the "isproper" command to check if the model is proper and to extract an equivalent explicit representation.
原代码:
M = 1.5; m = 0.5; l = 10; g = 9.8; %% state space A = [0 1 0 0; 0 0 m*g/M 0; 0 0 0 1; 0 0 g/(M*l)*(M+m) 0]; B = [0; 1/M; 0; 1/(M*l)]; C = [0 0 1 0]; D = 0; sys_ss = ss(A, B, C, D); % pid Kp = 99; Ki = 49; Kd = 29; Gc = pid(Kp, Ki, Kd); % feedback closed-up system sys_fb = feedback(Gc*sys_ss, 1); % simulation time and pid reference input value '0' t = 0:0.01:10; r = zeros(size(t)); % x0 = [2; 10; -5; 0] [y, t] = lsim(sys_fb, r, t, [2; 10; -5; 0]); % plot figure(); plot(t, y); title('PID Controller + State Space Model Closed-Loop System Output'); xlabel('Time (s)'); ylabel('Output');
报错原因
PID控制器包含微分和积分环节,其传递函数为非严格正则形式,与状态空间模型串联后闭环,生成的系统是隐式描述系统(descriptor system),存在奇异的E矩阵,lsim无法直接为这类系统设置初始条件进行仿真。
解决方法
方法一:转换为正则显式系统
使用isproper函数提取闭环系统的等效正则显式模型,再进行仿真:
% 在生成sys_fb后添加以下代码 [~, sys_fb_proper] = isproper(sys_fb); % 使用正则模型仿真,注意:初始条件会被自动转换,若需精确对应原状态初始条件,建议用方法二 [y, t] = lsim(sys_fb_proper, r, t);
方法二:手动构建包含PID状态的闭环状态空间模型
手动整合原状态空间与PID的状态(积分环节状态),构建显式闭环状态空间,直接指定完整初始条件:
M = 1.5; m = 0.5; l = 10; g = 9.8; %% 原状态空间参数 A = [0 1 0 0; 0 0 m*g/M 0; 0 0 0 1; 0 0 g/(M*l)*(M+m) 0]; B = [0; 1/M; 0; 1/(M*l)]; C = [0 0 1 0]; D = 0; % PID参数 Kp = 99; Ki = 49; Kd = 29; % 计算闭环系统矩阵 denominator = 1 + Kd*C*B; A11 = A - B*(Kp*C + Kd*C*A)/denominator; A12 = B*Ki/denominator; A21 = -C; A22 = 0; A_cl = [A11, A12; A21, A22]; % 输出矩阵:y = C*x,x是原状态空间的状态 C_cl = [C, zeros(1,1)]; % 构建显式闭环状态空间模型 sys_cl = ss(A_cl, [], C_cl, 0); % 仿真设置 t = 0:0.01:10; r = zeros(size(t)); % 初始条件:原状态初始值 + PID积分环节初始值(设为0) X0 = [2; 10; -5; 0; 0]; % 仿真 [y, t] = lsim(sys_cl, r, t, X0); % 绘图 figure(); plot(t, y); title('PID Controller + State Space Model Closed-Loop System Output'); xlabel('Time (s)'); ylabel('Output');
该方法直接构建显式状态空间,能精确控制所有状态的初始条件,避免隐式系统的问题。
内容的提问来源于stack exchange,提问作者魏嘉伟
相关产品推荐
相关产品推荐

