From 661aff3b19ecccf6fa09c7787b86fe0b351c8782 Mon Sep 17 00:00:00 2001 From: iHoney725 <60086881+ohmyjesus@users.noreply.github.com> Date: Mon, 4 Jan 2021 10:31:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=98=E9=87=91=E7=90=A8RBF=5F=E9=9A=8F?= =?UTF-8?q?=E4=B9=A6=E4=BB=BF=E7=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- B1.m | 186 +++++++++++++++++++++++ B2.m | 97 ++++++++++++ Book2221.asv | 65 ++++++++ Book2221.slx | Bin 0 -> 23164 bytes Book2221_controller.m | 69 +++++++++ Book2222.slx | Bin 0 -> 26434 bytes Book2222_controller.m | 86 +++++++++++ Book321.slx | Bin 0 -> 26374 bytes Book321_controller.m | 104 +++++++++++++ Book331.slx | Bin 0 -> 26516 bytes Book331.slx.r2016a | Bin 0 -> 18439 bytes Book331_Controller.m | 84 ++++++++++ Book4131.slx | Bin 0 -> 25303 bytes Book4131_Controller.m | 83 ++++++++++ Book4131_Plant.m | 48 ++++++ Book4132.slx | Bin 0 -> 29846 bytes Book4132.slx.r2016a | Bin 0 -> 22303 bytes Book4132_Controller.m | 90 +++++++++++ Book4132_Plant.m | 60 ++++++++ Book423.slx | Bin 0 -> 28907 bytes Book423_Controller.m | 101 ++++++++++++ Book423_Plant.m | 47 ++++++ Book4341.slx | Bin 0 -> 25745 bytes Book4341_Controller.m | 88 +++++++++++ Book4341_Plant.m | 48 ++++++ Book4342.slx | Bin 0 -> 25959 bytes Book4342_Controller.m | 117 ++++++++++++++ Book4342_Plant.m | 53 +++++++ Book523.slx | Bin 0 -> 30253 bytes Book523_Controller.m | 119 +++++++++++++++ Book523_Plant.m | 62 ++++++++ Book532.slx | Bin 0 -> 32847 bytes Book532_Controller.m | 157 +++++++++++++++++++ Book532_Plant.m | 62 ++++++++ Book6141.slx | Bin 0 -> 27243 bytes Book6141_2_Controller.m | 144 ++++++++++++++++++ Book6141_Controller.m | 146 ++++++++++++++++++ Book6141_Plant.m | 51 +++++++ Book6142.slx | Bin 0 -> 30239 bytes Book6142_Controller.m | 193 +++++++++++++++++++++++ Book6142_Plant.m | 93 ++++++++++++ Book6241.slx | Bin 0 -> 25800 bytes Book6241_Controller.m | 125 +++++++++++++++ Book6241_Plant.m | 53 +++++++ Book6242.fis | 39 +++++ Book6242.slx | Bin 0 -> 33751 bytes Book6242.slxc | Bin 0 -> 5537 bytes Book6242_Controller.m | 173 +++++++++++++++++++++ Book6242_Plant.m | 75 +++++++++ Book6331.slx | Bin 0 -> 25972 bytes Book6331_Controller.m | 124 +++++++++++++++ Book6331_Plant.m | 64 ++++++++ Book6332.slx | Bin 0 -> 29058 bytes Book6332_Controller.m | 173 +++++++++++++++++++++ Book6332_Plant.m | 115 ++++++++++++++ Book7241.slx | Bin 0 -> 26434 bytes Book7241_Controller.m | 191 +++++++++++++++++++++++ Book7241_Plant.m | 59 +++++++ Book7242.slx | Bin 0 -> 35624 bytes Book7242.slxc | Bin 0 -> 5409 bytes Book7242_Controller.m | 329 ++++++++++++++++++++++++++++++++++++++++ Book7242_Plant.m | 82 ++++++++++ 62 files changed, 4055 insertions(+) create mode 100644 B1.m create mode 100644 B2.m create mode 100644 Book2221.asv create mode 100644 Book2221.slx create mode 100644 Book2221_controller.m create mode 100644 Book2222.slx create mode 100644 Book2222_controller.m create mode 100644 Book321.slx create mode 100644 Book321_controller.m create mode 100644 Book331.slx create mode 100644 Book331.slx.r2016a create mode 100644 Book331_Controller.m create mode 100644 Book4131.slx create mode 100644 Book4131_Controller.m create mode 100644 Book4131_Plant.m create mode 100644 Book4132.slx create mode 100644 Book4132.slx.r2016a create mode 100644 Book4132_Controller.m create mode 100644 Book4132_Plant.m create mode 100644 Book423.slx create mode 100644 Book423_Controller.m create mode 100644 Book423_Plant.m create mode 100644 Book4341.slx create mode 100644 Book4341_Controller.m create mode 100644 Book4341_Plant.m create mode 100644 Book4342.slx create mode 100644 Book4342_Controller.m create mode 100644 Book4342_Plant.m create mode 100644 Book523.slx create mode 100644 Book523_Controller.m create mode 100644 Book523_Plant.m create mode 100644 Book532.slx create mode 100644 Book532_Controller.m create mode 100644 Book532_Plant.m create mode 100644 Book6141.slx create mode 100644 Book6141_2_Controller.m create mode 100644 Book6141_Controller.m create mode 100644 Book6141_Plant.m create mode 100644 Book6142.slx create mode 100644 Book6142_Controller.m create mode 100644 Book6142_Plant.m create mode 100644 Book6241.slx create mode 100644 Book6241_Controller.m create mode 100644 Book6241_Plant.m create mode 100644 Book6242.fis create mode 100644 Book6242.slx create mode 100644 Book6242.slxc create mode 100644 Book6242_Controller.m create mode 100644 Book6242_Plant.m create mode 100644 Book6331.slx create mode 100644 Book6331_Controller.m create mode 100644 Book6331_Plant.m create mode 100644 Book6332.slx create mode 100644 Book6332_Controller.m create mode 100644 Book6332_Plant.m create mode 100644 Book7241.slx create mode 100644 Book7241_Controller.m create mode 100644 Book7241_Plant.m create mode 100644 Book7242.slx create mode 100644 Book7242.slxc create mode 100644 Book7242_Controller.m create mode 100644 Book7242_Plant.m diff --git a/B1.m b/B1.m new file mode 100644 index 0000000..949518b --- /dev/null +++ b/B1.m @@ -0,0 +1,186 @@ +function [sys,x0,str,ts] = B1(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +global c b kv kp +sizes = simsizes; +sizes.NumContStates = 10; %设置系统连续状态的变量 W V +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 6; %设置系统输出的变量 +sizes.NumInputs = 10; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 1; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = 0.1 * ones(1, 10); % 系统初始状态变量 代表W和V向量 +str = []; % 保留变量,保持为空 +ts = [0 0]; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 +% 神经网络采用4 - 5 - 2结构 +c = 1 * [-2 -1 -0 1 2; + -2 -1 -0 1 2; + -2 -1 -0 1 2; + -2 -1 -0 1 2]; % 高斯函数的中心点矢量 维度 IN * MID 4*5 +b = 3; % 高斯函数的基宽 维度node * 1 5*1 b的选择很重要 b越大 网路对输入的映射能力越大 +alph = 3; +kp = [alph^2 0; 0 alph^2]; +kv = [2 * alph 0;0 2*alph]; + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global c b kv kp +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +node = 5; +Q = 50 * eye(4); +A = [zeros(2,2) eye(2,2); -kp -kv]; % 4*4 +P = lyap(A' , Q); % 4*4 +B = [0 0;0 0;1 0;0 1]; + +qd1 = u(1); +qd2 = u(2); +d_qd1 = u(3); +d_qd2 = u(4); +q1 = u(5); +q2 = u(6); +dq1 = u(7); +dq2 = u(8); + +e1 = q1 - qd1; % e = q - qd +e2 = q2 - qd2; +de1 = dq1 - d_qd1; +de2 = dq2 - d_qd2; + +W = [x(1) x(2) x(3) x(4) x(5); x(6) x(7) x(8) x(9) x(10)]'; +Input = [e1; e2; de1; de2]; +h = zeros(node , 1); %5*1矩阵 +for i =1:node + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b^2)); +end +gama = 20; +dw = gama * h * Input' * P * B; +dw = dw'; +for i = 1:1:5 + sys(i) = dw(1,i); + sys(i+5) = dw(2,i); +end + +% 参数的定义 +% v = 13.33; +% a1 = 8.98; +% a2 = 8.75; +% g = 9.8; +% +% M = [v+a1+2*a2*cos(q2) a1+a2*cos(q2); +% a1+a2*cos(q2) a1]; +% Q = 50 * eye(4); +% +% +% k1 = 0.001; +% method = 1; +% +% % W权值的更新 +% if method == 1 % 自适应方法一 +% dw = gama * h * Input' * P * B; +% for i = 1:node*2 +% sys(i) = dw(i); +% end +% else % 自适应方法二 +% dw = gama * h * Input' * P * B + k1 * gama * norm(Input) * [W V]; +% for i = 1:node*2 +% sys(i) = dw(i); +% end +% end + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global c b kv kp +node = 5; +% 角度跟踪指令 +qd1 = u(1); +qd2 = u(2); +d_qd1 = u(3); +d_qd2 = u(4); +q1 = u(5); +q2 = u(6); +dq1 = u(7); +dq2 = u(8); +ddq1 = u(9); +ddq2 = u(10); +dd_qd1 = -0.1*pi*0.5*pi*sin(0.5*pi*t); +dd_qd2 = 0.1*pi*0.5*pi*cos(0.5*pi*t); +ddq = [ddq1; ddq2]; +dd_qd = [dd_qd1; dd_qd2]; + +e1 = q1 - qd1; % e = q - qd +e2 = q2 - qd2; +de1 = dq1 - d_qd1; +de2 = dq2 - d_qd2; +e = [e1; e2]; +de = [de1; de2]; + +% 参数的定义 +v = 13.33; +a1 = 8.98; +a2 = 8.75; +g = 9.8; + +M = [v+a1+2*a2*cos(q2) a1+a2*cos(q2); + a1+a2*cos(q2) a1]; +C = [-a2*dq2*sin(q2) -a2*(dq1 + dq2)*sin(q2); + a2*dq1*sin(q2) 0]; +G = [15*g*cos(q1)+8.75*g*cos(q1+q2); + 8.75*g*cos(q1+q2)]; + +dq = [dq1; dq2]; + +tol1 = M*(dd_qd - kv*de - kp*e) + C * dq + G; + +deltam = 0.2*M; +deltac = 0.2*C; +deltag = 0.2*G; + +d1 = 2; +d2 = 3; +d3 = 6; +d = d1 + d2 * norm([e1;e2]) + d3 * norm([de1; de2]); +f = inv(M) * (deltam * ddq + deltac * dq + deltag + d); + +Input = [e1; e2; de1; de2]; +h = zeros(node , 1); %5*1矩阵 +for i =1:node + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b^2)); +end + +W = [x(1) x(2) x(3) x(4) x(5); x(6) x(7) x(8) x(9) x(10)]'; +fn = W' * h; +tol2 = -M * fn; +tol = tol1 + tol2; + +sys(1) = tol(1); +sys(2) = tol(2); +sys(3) = f(1); +sys(4) = fn(1); +sys(5) = f(2); +sys(6) = fn(2); + + + + + + + + + + + + diff --git a/B2.m b/B2.m new file mode 100644 index 0000000..2fa9b67 --- /dev/null +++ b/B2.m @@ -0,0 +1,97 @@ +function [sys,x0,str,ts] = B2(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 4; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 4; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [0.6 0.3 0.5 0.5]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +persistent ddx1 ddx2 +if t == 0 + ddx1 = 0; + ddx2 = 0; +end +% 角度跟踪指令 +qd1 = 1+0.2*sin(0.5*pi*t); +qd2 = 1-0.2*cos(0.5*pi*t); +dqd1 = 0.1*pi*cos(0.5*pi*t); +dqd2 = 0.1*pi*sin(0.5*pi*t); + +e1 = x(1) - qd1; +e2 = x(3) - qd2; +de1 = x(2) - dqd1; +de2 = x(4) - dqd2; + +q1 = x(1); +q2 = x(3); +dq1 = x(2); +dq2 = x(4); + +% 参数的定义 +v = 13.33; +a1 = 8.98; +a2 = 8.75; +g = 9.8; + +M = [v+a1+2*a2*cos(q2) a1+a2*cos(q2); + a1+a2*cos(q2) a1]; +C = [-a2*dq2*sin(q2) -a2*(dq1 + dq2)*sin(q2); + a2*dq1*sin(q2) 0]; +G = [15*g*cos(q1)+8.75*g*cos(q1+q2); + 8.75*g*cos(q1+q2)]; +deltam = 0.2*M; +deltac = 0.2*C; +deltag = 0.2*G; + +d1 = 2; +d2 = 3; +d3 = 6; +d = d1 + d2 * norm([e1;e2]) + d3 * norm([de1; de2]); +tol(1) = u(1); %力矩1 +tol(2) = u(2); %力矩2 + +dq = [x(2); x(4)]; +ddq = [ddx1; ddx2]; +f = inv(M) * (deltam * ddq + deltac * dq + deltag + d); + +ddx = inv(M) * (tol' - C* dq - G) + f; + +sys(1) = x(2); +sys(2) = ddx(1); +sys(3) = x(4); +sys(4) = ddx(2); +ddx1 = ddx(1); +ddx2 = ddx(2); + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +sys(1) = x(1); %q1 +sys(2) = x(2); %dq1 +sys(3) = x(3); %q2 +sys(4) = x(4); %dq2 + + + diff --git a/Book2221.asv b/Book2221.asv new file mode 100644 index 0000000..4d92958 --- /dev/null +++ b/Book2221.asv @@ -0,0 +1,65 @@ +function [sys,x0,str,ts] = Book2221(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case {1,2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 4; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 1; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = []; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 +% 权值初值的选择 +% 神经网络PID控制器 2-5-1结构 +global W C B e_new e_past e_past_past +C = [-1 -0.5 0 0.5 1; + -10 -5 0 5 10]; %2*5 中心矢量 +B = [1.5 1.5 1.5 1.5 1.5]; %1*5 基宽度参数 +W= rand(1,5); +e_new = 0; +e_past = e_new; +e_past_past = e_past; + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +global W C B e_new e_past e_past_past +alpha = 0.05; %惯性系数 +xite = 0.5; %学习效率 +u_in = u(1); +y_out = u(2); +some = [u_in; y_out; y_error]; +h = zeros(5,1); +for j = 1:5 + h(j) = exp(-(norm((some - C(:,j)),2)/(2* B(j)^2))); %6*1矩阵 径向基函数 +end +% RBF的网络输出ym +ym = W * h; + +% 权值的调整 +for i = 1:5 + deltaW(i) = xite * (y_out - ym) * h(i); +end +for i = 1:5 + W(i) = W(i) + deltaW(i) + alpha*(W(i)) +end +% 更新值 + + + + + diff --git a/Book2221.slx b/Book2221.slx new file mode 100644 index 0000000000000000000000000000000000000000..fca0bffaea0bc6a6523b887da6ebc8707c439a18 GIT binary patch literal 23164 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 Q0Q|54@6O8KCuD;E09~6OuK)l5 literal 0 HcmV?d00001 diff --git a/Book2221_controller.m b/Book2221_controller.m new file mode 100644 index 0000000..1683d7d --- /dev/null +++ b/Book2221_controller.m @@ -0,0 +1,69 @@ +function [sys,x0,str,ts] = Book2221_controller(t,x,u,flag) +% RBF神经网络自适应控制刘金琨例题2.2.2.1仿真 +% 基于梯度下降法的RBF神经网络逼近 +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case {1,2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 0; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 1; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = []; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 +% 权值初值的选择 +% 神经网络PID控制器 2-5-1结构 +global W_new W_past C B +C = [-1 -0.5 0 0.5 1; + -10 -5 0 5 10]; %2*5 中心矢量 +B = [1.5 1.5 1.5 1.5 1.5]; %1*5 基宽度参数 +W_new = rand(1,5); +W_past = W_new; + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global W_new W_past C B +alpha = 0.05; %惯性系数 +xite = 0.5; %学习效率 +u_in = u(1); +y_out = u(2); +some = [u_in; y_out]; +h = zeros(5,1); +for j = 1:5 + h(j) = exp(-norm(some - C(:,j))^2/(2 * B(j)^2)); %6*1矩阵 径向基函数 +end +% RBF的网络输出ym +ym = W_new * h; + +% 权值的调整 更新值 +deltaW_new = zeros(1,5); +for i = 1:5 + deltaW_new(i) = xite * (y_out - ym) * h(i); +end + +for i = 1:5 + W_new(i) = W_new(i) + deltaW_new(i) + alpha*(W_new(i) - W_past(i)); +end + +sys(1) = ym; + +W_past = W_new; + + + + diff --git a/Book2222.slx b/Book2222.slx new file mode 100644 index 0000000000000000000000000000000000000000..7d239f8e1e39a833521e3c5ab0c75386e90815c2 GIT binary patch literal 26434 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 literal 0 HcmV?d00001 diff --git a/Book2222_controller.m b/Book2222_controller.m new file mode 100644 index 0000000..c9492da --- /dev/null +++ b/Book2222_controller.m @@ -0,0 +1,86 @@ +function [sys,x0,str,ts] = Book2222_controller(t,x,u,flag) +% 基于梯度下降法的RBF神经网络逼近 +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case {1,2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 0; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 1; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = []; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 +% 权值初值的选择 +% 神经网络PID控制器 2-5-1结构 +global W_new W_past C_new C_past B_new B_past +C_new = [-1 -0.5 0 0.5 1; + -10 -5 0 5 10]; %2*5 中心矢量 +C_past = C_new; +B_new = [3 3 3 3 3]; %1*5 基宽度参数 +B_past = B_new; +W_new = rand(1,5); %权值取0-1的随机值 +W_past = W_new; + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global W_new W_past C_new C_past B_new B_past +alpha = 0.05; %惯性系数 +xite = 0.15; %学习效率 +u_in = u(1); +y_out = u(2); +some = [u_in; y_out]; +h = zeros(5,1); +for j = 1:5 + h(j) = exp(-(norm(some - C_new(:,j))^2/(2* B_new(j)^2))); %5*1矩阵 径向基函数 +end +% RBF的网络输出ym +ym = W_new * h; + +% 权值的调整 更新值 +deltaW = zeros(1,5); +for i = 1:5 + deltaW(i) = xite * (y_out - ym) * h(i); +end +for i = 1:5 + W_new(i) = W_new(i) + deltaW(i) + alpha*(W_new(i) - W_past(i)); +end + +% 基宽带参数b的修正 +deltab = zeros(1,5); +for i = 1:5 + deltab(i) = xite * (y_out - ym) * W_new(i) * h(i) * (norm(some - C_new(:,i))^2 / B_new(i)^3); + B_new(i) = B_new(i) + deltab(i) + alpha*(B_new(i) - B_past(i)); +end + +% 中心矢量c的修正 +deltac = zeros(2,5); +for j = 1:2 + for i = 1:5 + deltac(j,i) = xite * (y_out - ym) * W_new(i) * h(i) * ((some(j) - C_new(j,i)) / B_new(i)^2); + C_new(j,i) = C_new(j,i) + deltac(j,i) + alpha*(C_new(j,i) - C_past(j,i)); + end +end + +sys(1) = ym; + +W_past = W_new; +B_past = B_new; +C_past = C_new; + + + diff --git a/Book321.slx b/Book321.slx new file mode 100644 index 0000000000000000000000000000000000000000..580759a9cc7da7247dcba2e0a0d8383bd5842747 GIT binary patch literal 26374 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 +% 神经网络PID控制器 2-6-1结构 +alpha = 0.05; %惯性系数 +xite = 0.35; %学习效率 +IN = 3; +Mid = 7; +Out = 1; + +yd = u(1); +ec = u(2); +yk_new = u(3); + +h = zeros(Mid, 1); +for j = 1:Mid + h(j) = exp(-(norm(some - C_new(:,j))^2/(2* B_new(j)^2))); %7*1矩阵 径向基函数 +end +% RBF的网络输出ym +ut_new = W_new * h; +dyu = sign((yk_new - yk_past)/(ut_new - ut_past)); + +% 权值的调整 更新值 +deltaW = zeros(1,Mid); +for i = 1:Mid + deltaW(i) = xite * ec * dyu * h(i); +end +W_new = W_new + deltaW + alpha*(W_new - W_past); + +% 基宽带参数b的修正 +% deltab = zeros(1,Mid); +% for i = 1:Mid +% deltab(i) = xite * dyu * W_new(i) * h(i) * (norm(some - C_new(:,i))^2 / B_new(i)^3); +% B_new(i) = B_new(i) + deltab(i) + alpha*(B_new(i) - B_past(i)); +% end + +% 中心矢量c的修正 +% deltac = zeros(IN, Mid); +% for i = 1:IN +% for j = 1:Mid +% deltac(i,j) = xite * dyu * W_new(j) * h(j) * ((some(i) - C_new(i,j)) / B_new(j)^2); +% C_new(i,j) = C_new(i,j) + deltac(i,j) + alpha*(C_new(i,j) - C_past(i,j)); +% end +% end + +sys(1) = ut_new; +some = [u(1); u(2); u(3)]; +W_past = W_new; +B_past = B_new; +C_past = C_new; +ut_past = ut_new; +yk_past = yk_new; +% else +% sys(1) = ut_new; +% end + + + diff --git a/Book331.slx b/Book331.slx new file mode 100644 index 0000000000000000000000000000000000000000..9feaf2c8cec51a04266a33db1909c18fa1cdfe61 GIT binary patch literal 26516 zcmaI7W3VVulPtPz+qP}nwt2Q~+qQAGZQHhO+r~TJym&8W=0@B<9Uc8IE3;}qhtTiDLl+0@oqU&X`T)Jd1l-Nt%2)y{5_ z0b!(9D!H}HVINee?3|@Ji^T#975CuSxsg6X^*8C7hB_}-n!7=WBAKm>-pBXGcb4;h zJSoboI+6TIP%Ej_uF)Yge_u^P`Q$w9^Kw3n1rjkDz!di697{M;M~3{>Dva>23Gzcz zFhB07s zQuR&-lWa{cWf$vO&3Z13y__UmLh#jixW09?9*qg!vKTVe`2aT37fAlLJww2STFi50 zJZQNU=`_`%(6eQW71eu0?7DP-c>Br9;h4w9v*JP2E$Ev&cxDAd3?hh#LACw-d4r!( z?@MEpE{?$R^zV_YnMYdyov8+So+2Sg7h?$T)}-7*y=}*D)QueBBpd-5stUR&PQYHsxEusgrJc7P?Fhc>|1he^7!3ngqqxG?OKord@h z6>ujD3+85GlT}3m>7h5g_ge_6oUYyzCkWh%fgHKb~?8Y`IZfzu7Xb^IwP=ym)d52O2n z$ONWhS5haNA}RemCy6Y?QzM@RPnN7V8YbUp*N}u)6z_#P?+IIyePXsy(duZ1V_!AD zl@qqX%tRJYuc^JqFZc0Ji<`u`#GK4b%XiCN@g%3axvtKzo4~ezDe!Uk%pJ`=c{{nf z=}-vUI54T3Y&m4iJc7wgs}`N#B3?Csj zN=%|85DDOkl?92Wkvk8~y&}2wGH6w5NJ>iqf;&{w?!xU0cU7vu8)^nTW+br3vXQPU zY$(QqZUpI&*+N{7l}!dKxGoXcBfXlC98iPWG<^+$nxS68y&1UkCYpEa4eOVl3=|xp zSRfKs43H2%%aIeVusYoiM6*k1O$_S8z|7QfC7G%=n_xCPXF9%t{A}{IgUa7hFVzSB zBR>q##S6M*Du6D5vwuyfWZS{QP;;pTM)$~1czxZcRw<$eD4rybkQ0;A>CkL_$leZo z?Ko~yW@5K%(5FuMWTvCH+w8X06t>*fcl_~?boZR-7!7|RU6YW74oPEfW&(3yLNBo3 zRQU}tAq(8gxQTgrr}bZuLXK{%_T=Z*TKJPvzXARyDYbI#dL#eH5dTLE?tdr6#_j*4 z#WZfx7Kjn%U*b&kARCBQ%B|OjZrUq3f04GFzaTH25GIQ?QRJkiHiZ1pvndcem#<85%m#W8Q z0CGdTu$MPInkgw`T0^8OW2<}?qxG<8l2u8#u$V9>INhUNN|o9ko94MXWOc{tOveGM zK3USKr^g!)Imaf-+(jpW`^_KDvGoJWj>AB}n63x?=CNwtYI(2j@&Nju0dV(#J?#1i z9OPdB$o_8u5Ox1|$~alr+5ShMy0O!afea{O`lLxdKk-rr05#6rqSrr2bORDdWD(0f zKJ_)u-#({P<*#n+N%+wgP(6PmrKRRJ=j4C3<`!2IETojcb_a2I*q+dlNk3a$*|CXy zN9qiwkjWZ6y)Dnu9~+Q~))8?@ZV2L95$Gc}_lAI8fXq-rREph?;a{VF5CzrQk1#uK z%~Y)1he_2Z#)QzC-El83T`o2oXp(od3^w-%>y#uXxwgz#ur&>rVYRYSzItl{TOVHF z|0jMAZN|B_f4J%X;ive&;a4)XHZ^oIm9+h1_n!#3$Z^8|i@?r1>g-LiIEj>!l+Kn; z_^1Q|6$0I2;Qguead_0GTQB*5oARKvg|e%Sf4Vec8QXP3!!)onC;mNN$O0mE^gdT{ zzBPW1ZQ{-WVn5}1ly)gKFkxzTy_9$9Au>iHLZ$P#@~dkSB~c{+HL5D z$XJ43-=F^_{}$ajLw`sB0HS|K1loT`?`-a3V`OV+VNGXmYqqWS&YgUXmliCdlBzdQ zG?+D>yg(pK!mZe19n|GXts^_Afu+qgAA%)~l~8P<0CO@ul#XdkHEt{Q@;uFy+CM}C zGm>5E^b_WkbNOY@|LVf~`sjUg`}+9p&HtL?yS%I?D5onYBqY>7-#>zzzUc?6X|bny zsH_bn^LfkpCMGFy#d~jcW%#~~Dj_lU%)O!W5KXO>fdP$wXw_P+YuEG8FvZ#HsxbKp zx?Pw1`pUstd<^(~A%Xcuhl=xfaa)=r^_Oh196s%qj33~y!xw|Xh+al2H~Uh_D>3k+ zCEOWy8h=ed=N#4mJQI^038R+9Vmi}<28eLF38bXSu(%9&_q(r|yjLlo{DELN z?wMd@%Fqr9q{TSzgHocnX)#QSNsyove$~${no*Xj8`^Gir~}!#5dY)M{{4MHUmJco z)YLUzQu*c-QWSI#HZQ&Go6n3Hms;lIH5sY6dA&$MzI+N|^Qj%gfUlev1A_ zWG9Swm3jN)gc!NmFL7IctxYVkIiDJbhp4E?T8#jKKhu=}IV%QH|74KXNvj(_p^60` zIV%kf%~z5dzh4WcPIMbdE00`+mX;RKBh2ieLGV{T$;4{vey?p_ZAH~mSZ4ZE*bX^y zNf$3qk2^ji;5@b+od|Ul1oikhr;0b@JiOqkF);Ewu&lgtbxi>f@`_gB zDWxQl<>Sc{V2=PoYP>=0+hLoMo@U+troo`tO6O#=2O~Nr8MMioE<0me81d57iQN9Ms9PWjkMya?TjFE z4YcEJhCr}cn3;jK&2Z~bZsV`6uDWWIQ< zjplJL4`Ip-wT>tNX`C2g)XRi$?`q=nE%9@Ne_u1*yq|54-`v)F&HdQWmR@^OM?(e(QFW?sI0lTxV*o=Ki|9Gf=&{@%`5V2 z=LiD>1Ah$H=vw=t=D>vs{RN$O^Pq>(|gT zwADBJIi@TbTusYD;KP@vxu>d+7gmzFEoA zI8^@}wm^qXcBB3YTGc=j6n$tZfT0Zl3uUCzs#vM&$u=59eMDT{ywubYEB=J$yGQZKa>0pK{tKd(me%)fhM57hyl?2{f`WqIP4=zp#}E^V z(^7f(dW|a&iY6R`tl7hEQ1i+sn8&;ep*%QqZ0&XDcf$n$lKcU~}zTGAr4~w#t7M z;WIcbs@J<7c%rc*g6!N_lJA)D!3ED{VX*|m|1zMbN2eh&9Yod+R?zOp-FmJHD>%qNC@F|2!8~Fx!*f)jc9L6cV$EWC{a-)oAI(2TcYhWUW~_bNq-$l;8%pxvK^eB(t~N|7(KKxRhu zZE9VB2Ce~U<#1{gsQCB0B3dTaCZ~R$Gj~@tmMN%-aMqOfl7c(?$DBNZv3sSgqN0L^ zx;T6J&(pWWM`7KaeOWOn0eYSB?uV!D!0^Jd15{7*aw?L&XMV4rE1b{qRf9(LvH3_d z+_}pTPouNB;Xdu&DL|hNiKr&svybticHi{t1P+hK6#-yar!&`X`@$mSXg}DUql?Y; z7v>@r(EjIxBP+nqX`Wv$bASvR5k0W1DH`YHob(rhXq0%aCnk0!1!;RzUHmrdt91Lq zFUX61YqKmZ4ULE_sjag;8-%K=oWQvF`Mn7PM)qj|yIJJ;H3hIz!GgJ7PY)=uW9-c- z6c6D24N&UplZeU%0r^xQ$IuqZ^`mL23lL$;tf=dh6JXt4QBhx~$?wO`js9Qi$_m2-XHWmzNR~)H{Ia;r8t|HbC z&}=kiFtQH{Z#T^3ftEa$i+dEc+Md(THz{poJU$YvFn4?jBaUug9F z-vOaa4I>uTT1EO6JWw4^QXCsy8_Vh-{2%E5*|Apf!?;%en;~<-0RS-n^=wWSHZIl{ zwpR4Y#^$CbF4m^P|K`d6vVl~`Z8sSZx=*QLwk;fzL{M9Rn$8_5Jk1lG`b^ECThPLt zvz{)cHB(#LWVM^lhSAJI2ib37!x}F~EqUL8a;URB@e(Lw$rLU}lAn$6ws*UQi8|5ZkX0{HxBGwAI6s=7`+QQx=I9BLmZm&S*2=azDsQVem^yS#E2-X_ zMM~D-edte_3t8t29OfHE1vm zWf({x(jo#21|O)A{NW(LnRhi^O!+x4xf1wPkhuS=L&I-F1-dPM{zc=9$9M&z{87^R zyf8>AV+VhOh>jr>_)3TcoWkw6ZBKL8+|eWTlV`EXt!!nJ8wMtks`hucTA~7yq=ILa;*~ zI_j!>v4E~tqf6n`iwA6}Dd+&KX1gMocx~w%^MMkMlf!67CeJI71-Fwk%agVqP|#n;5?a&b2MggPj?&ARDWKSGFf96n~Iim>iI> zrB#l~FNL*0b)G+4hwR(S6Z@|2`ISf}oRk?DT*E>>Qq9BbuUss*eDKyTA$%E1*E4o{ zT39)h$UtQc7LJ%m1cwtpMIk6-JQ+xfZ8oN8q`4~FM)VDf*N2NKN9@vQ+Yv}MPJ_oM zzb$>PSBu^4$ZZ36x!Bf|xQX@@7kTbuM&K1nP-hgGo4bF>V!`u=w~<@_#p|QD^3neF z6NEev$_PeW2rICy0SPhzD%naJFd8X6F%Q98Sg(lP*-*-1MCpNFGuKGw$KT?CX|d6r z8}kL20*`!-qj?mw+vnmyx|O}F>3+YQw&#DjS6Ubis$>5&9`J8A`Hxrfe`s9P#KPIm z@joiBR+Dwg`j5)h8J@5LNI(K(W&dmxbwAIsoJPm1u^|iK_1P@w>jQ!zvpZz3@EN$e zHh;cc{vBR6*5u&-YwM^?t9xL$8X$$0qF!0-^?C>$xn22WG>>w9f~T^R>1ivgV@7-w zq|vXN!!GT%-I5j8vpdF`JU}hl`D1z!Hj-5GBpvg8sZ(XCxbqbIb&HZDvbAX@1938= zU1~=gzFAs<8aFs!#htkafGlKwP=X%Ys2~ht*LRU3Cb)k+z;(R{mU_d8yt;1d)a*=X zg2Yiw0Th5(*rzbSBIYlQ1IkpQnE&C=MxtV~b25kHt7~71T#Ta?HmX)OA#2ZNY{iyV7!{wwHXa1!Jk#3`!@JlRG+XQ!(xEC zeHm<))!mDl{U>rRoER2RJlZ_c$a=EGp-i(t;2~UQ*t1cmRQ1@3mhBSJU#<;g1R@a= z5&?PuhLivqniLSv7*h)KdeX6q!Pr7A=aXL{#)}A0j$} zbJmz5+AvlKqbXDVUn!F4EDh|%m%SO)v~qgK9Q2CN3mIt^{8cXY=Ht+0mqjipFCW^C z2rak)-_{DN`N)h;xC%;{9N)fgyM6eBEd$z2`H%#7*^L$L&H^tF+vQ=|>-QhO8VW>dM<|@d82w|?C%V!!`2n9CSzkQM&3B&Plq zd6NI00ROL#Yh-O_Y-M6$Xy#~W^PeR6FJHHN*+%+^0RdpISLxxK?GoA(Pc1>!P!PUd z^^0QNWFu6TnJ{T*=i`#T$6#~2Dxc;%ecbuP5G!%<(XV;@Cy+db&CIKiak5WJWh0f- ztF8CvKFJg%Sal#jB)i&Q!`0XI13Vhy9=oEckOr+jxseLwHOeUwbtzEntZyU-$cI)) z=OdAu5WN7ThaV5$VYj;fgSD}IVm)N}+3IM9rMQKr6TK%mp82(dtS6Nra@%NOqCb?h zL{<6;8cVW@^Spy`gU(hlAR@hckT0~CwGCNs3E{vQL;jAgnSxen&T)m~GyvkegfWGc z;R#HdmcELi((G>YPlg0m`a3r89Gjk*lflZ>AExyZ%hyn`;f)GL20?h*O6+f@vth@& zKj+QwQx3(>XSqMV-leIpYLwH&Q)Wzh+)vIivR#dQo!l*_a9`A?V8;i?so|Pw3gIIl zmhDc(JI1?M2lts2>omoYkTnZR>E$sGLSr+Gn_HXPV@N*AU2kNd6fkt!%i`v4>2Zmz zLTVc&l+re+bQYG-){HrOubkvo*|wz=``zMiSN#9;B+qTXjcWQwF77{~N&iohjqPmz zSePlBI{$y3(|@sS8rN?*$N&?nKYZ3hfm;}jSlZfOWAzCzqKKQM!IrvOZKt0jH5mI5 z(j)(C|0Z48u9T9#K2USnkMPMO3WqjRI-BOkuz(|PJ1v7|OJV?bcqdzFK(LS!bGAJ03Xe9kDMV+soCCRmN+U z)4)y-&>`Wq;M^N;z3$20MR?cPoa+`Bd_L>>S(ZHZ>*=kt=8{!=P5 z#}_o!R}YK&3%4EmE;At$H{jXTEZXn}<5Y&SuazX{GI`Mwx zT7T~So2b*LWJ4!&4kg3g3t-465+(?*8zw3s_OHrC0w*Bq(42$MqK;OIbm1UcfS@Lh&_Mz$8d^~~gvrk(jI{mmfA+vKW0M^xo&YM0p?6K?mU!|(UXc|Qvu{KN! znp}DedN9r^T_T3qEv>fmy$_MJYPm)~`IJA^*P=qD2Bnf_Ecej^ONkay<*>!a4< zEGAJulw&}0rlyIEf48RbgyD%TU{xm%k7q;LVrzpHxu6i&uu{6M=6kJNJ{48DMPfWF zS^PlnL`UTAQJ=Hs?3+=f-wGtTx=F6`%!>B4{koXFU%LYauKB2X8t5QXTqPOI!L?C> zdS&*HyvXR^UG>ZcYvgkgp?k9x?_%Zck+0Bzi5z2((O-TByNIE%s)0h*jKNF6zOBDB z)#=$J~uHFJX= zF7U=mzc`7`-u$w(S0AC4a6S2WdO^4Ui8G^2lHu9U!HI&lHc5~=fa-s9C4FshXG&vC zK;0i`<8jrI7FLqShzMYlq{B-u!(oqLsWhSG<=X;KLsouK&?j>!5s|zY)i!w7h%EiM zA8 zrlIEP7cmxVT%~ftb4}G!Eg6^lc1%TsHO_1k@k@nbVOXSK5JM4#Ad~EGbDpK>D;Y{G z?V;U&iicJS=buFfX;!ksLY_^TIn8|UB!_$IG8wsTR2{v~<>MOd+dRq&>)|LQogvfV@#hlZ&mF#)R0 z=-jw-fz)#}VB?0e^{Ky~@qh+X@W+OUMZjDi_d)`d!)|nqB97^yzxKBpyFviChh?6s z2xn3dq)ic&8JM#vrzIPwty%`YihqF~yQw`gi_d2yV9Zk7$Kkw{N=*?}pXkG&xm&ym zv1g5yOqXl`62uLb>|wLkg_1y<68QO?<5T%`$WaYEf3$434szCZvaQ4<|N3^uDk4C^ zQXMIPMFDz}k)7Yoz@Yz$(2BN|c^#7GzM)*H)KGf`W!6x9)shXWl|8uWsbTxP;j5vc zf_nX6vt|XK!n1?89W3Fhg(=|P`DFap} z*7Gwuk6)2bh)Wl3zKHJ|-D{Q=bPGPkl!*10cnUy3n zEb?FucS-qyaGk}`FM&U2+e5R%)sHQ@$X1_*vAQ%2b;2Wg*o{Q=2g6#&`*-1my$swM zW0=CiU!|SLbl?d83oFvOh|TFe!#JFfzJ;7`J0nsu6i5HT_+H_8Z`gUmo36tRH5r2S zPK7j{J7B`sUycu(;rS4jl+cZI^%B=m_n3o=@%x4vtnQDSx_(X#W6uT;KqQ|nR!oal zfCT(9abD>u%pHAT-l#iKqiX7e)FO9amzLt1T1=YQTYsxLt0D)h|BeMnTU`|kuoIVTapeKv=zm$XXuJe&$d2Sjg#`JSF| zc-@U0EjJ~I-U!0-?Bs}Hb;49U(7bBLaDjbJGqM9|VOV~3g2qya%OU|z;x0Tc87tS8 z%hkzZs~xyIyuch?dVbul$(+iNJQMI}ff(M8ZB}i7;(fxF+b0>~)V*iH+V*mXR522# zZtfUwNeg;TS1&GVbBYUw!Ux4=WFm7bXB!y^-pUo8$2NRGNEuV!`VO@U95c;g*37Hp zT9oQg^%QjMF>@e5>`q#ZijeYWB;l(Nvo`-#$X5F!stVFc11+IcSA3LNzk)bn9w*x<%H(KI$O_;C+Hq?>AyNUc z>|~igXP~kjvZ-gfl3oYc#$;BiDo@=>X+y%)*poQ1zW!d^;9m$%%)OqE>ktiYIC%AH z7=6IA2cU~B0EKvRk6VR=F#y9TRieI+Xf=8fa}a+@bYON=tWX$<0}0s0Fx5gfYwoqG z)oigIQ-i+G*ztO&wia)B>4_y_X zXUfU2r1-;>IxrV;FEkV?FYdkODrgrCt&OO8E;9P_kj%;r9~#wEAvsaGHf86q{@Mgm zm8r@P3OM(90^r^bP2r%;pnyw^Km&j5_oc&T3FPSnNygVreg_JKc;-b^$vxR2SPqbc zyFDu`QpLkl-pWFY^@ueplBu(BN5@hqw(fc(uT&#cvFzz0`Vft0fgK}!`$u*d?AV{q zFPSq$VK#+jFfbi$7|jElLDmA&&8I+=H0ZnRH6LxP{YKQIAG6V6e!~WS{w*Yf{|c`E z-hV&NEB^Xl?#{Vc0Xqfazs5-Rf4MvVyXC*;(X~62aJ>DbhR|(TYsa2E2wejYcn`0VSp2o7?1bc1LB+1l>c4MC43dr6Sj&h4k$(rTMv|}bPmYR zgzjvF{7Q0hpjmE)l1HnPgvf52Axa&%g38ZmD+F!cppoM0gqqYE^C3mJCIP?7|m zhUp6x2yM$BT%N~m`SDVubpG^lL{a1c=ygI26o92Y_#!;DYQlM)?9p}LcUjsHtvTX- z0`YjCoX6=8{|8j?SJ)H)pA{l zbS-PkPZQ(K0Cv5~v=C(jBfW>y=h}8bJY>`3PAXAJKy$hBwipb^u`PGmsLyk5#hw+I zu>#dAB?r%#?7z>Z z(BPEHH4V?GvB31Atyze=+|F@LpAGWmE_4{e8l>oUkx!8L1H(bB`a7N-OFQ3Sl!`Cu zU6*Qt{aoa2=pf@`&v;h_j2Qr#cONBEjXT634P|&z!1@=VD$R4ricAsQM~fCV39rQ+G=S}= z0=egk>cmr-Ds#SAUap76_=e+D+}LcPm2 zL}LMHUfLE_?C3GWDI~nxHztL1bM$j_h*gBDmhy}|vqfTwpj!L?rXexbB zJ9e0lcSH{2Zx;+MdY}Lz=ddT})S|+T&N=3rno!e*PUIAt!5?SU_i#~}B+hN{Y83DJR1=N*p)9vDiwW*ca;AyG zF<;mp&mX)!v%A#@jm(Z9;dPN(O6Do`L-#IikJeK-q@kM8!r91MotsDB&*o4AIKDA# zQlcGoh62c}q`ga-*9YM7HJwXkbYUvdmJSYD|1> zOt-s#iG9<+<%B@BpS-EF8b*lUj7tk-yHyN8Ao(SH;xL3s4TKuEyvU7FwQcD&E53Z6F7OI)C&-Uv z6~jf|e$qu=#7ycYB13>9?fIX9h#Go43uXM%rgWp)0Xf{OQjYTV zJi0)G{GU>eec+tYn2D%(c=?;kz;`ME*?Yl?*aJ>=s?=01Sj2N4z^V{ws>ivJPeS`d zfxkFe*7bNbEwB`C!6oCo_La**3&_mNM!cP0@y4SWCTUFJpxf}>f@i?_B?qu&VUrfw}uJk`CfLD`3r;!!piWUSY4f?ttGSvm@r^m*Q15?2o&YVIfC zjm22OH?ylRI}MLEw32D^eVR#M>weIBgn9UtZ-Z5(BWuI|(RDESey*Lz{Qer1&g?l7P%l+gq>&%h4S&q>9P$8uvu0ggS}l|pC>^~AnptGmt^Nz|8!`USrCxyH4d|-h~?*t+8_fj zsk+J`%Gw66wgT=o^5G>88KZpyO6g8(bV^LVtZs+ZEUQ2`0SuF(o{me2GuneJm6|72 zyzEl=m|xn8zaHMZ;~g6AItFW6p;UMdN$~S<`JeEX`kgRB?9FPuzdFn`49SdV{rbd} zK&PwYQ=@asyNuvaIpd)dv%_Dy(N&nJhy)|i=-mAqunD1?VLI5$SXwwmPC+V)>Z7In z-6p_)5_xei1C~*1GKc*@g$t_wupkT^0L-@1k#7EAy%rl0T-p z5ED*A7HaW1cNO}DP(3Nnd6xj~-k|08OnP*2cN{U6aS%>a?l_!wiq#$0VzrXeBk1`l z^~^_#&XAcO_1jgF?{{EvJCnGI7-jKrjZ#0{FZOWHtsCUW$K&;rPAW1S^@MsVQCSwT<_qNUIB?+TbC#y5uHcdJ}Ug z2uth}%qRKrp0zsVGV$@L_WiK{O|-Y~C_J#ls%DV(^!St;3PnHZquYUi>=CZ##(;$( zT)B%K=XtWm(1d2E6q$__w-t>85Jcr8JiDG!V$%Ap=oY#RTKa7)D9bb^c0(lc0xBc`Io`gO>giKWun3?h%N;d?JT% zpRD$xuv)t2pisutZyeq&3Hfz5Xy=y&&<#x)6o@WxPY2~3hF5Y>2lK|Z^HA7$6qTSY zGJ*gPA3HP|*ZaBo`;pcAxrqPsJi7ZE=BW1xw!oHf|AI*RFL2A$eIF$x|s*CnT2qcb!3sx=>Nk@-6+^ z(0(uK^%TY@%IQ|TKhfLTao;1_o(~cFlf175cV(h(%=U19ox~`8 z^YNgUanw>6cd+96HEOc%F9e=gKJ04Hh&rAEbiN%GP32U*G_{k9(lyekP{pihPBHe? z_mMDpH486A(`l?y>+92ja0TSw^~ecFah=Qgmq$m#rGIxb9scB%wmH+)XcwZj)H14D zEs~?dGy-dPTdi1&e4*Wz$B2T&wkuBR`ksWLCv_-(s1P&Zy^7lDKt*j}ug>hYT+1vV zw?-Xs7K#{;Q$&>Pvp}`f#IUDal6sraQhcshoS>Z_*GxfAXdF{1skz*Y!Ak=#2IJZU zi~ABU(qw(kFBe&tub>upDV=M~P~85Jr=sW75{|$$OL#sA*`YL2U(N7@CyGIb{Lm*G(jHuN9bpM8bmUw?L0RcM0Zp+3<~S@Ava42l z+^rRuG|Mu$JZg`cwkRVRm_+arf)S(C#P>^MNHrsftzqSYlQ{}pal8tuIhNDQB zdkt#Uk#6Dk%;CLti&4TpkMQ>(LmV5It&Opf8#y7!7j0-h3hWN^rzc?Sgx|@B^lAQY zWMj)!1#j;ZUDYpz>+|fSt<4vzDbr>D!fw}Kzm;+gZDysQZpPR5FQ%2IO}kHWy+Dh& zy_a(thF!~LPy<{ze9pp8bwJgC`th14mhaa#clOLPL0JRYvFpRFC0S9^!G zjvi=%Yf(CGsxym1DOFu|U{(uF#X?0_jcR>f`HD~Gu%%e;KtyPD_L$NNq`YzYA317` zi`K`>{nLN%F!UN&O~#V#hrBVxne`b47E4@9a565E1xyZ%19>A~Z4vJkRL%Lbir7AA z)L{pL4uBmf#g5@)(H9js+A9pUl*2(zq9AF3jp>BRkXHr<-N6mU0McDcbug4J^bIS{ zq675g$!cFID)e5_^Ih@QRbtvII=Bce442k~I3qNUPh-#2bnFnN)w=wRYxZv}`V?SY z6J;Z(43><)R5^01;`GhHlUSvCZuytR_q7wa7nK~X!uZ8VD!PjZA2tu! z-@ku^ma;|^T#`goUL1yNKTgDv+!dz$1P6uSVh-Ht)Z58>pT*WTo)>?VzO(}#$P8{? z1Mm^;F50d1zg9}c)lqf2N4axaKyX00S*siwe4N|VW8Kr_$H(ouWP2p=9Dkh}$I*Xb z|L4l>!LwUj;NOjcxv>AWd;0&EZ4Cd}r%v-)*&T`{?!Kx+4D8i)riWd7n1H3Z6HdNF zzmRAn9A^llK^Mxlkkm-FERe9O`F^XavQsJ=@t;}0Jdob6seYH$xT&)HeQhddKC$VX z)Q|aIHpCUJOq>l(ixqQ;lrkt3Lfb z;_u49GrHqVxa;<1f3tts0aLEGgc(z$|CLxJI@AOdo@upun?_F+WiYyBlJh88{ajr{ z?#|w}UHTPEczgJ4t*ASVw) z5ESN3m-xd;4Q=S}-wQ%0?G8%S;M#Zj79lR!zgm~ON={yStx!lqXOv38@mPiY;!I6U z_j!7|3Fr%VNQ7 zmngnzq|qVAVJV0L5Wm0y9OMF?s_+{nP9`dvG(}HF1Vr}Pa)23T^Soj&z=+dp#nlAQ z(AN?a0U-)GHk9t57RiKf3aU>9Yq(An?v&kdbZVbmgNeaKPvRnxx$&v=bBJw9Kdtsu zU5eUm0*bx;(_c-YfE!*KZmJNLztuja!8EZ#dN;!#nby6)u;G&Z*9Le-rQ$rocfT$e z05<+3@4D`gBL=$YRAs1*8=ASU)Q6*S919u^_iBoRVt_5pDxnp2SFs<^y_4)Sjn<;Q zMlmEf2J(|7` zrF?gv4~A|4&tJ2+Sy`ictPQ6bpb&0pGc)RvqrN^Gjajr!>IF)NKCRwD-P0bYL+{wC zuSuvdBMCc|fKYFE{lFCdr%@iUmC)h{9ROs#wb@rfE&bVPj>$llitba0=PYxFgHq5Ttg2y|5FPy z8B#uE3l1t$ak8165BGxk{+ZI@X%)%9j73BEZ5{d@4CB*6S7#(Eik1!pt`2~X5PSm| z7v~FL$pwZSHGmsTYz_L_vOategSapesDd(yrrT3%Quqpg7oqgqOs619Bsh*4FXitG zA#A43BSj<+QwJ+hv=L4e>G;b9WTAo_T^Q*>+YvO_KB;0bu(Hk_>ZU+AKz~euDmNAm zNVZ|LBiP0%7>gp1EeFzH8XdZOvv4r;9>o?Q8&#cT2cVs%oh(S`KV5Pl)C3qcC5`9e z&DEVSUpHL`>A0ZF^BCk@dyJDjg)l7W2p&Nr+>0M;e@v;*{|@4BgN4LfTW~H$Io9_P zz@vm>o>6Jn(;Ur%LgUv8#!nLt*m zOftR$1j8x%z!LDb*S8i6KD-Re3c*+{C|q%@Yie3CER}N#D;$nDe5sS^Bm`Dyxl=uy zxB(Q~)+QI}9WR;&FUg0_5ozl8C(1&w0v4})ido|*{xV|RXFAr0_)q!|6Je;~`<*k|gdpc9a? zFy3Q$?~a@>#d#dBRf{JDp&0>2oU2vG?_df`O-^6EQ)vPj@^r#PiF&v}PUebvvL|uz zx?iUs@52&>8vNv~oi8F|{LO5cok_Hr%V(e+PoK7+Tq(C9>mrULQVDVLWa`yQZ>ugx<~4*1!b9x*AqXd z7=dkj_n_xEcLhG)Nc2Bag&}tM57l*5@W;Dy*|Jy zYLFrr!xeAh)WAjaGrS$ns{#eg98$!EG{}ZmU=&$$SEACo*q-x2S0Dq@b>!;GpmLvf zi-YfIv=i4S7}1(0p=-26qsQ|0;2%qYj-tCVzGX3tBU=Ffn1)hP;(JeD^Po%e3WX)& z*)%rr=o{-2xaOtS%oPy202_1JBYZL7pA+(7CR+>`xm=ZFLk>xdnMN#mNq#UFMT{Hd4nsbq1QZ?BVtuP2$pp-kJea$DEuKT zt{fqHRXAkDYj<-1dU_TvGKi7d>yh3vWGUMVvhSi~Mx!O?kO|>TV8VOg2?Ky(jHEqz zW1&v3?+HXiQevbCq&{64&%>_sns-Tu)l3A?Ixzx+g;HFE=;{u)sytMKQn4OzH$pn4 zq#j5~g8C~UgkqjYt^DUWkT;t5@-zylCNvC z2zDS*3@d~_1&CG7>WLurOcy;j&1;Z88U4z_^4`4H%eH#8VCzH6qdny z0mJoc85otKaQ)?J-UC4f6GOnr5P{lwv1AnHr8__bKMVtY!(W_Pw|G(JogP4-Ow zg;wHD;|WSZUqINPv^$4#(B)Li?9HH~dUMKcx>tm!$@)Z=d~U%f8B2w0A_nlCj-r`` zS56_O1iE6IVJ-1jA9TQfNKe6Ik1T^C$VFUo`1kHhS=ay2)CW{4^Nm2OezG2M%ncD{ zE-12rc5(us{TBq}T)Dr7U5*=-l=J^|cGgi* zwe1=QX^;>p>F!jzTY9LWLs~+H?ruat8l)wpySqE2r9q^nQ$RT5_kOSFynf$0=geBq zA2Vz1-(36NG0%NJ`@SY)16O0=4BV_d^unYTWv_q!wUH{pXJMUn5=5lur@(5i$&UD1 zr7qp=%N5P-%MN4MwG$y1z%xeDhLAA21Tp$Vyq!(HvKJDM+O`pJR}dQ=mhlT-@s*Ve z^X(#hco80s$icYo?g8ICIcbY7eM^O-u$Yk;n(7{|DOKdp`=VFFY$Oa?4Ogsq(;&F)dPO29(-nrdWbsiL5o_j4M`ef+0=pM@x?l>V+8XfPn#&>%QdEOlEbT%%fw{~k%wrr9t zeeaG{?Y3wQ&i)F+YivR?NzZicb=OOG|VHCVi zFTkYn?kQJ%0N-Z^13iH-l56@Em~Y~h4Xn#j%G~aTZV6LoJOn)o3VX(ZJ}#)Hc%qzN zt&t76E;!lt`B~qQ6I?RtZ|V~^tnA>zy`p=$aYOI9qLf_`b^I>tu8(QtiIa}S#6hSM z41j}X<>;Vi8o z3RmW-O+p*{(BZV#;2F^WLXcQzg$RRPtQko%Ne` z^87PZg%)ArzPZ~@%i3ZN-XwSoi+ndRcz8V3V>k>{_Rq%%w4iAHH0@o+-pYxDW#(@j zx`$tz*^p)h;wY)DSI_Mal{VLrCCC^kB{6nfQ)NrsVI`=+L#fre+`4|(&QU{tTV4%a z@>c3mNVMN{p1^U@YRe1UREN$fX(XFRMLzb-6WpD3nrJ+NL@KMKG!Fz=Pzfg_;iaEyytG6Pnil> zzU-vlSms+L6#{Ti{t@c@DQ`)Rx#G8pB7#i+5Vcq&blgFQ8ecU`U}B~r^1ylo?K-Pb0drL zL>W1YLu%t(v9D>BVYhL-iQoFzMPd=UNEtVbRBy}!C=s-2Try(5DPfztHdrT|%=fWG z#g1p~~kiABgYDL{80D74!*j!N}wZeJzj8F~vJr6R;u~6E&T`*p- ztizNwzshZQV7(zhZ`<9iM~G!GJw?Xb6s624H9Cadtzcd9KJfK@@Mx#J2-hf$3i_^4 zU9~NDBsI|*hUK$~X7kqofQ2o1b(Wd{Fo}|1m060I`2dpBmx)h!*B|TV zi)0$*Ys0NRi zvliMD7B*U*CnYsmGBl5?cl7~@!=H%j4_nF<^voS+_&Qh`+Wjr}eKT||(fcTZ=N@nN z6`!mqCH`&S(=TP4s9IG`oQ#wmgA#UtD z>%_cf!AMCVn&e6Uw(wQ+8LQyHSX!D(&(0T^l9_OqW=De-w(Hqm|ERe&r-q^&)CRW{ zpW7uIQ?1~{lO~OcEc@G#(++a;CvQY~Kg&y0pdNZMIB2*gxcXaKS^GWPVK0=?(hb(6 zDcbQ!f0lI|u`=oFY-Tck{5Hx~nNf)!CdwLD0H)N<$`GqvXwv25nJ233Sx7PaNnZxe20X){Yu@=F1oD#)QaKqz1@aj}M7vXe2#;Dnx znb&3z2Ic{2OoGBMj8YE^fx^{^%VT5>^Fzce}4Q>}5_7TBvC}GZYr1@-?HjFGGk363ad)vFAQ7zuE)=hJB`BKE*mzMAoAh=+m#fLT}`JOIw}L zg(bHpwsg2W84h%WMz4^=nxfb_ca3;ej@#bt*YY%Jj_&4O*g|Q#&1Xy%OK~MvT^;{%$}GqXvD+H;$Fz zik_Ep`1P|yQgqKR@n7CPTH@UIrTL2QgucMJlWDY%??eLrM1*qvqhQcwzl!_5I}e(_ z!xn})F4BR?_Oe#4*fXC0e@8?TocHmS@xz_qEe+AiY#>~zishf(k;O>u0D7KQsVyDr zRTI5B6b2Y7X=`546{4p&bT|oJnu(_#sankd;N5xSDGkh4&JHIxbGfBbfL*Ub5?Mg)^GK z*4x=@bkiakHr)j2_xK2e(uh{K2?d!Ppr(N}yRL|3l#0Wy^5YA+8FpX`g91n|FTbiG z^#KNo4+lJ>ZuNzzXxY4@$f&bRmg+Ka-hKHaO68(i*;*Z8{8i=4=1$AA;A{S-@CdZv z819hl_he^0cnz3e=6&&?YhJ@tK0{q=TDp^m`$i!W*QO};hfJ9zfONr2@A zj^oJ(r5?0qVxfw5${AanT7JVt_+kMHz$edy9+dUA&6+hr9@Y_?;?*^6)RRH>MnsXsRL!*5eY3vsx|5Xc9!uD!2;u%ZpoX z8feR^Re8|yNH|G}ayuBPZIJpLWGsQjiGn+XadIQs2e2`NcV}>cdovX~=K6(DJ*hr< z*W+cnefEXb>mW{-x*-G?CS#Na*Dm^l_ksqqsP>FqM)he~jQQCC73wfHwx=rJKd_AI zwRnEpU*DZ6W$IiQz8FI~+dLD$Z4!uPg*cn9WpUtAbYDyvTB(QSM}!drr#Hf$`!=BY{tvFC~X&J>ks7QWh!0bP%K-uVkP=E%Z@5X=LyiLP)I9t zu>3Zyo(%85og|yimBNZev5ukZnxl?>jJmJg`=KN<&p&7WVer+-Vcv{)dRTAu@ILVS zw`R#;htd)Ms>ri9vI8=>gu|Bj-dPqX)B9`k7~=??C2gLuIuf^%8bn4z-E+2^9z9}Y z6p`*IP<~U1x8Dd(9_$_%2N~LD!(Na@z0c!Cb?)FQfU9xqtMMj&!aNQ|oA;(;(u0Ll ze1NaVaxa?5yk?li zYdMCgw?rXVny%j2i*me@*z-@C|bfaYa*(`htiY3?GeE+>9< z#O-=`whR-+!{=ygf>qC0I5UOoU>n$<~YGf0;j zp9dL`0k#2ty7E1GGVo1B_#;i@JIQL`1(gUuM9Q%`O%NbwPh`|Z^dn6v;34|x1J6gs#QN;=+J5uQ%uQByV^qr99?}len*cj@FJwMpR86-=~3^YbA`P= zbFTohfg4%i`{pu(jgIC1p{WT@U$nvZP`N|QuCA@Cg$e?9e1+T}u9}FusE1ELX%mMZ-C{0o*|}eCd04uDF65y)wZA|JR1EpNnpPcequSm-Y=S z(aJK>j|`1g0-sJkQ&g53mK_1~56RX7>6xS_sue40*D7pBMr8-(&=r`DhGYk8*OV27 zLug?sapEqiHgf0aw{guj;x~*pOm=BHjZsg1aA@hcsS}Ljp@Fejak=!fBB${gx};HsoZhN&UCFGGp7w1~k?d7I!CWRhP6gZnLQUYZ*jSV@CD7wt?9jQ-VVA091Y z-2pb#yGS8FZh>>s4IrHi;tUgoU4@Dl@QpI$BZ^d-o0thz%@;*7H0k%c^}1SfSWKd> zf8griL=``Z66FI_$Py?OU%A?rD5})FQmAOoh?X~ak{6F$p&6ZRQV|2MW{5k~&ckfA z8`9i|v)x1pbME^gL|IwK=rU-e-DllvKJ448p$`)u2{Yhdr?DQX!KKLtj{!-JtW2J@ z$9*Zu69M@H2?-LFgG+r*p*DO^EFDN-1hZKfpANu#zsTsxMDELoM|nz%2J4)sQY~bS7TM<6TkD_tlI4K> z@$>3#`27)Q059>*YQJ~Vps(zvk^UL(?+dW`XKKn@;E?iw!%O&UXkUShO{~PtjU2!h zV+MAvKUQJo-?l3Ruwn!qTw@I{$fBsy!hf2lCYF2CVD^k@Pc;5Prmo}iQbXR+)Bc1Z zkCV;Pi*#$s1JkokevY@)gds_%3#j1b{Iy+QnNPKiS4VAkpd4Xdqob!mG?QlhN$@w^ z4#M%Mk-IAdTVfjfPfi-R&>jb8-X+dd0#3gsR;GBSmu7v&~4TZ{HG2+9WSVI;{$s`ltcXpBn5 z;ArI-I+VqD??*U@DW>OS(y9f(3qKMX=Rw0M_4L;)z^_L+|MjDDk%h&r%Tf41)+~UZFFA)tjird ze%QGEL!TVT%-l%C+Q7=y&BX5i9=M}^z^I(lknB)?kqi^^Kcm+{UTU0>Zk9y?HCYr1 zm3GJV1L^0L>eJtsxpDUq4sEM?xd=CJt zcmW>2-QE5^mMU^$V*htBNawarf6{`;FuT4vyM+K1w?k0~d0x?LGEC@!b-V=+7V!AT zaZ@)jR51d3W7_LWf*h^EewqKT^BxHxkE}4lBE=NpJjgOEE6oT^kN(fFbrj3}`xJW_ zD=1hA5jNj9rMm90;I16>zr6B(O0{<|a4<2o0y+P<68F@#LA&A@Kf0EmkX4W86Y)7Q zr%XOKe^=nUpvs4!7)ai`#O}WHX>7mYm9P{dvFi#6=}`{}Ur2g;QEJ$lEH`fmZa_}g zx!XqaY!b-KY#yYiCg|1?8^u}|t6EP_Mp&2m+%H&`?sHgJ?rBd^71O>=(_yDsrJthv zdYvrh3-Kn|eCALxyp)Wn%8mp~?I!sZ%1TY_ggFa_m|{g|X^+Uyq^^O``yUa8j3|K# zie-Tz56o$z{mxnK=`>I9Ztz)B`ZoK>3;Sr=DJqz)-?w3tL=j~TxHtM_QpTSj?2l)L zE=oqxt%ex4+^zQtd0%cvE_=J*?T!wV8KLv4zcd5)VT`*|`{D`$L?tm<4jkphB#WtP z9kBCb*4pIu8im2?wOvtI|x z@kTn}7_>1RGs!)l8pzS8>S5QLiZ+)oJ$}+BH43L9enYUXEG-Jk&DtNT;BzX~sR&@C z(n`uEB6|c6JCMt>>#4&|+T3_tCX#??=ZTZ5F8CexHIY}FNDjH=lSf&lfJ}qP!?$QD z@_4pLj-J76iHdm8*Oc~K!V&r-r|LVd>w3ilQ|f&f-r*Llm~= z6nL>ZTqM-6w|KUO1DrVXWO56SkV^9*OrCrM_3`Az1B~m?P4a-KV212TBVmc+u5TJe9!~82d740W(SZGv>8XiqB=)d1uy0WjB{0*c2de@8L

8YtS_`Hgz{bNl^<-`YtN>U ztl?q`7e21*H&8A%0mNu4^%s$#MUmJ_@(BV6KYvtnI$wQTn5|In4gLEx!rndoc?%5K zLI-T^iTCTB)!E$I802jK_msO>O*iH}H13JGyN-y@ z+u|+L;liHQRJvqpX1htKFikIHJ@eDCqudkuj<*o-YRh-_?RT3IozH{vs-F=q2#5t`Vy01P$Bf9Vr!xhV(5i1 zXBB93OC34)d;CYzP!@FRad!C>iN~2I;0HB@f>$fVbkfRD1nCQ>496F(dIopx+N1Rt zl94M^jmd$P4`DQyDVGo#yA`nq%PiEeHS^rM2mEDW+*r;zG3aip_(7t`AW2?tQw@{d zP5B(^1`!6Gk`Cc7?E1Enw%w^wCD?i*0uBf=q4at_;lvUf9VMXd64 z3!e6{%FRDGsab0`_rSioL|A}X5_U$U?7kCrh932S*-~hOQ9PGwB<~3|Pc}>&vPGYx zlk2U6aU!|$!QMJsbsd^n-}lNERfl%|P#Sh^xoY;-E25TwVzmpiN8kC*na3i%sCm(vcJ5#pzlBGN%`Lk-*@Qiwfr7fY=>mv`YITV|X z%bC^N!n)Cu*5S=vYb%l)1)?LU&as1~P39us>P-&(*#ci$@_9KS{802U?o8q$wWjVc z>J9+ynWtvOY&86Jsp>kq1FucJOmdNCiyD! zx92LGfgV`BPEo89lT-!T1;_h3;~cnggaw((Q%XQXm)yeXA^$_^8aUNDSn|>Gv2xj$bf8ckEw}szX8`i*5IiN^lDLbBBIH{+SaI4oECy zMdBWd1N;N_Kh!56sgRX~dur96s1S7pNE&1%;GQO`_6Lo>*99P9kg5DVY~)X{|DM=G z!XcCId$_CmFG_z)#UUAxGva#&t6DULQ9iH&Tk9YqA-4=5` literal 0 HcmV?d00001 diff --git a/Book331.slx.r2016a b/Book331.slx.r2016a new file mode 100644 index 0000000000000000000000000000000000000000..1aaa777735b22c4458cc6703a72d3ff5453bf881 GIT binary patch literal 18439 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 U0p6@^APu}gxB-|_9bG^?0LO(niU0rr literal 0 HcmV?d00001 diff --git a/Book331_Controller.m b/Book331_Controller.m new file mode 100644 index 0000000..d982d63 --- /dev/null +++ b/Book331_Controller.m @@ -0,0 +1,84 @@ +function [sys,x0,str,ts] = Book331_Controller(t,x,u,flag) +switch flag + case 0 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 + sys=mdlDerivatives(t,x,u); + case {2,4,9} + sys=[]; + case 3 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 0; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 1; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = []; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 +global W_past W_new V_new V_past c b ut_new ut_past +% 神经网络采用1-6-1结构 +W_new = [0.5; 0.5; 0.5; 0.5; 0.5; 0.5]; %6*1矩阵 +W_past = W_new; +V_new = [0.5; 0.5; 0.5; 0.5; 0.5; 0.5]; %6*1矩阵 +V_past = V_new; +c = [0.5 0.5 0.5 0.5 0.5 0.5]; +b = [5;5;5;5;5;5]; +ut_new = 0; +ut_past = ut_new; + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +global W_past W_new V_new V_past c b ut_new ut_past +% 神经网络采用1-6-1结构 +xitew = 0.15; %学习速率1 +xitev = 0.5; %学习速率2 +alfa = 0.05; %动量因子 +IN = 1; +Mid = 6; +Out = 1; +yd = u(1); +yk = u(2); + +some = [u(1); u(2)]; +h = zeros(1,6); %1*6矩阵 +for i =1:Mid + h(i) = exp(-(norm(yk - c(:,i))^2) / (2*b(i)^2)); +end +ut1 = h * W_new; +ut2 = h * V_new; + +ut_new = -(ut1/ut2) + (yd/ut2); +sys(1) = ut_new; + +% 权值的修正 +deltaw = zeros(6,1); +for i = 1:6 + deltaw(i) = xitew * (yk - yd) * h(i); +end +W_new = W_new + deltaw + alfa*(W_new - W_past); + +deltav = zeros(6,1); +for i = 1:6 + deltav(i) = xitev * (yk - yd) * h(i) * ut_new; +end +V_new = V_new + deltav + alfa*(V_new - V_past); + +W_past = W_new; +V_past = V_new; +ut_past = ut_new; + + + + + + diff --git a/Book4131.slx b/Book4131.slx new file mode 100644 index 0000000000000000000000000000000000000000..526c665bf6e633ff5321015a7c9a0ebffef3a403 GIT binary patch literal 25303 zcmaI7Q;?{^)+E}tZQIsv+qP}nwr$(C-Mekuwte@R8~4VXe+HaX;*#YL{z z=4nQisLiwgGN9j83XC|#Ny-^TQ5+}wWoq( z5#On>V68~2OmEgTnw(cZtqbLzVr9!Sl|80}Ps;tN%Zz`UK1!o3WE?0WsmymmK6Z$+~+p zAKDgqtfJv@MwLR5EyGM&^bkWw9S?Thq;+~(4M0m`w@m-njdi+`3@L14d=Ti9p1K$> z1#k}w2j*t-<@YEEoNA)VXefopJjW>^$R&BbgBA5SJ*-mK?H;++Xif|QSrK~MJ>7r4CCQVrLktKaexwh* z4oC<x6yXCM+M5GQF z2>>EwPGphE-n6=6aU=|A!f-7p>4~^lNYdno@YMsIm`Y40KxRbJl9E=-%q3*h2|EXLV2|9SQI6ATK8kaQ#DwP4x4qO$!VA9Dm5e=)NE_fvMOP)ySqu%0ACYB8%`; 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 literal 0 HcmV?d00001 diff --git a/Book4131_Controller.m b/Book4131_Controller.m new file mode 100644 index 0000000..0491391 --- /dev/null +++ b/Book4131_Controller.m @@ -0,0 +1,83 @@ +function [sys,x0,str,ts] = Book4131_Controller(t,x,u,flag) +switch flag + case 0 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 + sys=mdlDerivatives(t,x,u); + case {2,4,9} + sys=[]; + case 3 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 0; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = []; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 +global W +% 神经网络采用2-5-1结构 IN = 2 MID = 5 OUT = 1 +% 初始权值 +W = [0 ; 0 ; 0 ; 0 ; 0]'; %MID * OUT矩阵 1*5 + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global W +% 神经网络采用2-5-1结构 +IN = 2; +Mid = 5; +Out = 1; + +Q = [500 0; 0 500]; +kd = 50; +kp = 30; +gama = 1200; %gama为正常数 +b = 0.2; % 高斯函数的基宽 维度MID * 1 1*1 +c = [-2 -1 0 1 2; + -2 -1 0 1 2]; % 高斯函数的中心点矢量 维度 IN * MID 2*5 + +e = u(1); +de = u(2); + +some = [u(1); u(2)]; +h = zeros(Mid , 1); %5*1矩阵 +for i =1:Mid + h(i) = exp(-(norm(some - c(:,i))^2) / (2*b^2)); +end +fx_refer = W * h; +gx = 133; +ddyd = -0.1 * sin(t); %跟踪信号的二阶导数 +K = [kp ;kd]; +E = [e ; de]; + +% 控制率ut +ut = 1/(gx)*(-fx_refer + ddyd + K' * E); + +sys(1) = ut; +sys(2) = fx_refer; + +% 自适应律的设计 +fai = [0 1; -kp -kd]; +P = lyap(fai', Q); %P为对称正定矩阵且满足Lyapunov方程 +B = [0; 1]; +dw = zeros(1, 5); +for i = 1:5 + dw(i) = -gama * E' * P * B * h(i); % 1*1 * 1*2 * 2*2 *2*1 * 1*1 +end +dt = 0.001; % 仿真步长 +W = W + dw * dt; + + + + + diff --git a/Book4131_Plant.m b/Book4131_Plant.m new file mode 100644 index 0000000..bf9a3e8 --- /dev/null +++ b/Book4131_Plant.m @@ -0,0 +1,48 @@ +function [sys,x0,str,ts] = Book4131_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 2; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 1; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [pi/60 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +ut = u(1); +th = x(1); +dth = x(2); + +some = -25 * dth + 133 * ut; + +sys(1) = x(2); +sys(2) = some; + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +sys(1) = x(1); %x1 +sys(2) = x(2); %x2 + + + + diff --git a/Book4132.slx b/Book4132.slx new file mode 100644 index 0000000000000000000000000000000000000000..bc109a0b0760730b72336e663cc988feaabd785f GIT binary patch literal 29846 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 Q7F-aM*BPG3{*QP64`@utC;$Ke literal 0 HcmV?d00001 diff --git a/Book4132.slx.r2016a b/Book4132.slx.r2016a new file mode 100644 index 0000000000000000000000000000000000000000..32de8a9526d068a0076b8c554fcb4f6ef1b76d2b GIT binary patch literal 22303 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 !a=TM8^yp2F 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 literal 0 HcmV?d00001 diff --git a/Book4132_Controller.m b/Book4132_Controller.m new file mode 100644 index 0000000..b83f9da --- /dev/null +++ b/Book4132_Controller.m @@ -0,0 +1,90 @@ +function [sys,x0,str,ts] = Book4132_Controller(t,x,u,flag) +switch flag + case 0 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 + sys=mdlDerivatives(t,x,u); + case {2,4,9} + sys=[]; + case 3 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 0; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = []; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 +global W +% 神经网络采用2-5-1结构 IN = 2 MID = 5 OUT = 1 +% 初始权值 +W = [0 ; 0 ; 0 ; 0 ; 0]'; %MID * OUT矩阵 1*5 + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global W +% 神经网络采用2-5-1结构 +IN = 2; +Mid = 5; +Out = 1; + +Q = [500 0; 0 500]; +kd = 50; +kp = 30; +gama = 1200; %gama为正常数 +b = 0.2; % 高斯函数的基宽 维度MID * 1 1*1 +c = [-2 -1 0 1 2; + -2 -1 0 1 2]; % 高斯函数的中心点矢量 维度 IN * MID 2*5 + +e = u(1); +de = u(2); + +some = [u(1); u(2)]; +h = zeros(Mid , 1); %5*1矩阵 +for i =1:Mid + h(i) = exp(-(norm(some - c(:,i))^2) / (2*b^2)); +end +fx_refer = W * h; +% 参数的定义 +th = sin(t); +mc = 1; %小车质量 +m = 0.1; %摆的质量 +l = 0.5; +g_up = cos(th)/(mc+m); +g_down = l *(4/3 - m*(cos(th)^2)/(mc+m)); +gx = g_up / g_down; +ddyd = -0.1 * sin(t); %跟踪信号的二阶导数 +K = [kp ;kd]; +E = [e ; de]; + +% 控制率ut +ut = 1/(gx)*(-fx_refer + ddyd + K' * E); + +sys(1) = ut; +sys(2) = fx_refer; + +% 自适应律的设计 +fai = [0 1; -kp -kd]; +P = lyap(fai', Q); %P为对称正定矩阵且满足Lyapunov方程 +B = [0; 1]; +dw = zeros(1, 5); +for i = 1:5 + dw(i) = -gama * E' * P * B * h(i); % 1*1 * 1*2 * 2*2 *2*1 * 1*1 +end +dt = 0.001; % 仿真步长 +W = W + dw * dt; + + + + + diff --git a/Book4132_Plant.m b/Book4132_Plant.m new file mode 100644 index 0000000..ea3f3bc --- /dev/null +++ b/Book4132_Plant.m @@ -0,0 +1,60 @@ +function [sys,x0,str,ts] = Book4132_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 2; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 1; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [pi/60 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +ut = u(1); +th = x(1); % 摆角 +dth = x(2); % 摆速 + +% 参数的定义 +g = 9.8; +mc = 1; %小车质量 +m = 0.1; %摆的质量 +l = 0.5; +f_up = g*sin(th) - m*l*dth^2*cos(th)*sin(th)/(mc+m); +f_down = l *(4/3 - m*(cos(th)^2)/(mc+m)); +f = f_up / f_down; +g_up = cos(th)/(mc+m); +g_down = l *(4/3 - m*(cos(th)^2)/(mc+m)); +g = g_up / g_down; + +some = f + g * ut; + +sys(1) = x(2); +sys(2) = some; + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +sys(1) = x(1); %x1 +sys(2) = x(2); %x2 + + + + diff --git a/Book423.slx b/Book423.slx new file mode 100644 index 0000000000000000000000000000000000000000..6639f7024856fdb168f86850425610f2a5a8f53e GIT binary patch literal 28907 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 K-E98&>AwJY!hX~M literal 0 HcmV?d00001 diff --git a/Book423_Controller.m b/Book423_Controller.m new file mode 100644 index 0000000..8b8e219 --- /dev/null +++ b/Book423_Controller.m @@ -0,0 +1,101 @@ +function [sys,x0,str,ts] = Book423_Controller(t,x,u,flag) +switch flag + case 0 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 + sys=mdlDerivatives(t,x,u); + case {2,4,9} + sys=[]; + case 3 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 0; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = []; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 +global W m_0 +% 神经网络采用2-5-1结构 IN = 2 MID = 5 OUT = 1 +% 初始权值 +W = [0 ; 0 ; 0 ; 0 ; 0]'; %MID * OUT矩阵 1*5 +m_0 = 120; + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global W m_0 +% 神经网络采用2-5-1结构 +b = 100; % 高斯函数的基宽 维度MID * 1 1*1 b的选择很重要 b越大 网路对输入的映射能力越大 +c = [-2 -1 0 1 2; + -2 -1 0 1 2]; % 高斯函数的中心点矢量 维度 IN * MID 2*5 +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +IN = 2; +Mid = 5; +Out = 1; + +Q = [500 0; 0 500]; +kd = 50; +kp = 30; +gama = 1200; %gama为正常数 +xite = 0.0001; +m = 100; + +e = u(1); +de = u(2); + +Input = [u(1); u(2)]; +h = zeros(Mid , 1); %5*1矩阵 +for i =1:Mid + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b^2)); +end +% fx的估计 +fx_refer = W * h; + +K = [kp ;kd]; +E = [e ; de]; +yd = sin(t); +dyd = cos(t); +ddyd = -sin(t); + +% 控制率ut +ut = 1/(m_0)*(-fx_refer + ddyd + K' * E); + +sys(1) = ut; +sys(2) = fx_refer; + +% 自适应律的设计 +fai = [0 1; -kp -kd]; +P = lyap(fai', Q); %P为对称正定矩阵且满足Lyapunov方程 +B = [0; 1]; +dw = zeros(1, 5); +for i = 1:5 + dw(i) = -gama * E' * P * B * h(i); % 1*1 * 1*2 * 2*2 *2*1 * 1*1 +end +dt = 0.001; % 仿真步长 +W = W + dw * dt; % W的自适应律 + +% m的估计律 +some = E' * P * B * ut; +if some > 0 + dm = 1/xite*some; +elseif some <= 0 && m_0 > m + dm = 1/xite*some; +else + dm = 1/xite; +end +m_0 = m_0 + dm * dt; % m的自适应律 + + + + + diff --git a/Book423_Plant.m b/Book423_Plant.m new file mode 100644 index 0000000..cc02bb9 --- /dev/null +++ b/Book423_Plant.m @@ -0,0 +1,47 @@ +function [sys,x0,str,ts] = Book423_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 2; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 1; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [0.5 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +ut = u(1); +th = x(1); % 摆角 +dth = x(2); % 摆速 +dt = 100 * sin(t); + +sys(1) = x(2); +sys(2) = -25 * dth - 10 * th + 133 * ut + dt; + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +sys(1) = x(1); %x1 +sys(2) = x(2); %x2 + + + + diff --git a/Book4341.slx b/Book4341.slx new file mode 100644 index 0000000000000000000000000000000000000000..63cf7fffcacce906481fe74631db23aeba8b48b4 GIT binary patch literal 25745 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 E0B)2HlmGw# literal 0 HcmV?d00001 diff --git a/Book4341_Controller.m b/Book4341_Controller.m new file mode 100644 index 0000000..6e2aef0 --- /dev/null +++ b/Book4341_Controller.m @@ -0,0 +1,88 @@ +function [sys,x0,str,ts] = Book4341_Controller(t,x,u,flag) +% 以下程序是 基于RBF神经网络的直接鲁棒自适应控制 +switch flag + case 0 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 + sys=mdlDerivatives(t,x,u); + case {2,4,9} + sys=[]; + case 3 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 0; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 1; %设置系统输出的变量 +sizes.NumInputs = 4; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = []; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 +global W +% 神经网络采用5-9-1结构 IN = 5 MID = 9 OUT = 1 +% 初始权值 +W = [0 0 0 0 0 0 0 0 0]' ; %MID * OUT矩阵 9*1 + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global W +% 神经网络采用5-9-1结构 +b = 20; % 高斯函数的基宽 维度MID * 1 1*1 b的选择很重要 b越大 网路对输入的映射能力越大 +c = [-2 -1.5 -1 -0.5 0 0.5 1 1.5 2; + -2 -1.5 -1 -0.5 0 0.5 1 1.5 2; + -2 -1.5 -1 -0.5 0 0.5 1 1.5 2; + -2 -1.5 -1 -0.5 0 0.5 1 1.5 2; + -2 -1.5 -1 -0.5 0 0.5 1 1.5 2]; % 高斯函数的中心点矢量 维度 IN * MID 5*9 +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +IN = 5; +Mid = 9; +Out = 1; + +lambda = 5; +ita = 500 * eye(9); +xite = 0.005; +If = 0.25; + +e = -u(1); % e = x - xd; 实际-期望 +de = -u(2); +x_1 = u(3); +x_2 = u(4); +s = lambda * e + de; +s_if = s/If; + +yd = sin(t); +dyd = cos(t); +ddyd = -sin(t); + +v = -ddyd + lambda * de; + +Input = [x_1; x_2; s; s_if ; v]; +h = zeros(Mid , 1); %9*1矩阵 +for i =1:Mid + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b^2)); +end +% 控制率ut +belta = 150; +ut = 1/belta * W' * h; +sys(1) = ut; + +% W权值的更新 +dw = -ita * (h * s + xite * W); % 9*9 * (9*1 + 9*1) +dt = 0.001; % 仿真步长 +W = W + dw * dt; % W的自适应律 + + + + + + + diff --git a/Book4341_Plant.m b/Book4341_Plant.m new file mode 100644 index 0000000..c768bcc --- /dev/null +++ b/Book4341_Plant.m @@ -0,0 +1,48 @@ +function [sys,x0,str,ts] = Book4341_Plant(t,x,u,flag) +% 以下程序是 基于RBF神经网络的直接鲁棒自适应控制 +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 2; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 1; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [0.5 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +ut = u(1); +th = x(1); % 摆角 +dth = x(2); % 摆速 +dt = 100 * sin(t); + +sys(1) = x(2); +sys(2) = -25 * dth + 133 * ut + dt; + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +sys(1) = x(1); %x1 +sys(2) = x(2); %x2 + + + + diff --git a/Book4342.slx b/Book4342.slx new file mode 100644 index 0000000000000000000000000000000000000000..81626d91c4cfd1c7786461fa7d2404e2af359590 GIT binary patch literal 25959 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 literal 0 HcmV?d00001 diff --git a/Book523_Controller.m b/Book523_Controller.m new file mode 100644 index 0000000..04132db --- /dev/null +++ b/Book523_Controller.m @@ -0,0 +1,119 @@ +function [sys,x0,str,ts] = Book523_Controller(t,x,u,flag) +% 以下程序是 基于RBF神经网络的直接鲁棒自适应控制 +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 5; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 3; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = zeros(1,5); % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 +global c b +% 神经网络采用2-5-1结构 +c = 0.1*[-1 -0.5 -0 0.5 1; + -1 -0.5 -0 0.5 1]; % 高斯函数的中心点矢量 维度 IN * MID 2*5 +b = 5; % 高斯函数的基宽 维度MID * 1 1*1 b的选择很重要 b越大 网路对输入的映射能力越大 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global c b gama +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +IN = 2; +Mid = 5; +Out = 1; +yd = 0.1 * sin(t); +dyd = 0.1 * cos(t); +ddyd = -0.1 * sin(t); + +c1 = 15; +gama = 0.015; +e = u(1); +de = u(2); + +s = c1 * e + de; + +Input = [e; de]; +% Input = [x_1; x_2; s; s_if ; v]; +h = zeros(Mid , 1); %5*1矩阵 +for i =1:Mid + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b^2)); +end +W = [x(1); x(2); x(3); x(4); x(5)]; +S = -1/gama * s * h; + +for i = 1:Mid + sys(i) = S(i); +end + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global c b +IN = 2; +Mid = 5; +Out = 1; +yd = 0.1 * sin(t); +dyd = 0.1 * cos(t); +ddyd = -0.1 * sin(t); +c1 = 15; + +e = u(1); +de = u(2); +th = u(3); + +s = c1 * e + de; + +Input = [e; de]; + +h = zeros(Mid , 1); %13*1矩阵 +for i =1:Mid + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b^2)); +end +W = [x(1); x(2); x(3); x(4); x(5)]; +fx = W' * h; + +% 参数的定义 +mc = 1; %小车质量 +m = 0.1; %摆的质量 +l = 0.5; +g_up = cos(th)/(mc+m); +g_down = l *(4/3 - m*(cos(th)^2)/(mc+m)); +g = g_up / g_down; +if t<=1.5 + xite = 1.0; +else + xite = 0.1; +end +ut = 1 / g * (-fx + ddyd + c1 * de + xite * sign(s)); +sys(1) = ut; +sys(2) = fx; + + + + + + + + + + + + diff --git a/Book523_Plant.m b/Book523_Plant.m new file mode 100644 index 0000000..09d6cad --- /dev/null +++ b/Book523_Plant.m @@ -0,0 +1,62 @@ +function [sys,x0,str,ts] = Book523_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 2; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 1; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [pi/60 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +% 倒立摆状态方程 +ut = u(1); +% f = u(2); +th = x(1); % 摆角 +dth = x(2); % 摆速 + +% 参数的定义 +g = 9.8; +mc = 1; %小车质量 +m = 0.1; %摆的质量 +l = 0.5; +f_up = g*sin(th) - m*l*dth^2*cos(th)*sin(th)/(mc+m); +f_down = l *(4/3 - m*(cos(th)^2)/(mc+m)); +f = f_up / f_down; +g_up = cos(th)/(mc+m); +g_down = l *(4/3 - m*(cos(th)^2)/(mc+m)); +g = g_up / g_down; + +some = f + g * ut; + +sys(1) = x(2); +sys(2) = some; + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +sys(1) = x(1); %x1 +sys(2) = x(2); %x2 + + + + diff --git a/Book532.slx b/Book532.slx new file mode 100644 index 0000000000000000000000000000000000000000..105939028bc1ab4ef097c0da1cbe6b51448807f5 GIT binary patch literal 32847 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 w@MP^@l>W^^Kr$d_M{*S-@2dN*juK)l5 literal 0 HcmV?d00001 diff --git a/Book6141_2_Controller.m b/Book6141_2_Controller.m new file mode 100644 index 0000000..da121f3 --- /dev/null +++ b/Book6141_2_Controller.m @@ -0,0 +1,144 @@ +function [sys,x0,str,ts] = Book6141_2_Controller(t,x,u,flag) +% 以下程序是 基于RBF神经网络的直接鲁棒自适应控制 +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +global c b node +% 神经网络采用2-19-1结构 +node = 19; +c = 0.5 * [-4.5 -4 -3.5 -3 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5; + -4.5 -4 -3.5 -3 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5]; % 高斯函数的中心点矢量 维度 IN * MID 2*19 +b = 2 * ones(19,1); % 高斯函数的基宽 维度node * 1 19*1 b的选择很重要 b越大 网路对输入的映射能力越大 +sizes = simsizes; +sizes.NumContStates = node; %设置系统连续状态的变量 W +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 3; %设置系统输出的变量 +sizes.NumInputs = 3; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = 0.1 * ones(node,1); % 系统初始状态变量 代表W和V向量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global c b node +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +IN = 2; +Out = 1; +qd = sin(t); +dqd = cos(t); +ddqd = -sin(t); + +qd = u(1); +q = u(2); % e = q - qd +dq = u(3); +e = q - qd; +de = dq - dqd; + +% 参数的定义 +M = 10; +gama = 1200; +alph = 3; +kp = alph^2; +kv = 2 * alph; +Q = [50 0; 0 50]; +A = [0 1; -kp -kv]; +P = lyap(A' , Q); +B = [0; 1/M]; +k1 = 0.001; + +Input = [e; de]; +h = zeros(node , 1); %19*1矩阵 +for i =1:node + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b(i)^2)); +end +W = [x(1:19)]'; %node*1 19*1 + +method = 1; +if method == 1 % 自适应方法一 + dw = gama * h * Input' * P * B; + for i = 1:node + sys(i) = dw(i); + end +else % 自适应方法二 + dw = gama * h * Input' * P * B + k1 * gama * norm(Input) * W; + for i = 1:node + sys(i) = dw(i); + end +end + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global c b node +IN = 2; +Out = 1; +qd = sin(t); +dqd = cos(t); +ddqd = -sin(t); + +qd = u(1); +q = u(2); % e = q - qd +dq = u(3); +e = q - qd; +de = dq - dqd; + +% 参数的定义 +M = 10; +gama = 1200; +alph = 3; +kp = alph^2; +kv = 2 * alph; +Q = [50 0; 0 50]; +A = [0 1; -kp -kv]; +P = lyap(A' , Q); +B = [0; 1/M]; +k1 = 0.001; + +Input = [e; de]; +h = zeros(node , 1); %5*1矩阵 +for i =1:node + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b(i)^2)); +end +W = [x(1:19)]; %node*1 19*1 +% 神经网络的输出 +fx = W' * h; +d = -15 * dq - 30 *sign(dq); + +some = 1; +if some == 1 + ut = M * (ddqd - kv*de - kp*e) - fx; +elseif some == 2 + ut = M * (ddqd - kv*de - kp*e) - d; +else + ut = M * (ddqd - kv*de - kp*e); +end +sys(1) = ut; +sys(2) = fx; +sys(3) = d; + + + + + + + + + + + + diff --git a/Book6141_Controller.m b/Book6141_Controller.m new file mode 100644 index 0000000..0ee56da --- /dev/null +++ b/Book6141_Controller.m @@ -0,0 +1,146 @@ +function [sys,x0,str,ts] = Book6141_Controller(t,x,u,flag) +% 以下程序是 基于RBF神经网络的直接鲁棒自适应控制 +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +global c b node +% 神经网络采用2-5-1结构 +node = 5; +c = 0.5 * [-2 -1 -0 1 2; + -2 -1 -0 1 2]; % 高斯函数的中心点矢量 维度 IN * MID 2*5 +b = 2 * ones(5,1); % 高斯函数的基宽 维度node * 1 5*1 b的选择很重要 b越大 网路对输入的映射能力越大 +sizes = simsizes; +sizes.NumContStates = node; %设置系统连续状态的变量 W +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 3; %设置系统输出的变量 +sizes.NumInputs = 3; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = 0.1 * ones(node,1); % 系统初始状态变量 代表W和V向量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global c b node +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +IN = 2; +node = 5; +Out = 1; +qd = sin(t); +dqd = cos(t); +ddqd = -sin(t); + +qd = u(1); +q = u(2); % e = q - qd +dq = u(3); +e = q - qd; +de = dq - dqd; + +% 参数的定义 +M = 10; +gama = 1200; +alph = 3; +kp = alph^2; +kv = 2 * alph; +Q = [50 0; 0 50]; +A = [0 1; -kp -kv]; +P = lyap(A' , Q); +B = [0; 1/M]; +k1 = 0.001; + +Input = [e; de]; +h = zeros(node , 1); %5*1矩阵 +for i =1:node + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b(i)^2)); +end +W = [x(1); x(2); x(3); x(4); x(5)]; + +method = 1; +if method == 1 % 自适应方法一 + dw = gama * h * Input' * P * B; + for i = 1:node + sys(i) = dw(i); + end +else % 自适应方法二 + dw = gama * h * Input' * P * B + k1 * gama * norm(Input) * W; + for i = 1:node + sys(i) = dw(i); + end +end + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global c b node +IN = 2; +node = 5; +Out = 1; +qd = sin(t); +dqd = cos(t); +ddqd = -sin(t); + +qd = u(1); +q = u(2); % e = q - qd +dq = u(3); +e = q - qd; +de = dq - dqd; + +% 参数的定义 +M = 10; +gama = 1200; +alph = 3; +kp = alph^2; +kv = 2 * alph; +Q = [50 0; 0 50]; +A = [0 1; -kp -kv]; +P = lyap(A' , Q); +B = [0; 1/M]; +k1 = 0.001; + +Input = [e; de]; +h = zeros(node , 1); %5*1矩阵 +for i =1:node + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b(i)^2)); +end +W = [x(1); x(2); x(3); x(4); x(5)]; +% 神经网络的输出 +fx = W' * h; +d = -15 * dq - 30 *sign(dq); + +some = 1; +if some == 1 + ut = M * (ddqd - kv*de - kp*e) - fx; % RBF逼近未知干扰f +elseif some == 2 + ut = M * (ddqd - kv*de - kp*e) - d; +else + ut = M * (ddqd - kv*de - kp*e); +end +sys(1) = ut; +sys(2) = fx; +sys(3) = d; + + + + + + + + + + + + diff --git a/Book6141_Plant.m b/Book6141_Plant.m new file mode 100644 index 0000000..b50436c --- /dev/null +++ b/Book6141_Plant.m @@ -0,0 +1,51 @@ +function [sys,x0,str,ts] = Book6141_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 2; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 1; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [0.6 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +ut = u(1); + +q = x(1); % 角度 +dq = x(2); % 角速度 + +% 参数的定义 +M = 10; +d = -15 * dq - 30 * sign(dq); + +sys(1) = x(2); +sys(2) = inv(M) * (ut + d); + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +sys(1) = x(1); %x1 +sys(2) = x(2); %x2 + + + + diff --git a/Book6142.slx b/Book6142.slx new file mode 100644 index 0000000000000000000000000000000000000000..faa4a78504e5465d16a3ddc6b786359045a7bcaf GIT binary patch literal 30239 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 literal 0 HcmV?d00001 diff --git a/Book6142_Controller.m b/Book6142_Controller.m new file mode 100644 index 0000000..3222c98 --- /dev/null +++ b/Book6142_Controller.m @@ -0,0 +1,193 @@ +function [sys,x0,str,ts] = Book6142_Controller(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +global c b node +% 神经网络采用4 - 5 - 2结构 +node = 5; +c = 1 * [-2 -1 -0 1 2; + -2 -1 -0 1 2; + -2 -1 -0 1 2; + -2 -1 -0 1 2]; % 高斯函数的中心点矢量 维度 IN * MID 4*5 +b = 3 * ones(node,1); % 高斯函数的基宽 维度node * 1 5*1 b的选择很重要 b越大 网路对输入的映射能力越大 +sizes = simsizes; +sizes.NumContStates = node*2; %设置系统连续状态的变量 W V +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 6; %设置系统输出的变量 +sizes.NumInputs = 8; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = 0.1 * ones(node*2,1); % 系统初始状态变量 代表W和V向量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global c b node +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +% 角度跟踪指令 +dqd1 = 0.1*pi*cos(0.5*pi*t); +dqd2 = 0.1*pi*sin(0.5*pi*t); + +qd1 = u(1); +qd2 = u(2); +q1 = u(3); +q2 = u(4); +dq1 = u(5); +dq2 = u(6); + +e1 = q1 - qd1; % e = q - qd +e2 = q2 - qd2; +de1 = dq1 - dqd1; +de2 = dq2 - dqd2; + +% 参数的定义 +v = 13.33; +a1 = 8.98; +a2 = 8.75; +g = 9.8; +gama = 20; +M = [v+a1+2*a2*cos(q2) a1+a2*cos(q2); + a1+a2*cos(q2) a1]; +alph = 3; +kp = [alph^2 0; 0 alph^2]; +kv = [2 * alph 0;0 2*alph]; +Q = 50 * eye(4); + +A = [zeros(2,2) eye(2,2); -kp -kv]; % 4*4 +P = lyap(A' , Q); % 4*4 +% B = [zeros(2,2); inv(M)]; % 4*2 +B = [0 0;0 0;1 0;0 1]; +k1 = 0.001; + +Input = [e1; e2; de1; de2]; +h = zeros(node , 1); %5*1矩阵 +for i =1:node + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b(i)^2)); +end +W = x(1:5); % 5*1 +V = x(6:10); + +method = 1; + +% W权值的更新 +if method == 1 % 自适应方法一 + dw = gama * h * Input' * P * B; + for i = 1:node*2 + sys(i) = dw(i); + end +else % 自适应方法二 + dw = gama * h * Input' * P * B + k1 * gama * norm(Input) * [W V]; + for i = 1:node*2 + sys(i) = dw(i); + end +end + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global c b node +% 角度跟踪指令 +ddqd1 = -0.1*pi*0.5*pi*sin(0.5*pi*t); +ddqd2 = 0.1*pi*0.5*pi*cos(0.5*pi*t); + +qd1 = u(1); +qd2 = u(2); +q1 = u(3); +q2 = u(4); +dq1 = u(5); +dq2 = u(6); +ddq1 = u(7); +ddq2 = u(8); +dqd1 = 0.1*pi*cos(0.5*pi*t); +dqd2 = 0.1*pi*sin(0.5*pi*t); +ddq = [ddq1; ddq2]; + +e1 = q1 - qd1; % e = q - qd +e2 = q2 - qd2; +de1 = dq1 - dqd1; +de2 = dq2 - dqd2; + +% 参数的定义 +v = 13.33; +a1 = 8.98; +a2 = 8.75; +g = 9.8; +d1 = 2; +d2 = 3; +d3 = 6; +alph = 3; +kp = [alph^2 0; 0 alph^2]; +kv = [2 * alph 0;0 2*alph]; + +M = [v+a1+2*a2*cos(q2) a1+a2*cos(q2); + a1+a2*cos(q2) a1]; +C = [-a2*dq2*sin(q2) -a2*(dq1 + dq2)*sin(q2); + a2*dq1*sin(q2) 0]; +G = [15*g*cos(q1)+8.75*g*cos(q1+q2); + 8.75*g*cos(q1+q2)]; +deltam = 0.2*M; +deltac = 0.2*C; +deltag = 0.2*G; + +Input = [e1; e2; de1; de2]; +h = zeros(node , 1); %5*1矩阵 +for i =1:node + h(i) = exp(-(norm(Input - c(:,i))^2) / (2*b(i)^2)); +end +W = x(1:5); % 5*1 +V = x(6:10); + +% 神经网络的输出 +fx1 = W' * h; +fx2 = V' * h; + +% 干扰 +d = d1 + d2 * norm([e1,e2]) + d3 * norm([de1, de2]); +ddqd = [ddqd1; ddqd2]; +e = [e1; e2]; +de = [de1; de2]; +q = [q1; q2]; +dq = [dq1; dq2]; +f = deltam * ddq + deltac * dq + deltag + d; + +some = 1; +if some == 1 + tau = M * (ddqd - kv*de - kp*e) + C * dq + G - M * [fx1; fx2]; % RBF逼近未知干扰f +elseif some == 2 + tau = M * (ddqd - kv*de - kp*e) + C * dq + G - f; % 精确补偿干扰项 +else + tau = M * (ddqd - kv*de - kp*e) + C * dq + G ; % 不补偿干扰项 +end + +sys(1) = tau(1); +sys(2) = tau(2); +sys(3) = fx1; +sys(4) = fx2; +sys(5) = f(1); +sys(6) = f(2); + + + + + + + + + + + + diff --git a/Book6142_Plant.m b/Book6142_Plant.m new file mode 100644 index 0000000..88ed27d --- /dev/null +++ b/Book6142_Plant.m @@ -0,0 +1,93 @@ +function [sys,x0,str,ts] = Book6142_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 4; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 4; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [0.6 0.3 0.5 0.5]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 +global ddq1 ddq2 +ddq1 = 0; +ddq2 = 0; + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global ddq1 ddq2 +tau1 = u(1); %力矩1 +tau2 = u(2); %力矩2 + +q1 = x(1); % 关节角一 +q2 = x(2); % 关节角二 +dq1 = x(3); % 关节角速度一 +dq2 = x(4); % 关节角速度一 + +% 参数的定义 +v = 13.33; +a1 = 8.98; +a2 = 8.75; +g = 9.8; +d1 = 2; +d2 = 3; +d3 = 6; + +% 角度跟踪指令 +qd1 = 1+0.2*sin(0.5*pi*t); +qd2 = 1-0.2*cos(0.5*pi*t); +dqd1 = 0.1*pi*cos(0.5*pi*t); +dqd2 = 0.1*pi*sin(0.5*pi*t); + +M = [v+a1+2*a2*cos(q2) a1+a2*cos(q2); + a1+a2*cos(q2) a1]; +C = [-a2*dq2*sin(q2) -a2*(dq1 + dq2)*sin(q2); + a2*dq1*sin(q2) 0]; +G = [15*g*cos(q1)+8.75*g*cos(q1+q2); + 8.75*g*cos(q1+q2)]; +deltam = 0.2*M; +deltac = 0.2*C; +deltag = 0.2*G; +% 外部干扰 +e1 = q1 - qd1; +e2 = q2 - qd2; +de1 = dq1 - dqd1; +de2 = dq2 - dqd2; +ddq = [ddq1; ddq2]; + +d = d1 + d2 * norm([e1;e2]) + d3 * norm([de1; de2]); +f = deltam * ddq + deltac * [dq1; dq2] + deltag + d; +tau = [tau1; tau2]; + +ddq = inv(M) * (tau - C*[dq1; dq2] - G + f); + +sys(1) = x(3); +sys(2) = x(4); +sys(3) = ddq(1); +sys(4) = ddq(2); + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +sys(1) = x(1); %q1 +sys(2) = x(2); %q2 +sys(3) = x(3); %dq1 +sys(4) = x(4); %dq2 + + + diff --git a/Book6241.slx b/Book6241.slx new file mode 100644 index 0000000000000000000000000000000000000000..86283f8c9c75d483f21c829941770fd426cd1012 GIT binary patch literal 25800 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

Jcw1BV^vvUo2}RVhV*tUlYU-oTgpZ7 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 arnOd-L4w}rf3)93a1_wHbNurkfBhex?+l>; literal 0 HcmV?d00001 diff --git a/Book6241_Controller.m b/Book6241_Controller.m new file mode 100644 index 0000000..e48aeb2 --- /dev/null +++ b/Book6241_Controller.m @@ -0,0 +1,125 @@ +function [sys,x0,str,ts] = Book6241_Controller(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +global c b node +% 神经网络采用2 - 7 - 1结构 两个 2*7*1结构 tau1对应e1和de1 tau2对应e2和de2 +node = 7; +c = 1 * [-1.5 -1.0 -0.5 0 0.5 1 1.5; + -1.5 -1.0 -0.5 0 0.5 1 1.5]; % 高斯函数的中心点矢量 维度 IN * MID 2*7 +b = 10 * ones(node,1); % 高斯函数的基宽 维度node * 1 7*1 b的选择很重要 b越大 网路对输入的映射能力越大 +sizes = simsizes; +sizes.NumContStates = node; %设置系统连续状态的变量 W V +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 4; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = 0 * ones(node,1); % 系统初始状态变量 代表W和V向量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global c b node +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +% 角度跟踪指令 +% qd = sin(t); +dqd = cos(t); + +qd = u(1); +q = u(2); +dq = u(3); + +e = qd - q; % e = qd - q +de = dqd - dq; + +% 参数的定义 +kv = 110; +xite = 100; +ita = 15; + +input = [e; de]; +h = zeros(node , 1); %7*1矩阵 +for i =1:node + h(i) = exp(-(norm(input - c(:,i))^2) / (2*b(i)^2)); % 7*1 +end + +W = x(1:7); % 7*1 +s = de + ita * e; +% 权值的自适应律 +dw = ita * h * s'; +for i = 1:7 + sys(i) = dw(i); +end + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global c b node +% 角度跟踪指令 +% dqd1 = 0.1*cos(t); +% dqd2 = 0.1*cos(t); +% qd = sin(t); +dqd = cos(t); +ddqd = -sin(t); + +qd = u(1); +q = u(2); +dq = u(3); +ddq = u(4); + +e = qd - q; % e = qd - q +de = dqd - dq; + +% 参数的定义 +kv = 110; +xite = 100; +ita = 15; + +input = [e; de]; +h = zeros(node , 1); %7*1矩阵 +for i =1:node + h(i) = exp(-(norm(input - c(:,i))^2) / (2*b(i)^2)); % 7*1 +end +W = x(1:7); % 7*1 + +% 神经网络的输出 +fx = W' * h; + +tol = fx; +% 滑模面 +s = de + xite * e; +epn = 0.2; +bd = 0.1; +v = -(epn + bd)*sign(s); +tau = tol + kv * s - v; + +sys(1) = tau; +sys(2) = fx; + + + + + + + + + + + + + diff --git a/Book6241_Plant.m b/Book6241_Plant.m new file mode 100644 index 0000000..bd2841a --- /dev/null +++ b/Book6241_Plant.m @@ -0,0 +1,53 @@ +function [sys,x0,str,ts] = Book6241_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 2; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 1; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [0.1 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +tau = u(1); %力矩1 + +q = x(1); % 关节角一 +dq = x(2); % 关节角速度一 + +% 参数的定义 +M = 10; +F = 15 * dq + 30*sign(dq); + +ddq = inv(M) * (tau - F); + +sys(1) = x(2); +sys(2) = ddq; + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +sys(1) = x(1); %q1 +sys(2) = x(2); %dq1 + + + + diff --git a/Book6242.fis b/Book6242.fis new file mode 100644 index 0000000..76ef63b --- /dev/null +++ b/Book6242.fis @@ -0,0 +1,39 @@ +[System] +Name='Book6242' +Type='mamdani' +Version=2.0 +NumInputs=1 +NumOutputs=1 +NumRules=5 +AndMethod='min' +OrMethod='max' +ImpMethod='min' +AggMethod='max' +DefuzzMethod='centroid' + +[Input1] +Name='s*ds' +Range=[-10 10] +NumMFs=5 +MF1='NB':'gaussmf',[2.124 -10] +MF2='NM':'trimf',[-10 -5 0] +MF3='ZO':'trimf',[-5 0 5] +MF4='PM':'trimf',[0 5 10] +MF5='PB':'gaussmf',[2.124 10] + +[Output1] +Name='K' +Range=[-1 1] +NumMFs=5 +MF1='NB':'gaussmf',[0.2123 -1] +MF2='NM':'trimf',[-0.6667 -0.3333 0] +MF3='ZO':'trimf',[-0.3333 0 0.3333] +MF4='PM':'trimf',[4.78e-05 0.3333 0.6666] +MF5='PB':'gaussmf',[0.2123 1] + +[Rules] +1, 1 (1) : 1 +2, 2 (1) : 1 +3, 3 (1) : 1 +4, 4 (1) : 1 +5, 5 (1) : 1 diff --git a/Book6242.slx b/Book6242.slx new file mode 100644 index 0000000000000000000000000000000000000000..91cbb30fd0826ae9be632be3f9c95f41500067f6 GIT binary patch literal 33751 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 literal 0 HcmV?d00001 diff --git a/Book6242.slxc b/Book6242.slxc new file mode 100644 index 0000000000000000000000000000000000000000..5db8212b374bad05ae2ffb1ca1ce73300858f9de GIT binary patch literal 5537 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 literal 0 HcmV?d00001 diff --git a/Book6242_Controller.m b/Book6242_Controller.m new file mode 100644 index 0000000..d3214ea --- /dev/null +++ b/Book6242_Controller.m @@ -0,0 +1,173 @@ +function [sys,x0,str,ts] = Book6242_Controller(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +global c b node +% 神经网络采用4 - 7 - 2结构 +node = 7; +c = 1 * [-1.5 -1 -0.5 0 0.5 1 1.5; + -1.5 -1 -0.5 0 0.5 1 1.5]; % 高斯函数的中心点矢量 维度 IN * MID 2*7 +b = 10 * ones(node,1); % 高斯函数的基宽 维度node * 1 5*1 b的选择很重要 b越大 网路对输入的映射能力越大 +sizes = simsizes; +sizes.NumContStates = node*2; %设置系统连续状态的变量 W V +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 6; %设置系统输出的变量 +sizes.NumInputs = 6; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = 0 * ones(node*2,1); % 系统初始状态变量 代表W和V向量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global c b node +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +% 角度跟踪指令 +qd1 = 0.1*sin(t); +qd2 = 0.1*sin(t); +dqd1 = 0.1*cos(t); +dqd2 = 0.1*cos(t); + +q1 = u(1); +q2 = u(2); +dq1 = u(3); +dq2 = u(4); + +e1 = qd1 - q1; % e = qd - q +e2 = qd2 - q2; +de1 = dqd1 - dq1; +de2 = dqd2 - dq2; + +% 参数的定义 +kv = [10 0; 0 10]; +ita = [15 0;0 15]; +xite1 = 5; +xite2 = 5; + +% 滑模函数 +s1 = de1 + xite1*e1; +s2 = de2 + xite2*e2; +s = [s1;s2]; + +Input1 = [e1;de1]; +hw = zeros(node, 1); %7*1矩阵 +for j = 1:node + hw(j) = exp(-(norm(Input1 - c(:,j))^2) / (b(j)^2)); +end + +Input2 = [e2;de2]; +hv = zeros(node, 1); %7*1矩阵 +for j = 1:node + hv(j) = exp(-(norm(Input2 - c(:,j))^2) / (b(j)^2)); +end + +W = x(1:node); % node*1 +V = x(node+1:2*node); + +% W权值的更新 +dw1 = ita(1)*hw*s(1); +dw2 = ita(4)*hv*s(2); +for i = 1:node + sys(i) = dw1(i); + sys(i+node) = dw2(i); +end + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global c b node +% 角度跟踪指令 +qd1 = 0.1*sin(t); +qd2 = 0.1*sin(t); +dqd1 = 0.1*cos(t); +dqd2 = 0.1*cos(t); + +q1 = u(1); +q2 = u(2); +dq1 = u(3); +dq2 = u(4); +K1 = u(5); +K2 = u(6); + +e1 = qd1 - q1; % e = qd - q +e2 = qd2 - q2; +de1 = dqd1 - dq1; +de2 = dqd2 - dq2; + +% 参数的定义 +kv = [20 0; 0 20]; +ita = [15 0;0 15]; +xite1 = 5; +xite2 = 5; +epc = 2; +bd = 2.1; + +% 滑模函数 +s1 = de1 + xite1*e1; +s2 = de2 + xite2*e2; + +d1 = norm(s1)/sqrt(xite1^2+1); +d2 = norm(s2)/sqrt(xite2^2+1); + +% 滑模函数 +s1 = de1 + xite1*e1; +s2 = de2 + xite2*e2; +s = [s1;s2]; + +Input1 = [e1;de1]; +hw = zeros(node, 1); %7*1矩阵 +for j = 1:node + hw(j) = exp(-(norm(Input1 - c(:,j))^2) / (b(j)^2)); +end + +Input2 = [e2;de2]; +hv = zeros(node, 1); %7*1矩阵 +for j = 1:node + hv(j) = exp(-(norm(Input2 - c(:,j))^2) / (b(j)^2)); +end + +W = x(1:node); % node*1 +V = x(node+1:2*node); + +% 神经网络的输出 +fx1 = W' * hw; +fx2 = V' * hv; +v = -(epc+bd)*sign(s); + +temp1 = (abs(K1)+1)*sign(s1); +temp2 = (abs(K2)+1)*sign(s2); +v_new = -[temp1; temp2]; + +tau = [fx1;fx2]+kv*s-v; + +sys(1) = tau(1); +sys(2) = tau(2); +sys(3) = fx1; +sys(4) = fx2; +sys(5) = s1; +sys(6) = s2; + + + + + + + + + + + diff --git a/Book6242_Plant.m b/Book6242_Plant.m new file mode 100644 index 0000000..eb32468 --- /dev/null +++ b/Book6242_Plant.m @@ -0,0 +1,75 @@ +function [sys,x0,str,ts] = Book6242_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 4; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 4; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [0.09 -0.09 0 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +tau1 = u(1); %力矩1 +tau2 = u(2); %力矩2 + +q1 = x(1); % 关节角一 +q2 = x(2); % 关节角二 +dq1 = x(3); % 关节角速度一 +dq2 = x(4); % 关节角速度一 + +% 参数的定义 +p1 = 2.9; +p2 = 0.76; +p3 = 0.87; +p4 = 3.04; +p5 = 0.87; +g = 9.8; + +M = [p1+p2+2*p3*cos(q2) p2+p3*cos(q2) + p2+p3*cos(q2) p2]; +C = [-p3*dq2*sin(q2) -p3*(dq1 + dq2)*sin(q2); + p3*dq1*sin(q2) 0]; +G = [p4*g*cos(q1)+p5*g*cos(q1+q2); + p5*g*cos(q1+q2)]; + +% 外部干扰 +F = [2*sign(dq1); 2*sign(dq2)]; +taud = [2*sin(t); 2*sin(t)]; +tau = [tau1; tau2]; + +ddq = inv(M) * (tau - C*[dq1; dq2] - G - F - taud); + +sys(1) = x(3); +sys(2) = x(4); +sys(3) = ddq(1); +sys(4) = ddq(2); + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +sys(1) = x(1); %q1 +sys(2) = x(2); %q2 +sys(3) = x(3); %dq1 +sys(4) = x(4); %dq2 + + + diff --git a/Book6331.slx b/Book6331.slx new file mode 100644 index 0000000000000000000000000000000000000000..b0978a049601839f2a31233a87e959a56ec2f47c GIT binary patch literal 25972 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 literal 0 HcmV?d00001 diff --git a/Book6331_Controller.m b/Book6331_Controller.m new file mode 100644 index 0000000..b42e3d5 --- /dev/null +++ b/Book6331_Controller.m @@ -0,0 +1,124 @@ +function [sys,x0,str,ts] = Book6331_Controller(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +global c b node +% 神经网络采用2 - 5 - 1结构 +node = 5; +c = 1 * [-1.0 -0.5 0 0.5 1 ; + -1.0 -0.5 0 0.5 1]; % 高斯函数的中心点矢量 维度 IN * MID 2*5 +b = 50 * ones(node,1); % 高斯函数的基宽 维度node * 1 7*1 b的选择很重要 b越大 网路对输入的映射能力越大 +sizes = simsizes; +sizes.NumContStates = node; %设置系统连续状态的变量 W V +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 4; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = 0 * ones(node,1); % 系统初始状态变量 代表W和V向量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global c b node +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +% 角度跟踪指令 +% qd = sin(t); +dqd = cos(t); + +qd = u(1); +q = u(2); +dq = u(3); + +e = q - qd; % e = q - qd +de = dq - dqd; + +% 参数的定义 +xite = 1000; +alpha = 200; +gama = 0.1; + +input = [e; de]; +h = zeros(node , 1); %7*1矩阵 +for i =1:node + h(i) = exp(-(norm(input - c(:,i))^2) / (2*b(i)^2)); % 7*1 +end + +W = x(1:node); % 5*1 +% 权值的自适应律 +x_2 = de + alpha * e; +dw = - xite * x_2 * h'; +for i = 1:node + sys(i) = dw(i); +end + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global c b node +% 角度跟踪指令 +% dqd1 = 0.1*cos(t); +% dqd2 = 0.1*cos(t); +% qd = sin(t); +dqd = cos(t); +ddqd = -sin(t); + +qd = u(1); +q = u(2); +dq = u(3); +ddq = u(4); + +e = q - qd; % e = q - qd +de = dq - dqd; + +% 参数的定义 +M = 1; +xite = 1000; +alpha = 200; +gama = 0.1; + +input = [e; de]; +h = zeros(node , 1); %5*1矩阵 +for i =1:node + h(i) = exp(-(norm(input - c(:,i))^2) / (2*b(i)^2)); % 5*1 +end +W = x(1:node); % 5*1 + +% 神经网络的输出 +fx = W' * h; +V = 0; +omiga = M * alpha * de + V * alpha * e; +x_2 = de + alpha * e; +ut = -omiga - 1/(2*gama*gama)*x_2 + W' * h - 1/2*x_2; +G = 0; +tau = ut + M*ddqd + V * dqd + G; + +sys(1) = tau; +sys(2) = fx; + + + + + + + + + + + + + diff --git a/Book6331_Plant.m b/Book6331_Plant.m new file mode 100644 index 0000000..0b42059 --- /dev/null +++ b/Book6331_Plant.m @@ -0,0 +1,64 @@ +function [sys,x0,str,ts] = Book6331_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 2; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 3; %设置系统输出的变量 +sizes.NumInputs = 1; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [0 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +tau = u(1); %力矩1 + +q = x(1); % 关节角一 +dq = x(2); % 关节角速度一 + +% 参数的定义 +M = 1.0; +d = 150 * sign(dq) + 10 * dq; + +ddq = inv(M) * (tau - d); + +sys(1) = x(2); +sys(2) = ddq; + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +tau = u(1); %力矩1 + +q = x(1); % 关节角一 +dq = x(2); % 关节角速度一 + +% 参数的定义 +M = 1.0; +d = 150 * sign(dq) + 10 * dq; + +ddq = inv(M) * (tau - d); +sys(1) = x(1); %q1 +sys(2) = x(2); %dq1 +sys(3) = d; + + + + diff --git a/Book6332.slx b/Book6332.slx new file mode 100644 index 0000000000000000000000000000000000000000..1196eba540a2cb0a01dcf3452c99073f390a7d42 GIT binary patch literal 29058 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 oAltOA(#=Lx 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 literal 0 HcmV?d00001 diff --git a/Book6332_Controller.m b/Book6332_Controller.m new file mode 100644 index 0000000..5dcc4f8 --- /dev/null +++ b/Book6332_Controller.m @@ -0,0 +1,173 @@ +function [sys,x0,str,ts] = Book6332_Controller(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +global c b node +% 神经网络采用4 - 7 - 2结构 一个 4*7*2结构 输入[e1 e2 de1 de2] 对应输出 [tau1 tau2] +node = 7; +c = 1 * [-1.5 -1.0 -0.5 0 0.5 1 1.5; + -1.5 -1.0 -0.5 0 0.5 1 1.5; + -1.5 -1.0 -0.5 0 0.5 1 1.5; + -1.5 -1.0 -0.5 0 0.5 1 1.5]; % 高斯函数的中心点矢量 维度 IN * MID 4*7 +b = 10 * ones(node,1); % 高斯函数的基宽 维度node * 1 7*1 b的选择很重要 b越大 网路对输入的映射能力越大 +sizes = simsizes; +sizes.NumContStates = node*2; %设置系统连续状态的变量 W V +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 4; %设置系统输出的变量 +sizes.NumInputs = 8; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = 0 * ones(node*2,1); % 系统初始状态变量 代表W和V向量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global c b node +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +% 角度跟踪指令 +dqd1 = cos(t); +dqd2 = cos(t); + +qd1 = u(1); +qd2 = u(2); +q1 = u(3); +q2 = u(4); +dq1 = u(5); +dq2 = u(6); + +e1 = q1 - qd1; % e = qd - q +e2 = q2 - qd2; +de1 = dq1 - dqd1; +de2 = dq2 - dqd2; +e = [e1; e2]; +de = [de1 ; de2]; + +% 参数的定义 +xite = 1500; +alpha = 20; +gama = 0.05; + +input = [e; de]; +h = zeros(node , 1); %7*1矩阵 +for i =1:node + h(i) = exp(-(norm(input - c(:,i))^2) / (b(i)^2)); % 7*1 +end + +W = [x(1) x(2) x(3) x(4) x(5) x(6) x(7); + x(8) x(9) x(10) x(11) x(12) x(13) x(14)]'; % 7*2 + +x2_1 = de + alpha * e; + +% 权值的自适应律 +dw = -xite * x2_1 * h'; % +% dw = dw'; +for i = 1:node + sys(i) = dw(1,i); + sys(i+7) = dw(2,i); +end + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global c b node +% 角度跟踪指令 +% dqd1 = cos(t); +% dqd2 = cos(t); +ddqd1 = -sin(t); +ddqd2 = -sin(t); + +qd1 = u(1); +qd2 = u(2); +q1 = u(3); +q2 = u(4); +dq1 = u(5); +dq2 = u(6); +ddq1 = u(7); +ddq2 = u(8); +dqd1 = cos(t); +dqd2 = cos(t); +ddq = [ddq1; ddq2]; +ddqd = [ddqd1; ddqd2]; +dqd = [dqd1; dqd2]; + +e1 = q1 - qd1; % e = q - qd +e2 = q2 - qd2; +de1 = dq1 - dqd1; +de2 = dq2 - dqd2; +e = [e1; e2]; +de = [de1; de2]; + +% 参数的定义 +xite = 1500; +alpha = 20; +gama = 0.05; +m1 = 1; +m2 = 1.5; +r1 = 1; +r2 = 0.8; +M11 = (m1 + m2)*r1^2 + m2*r2^2 + 2*m2*r1*r2*cos(q2); +M12 = m2*r2^2 + m2*r1*r2*cos(q2); +M21 = M12; +M22 = m2 * r2^2; +V12 = m2*r1*sin(q2); +G1 = (m1+m2)*r1*cos(q2) + m2*r2*cos(q1+q2); +G2 = m2*r2*cos(q1+q2); + +M = [M11 M12; + M21 M22]; +V = [-V12*dq2 -V12*(dq1+dq2); + V12*q1 0]; +G = [G1; G2]; +D = [10*dq1 + 30*sign(dq1); 10*dq2 + 30*sign(dq2)]; + +input = [e; de]; +h = zeros(node , 1); %7*1矩阵 + +for i =1:node + h(i) = exp(-(norm(input - c(:,i))^2) / (b(i)^2)); % 7*1 +end +W = [x(1) x(2) x(3) x(4) x(5) x(6) x(7); + x(8) x(9) x(10) x(11) x(12) x(13) x(14)]'; % 7*2 + % 网络输出 +fx = W' * h; + +omiga = M * alpha * de + V * alpha * e; + +x2_1 = de + alpha * e; + +% 反馈控制律 +ut = -omiga - 1/(2*gama^2) * x2_1 + fx - 1/2*x2_1; + +tau = ut + M * ddqd + V * dqd + G; + +sys(1) = tau(1); +sys(2) = tau(2); +sys(3) = fx(1); +sys(4) = fx(2); + + + + + + + + + + + + + diff --git a/Book6332_Plant.m b/Book6332_Plant.m new file mode 100644 index 0000000..94981db --- /dev/null +++ b/Book6332_Plant.m @@ -0,0 +1,115 @@ +function [sys,x0,str,ts] = Book6332_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 4; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 6; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [0 0 0 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +% 角度跟踪指令 +% qd1 = sin(t); +% qd2 = sin(t); +% dqd1 = cos(t); +% dqd2 = cos(t); +tau1 = u(1); %力矩1 +tau2 = u(2); %力矩2 + +q1 = x(1); % 关节角一 +q2 = x(2); % 关节角二 +dq1 = x(3); % 关节角速度一 +dq2 = x(4); % 关节角速度一 +q = [q1; q2]; +dq = [dq1; dq2]; + +% 参数的定义 +m1 = 1; +m2 = 1.5; +r1 = 1; +r2 = 0.8; +M11 = (m1 + m2)*r1^2 + m2*r2^2 + 2*m2*r1*r2*cos(q2); +M12 = m2*r2^2 + m2*r1*r2*cos(q2); +M21 = M12; +M22 = m2 * r2^2; +V12 = m2*r1*sin(q2); +G1 = (m1+m2)*r1*cos(q2) + m2*r2*cos(q1+q2); +G2 = m2*r2*cos(q1+q2); + +M = [M11 M12; + M21 M22]; +V = [-V12*dq2 -V12*(dq1+dq2); + V12*q1 0]; +G = [G1; G2]; +D = [10*dq1 + 30*sign(dq1); 10*dq2 + 30*sign(dq2)]; + +tau = [tau1; tau2]; + +ddq = inv(M) * (tau - D - G - V*dq); + +sys(1) = x(3); +sys(2) = x(4); +sys(3) = ddq(1); +sys(4) = ddq(2); + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 +tau1 = u(1); %力矩1 +tau2 = u(2); %力矩2 + +q1 = x(1); % 关节角一 +q2 = x(2); % 关节角二 +dq1 = x(3); % 关节角速度一 +dq2 = x(4); % 关节角速度一 +q = [q1; q2]; +dq = [dq1; dq2]; + +% 参数的定义 +m1 = 1; +m2 = 1.5; +r1 = 1; +r2 = 0.8; +M11 = (m1 + m2)*r1^2 + m2*r2^2 + 2*m2*r1*r2*cos(q2); +M12 = m2*r2^2 + m2*r1*r2*cos(q2); +M21 = M12; +M22 = m2 * r2^2; +V12 = m2*r1*sin(q2); +G1 = (m1+m2)*r1*cos(q2) + m2*r2*cos(q1+q2); +G2 = m2*r2*cos(q1+q2); + +M = [M11 M12; + M21 M22]; +V = [-V12*dq2 -V12*(dq1+dq2); + V12*q1 0]; +G = [G1; G2]; +D = [10*dq1 + 30*sign(dq1); 10*dq2 + 30*sign(dq2)]; + +sys(1) = x(1); %q1 +sys(2) = x(2); %q2 +sys(3) = x(3); %dq1 +sys(4) = x(4); %dq2 +sys(5) = D(1); +sys(6) = D(2); + + diff --git a/Book7241.slx b/Book7241.slx new file mode 100644 index 0000000000000000000000000000000000000000..c8924258a9278d4efedf7bef893d35c2b1e376a0 GIT binary patch literal 26434 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%0Dj!>^x*@>U>TGIyIvDj1(GG4-cFFsk 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 literal 0 HcmV?d00001 diff --git a/Book7241_Controller.m b/Book7241_Controller.m new file mode 100644 index 0000000..3e3848b --- /dev/null +++ b/Book7241_Controller.m @@ -0,0 +1,191 @@ +function [sys,x0,str,ts] = Book7241_Controller(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +global c1 b1 node c2 b2 c3 b3 s_new s_past inte_s +% 神经网络采用2 - 7 - 1结构 采用3个2*7*1 神经网络 +node = 7; +c1 = 1 * [-1.5 -1.0 -0.5 0 0.5 1 1.5; + -1.5 -1.0 -0.5 0 0.5 1 1.5]; % 高斯函数的中心点矢量 维度 IN * MID 2*7 +b1 = 20 * ones(node,1); % 高斯函数的基宽 维度node * 1 7*1 b的选择很重要 b越大 网路对输入的映射能力越大 +c2 = 1 * [-1.5 -1.0 -0.5 0 0.5 1 1.5; + -1.5 -1.0 -0.5 0 0.5 1 1.5]; +b2 = 20 * ones(node,1); +c3 = 1 * [-1.5 -1.0 -0.5 0 0.5 1 1.5; + -1.5 -1.0 -0.5 0 0.5 1 1.5]; +b3 = 20 * ones(node,1); +s_new = 0; +s_past = s_new; +inte_s = 0; +sizes = simsizes; +sizes.NumContStates = node*3; %设置系统连续状态的变量 W V +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 4; %设置系统输出的变量 +sizes.NumInputs = 4; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = 0 * ones(node*3,1); % 系统初始状态变量 代表W和V向量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global c1 b1 node c2 b2 c3 b3 s_new s_past inte_s +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +% 角度跟踪指令 +% qd = sin(t); +dqd = cos(t); +ddqd = -sin(t); + +qd = u(1); +q = u(2); +dq = u(3); +ddq = u(4); + +e = qd - q; % e = qd - q +de = dqd - dq; +dde = ddqd - ddq; + +% 参数的定义 +kr = 0.1; +kp = 15; +kt = 15; +xite = 5.0; +gamam = 100; +gamac = 100; +gamag = 100; + +s_new = xite * e + de; +dqr = xite * e + dqd; +ddqr = xite * de + ddqd; + +% 神经网络的输入 +input = [q; dq]; +h1 = zeros(node , 1); %7*1矩阵 +h2 = zeros(node , 1); %7*1矩阵 +h3 = zeros(node , 1); %7*1矩阵 +for i =1:node + h1(i) = exp(-(norm(input - c1(:,i))^2) / (b1(i)^2)); % 7*1 +end +for i =1:node + h2(i) = exp(-(norm(input - c2(:,i))^2) / (b2(i)^2)); % 7*1 +end +for i =1:node + h3(i) = exp(-(norm(input - c3(:,i))^2) / (b3(i)^2)); % 7*1 +end + +W1 = x(1:node); % 7*1 +W2 = x(node+1: node*2); +W3 = x(node*2+1: node*3); + +% 权值的自适应律 +dw1 = gamam * h1 * ddqr * s_new; +dw2 = gamac * h2 * dqr * s_new; +dw3 = gamag * h3 * s_new; + +for i = 1:node + sys(i) = dw1(i); + sys(i+7) = dw2(i); + sys(i+14) = dw3(i); +end + + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global c1 b1 node c2 b2 c3 b3 s_new s_past inte_s +% 角度跟踪指令 +% dqd1 = 0.1*cos(t); +% dqd2 = 0.1*cos(t); +% qd = sin(t); +dqd = cos(t); +ddqd = -sin(t); + +qd = u(1); +q = u(2); +dq = u(3); +ddq = u(4); + +e = qd - q; % e = qd - q +de = dqd - dq; +dde = ddqd - ddq; + +% 参数的定义 +kr = 0.1; +kp = 15; +ki = 15; +xite = 5.0; +gamam = 100; +gamac = 100; +gamag = 100; + +s_new = xite * e + de; +dqr = xite * e + dqd; +ddqr = xite * de + ddqd; + +% 神经网络的输入 +input = [q; dq]; +h1 = zeros(node , 1); %7*1矩阵 +h2 = zeros(node , 1); %7*1矩阵 +h3 = zeros(node , 1); %7*1矩阵 +for i =1:node + h1(i) = exp(-(norm(input - c1(:,i))^2) / (b1(i)^2)); % 7*1 +end +for i =1:node + h2(i) = exp(-(norm(input - c2(:,i))^2) / (b2(i)^2)); % 7*1 +end +for i =1:node + h3(i) = exp(-(norm(input - c3(:,i))^2) / (b3(i)^2)); % 7*1 +end + +W1 = x(1:node); % 7*1 +W2 = x(node+1: node*2); +W3 = x(node*2+1: node*3); + +% 神经网络的输出 +fx1 = W1' * h1; +fx2 = W2' * h2; +fx3 = W3' * h3; + +M_refer = fx1; +C_refer = fx2; +G_refer = fx3; + +% 名义模型控制律 +taum = M_refer*ddqr + C_refer*dqr + G_refer; +% 鲁棒项 +taur = kr*sign(s_new); +dt = 0.001; +inte_s = inte_s + (s_past + s_new)*dt/2; +tau = taum + kp*s_new + ki*inte_s + taur; + + +sys(1) = tau; +sys(2) = fx1; +sys(3) = fx2; +sys(4) = fx3; +s_past = s_new; + + + + + + + + + + + + diff --git a/Book7241_Plant.m b/Book7241_Plant.m new file mode 100644 index 0000000..03cfc04 --- /dev/null +++ b/Book7241_Plant.m @@ -0,0 +1,59 @@ +function [sys,x0,str,ts] = Book7241_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 2; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 2; %设置系统输出的变量 +sizes.NumInputs = 1; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [0.15 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +tau = u(1); %力矩1 + +q = x(1); % 关节角一 +dq = x(2); % 关节角速度一 + +% 参数的定义 +m = 0.02; +g = 9.8; +l = 0.05; +M = 0.1 + 0.06*sin(q); +C = 3*dq + 3*cos(dq); +G = m*g*l*cos(q); + +ddq = inv(M) * (tau - G - C*dq); + +sys(1) = x(2); +sys(2) = ddq; + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 + +sys(1) = x(1); %q1 +sys(2) = x(2); %dq1 + + + + + diff --git a/Book7242.slx b/Book7242.slx new file mode 100644 index 0000000000000000000000000000000000000000..27737dcd9f16887e8c9940cfef94ef7ad047d798 GIT binary patch literal 35624 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

8#uf#A=c8} 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 P$4EaQ$$MK&2T%V4q2jcj literal 0 HcmV?d00001 diff --git a/Book7242_Controller.m b/Book7242_Controller.m new file mode 100644 index 0000000..35ef848 --- /dev/null +++ b/Book7242_Controller.m @@ -0,0 +1,329 @@ +function [sys,x0,str,ts] = Book7242_Controller(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +global c_M b_M c_C b_C c_G b_G node s_new s_past inte_s +% 神经网络采用4 - 5 - 1结构 矩阵中每个值用一个W和h M11 -- W11'*h11 M12 -- W12'*h12 +node = 5; +c_M = 1 * [-1.0 -0.5 0 0.5 1; + -1.0 -0.5 0 0.5 1]; % 高斯函数的中心点矢量 维度 IN * MID 2*5 +b_M = 10 * ones(node,1); % 高斯函数的基宽 维度node * 1 7*1 b的选择很重要 b越大 网路对输入的映射能力越大 +c_C = [-1.0 -0.5 0 0.5 1; + -1.0 -0.5 0 0.5 1; + -1.0 -0.5 0 0.5 1; + -1.0 -0.5 0 0.5 1]; % 高斯函数的中心点矢量 维度 IN * MID 4*5 +b_C = 10 * ones(node,1); +c_G = 1 * [-1.0 -0.5 0 0.5 1; + -1.0 -0.5 0 0.5 1]; % 高斯函数的中心点矢量 维度 IN * MID 2*5 +b_G = 10 * ones(node,1); +s_new = [0; 0]; +s_past = s_new; +inte_s = [0; 0]; +sizes = simsizes; +sizes.NumContStates = node*10; %设置系统连续状态的变量 W V +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 7; %设置系统输出的变量 +sizes.NumInputs = 12; %设置系统输入的变量 +sizes.DirFeedthrough = 1; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = 0 * ones(node*10,1); % 系统初始状态变量 代表W和V向量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys = mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +global c_M b_M c_C b_C c_G b_G node s_new s_past inte_s +% 仿真中应根据网络输入值的有效映射范围来设计 c和b 从而保证有效的高斯映射 不合适的b或c均会导致结果不正确 +% 角度跟踪指令 +% qd1 = 0.5*sin(pi*t); +% qd2 = 0.5*sin(pi*t); +dqd1 = 0.5*pi*cos(pi*t); +dqd2 = 0.5*pi*cos(pi*t); +ddqd1 = -0.5*pi*pi*sin(pi*t); +ddqd2 = -0.5*pi*pi*sin(pi*t); + +qd1 = u(1); +qd2 = u(2); +q1 = u(3); +q2 = u(4); +dq1 = u(5); +dq2 = u(6); +ddq1 = u(7); +ddq2 = u(8); +ddq = [ddq1; ddq2]; + +e1 = qd1 - q1; % e = qd - q +e2 = qd2 - q2; +de1 = dqd1 - dq1; +de2 = dqd2 - dq2; +e = [e1; e2]; +de = [de1; de2]; +dq = [dq1; dq2]; +q = [q1; q2]; +dqd = [dqd1; dqd2]; +ddqd = [ddqd1; ddqd2]; +dde = ddqd - ddq; +% 参数的定义 +kp = 100*eye(2); +ki = 100*eye(2); +kr = 0.1*eye(2); +xite = 5.0*eye(2); +gamam = 5; +gamac = 10; +gamag = 10; + +s_new = xite * e + de; +% q = 3; +% p = 5; +% belta = 3; +% s1 = e1 + 1/belta*abs(de1)^(p/q)*sign(de1); +% s2 = e2 + 1/belta*abs(de2)^(p/q)*sign(de2); +% s_new = [s1; s2]; +dqr = s_new + dq; +ddqr = xite * de + dde + ddq; + +% 神经网络的输入 +input1 = [q1;q2]; +% ------------------------------------M矩阵的径向基函数 +h_M11 = zeros(node , 1); % 7*1 +h_M12 = zeros(node , 1); +h_M21 = zeros(node , 1); +h_M22 = zeros(node , 1); +for i =1:node + h_M11(i) = exp(-(norm(input1 - c_M(:,i))^2) / (b_M(i)^2)); % 7*1 + h_M12(i) = exp(-(norm(input1 - c_M(:,i))^2) / (b_M(i)^2)); % 7*1 + h_M21(i) = exp(-(norm(input1 - c_M(:,i))^2) / (b_M(i)^2)); % 7*1 + h_M22(i) = exp(-(norm(input1 - c_M(:,i))^2) / (b_M(i)^2)); % 7*1 +end +W_M11 = x(1:node); % 7*1 +W_M12 = x(node+1: node*2); +W_M21 = x(node*2+1: node*3); +W_M22 = x(node*3+1: node*4); + +% W_M权值的自适应律 +dw_M11 = gamam * h_M11 * ddqr(1) * s_new(1); +dw_M12 = gamam * h_M12 * ddqr(2) * s_new(1); +dw_M21 = gamam * h_M21 * ddqr(1) * s_new(2); +dw_M22 = gamam * h_M22 * ddqr(2) * s_new(2); + +for i = 1:node + sys(i) = dw_M11(i); + sys(i+node) = dw_M12(i); + sys(i+node*2) = dw_M21(i); + sys(i+node*3) = dw_M22(i); +end + +% ----------------------------------------C矩阵的径向基函数 +input2 = [q1;q2;dq1;dq2]; +h_C11 = zeros(node , 1); % 7*1 +h_C12 = zeros(node , 1); +h_C21 = zeros(node , 1); +h_C22 = zeros(node , 1); +for i =1:node + h_C11(i) = exp(-(norm(input2 - c_C(:,i))^2) / (b_C(i)^2)); % 7*1 + h_C12(i) = exp(-(norm(input2 - c_C(:,i))^2) / (b_C(i)^2)); % 7*1 + h_C21(i) = exp(-(norm(input2 - c_C(:,i))^2) / (b_C(i)^2)); % 7*1 + h_C22(i) = exp(-(norm(input2 - c_C(:,i))^2) / (b_C(i)^2)); % 7*1 +end +W_C11 = x(node*4+1:node*5); % 7*1 +W_C12 = x(node*5+1: node*6); +W_C21 = x(node*6+1: node*7); +W_C22 = x(node*7+1: node*8); + +% W_C权值的自适应律 +dw_C11 = gamac * h_C11 * dqr(1) * s_new(1); +dw_C12 = gamac * h_C12 * ddqr(2) * s_new(1); +dw_C21 = gamac * h_C21 * dqr(1) * s_new(2); +dw_C22 = gamac * h_C22 * ddqr(2) * s_new(2); + +for i = 1:node + sys(i+node*4) = dw_C11(i); + sys(i+node*5) = dw_C12(i); + sys(i+node*6) = dw_C21(i); + sys(i+node*7) = dw_C22(i); +end + +% ----------------------------------------G矩阵的径向基函数 +input3 = [q1;q2]; +h_G11 = zeros(node , 1); % 7*1 +h_G12 = zeros(node , 1); +for i =1:node + h_G11(i) = exp(-(norm(input3 - c_G(:,i))^2) / (b_G(i)^2)); % 7*1 + h_G12(i) = exp(-(norm(input3 - c_G(:,i))^2) / (b_G(i)^2)); % 7*1 +end +W_G11 = x(node*8+1:node*9); % 7*1 +W_G12 = x(node*9+1: node*10); + +% W_C权值的自适应律 +dw_G11 = gamag * h_G11 * s_new(1); +dw_G12 = gamag * h_G12 * s_new(2); + +for i = 1:node + sys(i+node*8) = dw_G11(i); + sys(i+node*9) = dw_G12(i); +end + +function sys = mdlOutputs(t,x,u) %产生(传递)系统输出 +global c_M b_M c_C b_C c_G b_G node s_new s_past inte_s +% 角度跟踪指令 +% qd1 = 0.5*sin(pi*t); +% qd2 = 0.5*sin(pi*t); +dqd1 = 0.5*pi*cos(pi*t); +dqd2 = 0.5*pi*cos(pi*t); +ddqd1 = -0.5*pi*pi*sin(pi*t); +ddqd2 = -0.5*pi*pi*sin(pi*t); + +qd1 = u(1); +qd2 = u(2); +q1 = u(3); +q2 = u(4); +dq1 = u(5); +dq2 = u(6); +ddq1 = u(7); +ddq2 = u(8); +ddq = [ddq1; ddq2]; + +e1 = qd1 - q1; % e = qd - q +e2 = qd2 - q2; +de1 = dqd1 - dq1; +de2 = dqd2 - dq2; +e = [e1; e2]; +de = [de1; de2]; +dq = [dq1; dq2]; +q = [q1; q2]; +dqd = [dqd1; dqd2]; +ddqd = [ddqd1; ddqd2]; +dde = ddqd - ddq; + +% 参数的定义 +kp = 100*eye(2); +ki = 100*eye(2); +xite = 5.0*eye(2); +gamam = 5; +gamac = 10; +gamag = 10; + +s_new = xite * e + de; +% q = 3; +% p = 5; +% belta = 3; +% s1 = e1 + 1/belta*abs(de1)^(p/q)*sign(de1); +% s2 = e2 + 1/belta*abs(de2)^(p/q)*sign(de2); +% s_new = [s1; s2]; +dqr = s_new + dq; +ddqr = xite * de + dde + ddq; + +% ------------------------------------M矩阵的径向基函数 +input1 = [q1;q2]; +h_M11 = zeros(node , 1); % 7*1 +h_M12 = zeros(node , 1); +h_M21 = zeros(node , 1); +h_M22 = zeros(node , 1); +for i =1:node + h_M11(i) = exp(-(norm(input1 - c_M(:,i))^2) / (b_M(i)^2)); % 7*1 + h_M12(i) = exp(-(norm(input1 - c_M(:,i))^2) / (b_M(i)^2)); % 7*1 + h_M21(i) = exp(-(norm(input1 - c_M(:,i))^2) / (b_M(i)^2)); % 7*1 + h_M22(i) = exp(-(norm(input1 - c_M(:,i))^2) / (b_M(i)^2)); % 7*1 +end +W_M11 = x(1:node); % 7*1 +W_M12 = x(node*1+1: node*2); +W_M21 = x(node*2+1: node*3); +W_M22 = x(node*3+1: node*4); + +% ----------------------------------------C矩阵的径向基函数 +input2 = [q1;q2;dq1;dq2]; +h_C11 = zeros(node , 1); % 5*1 +h_C12 = zeros(node , 1); +h_C21 = zeros(node , 1); +h_C22 = zeros(node , 1); +for i =1:node + h_C11(i) = exp(-(norm(input2 - c_C(:,i))^2) / (b_C(i)^2)); % 7*1 + h_C12(i) = exp(-(norm(input2 - c_C(:,i))^2) / (b_C(i)^2)); % 7*1 + h_C21(i) = exp(-(norm(input2 - c_C(:,i))^2) / (b_C(i)^2)); % 7*1 + h_C22(i) = exp(-(norm(input2 - c_C(:,i))^2) / (b_C(i)^2)); % 7*1 +end +W_C11 = x(node*4+1:node*5); % 5*1 +W_C12 = x(node*5+1: node*6); +W_C21 = x(node*6+1: node*7); +W_C22 = x(node*7+1: node*8); + +% ----------------------------------------G矩阵的径向基函数 +input3 = [q1;q2]; +h_G11 = zeros(node , 1); % 5*1 +h_G12 = zeros(node , 1); +for i =1:node + h_G11(i) = exp(-(norm(input3 - c_G(:,i))^2) / (b_G(i)^2)); % 7*1 + h_G12(i) = exp(-(norm(input3 - c_G(:,i))^2) / (b_G(i)^2)); % 7*1 +end +W_G11 = x(node*8+1:node*9); % 5*1 +W_G12 = x(node*9+1:node*10); + +% 神经网络的输出 +p1 = 2.9; +p2 = 0.76; +p3 = 0.87; +p4 = 3.04; +p5 = 0.87; +g = 9.8; +M = [p1+p2+2*p3*cos(q2) p2+p3*cos(q2); + p2+p3*cos(q2) p2]; +C = [-p3*dq2*sin(q2) -p3*(dq1+dq2)*sin(q2); + p3*dq1*sin(q2) 0]; +G = [p4*g*cos(q1)+p5*g*cos(q1+q2); + p5*g*cos(q1+q2)]; +fx1 = [W_M11'*h_M11 W_M12'*h_M12; W_M21'*h_M21 W_M22'*h_M22]; % 2*2 +fx2 = [W_C11'*h_C11 W_C12'*h_C12; W_C21'*h_C21 W_C22'*h_C22]; +fx3 = [W_G11'*h_G11; W_G12'*h_G12]; + +M_refer = fx1; +C_refer = fx2; +G_refer = fx3; + +% 名义模型控制律 +taum = M_refer*ddqr + C_refer*dqr + G_refer; +% 鲁棒项 +% kr = 21*eye(2); +% taur = kr*sign(s_new); + +taur = [(abs(u(9))+1)*sign(s_new(1)); (abs(u(10))+1)*sign(s_new(2))]; + +dt = 0.001; +inte_s = inte_s + (s_past + s_new)*dt/2; + +% inte_s = [u(11);u(12)]; + +tau = taum + kp*s_new + ki*inte_s + taur; + +sys(1) = tau(1); +sys(2) = tau(2); +sys(3) = norm(fx1); +sys(4) = norm(fx2); +sys(5) = norm(fx3); +sys(6) = s_new(1); +sys(7) = s_new(2); + +s_past = s_new; + + + + + + + + + + diff --git a/Book7242_Plant.m b/Book7242_Plant.m new file mode 100644 index 0000000..4b65ea4 --- /dev/null +++ b/Book7242_Plant.m @@ -0,0 +1,82 @@ +function [sys,x0,str,ts] = Book7242_Plant(t,x,u,flag) +switch flag + case 0 %初始化 + [sys,x0,str,ts]=mdlInitializeSizes; + case 1 %连续状态计算 + sys=mdlDerivatives(t,x,u); + case {2,4,9} %离散状态计算,下一步仿真时刻,终止仿真设定 + sys=[]; + case 3 %输出信号计算 + sys=mdlOutputs(t,x,u); + otherwise + DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); +end + +function [sys,x0,str,ts]=mdlInitializeSizes %系统的初始化 +sizes = simsizes; +sizes.NumContStates = 4; %设置系统连续状态的变量 +sizes.NumDiscStates = 0; %设置系统离散状态的变量 +sizes.NumOutputs = 4; %设置系统输出的变量 +sizes.NumInputs = 2; %设置系统输入的变量 +sizes.DirFeedthrough = 0; %如果在输出方程中显含输入变量u,则应该将本参数设置为1 +sizes.NumSampleTimes = 0; % 模块采样周期的个数 + % 需要的样本时间,一般为1. + % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态 +sys = simsizes(sizes); +x0 = [0.09 -0.09 0 0]; % 系统初始状态变量 +str = []; % 保留变量,保持为空 +ts = []; % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0 + + +function sys=mdlDerivatives(t,x,u) %该函数仅在连续系统中被调用,用于产生控制系统状态的导数 +tau1 = u(1); %力矩1 +tau2 = u(2); %力矩2 + +q1 = x(1); % 关节角一 +q2 = x(2); % 关节角二 +dq1 = x(3); % 关节角速度一 +dq2 = x(4); % 关节角速度一 +q = [q1; q2]; +dq = [dq1; dq2]; + +% 参数的定义 +p1 = 2.9; +p2 = 0.76; +p3 = 0.87; +p4 = 3.04; +p5 = 0.87; +g = 9.8; + +% 角度跟踪指令 +% qd1 = 0.5*sin(pi*t); +% qd2 = sin(pi*t); +% dqd1 = 0.5*pi*cos(pi*t); +% dqd2 = pi*cos(pi*t); +d = 10*(sin(10*x(1))+cos(x(2))); %干扰 +f = [0.02*sign(dq1);0.02*sign(dq2)]; +M = [p1+p2+2*p3*cos(q2) p2+p3*cos(q2); + p2+p3*cos(q2) p2]; +C = [-p3*dq2*sin(q2) -p3*(dq1+dq2)*sin(q2); + p3*dq1*sin(q2) 0]; +G = [p4*g*cos(q1)+p5*g*cos(q1+q2); + p5*g*cos(q1+q2)]; + +tau = [tau1; tau2]; + +ddq = inv(M) * (tau - C*dq - G - d - f); + +sys(1) = x(3); +sys(2) = x(4); +sys(3) = ddq(1); +sys(4) = ddq(2); + + +function sys=mdlOutputs(t,x,u) %产生(传递)系统输出 + +sys(1) = x(1); %q1 +sys(2) = x(2); %q2 +sys(3) = x(3); %dq1 +sys(4) = x(4); %dq2 + + +