clear , clc, close all;
%% Exercise 1 - (2nd Plant) - R = 1
% Define system matrices
A = 0.8;
B = 1;
C = 1;
% Define weight matrices
Q = transpose(C) * C;
R = 1;
% Compute optimal LQ gain using dlqr
[K_LQ, S, ~] = dlqr(A, B, Q, R);
eigenvalues = eig(A - B*K_LQ);
%% Exercise 2 - (2nd Plant) - R = 1
% Initialize horizon H values
H_values = 1:30;
% Initialize arrays to store optimal RH gains
K_RH_values = zeros(size(H_values));
RH_eigenvalues = zeros(size(H_values));
% Compute optimal RH gain for each horizon value
for i = 1:length(H_values)
H = H_values(i);
% Compute matrices W and Pi
W = zeros(H);
Pi = zeros(1, H);
for j = 1:H
for k = 1:j
W(j, k) = C * A^(j-k) * B;
end
Pi(j) = C * A^(j);
end
% Compute optimal RH gain
M = W' * W + R * eye(H);
K_RH = inv(M) * W' * Pi';
K_RH_values(i) = K_RH(1);
RH_eigenvalues(i) = eig(A - B*K_RH(1));
end
% Plot optimal RH gain as a function of H
figure;
plot(H_values, K_RH_values, 'b-o', 'LineWidth', 2);
hold on;
grid on;
optimal_LQ_gain = repmat(K_LQ, size(H_values));
plot(H_values, optimal_LQ_gain, 'r--', 'LineWidth', 2);
xlabel('Horizon (H)');
ylabel('Optimal Gain');
legend('RH Gain', 'Optimal LQ Gain');
title('Optimal LQ Gain vs RH 1st Gain (R = 1)');
%% Exercise 3 - (2nd Plant) - R = 1
figure;
plot(H_values, RH_eigenvalues, 'b-o', 'LineWidth', 2);
hold on;
grid on;
yline(1, 'r--', 'LineWidth', 2);
xlabel('Horizon (H)');
ylabel('Eigenvalues');
title('Closed-Loop eigenvalues (R = 1)');
%% Exercise 1 - (2nd Plant) - R = 10
% Define system matrices
A = 0.8;
B = 1;
C = 1;
% Define weight matrices
Q = transpose(C) * C;
R = 10;
% Compute optimal LQ gain using dlqr
[K_LQ, S, ~] = dlqr(A, B, Q, R);
eigenvalues = eig(A - B*K_LQ);
%% Exercise 2 - (2nd Plant) - R = 10
% Initialize horizon H values
H_values = 1:30;
% Initialize arrays to store optimal RH gains
K_RH_values = zeros(size(H_values));
RH_eigenvalues = zeros(size(H_values));
% Compute optimal RH gain for each horizon value
for i = 1:length(H_values)
H = H_values(i);
% Compute matrices W and Pi
W = zeros(H);
Pi = zeros(1, H);
for j = 1:H
for k = 1:j
W(j, k) = C * A^(j-k) * B;
end
Pi(j) = C * A^(j);
end
% Compute optimal RH gain
M = W' * W + R * eye(H);
K_RH = inv(M) * W' * Pi';
K_RH_values(i) = K_RH(1);
RH_eigenvalues(i) = eig(A - B*K_RH(1));
end
% Plot optimal RH gain as a function of H
figure;
plot(H_values, K_RH_values, 'b-o', 'LineWidth', 2);
hold on;
grid on;
optimal_LQ_gain = repmat(K_LQ, size(H_values));
plot(H_values, optimal_LQ_gain, 'r--', 'LineWidth', 2);
xlabel('Horizon (H)');
ylabel('Optimal Gain');
legend('RH Gain', 'Optimal LQ Gain');
title('Optimal LQ Gain vs RH 1st Gain (R = 10)');
%% Exercise 3 - (2nd Plant) - R = 10
figure;
plot(H_values, RH_eigenvalues, 'b-o', 'LineWidth', 2);
hold on;
grid on;
yline(1, 'r--', 'LineWidth', 2);
xlabel('Horizon (H)');
ylabel('Eigenvalues');
title('Closed-Loop eigenvalues (R = 10)');
%% Exercise 1 - (2nd Plant) - R = 100
% Define system matrices
A = 0.8;
B = 1;
C = 1;
% Define weight matrices
Q = transpose(C) * C;
R = 100;
% Compute optimal LQ gain using dlqr
[K_LQ, S, ~] = dlqr(A, B, Q, R);
eigenvalues = eig(A - B*K_LQ);
%% Exercise 2 - (2nd Plant) - R = 100
% Initialize horizon H values
H_values = 1:30;
% Initialize arrays to store optimal RH gains
K_RH_values = zeros(size(H_values));
RH_eigenvalues = zeros(size(H_values));
% Compute optimal RH gain for each horizon value
for i = 1:length(H_values)
H = H_values(i);
% Compute matrices W and Pi
W = zeros(H);
Pi = zeros(1, H);
for j = 1:H
for k = 1:j
W(j, k) = C * A^(j-k) * B;
end
Pi(j) = C * A^(j);
end
% Compute optimal RH gain
M = W' * W + R * eye(H);
K_RH = inv(M) * W' * Pi';
K_RH_values(i) = K_RH(1);
RH_eigenvalues(i) = eig(A - B*K_RH(1));
end
% Plot optimal RH gain as a function of H
figure;
plot(H_values, K_RH_values, 'b-o', 'LineWidth', 2);
hold on;
grid on;
optimal_LQ_gain = repmat(K_LQ, size(H_values));
plot(H_values, optimal_LQ_gain, 'r--', 'LineWidth', 2);
xlabel('Horizon (H)');
ylabel('Optimal Gain');
legend('RH Gain', 'Optimal LQ Gain');
title('Optimal LQ Gain vs RH 1st Gain (R = 100)');
%% Exercise 3 - (2nd Plant) - R = 100
figure;
plot(H_values, RH_eigenvalues, 'b-o', 'LineWidth', 2);
hold on;
grid on;
yline(1, 'r--', 'LineWidth', 2);
xlabel('Horizon (H)');
ylabel('Eigenvalues');
title('Closed-Loop eigenvalues (R = 100)');
没有合适的资源?快使用搜索试试~ 我知道了~
分布式预测控制和估计matlab代码.zip
共5个文件
m:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 50 浏览量
2024-05-12
11:21:10
上传
评论
收藏 6KB ZIP 举报
温馨提示
1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
资源推荐
资源详情
资源评论
收起资源包目录
分布式预测控制和估计matlab代码.zip (5个子文件)
分布式预测控制和估计matlab代码
DPCE-master
P2-2ndPlant.m 4KB
TCLab_openloop.m 4KB
Rosenbrock_MinPlots.m 2KB
P2.m 4KB
Rosenbrock_function.m 101B
共 5 条
- 1
资源评论
matlab科研助手
- 粉丝: 1w+
- 资源: 2085
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功