用MATLAB进行计算,代替纸张,我采用实时文件编写,更加方便,仿真采用simulink
backstepping
for example1
differential equation
x1_dot = x1^2-x1^3 +x2
x2_dot = u
clc;
clear all;
close all;
%定义符号symbol system
syms x1 x2 u real
syms phil(x1)
syms z2
x1_dot = x1^2-x1^3 +x2
x2_dot = u
x1dot_1 = x1^2 - x1^3 + x2
x2dot_1 = u;
%把x1dot_1中的x2替换
x1dot = subs(x1dot_1, x2, z2+phil)
把z2项替换成0,目的
v = 1/2 * x1^2 + 1/2 * z2^2
v_dot = x1 * (x1^2 - x1^3 + z2 + φ) + z2 * (u - φdot)
提出带有z2的项,(面对复杂的方程更有效)
v_dot = x1 * (x1^2 - x1^3 + φ) + z2 * (u - φdot + x1)
%把x1dot中z2换成zero
x1dot_wu_z2 = subs(x1dot, z2, 0)
z2_to_add_to_parentheis_z2 = (x1dot - x1dot_wu_z2) *x1 / z2
let x1^2 - x1^3 +phil == -x1 -x1^3, 这样就可以求出phil
%x1dot_wu_z2 == -x1 - x1^3,下面的语句更有效
%求出Phil
phil(x1) = rhs(isolate(x1dot_wu_z2 == -x1 - x1^3, phil)) %求出phil
%求Phil的differential,对x1求导
phil_dot = diff(phil,x1) * x1dot_1
z2 = x2 - φ 跟踪误差
z2 = x2 - phil(x1)
z2dot = x2dot_1 - phil_dot
let x1 + u - phil_dot = -z2 ,其实是z2项要等于-z2^2
u = rhs(isolate(z2_to_add_to_parentheis_z2 + z2dot == -z2, u))
simplify(u)
clc;
clear all;
close all;
%定义符号symbol system
syms x1 x2 u real
syms phil(x1)
syms z2
x1dot_1 = x1^2 - x1^3 + x2
x2dot_1 = u;
%把x1dot_1中的x2替换
x1dot = subs(x1dot_1, x2, z2+phil)
%把x1dot中z2换成zero
x1dot_wu_z2 = subs(x1dot, z2, 0)
z2_to_add_to_parentheis_z2 = (x1dot - x1dot_wu_z2) *x1 / z2
%x1dot_wu_z2 == -x1 - x1^3,下面的语句更有效
%求出Phil
phil(x1) = rhs(isolate(x1dot_wu_z2 == -x1 - x1^3, phil)) %求出phil
%求Phil的differential,对x1求导
phil_dot = diff(phil,x1) * x1dot_1
z2 = x2 - phil(x1)
z2dot = x2dot_1 - phil_dot
u = rhs(isolate(z2_to_add_to_parentheis_z2 + z2dot == -z2, u))
simplify(u)
simulink 仿真
function u = fcn(x1,x2)
u = 2*x1^4 - 2*x2 - 2*x1*x2 - 2*x1^2 - x1^3 - 2*x1;
end
其中plant
function [x1dot,x2dot] = fcn(x1, x2, u)
x1dot = x1^2 - x1^3 +x2;
x2dot = u;
end
controller
积分初始条件设置成1
仿真结果