说明:
全文共四个参考:
- 终极参考,程序+仿真图+结果,但是缺少原理和文字建模过程。
- 参考0和1重在文字部分,模型建立怎么叙述,但无实际程序。
- 参考2重在程序部分,实际的matlab程序部分,直接上机调试。
- 每个大参考分别给了几个小参考,以供选择。
具体看个部分内容前先全部游览下。
终极参考:
https://wenku.baidu.com/view/df64a8ece009581b6bd9eb2f.html
参考0 这是个题目,但是直接告诉你数学模型了,具体分析看参考1中的论文
参考一 重在借鉴论文各部分叙述,但无实际程序,不用担心,程序请看参考二。
关键图:
关键图截取:
参考二 完整程序 ,自己修改数据和数学符号,配合参考一 文字叙述模块,整个问题就解决了。
下面给了两个参考程序,第二个参考程序易懂,标注清楚。你都跑一下,看看效果。
程序1 http://ask.wenku1.com/question/%E5%80%92%E7%AB%8B%E6%91%86%E5%BB%BA%E6%A8%A1.htm
%主程序: clear all close all global A B C D g=9.8;%重力加速度 M=1.0;%小车质量 m=0.1;%杆的质量 L=0.5;%杆长度的一半 Fc=0.0005;%小车相对导轨的摩擦系数 Fp=0.000002;%杆相对于小车的摩擦系数 I=1/12*m*L^2; l=1/2*L; t1=m*(M+m)*g*l/[(M+m)*I+M*m*l^2]; t2=-m^2*g*l^2/[(m+M)*I+M*m*l^2]; t3=-m*l/[(M+m)*I+M*m*l^2]; t4=(I+m*l^2)/[(m+M)*I+M*m*l^2]; A=[0 1 0 0; t1 0 0 0; 0 0 0 1; t2 0 0 0]; B=[0;t3;0;t4]; C=[1 0 0 0; 0 0 1 0]; D=[0;0]; Q=[100 0 0 0; 0 10 0 0; 0 0 1 0; 0 0 0 1]; R=[0.1]; K=lqr(A,B,Q,R); e1_1=0; e2_1=0; e3_1=0; e3_1=0; u_1=0; xk=[-10/57.3,0,0.20,0]; ts=0.02; for k=1:1:1000 time(k)=k*ts; Tspan=[0 ts]; para=u_1; [t,x]=ode45('daolibai_PID_Controller_SubFunction',Tspan,xk,[],para); xk=x(length(x),:); r1(k)=0.0; r2(k)=0.0; r3(k)=0.0; r4(k)=0.0; x1(k)=xk(1); x2(k)=xk(2); x3(k)=xk(3); x4(k)=xk(4); e1(k)=r1(k)-x1(k); e2(k)=r2(k)-x2(k); e3(k)=r3(k)-x3(k); e4(k)=r4(k)-x4(k); S=1; if S==1 u(k)=K(1)*e1(k)+K(2)*e2(k)+K(3)*e3(k)+K(4)*e4(k); elseif S==2 de1(k)=e1(k)-e1_1; u1(k)=-50*e1(k)-10*de1(k); de2(k)=e2(k)-e2_1; u2(k)=-10*e2(k)-10*de2(k); de3(k)=e3(k)-e3_1; u3(k)=-10*e3(k)-10*de3(k); de4(k)=e4(k)-e4_1; u4(k)=-10*e4(k)-10*de4(k); u(k)=u1(k)+u2(k)+u3(k)+u4(k); end if u(k)>=10 u(k)=10; elseif u(k)<=-10 u(k)=-10; end e1_1=e1(k); e2_1=e2(k); e3_1=e3(k); e4_1=e4(k); u_1=u(k); end figure(1); subplot(411); plot(time,r1,'k',time,x1,'k'); xlabel('time(s)');ylabel('Angle'); subplot(412); plot(time,r2,'k',time,x2,'k'); xlabel('time(s)');ylabel('Angle rate'); subplot(413); plot(time,r3,'k',time,x3,'k'); xlabel('time(s)');ylabel('Car Position'); subplot(414); plot(time,r4,'k',time,x4,'k'); xlabel('time(s)');ylabel('Car rate'); figure(5); plot(time,u,'k'); xlabel('time(s)');ylabel('Force'); %子程序 function dx=dym(t,x,flag,para) global A B C D u=para; dx=zeros(4,1); dx=A*x+B*u; %刚学,望多多交流,多多批评指正 0
程序2 http://www.verysource.com/code/6426077_1/untitled202.m.html
clear; M = 1.096; m = 0.109; b = 0.1; f=0; I= 0.0034; g = 9.8; l = 0.25; D = I*(M+m)+M*m*l^2; %denominator for the A and B matricies A = [0 1 0 0; 0 -(I+m*l^2)*b/D (m^2*g*l^2)/D -m*l*f/D; 0 0 0 1; 0 -(m*l*b)/D m*g*l*(M+m)/D -(m+M)*f/D] B = [ 0; -(I+m*l^2)/D; 0; -m*l/D]; C = [1 0 0 0; 0 0 1 0]; D = [0; 0]; disp('The rank of controllability matrix') rc=rank(ctrb(A,B)) % p=[-2-3*i,-2+3*i,-20,-21]; p=[-20,-21,-2-3*i,-2+3*i]; k=place(A,B,p) Cn=[1 0 0 0 ]; Nbar=rscale(A,B,Cn,0,k) t0=0; tspan=0.006; R=1; y0=[0 0 0.1 0]; n=1000; F=R*Nbar-k*y0'; for i=1:n tf=t0+tspan; [t,y]=ode45(@xprime10,[t0 tf],y0',[],F); t0=tf; y1=y(end,1); y2=y(end,2); y3=y(end,3); y4=y(end,4); y0=[y1 y2 y3 y4]; F=R*Nbar-k*y0'; h(i,1)=y1; h(i,2)=y2; h(i,3)=y3; h(i,4)=y4; h(i,5)=F; end T=0.006:0.006:6; figure(1) plot(T,h(:,1),':b') legend('小车位移') grid figure (2) plot(T,h(:,3),'-r') legend('摆杆摆角') grid figure(3) plot(T,h(:,5),'--g') legend('F') grid
程序3 有网友说Matlab自带一个例程,我电脑没安装matlab,你去找找。
在matlab模糊控制工具箱里有演示动画
总结:
在学习的时候,老师布置的作业,肯定是别人做过的部分,所以只要挖,你总能找到。
祝你 goodluck !