%% A型ILC仿真实现(2输入2输出)
clear,close all;
%% 1.生成期望输出曲线
pos_num = 1000; % 采样点的数量
sampling_period = 0.001; % 采样周期ms
reference_data = zeros(pos_num,2); % 期望值
time = (1:1000)*sampling_period;
for i = 1:1:pos_num
%期望轨迹
reference_data(i,1)=3*sin(5*(i-1)*sampling_period);
reference_data(i,2)=3*cos(5*(i-1)*sampling_period);
end
%% 2.迭代学习
%参数定义
A=[-2 1.2;1 1];%状态量系数
B=[1 0;0 1];%控制量系数
%离散化
[G,H]=c2d(A,B,sampling_period);
C=[1 0;0 1];%状态-输出系数
L=[5,0;0,2];%学习率
%迭代次数
iter_num = 50;
%输入量
u_1 = zeros(iter_num,pos_num);
u_2 = zeros(iter_num,pos_num);
%状态量
status_var_1 = zeros(iter_num,pos_num);
status_var_2 = zeros(iter_num,pos_num);
%初值匹配
status_var_2(:,1) = reference_data(1,2);
%输出量
output_data_1 = zeros(iter_num,pos_num);
output_data_2 = zeros(iter_num,pos_num);
%输出误差
err_1 = zeros(iter_num,pos_num);
err_2 = zeros(iter_num,pos_num);
%误差均方根
err_sqrt_1 = zeros(iter_num,1);
err_sqrt_2 = zeros(iter_num,1);
%前瞻索引
deta = 2;%预测时间t = deta*sampling_period
for iter = 1:iter_num
for i= 1:1:pos_num-1
status_var_1(iter,i+1) = G(1,1)*status_var_1(iter,i) +G(1,2)*status_var_2(iter,i) + H(1,1)*u_1(iter,i)+H(1,2)*u_2(iter,i);
status_var_2(iter,i+1) = G(2,1)*status_var_1(iter,i) +G(2,2)*status_var_2(iter,i) + H(2,1)*u_1(iter,i)+H(2,2)*u_2(iter,i);
output_data_1(iter,i+1) = C(1,1)*status_var_1(iter,i+1) +C(1,2)*status_var_2(iter,i+1);
output_data_2(iter,i+1) = C(2,1)*status_var_1(iter,i+1) +C(2,2)*status_var_2(iter,i+1);
%误差计算
err_1(iter,i+1)= reference_data(i+1,1) - output_data_1(iter,i+1);
err_2(iter,i+1)= reference_data(i+1,2) - output_data_2(iter,i+1);
end
for j = 1:1:pos_num
%A型ILC算法
index = j + deta;
if index >pos_num
index = pos_num;
end
u_1(iter+1,j)=u_1(iter,j) + L(1,1)*err_1(iter,index)+L(1,2)*err_2(iter,index);
u_2(iter+1,j)=u_2(iter,j) + L(2,1)*err_1(iter,index)+L(2,2)*err_2(iter,index);
end
end
% 画图
figure(5);
subplot(2,1,1);
plot(time,reference_data(:,1),'r');hold on;
xlabel('时间t');ylabel('A-ILC期望轨迹y1和实际输出y1');
for iter=1:iter_num
%disp(['正在进行第',num2str(iter-1),'次迭代']);
pause(0.01);
plot(time,output_data_1(iter,:),'g--');hold on;
end
subplot(2,1,2);
plot(time,reference_data(:,2),'r');hold on;
xlabel('时间t');ylabel('A-ILC期望轨迹y2和实际输出y2');
for iter=1:iter_num
%disp(['正在进行第',num2str(iter-1),'次迭代']);
pause(0.01);
plot(time,output_data_2(iter,:),'g--');hold on;
end
hold off;
disp('迭代完成');
for iter=1:iter_num
err_sqrt_1(iter)=norm(err_1(iter,:),2)/sqrt(pos_num); %均方根
err_sqrt_2(iter)=norm(err_2(iter,:),2)/sqrt(pos_num); %均方根
end
figure(6)
subplot(2,1,1);
plot(0:iter_num-1,err_sqrt_1,'k*-');legend('A-ILC迭代误差1');
xlabel('迭代次数');ylabel('误差均方根');
subplot(2,1,2);
plot(0:iter_num-1,err_sqrt_2,'k*-');legend('A-ILC迭代误差2');
xlabel('迭代次数');ylabel('误差均方根');
hold off;
多输入多输出预测型迭代学习matlab仿真实现
版权申诉
5星 · 超过95%的资源 179 浏览量
2021-08-10
21:31:52
上传
评论 1
收藏 1KB RAR 举报
>_<!
- 粉丝: 112
- 资源: 20
最新资源
- 机械设计整经机上纱自动化sw20非常好的设计图纸100%好用.zip
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈