主要内容

非线性系统辨识

这个例子展示了如何执行动态系统识别通过使用一个线性ARX和非线性简称ANFIS模型。

加载数据

在本例中使用的数据集,简称ANFIS和ARX建模是“反馈过程教练PT 326”实验室设备[1]。设备功能像吹风机:空气是煽动通过入口管和加热。热电偶测量空气温度。输入 u ( k ) 是电阻器的电压在一个网格线空气传入的热量和输出 y ( k ) 出口空气温度。

负载测试数据和策划的输入和输出。

负载dryerdatadata_n =长度(y);输出= y;输入= [[0;y (1: data_n-1)][0;0;y (1: data_n-2)][0;0;0;y (1: data_n-3)][0;0;0;0;y (1: data_n-4)][0;u (1: data_n-1))[0;0;u (1: data_n-2))[0;0;0;u (1: data_n-3))[0;0;0;0;u (1: data_n-4))[0;0;0;0;0;u (1: data_n-5))[0;0;0;0;0;0;u (1: data_n-6)];数据=(输入输出);:数据(1:6)= [];input_name = [“y (k - 1)”,“y (k-2)”,“y (k3)”,“y (k-4)”,“u (k - 1)”,“u (k-2)”,“u (k3)”,“u (k-4)”,“u(6年级)”,“u (k-6)”];指数= 1:10 0;图次要情节(2,1,1)情节(指数y(索引),“-”指数y(指数),“o”)标题(“输出数据”)ylabel (“y (k)”次要情节(2,1,2)情节(索引、u(索引)“-”、索引、u(索引)“o”)标题(“输入数据”)ylabel (“u (k)”)

图包含2轴对象。坐标轴对象1标题输出数据包含2线类型的对象。坐标轴对象2与标题输入数据包含对象类型的线。

的数据点反映了样本时间0.08秒。输入 u ( k ) 是一个二进制随机信号在3.41和6.41之间转移。每个样本的输入转变的概率是0.2。数据集包含了1000个输入/输出数据点。这些情节显示输出的温度 y ( k ) 和输入电压 u ( k ) 100年第一次步骤。

识别ARX模型

ARX模型是一个线性模型的以下形式:

y ( k ) + 一个 1 y ( k - - - - - - 1 ) + + 一个 y ( k - - - - - - ) = b 1 u ( k - - - - - - d ) + + b n u ( k - - - - - - d - - - - - - n + 1 )

在这里:

  • y ( k ) u ( k ) mean-subtracted版本的原始数据。

  • 一个 b j 是线性参数。

  • , n , d 三个整数指定ARX模型。

找到一个干燥机设备,ARX模型首先将数据集分为训练( k = 1 - 300)和验证( k = 301 - 600)。

trn_data_n = 300;total_data_n = 600;z = [y u];z = dtrend (z);ave =意味着(y);泽z = (1: trn_data_n,:);zv = z (trn_data_n + 1: total_data_n:);T = 0.08;

执行一个详尽的搜索找到的最佳组合 , n , d ,使每个独立改变从1到10的整数。执行搜索和选择ARX参数,使用arxstruc(系统辨识工具箱)selstruc(系统辨识工具箱)功能。

%贯穿所有不同的模型。V = arxstruc(泽、zv struc (1:10, 1:10, 1:10));%找到最好的模型。nn = selstruc (V, 0);%显示模型参数disp (“[m n d] = "+ num2str (nn))
[m n d] = 5 10 2

最好的ARX模型 = 5, n = 10, d = 2。创建与训练均方误差(RMSE) 0.1122和0.0749的验证RMSE。画出原始 y ( k ) 随着这ARX模型。

创建和模拟ARX模型与这些参数。

th = arx(泽,nn);th。t = 0.08;u = z (:, 2);y = z(: 1) +大街;yp = sim (u, th) +大街;

情节ARX模型输出与训练和验证数据。训练均方误差(RMSE)是0.1121和验证RMSE是0.0748。

图次要情节(2,1,1)指数= 1:trn_data_n;情节(指数、y(指数)指数,yp(指数),“。”)rmse =规范(y(指数)yp(指数))/√(长度(索引));标题(“训练数据(固体)、ARX预测(点)”+换行符+" RMSE = "+ num2str (rmse))包含(“时间步骤”次要情节(2,1,2)指数= (trn_data_n + 1): (total_data_n);情节(指数、y(指数)指数,yp(指数),“。”)rmse =规范(y(指数)yp(指数))/√(长度(索引));标题(“验证数据(固体)、ARX预测(点)”+换行符+" RMSE = "+ num2str (rmse))包含(“时间步骤”)

图包含2轴对象。坐标轴对象1标题训练数据(固体),ARX预测(点)RMSE = 0.11208包含2线类型的对象。坐标轴对象2标题验证数据(固体),ARX预测(点)RMSE = 0.07483包含2线类型的对象。

识别简称ANFIS模型

线性ARX模型,可以快速执行模型结构和参数辨识。性能在前面的情节似乎是令人满意的。然而,如果你想要更好的性能,您可以尝试等非线性模型自适应神经模糊推理系统(简称ANFIS)。

使用一个简称ANFIS系统识别,首先确定哪些变量使用的输入参数。为简单起见,使用10个输入候选人( y ( k - - - - - - 1 ) , y ( k - - - - - - 2 ) , y ( k - - - - - - 3 ) , y ( k - - - - - - 4 ) , u ( k - - - - - - 1 ) , u ( k - - - - - - 2 ) , u ( k - - - - - - 3 ) , u ( k - - - - - - 4 ) , u ( k - - - - - - 5 ) , u ( k - - - - - - 6 ) )。使用 y ( k ) 作为输出。

执行顺序向前搜索输入的使用功能sequentialSearch。这个函数选择每个输入变量顺序优化RMSE。

trn_data_n = 300;trn_data =数据(1:trn_data_n,:);val_data =数据(trn_data_n + 1: trn_data_n + 300,);[~,elapsed_time] = sequentialSearch (3 trn_data val_data input_name);
选择输入1…模型1:y (k - 1),错误:trn = 0.2043, val = 0.1888模型2:y (k-2)错误:trn = 0.3819, val = 0.3541模型3:y (k3)错误:trn = 0.5245, val = 0.4903模型4:y (k-4)错误:trn = 0.6308, val = 0.5977模型5:u (k - 1),错误:trn = 0.8271, val = 0.8434模型6:u (k-2)错误:trn = 0.7976, val = 0.8087模型7:u (k3)错误:trn = 0.7266, val = 0.7349模型8:u (k-4)错误:trn = 0.6215, val = 0.6346模型9:u(6年级),错误:trn = 0.5419, val = 0.5650模型10:u (k-6)错误:trn = 0.5304, val = 0.5601当前选中输入:y (k - 1)选择输入2…模型11:y (k - 1) y (k-2)错误:trn = 0.1085, val = 0.1024模型12:y (k - 1) y (k3)错误:trn = 0.1339, val = 0.1283模型13:y (k - 1) y (k-4)错误:trn = 0.1542, val = 0.1461模型14:y (k - 1) u (k - 1),错误:trn = 0.1892, val = 0.1734模型15:y (k - 1) u (k-2)错误:trn = 0.1663, val = 0.1574模型16:y (k - 1) u (k3)错误:trn = 0.1082, val = 0.1077模型17:y (k - 1) u (k-4)错误:trn = 0.0925, val = 0.0948模型18:y (k - 1) u(6年级),错误:trn = 0.1533, val = 0.1531模型19:y (k - 1) u (k-6)错误:trn = 0.1952, val = 0.1853当前选中输入:y (k - 1) u (k-4)选择输入3…模型20:y (k - 1) u (k-4) y (k-2)错误:trn = 0.0808, val = 0.0822模型21:y (k - 1) u (k-4) y (k3)错误:trn = 0.0806, val = 0.0836模型22:y (k - 1) u (k-4) y (k-4)错误:trn = 0.0817, val = 0.0855模型23:y (k - 1) u (k-4) (k - 1),错误:trn = 0.0886, val = 0.0912模型24:y (k - 1) u (k-4) (k-2)错误:trn = 0.0835, val = 0.0843模型25:y (k - 1) u (k-4) (k3)错误:trn = 0.0609, val = 0.0604模型26:y (k - 1) u (k-4)(6年级),错误:trn = 0.0848, val = 0.0867模型27:y (k - 1) u (k-4) (k-6)错误:trn = 0.0890, val = 0.0894当前选中输入:y (k - 1) u (k3) (k-4)

图包含一个坐标轴对象。坐标轴对象与标题对应输入错误包含3线类型的对象。这些对象代表培训、验证。

这张图显示了所有的输入组合尝试sequentialSearch。搜索选择 y ( k - - - - - - 1 ) , u ( k - - - - - - 3 ) , u ( k - - - - - - 4 ) 自模型作为输入这些输入RMSE最低培训RMSE和验证。

或者,您可以使用一个详尽的搜索所有可能的组合输入的候选人。和之前一样,寻找三个输入10个候选人。您可以使用函数exhaustiveSearch对于这样一个搜索;然而,这个函数尝试所有可能的组合的候选人, ( 1 0 3 ) = 1 2 0 在这种情况下。

而不是exhaustiveSearch使用自定义代码,搜索这些组合的一个子集。对于这个示例,不选择任何专门的输入组合输入或专门的输出。

作为一个合理的猜测,选择输入和两个输出值组合和一个输入值,产生36可能的输入组合。定义组选择输入指标:选择一个输出两组,一组用于选择一个输入。

group1 = (1 2 3 4);% y (k - 1), y (k-2), y (k3), y (k-4)group2 = (1 2 3 4);% y (k - 1), y (k-2), y (k3), y (k-4)group3 = (5 6 7 8 9 10);% u (k - 1)通过u (k-6)

指定参数和选项进行训练。

anfis_n = 6 *长度(group3);指数= 0 (anfis_n, 3);trn_error = 0 (anfis_n, 1);val_error = 0 (anfis_n, 1);%用于生成初始FIS创建选项设置。genOpt = genfisOptions (“GridPartition”,“NumMembershipFunctions”2,“InputMembershipFunctionType”,“gbellmf”);%为简称anfis函数创建选项设置和设置选项仍然存在%常数不同的训练场景。anfisOpt = anfisOptions (“EpochNumber”,1“InitialStepSize”,0.1,“StepSizeDecreaseRate”,0.5,“StepSizeIncreaseRate”,1.5,“DisplayANFISInformation”0,“DisplayErrorValues”0,“DisplayStepSize”0,“DisplayFinalResults”,0);

火车简称ANFIS模型为每个输入组合。

模型= 1;i = 1:长度(group1)j = i + 1:长度(group2)k = 1:长度(group3)%创建输入组合。in1 = input_name (group1 (i));in2 = input_name (group2 (j));in3 = input_name (group3 (k));指数模型:= [group1 (i) group2 (j) group3 (k)];trn_data =数据(1:trn_data_n,[group1 (i) group2 (j) group3 (k)大小(数据,2)));val_data =数据(trn_data_n + 1: trn_data_n + 300,[group1 (i) group2 (j) group3 (k)大小(数据,2)));%创建初始FIS结构。in_fis = genfis (trn_data (: 1: end-1), trn_data(:,结束),genOpt);%设置初始FIS简称ANFIS训练和验证数据。anfisOpt。InitialFIS = in_fis;anfisOpt。ValidationData = val_data;%简称ANFIS系统训练。[t_err ~, ~, ~, c_err] =简称anfis (trn_data anfisOpt);trn_error(模型)= min (t_err);val_error(模型)= min (c_err);模型=模型+ 1;结束结束结束

情节的每个输入组合训练和验证错误减少订单。

%根据训练误差重新排序。(~,b) = (trn_error)进行排序;b = flipud (b);trn_error = trn_error (b);val_error = val_error (b);指数=指数(b);%情节训练和验证错误。x = (1: anfis_n)”;tmp = x (:, (1、3) ';X = tmp (:);(anfis_n tmp =[0, 1)马克斯(trn_error, val_error)南*的(anfis_n 1) ';Y = tmp (:);图绘制(x, trn_error“o”,x, val_error“- *”,X, Y,“g”)标题(“对应输入错误”)ylabel (“RMSE”)传说(“培训”,“确认”,“位置”,“东北”)%添加蜱虫和标签。标签=字符串(0 (anfis_n, 1));k = 1: anfis_n标签(k) = input_name(指数(k, 1)) +“&”+input_name(指数(k, 2)) +“&”+input_name(指数(k, 3));结束xticks (x) xticklabels(标签)xtickangle (90)

图包含一个坐标轴对象。坐标轴对象与标题对应输入错误包含3线类型的对象。这些对象代表培训、验证。

该算法选择的输入 y ( k - - - - - - 1 ) , y ( k - - - - - - 2 ) , u ( k - - - - - - 3 ) 训练均方根误差为0.0474,验证均方根误差为0.0485。这些RMSE值改进的ARX模型,简称ANFIS模型发现的顺序搜索。

计算和情节的简称ANFIS预测训练和验证数据集使用选定的输入组合。

这样做,首先生成的数据集。

[~ b] = min (trn_error);input_index =指数(b:);trn_data =数据(1:trn_data_n, [input_index、大小(数据,2)]);val_data =数据(trn_data_n + 1:6 00 (input_index、大小(数据,2)));

创建和培养简称ANFIS。

in_fis = genfis (trn_data (: 1: end-1), trn_data(:,结束));anfisOpt = anfisOptions (“InitialFIS”in_fis,“EpochNumber”,1“InitialStepSize”,0.01,“StepSizeDecreaseRate”,0.5,“StepSizeIncreaseRate”,1.5,“ValidationData”,val_data);[trn_out_fis, trn_error step_size、val_out_fis val_error] =简称anfis (trn_data anfisOpt);
简称ANFIS信息的节点数量:34的线性参数:32的非线性参数:18总数的参数:50训练数据对数量:300数量的检查数据对:300模糊规则数量:8开始简称ANFIS训练……1 0.0474113 0.0485325数量达到指定的时代。简称ANFIS训练时代1完成。最小的训练RMSE RMSE = 0.0485325 = 0.0474113最小的检查

评估FIS验证错误的最小值。

y_hat = evalfis (val_out_fis、数据(1:6 00 input_index));图次要情节(2,1,1)指数= 1:trn_data_n;情节(索引、数据(指数大小(数据,2)),“- - -”,指数,y_hat(指数),“。”)rmse =规范(y_hat(索引)拼(指数大小(数据,2)))/√(长度(索引));标题(“训练数据(固体),简称ANFIS预测(点)”+换行符+" RMSE = "+ num2str (rmse))包含(“时间步骤”次要情节(2,1,2)指数= trn_data_n + 1:6 00;情节(索引、数据(指数大小(数据,2)),“- - -”、索引y_hat(指数),“。”)rmse =规范(y_hat(索引)拼(指数大小(数据,2)))/√(长度(索引));标题(“验证数据(固体),简称ANFIS预测(点)”+换行符+" RMSE = "+ num2str (rmse))包含(“时间步骤”)

图包含2轴对象。坐标轴对象1标题训练数据(固体),简称ANFIS预测(点)RMSE = 0.047411包含2线类型的对象。坐标轴对象2标题验证数据(固体),简称ANFIS预测(点)RMSE = 0.048532包含2线类型的对象。

简称ANFIS模型预测符合比ARX模型预测数据更密切。

参考

[1]Ljung Lennart。为用户系统标识:理论。新世纪信息和系统科学系列。恩格尔伍德悬崖,台北:普伦蒂斯·霍尔出版社,1987年。

另请参阅

||

相关的话题