加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

系统仿真/非线性系统仿真的MATLAB语言描述

(2008-06-02 13:00:00)
标签:

杂谈

分类: 程式

如图所示系统,分别针对以下三种情况加入非线性环节,采用离散相似法进行仿真,适当改变S同时与非线性环节的情况比较。
系统仿真/非线性系统仿真的MATLAB语言描述
1)在A处加入饱和非线性环节
2)在A处加入死区非线性环节
3)在B处加入滞环非线性环节

参考程序:

%------filename:satu.m------
function uc=satu(ur,s1)
    if(abs(ur)>=s1)
        if(ur>0)
            uc=s1;
       else uc=-s1;
       end;
    else uc=ur;
end;

%------filename:dead.m------
function uc=dead(ur,s1)
    if(abs(ur)>=s1)
        if(ur>0)
            uc=ur-s1;
        else uc=ur+s1;
        end;
    else uc=0;
    end;
end;

%------filename:backlash.m------
function [Uc,Ubb]=backlash(Urb,Ur,Ucb,S1)
if(Ur>Urb)
    if((Ur-S1)>=Ucb)
        Uc=Ur-S1;
    else Uc=Ucb;
    end;
else if(Ur<Urb)
        if((Ur+S1)<=Ucb)
            Uc=Ur+S1;
        else Uc=Ucb;
        end;
    else Uc=Ucb;
    end;
end;
Ubb=Ur;

%------filename:sp4.m------
P=[0.1 1 0.5 1;10 1 1 0;2 1 1 0;0 1 20 0];
WIJ=[1 0 1;2 1 1;3 2 1;4 3 1;1 4 -1];
n=4;
Y0=10;
Yt0=[0 0 0 0];
h=0.01;
T=0;
T0=0;
Tf=100;
Nout=4;
A=P(:,1);B=P(:,2);
C=P(:,3);D=P(:,4);
m=length(WIJ(:,1));
W0=zeros(n,1);W=zeros(n,n);
for k=1:m
    if (WIJ(k,2)==0);W0(WIJ(k,1))=WIJ(k,3);
    else W(WIJ(k,1),WIJ(k,2))=WIJ(k,3);
    end;
end;
for i=1:n
    if(A(i)==0);
        FI(i)=1;
        FIM(i)=h*C(i)/B(i);
        FIJ(i)=h*h*C(i)/B(i)/2;
        FIC(i)=1;FID(i)=0;
        if(D(i)~=0);
            FID(i)=D(i)/B(i);
        else
        end;
    else
        FI(i)=exp(-h*A(i)/B(i));
        FIM(i)=(1-FI(i))*C(i)/A(i);
        FIJ(i)=h*C(i)/A(i)-FIM(i)*B(i)/A(i);
        FIC(i)=1;FID(i)=0;
        if(D(i)~=0);
            FIM(i)=(1-FI(i))*D(i)/A(i);
            FIJ(i)=h*D(i)/A(i)-FIM(i)*B(i)/A(i);
            FIC(i)=C(i)/D(i)-A(i)/B(i);
            FID(i)=D(i)/B(i);
        else
        end;
    end;
end;
Y=zeros(n,1);X=Y;y=0;Uk=zeros(n,1);Ubb=Uk;
t=T0:h:Tf;N=length(t);
for k=1:N-1
    Ub=Uk;
    Uk=W*Y+W0*Y0;
    for i=1:n
        if(Z(i)~=0)
            if(Z(i)==1)
                Uk(i)=satu(Uk(i),S(i));
            end;
            if(Z(i)==2)
                Uk(i)=dead(Uk(i),S(i));
            end;
            if(Z(i)==3)
                [Uk(i),Ubb(i)]=backlash(Ubb(i),Uk(i),Ub(i),S(i));
            end;
        end;
    end;
    Udot=(Uk-Ub)/h;
    Uf=2*Uk-Ub;
    X=FI'.*X+FIM'.*Uk+FIJ'.*Udot;
    Yb=Y;
    Y=FIC'.*X+FID'.*Uf;
    for i=1:n
        if(Z(i)~=0)
            if(Z(i)==4)
                Y(i)=satu(Y(i),S(i));
            end;
            if(Z(i)==5)
                Y(i)=dead(Y(i),S(i));
            end;
            if(Z(i)==6)
                [Y(i),Ubb(i)]=backlash(Ubb(i),Y(i),Yb(i),S(i));
            end;
        end;
    end;
    y=[y,Y(Nout)];
end;
plot(t,y)

参考结果:

1)

Z=[0 1 0 0];S=[0 5 0 0];
sp4
hold on
Z=[4 1 0 0];S=[1 5 0 0];
sp4
hold on
Z=[4 1 0 0];S=[2 5 0 0];
sp4

系统仿真/非线性系统仿真的MATLAB语言描述

2)

Z=[0 1 0 0];S=[0 5 0 0];
sp4
hold on
Z=[5 1 0 0];S=[3 5 0 0];
sp4
hold on
Z=[5 1 0 0];S=[5 5 0 0];
sp4

系统仿真/非线性系统仿真的MATLAB语言描述

3)

Z=[4 0 0 0];S=[5 0 0 0];
sp4
hold on
Z=[4 3 0 0];S=[5 1 0 0];
sp4
hold on
Z=[4 3 0 0];S=[5 2 0 0];
sp4

系统仿真/非线性系统仿真的MATLAB语言描述

────────────
  北京信息科技大学自动化学院“控制系统数字仿真与CAD”实验内容,仅供参考

系统仿真/非线性系统仿真的MATLAB语言描述

08.06.02最后更新

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有