matlab 状态空间极点,传递函数、零极点增益与状态空间转换的matlab算法实现

传递函数、零极点增益与状态空间三种模型转换的MATLAB算法实现

一、引言

微分方程是自控控制系统最原始的数学模型,它反映系统动态运行规律。时域分析中要用拉普拉斯变换定义传递函数,再做其它转化。为了方便我们对自动控制理论的理解和学习,本人总结了传递函数、零极点增益与状态空间三种模型转换的MATLAB算法,用处多多。

二、状态空间模型转换为传递函数、零极点增益模型

1、MATLAB算法

%将状态空间模型x(t)=Ax(t)+Bu(t),y(t)=Cx(t)+Du(t)转化成传递函数G(s)=num(s)/den(s)

%或零极点模型G(s)=k(s+z1)(s+z2)...(s+zm)/(s+p1)(s+p2)...(s+pn)的函数ssto2.m

%调用格式G=ssto2(key,A,B,C,D),其中输入参数A,B,C,D为状态空间四个矩阵,输出参数当key=1

%时为传递函数;当key=2时,为状态空间模型

function G=ssto2(key,A,B,C,D)

if key==1

sys=ss(A,B,C,D);

G=tf(sys),

elseif key==2

sys=ss(A,B,C,D);

G=zpk(sys),

end

2、例题分析

【例1】已知一加压液流箱系统,该系统的状态变量是液位h(t)与料浆总压H(t),输入变量是料浆流入量u1(t)与空气流入量u2(t),输出变量就是状态变量H(t)与h(t)本身,系统状态空间模型为

H(t)

?(t)=?0.39120.01234

?0.0220

H(t)

?(t)+

0.033440.01234

0.0008960

u1(t)

u2(t) y1(t)

y2(t)=11

H(t)

?(t)+00

u1(t)

u2(t)

求多个输入到输出的传递函数模型与多个输入到输出的零极点增益模型。>> clear;

A=[-0.3912,0.01234;-0.022,0];

B=[0.03344,0.01234;0.000896,0];

C=[1,1];D=[0,0];

key=1;G=ssto2(key,A,B,C,D);

key=2;G=ssto2(key,A,B,C,D);

G =

From input 1 to output:

0.03434 s - 0.0003741

--------------------------

s^2 + 0.3912 s + 0.0002715

From input 2 to output:

0.01234 s - 0.0002715

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是带有延迟的传递函数的DMC算法Matlab代码示例: ```matlab % 设定控制器参数 N = 50; % 控制时域长度 Nu = 10; % 控制输入时域长度 lambda = 1; % 控制器的调节参数 % 设定模型参数 Ts = 0.1; % 采样时间 G = tf([0.1 0.2], [1 -0.5], Ts); % 带有延迟的传递函数 % 计算模型的延迟时间 [~,~,~,~,Td] = tf2ss(G); Td = round(Td / Ts); % 转换为采样点数 % 计算控制器的增益矩阵 M = zeros(N, Nu); for i = 1:Nu for j = 1:N if i <= j M(j, i) = G(j-i+1); end end end Mp = zeros(N, N-Td); for i = 1:N for j = 1:(N-Td) if (i+j) <= N Mp(i,j) = G(i+j-Td) - G(j-Td); else Mp(i,j) = G(N-Td) - G(j-Td); end end end K = (M'*M + lambda*eye(Nu)) \ M'; % 设定初始状态和参考信号 x0 = zeros(size(G.a)); r = ones(1, 100); % 开始控制循环 u = zeros(1, N); y = zeros(1, N); for k = 1:length(r) % 获取当前的状态和输出 if k <= Td y(k) = 0; else y(k) = -G.b(2:end)*y(k-1:-1:k-Td) + G.a(2:end)*u(k-1:-1:k-Td); end % 计算控制器的输出 if k <= N deltau = K*(r(k) - y(k)); else deltau = K*(r(k) - y(k) - Mp*u(k-N:k-1-Td)'); end u(k) = u(k-1) + deltau(1); % 输出控制信号 fprintf('u(%d) = %f\n', k, u(k)); end ``` 这个示例程序中,我们首先设定了DMC控制器的参数,包括控制时域长度N、控制输入时域长度Nu和调节参数lambda。然后,我们通过Matlab的tf函数创建了一个带有延迟的传递函数G,并计算出它的延迟时间Td。 接下来,我们使用循环来实现DMC控制循环。在每一次循环中,我们首先获取当前的状态和输出,然后计算控制器的输出deltau,并将其加到上一次的控制信号u(k-1)上,得到本次的控制信号u(k)。最后,我们输出控制信号u(k)。 在具体的实际应用中,您需要根据实际情况调整控制器参数和模型参数,以获得更好的控制效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值