动态系统数据驱动验证案例研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客    

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

本代码为动态系统数据驱动验证案例研究,共四个案例。

第一个案例是从以前的非线性分析和验证工作中获取的范德波尔振荡器,并为比较提供了基线。该问题的目标是估计系统能够成功返回原点 (0,0) 的一组初始条件。

第二个案例是并发学习模型参考自适应控制器 (CL-MRAC) 实现。在这个示例问题中,我们希望估计完整的参数集(W1,W2),自适应系统仍然能够从中跟踪±1.0范围内的参考轨迹。

第三个案例是飞机回归安全控制器,该控制器旨在从单独的控制器接管并将系统返回到标称状态。在这个问题中,我们感兴趣的是估计回归控制器可以成功接管的扰动状态集。

第四个案例是基于强化学习的双连杆机器人控制器,即机器人问题。控制器使用Sarsa的先前强化学习步骤进行训练,旨在将两个链接相互重叠,类似于体操运动员在高杆上挥杆。这里感兴趣的问题是验证训练的策略是否可以在 1000 个模拟步骤(\Delta t = 0.5)内从各种初始条件开始稳定 acrobot。

📚2 运行结果

主函数部分代码:

clear all;
close all;
clc;
​
​
%% Load training and  testing data
load('vdp_data.mat'); %both training and testing data
​
​
%% Train the SVM Classifier
tic
​
% Setup training data
data1 = dataX( dataY == -1 , : );
data2 = dataX( dataY == 1, : );
data3 = [data1;data2];
theclass = ones( length(data3) ,1);
theclass(1:length(data1)) = -1;
​
dpoly = 4; % polynomial kernel order
​
% Train the SVM Classifier
cl = fitcsvm(data3,theclass,'KernelFunction','polynomial',...
    'PolynomialOrder',dpoly,'BoxConstraint',10,'ClassNames',[-1,1],...
    'Solver','SMO','Standardize',true,'ScoreTransform','sign',...
    'Cost',[0 1; 1 0]);
​
disp('------------------------------------------------------------------');
​
%Test on the training data
disp('Testing on training data:');
[labels1,scores] = predict(cl,data3);
errfrac = sum(labels1 ~= theclass) / size(theclass,1);
disp(['error = ' num2str(errfrac) ' %']);
istabInc = find(theclass == 1 & theclass ~= labels1); % false positive
disp(['FP = ' num2str(length(istabInc)) ' of ' num2str(length(find(theclass == 1)))]);
iunstInc = find(theclass == -1 & theclass ~= labels1); % false negative
disp(['FN = ' num2str(length(iunstInc)) ' of ' num2str(length(find(theclass == -1)))]);
toc
​
% Generalization error
tic
for ii = 1:100
    M = crossval(cl, 'Kfold', 10);
    L(ii) = kfoldLoss(M);
end
disp('------------------------------------------------------------------');
disp(['Generalization error = ' num2str(mean(L))]);
toc
​
​
%% Predict scores over the testing grid
tic
disp('------------------------------------------------------------------');
disp('Empirical testing:');
[labels1,scores] = predict(cl,xGrid);
errfrac = sum(labels1 ~= xGridLabels) / size(xGridLabels,1);
disp(['error = ' num2str(errfrac) ' %']);
istabInc = find(xGridLabels == 1 & xGridLabels ~= labels1); % false positive
disp(['FP = ' num2str(length(istabInc)) ' of ' num2str(length(find(xGridLabels == 1)))]);
iunstInc = find(xGridLabels == -1 & xGridLabels ~= labels1); % false negative
disp(['FN = ' num2str(length(iunstInc)) ' of ' num2str(length(find(xGridLabels == -1)))]);
toc
​
​
%% Plot test results:
figure; hold on;
plot(xGrid(xGridLabels==1 & labels1~=xGridLabels,1),xGrid(xGridLabels==1 & labels1~=xGridLabels,2),'r.')
plot(xGrid(xGridLabels==-1 & labels1~=xGridLabels,1),xGrid(xGridLabels==-1 & labels1~=xGridLabels,2),'b.')
legend('False Positive', 'False Negative');
hold off;
figure; hold on;
plot(xGrid(xGridLabels==1 & labels1==xGridLabels,1),xGrid(xGridLabels==1 & labels1==xGridLabels,2),'b.')
plot(xGrid(xGridLabels==-1 & labels1==xGridLabels,1),xGrid(xGridLabels==-1 & labels1==xGridLabels,2),'r.')
legend('Correct Unstable', 'Correct Stable');
hold off;
​
% Plot the data and the decision boundary:
figure; hold on;
h(1:2) = gscatter(data3(:,1),data3(:,2),theclass,'rb','.',16);
h(3) = plot(data3(cl.IsSupportVector,1),data3(cl.IsSupportVector,2),'ko');
contour(x1Grid,x2Grid,reshape(scores(:,2),size(x1Grid)),[0 0],'k');
legend(h,{'Stab','Unstab','Support Vectors'});
xlim([-3 3]);
ylim([-3 3]);
xlabel('x_1');
ylabel('x_2');
hold off;
​
% Plot the decision boundary along with the true limit cycle:
figure; hold on;
set(gcf,'renderer','zbuffer');
[CC HH] = contour(x1Grid,x2Grid,reshape(scores(:,2),size(x1Grid)),[0 0],'--k');
set(HH,'LineWidth',3)
vdp1 = @(t,z) [z(2), (1 - z(1)^2)*z(2) - z(1)]';
[T,Z] = ode45(vdp1,[0 20],[2 0]);
plot(Z(:,1),Z(:,2),'
r.
')
title(['
SVM Classification: Polynomial kernel degree 
' num2str(dpoly)]);
xlabel('
x_1
');
ylabel('
x_2
');
hold off;

🎉3 参考文献

[1]许正昊,张小和,张洋洋,胡小梅.动态数据驱动应用系统仿真研究综述[J].机械工程师,2014(04):94-97.

部分理论引用网络文献,若有侵权联系博主删除。

🌈4 Matlab代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值