linux测试matlab小程序,备忘——自编初级简单MATLAB小程序

1、程序清单(1)——主程序:

功能简介:提供简单的人机交互操作界面,在同一程序内,用户可以从三种分析方法中选择适合自己的分析方法对系统进行分析,并且,程序具有一定的容错性和相应提示。在command

windows中输入main即可。

function main()

psw=1;

while(psw==1)

disp('请输入系统分析方式 :1——时域分析;2——根轨迹法分析;3——频率响应法分析')

disp('input your choice: 1 2 or3 ')

R=input('your choice: ')

if

R==1

psw=0;

disp('您选择了1——时域分析')

disp('请输入传递函数分子多项式系数以及分母多项式系数,例如:')

disp('系统传递函数为: ')

disp(' 1');

disp('--------------');

disp('s^2 + 2 s + 2');

disp('应当输入num=[1];den=[1 2 2]')

num=input('num=')

den=input('den=')

sys1=myfile_TD(num,den) %调用时域分析法子程序

break

end

if

R==2

psw=0;

disp('您选择了2——根轨迹法分析')

disp('请输入传递函数分子多项式系数以及分母多项式系数,例如:')

disp('系统传递函数为: ')

disp(' 1');

disp('--------------');

disp('s^2 + 2 s + 2');

disp('应当输入num=[1];den=[1 2 2]')

num=input('num=')

den=input('den=')

sys2=myfile_rlocus(num,den) %调用根轨迹分析法子程序

break

end

if

R==3

psw=0;

disp('您选择了3——频率响应法分析')

disp('请输入传递函数分子多项式系数以及分母多项式系数,例如:')

disp('系统传递函数为: ')

disp(' 1');

disp('--------------');

disp('s^2 + 2 s + 2');

disp('应当输入num=[1];den=[1 2 2]')

num=input('num=')

den=input('den=')

sys3=myfile_bode(num,den) %调用频率响应分析法子程序

else

disp('请正确输入选择 1 2 或者3')

disp(' ')

disp(' ')

disp(' ')

psw=1; %输入有误,标志位置“1”

end

end

end

2、程序清单(2)——时域分析法子程序

功能简介:用时域分析的方法分析系统的稳定性,在系统稳定的前提下,分析系统的各项动态参数,包括上升时间Tr,调整时间Ts,峰值时间Tp,超调量σ%以及稳态误差dcg。

若系统发散,则无法分析系统的动态参数。

function [sys1]=myfile_TD(num,den)

sys1=tf(num,den);

sys1zpk=zpk(sys1);

disp('极点')

p=sys1zpk.p{1} %系统极点

disp('零点') %系统零点

z=sys1zpk.z{1}

gg1=feedback(sys1,1,-1);

[y,t]=step(gg1);

plot(t,y)

grid on

text(1,0.3,'sys阶跃响应曲线')

hold

on %系统阶跃响应曲线

%判断系统稳定性

g=zpk(sys1); %求取实部

n=real(g.p{1});

nmax=max(n);

if nmax>0

disp('系统不稳定')

stable=0;

else

disp('系统稳定')

stable=1;

end

if stable ==1

%稳态误差的计算

ggg=tf(sys1.den{1},sys1.den{1}+sys1.num{1});

num1=[1 0];den1=1;

g1=tf(num1,den1);

gggg=ggg*g1;

num2=1;den2=[1 0];

u=tf(num2,den2);

disp('稳态误差为:')

dcg1=dcgain(gggg*u)

%超调量的计算

n=length(y);

yss=y(n);%稳态值

ymax=max(y);

disp('超调量σ%为:')

sigma=(ymax-yss)*100/yss %σ

%峰值时间的计算

i=1;

while y(i)

i=i+1;

end

disp('峰值时间Tp为:')

Tp=t(i)

%上升时间的计算

yr1=0.1*yss;

yr2=0.9*yss;

i=1;

while y(i)

i=i+1;

end

t1=t(i);

while y(i)

i=i+1;

end

t2=t(i);

disp('上升时间Tr为:')

Tr=t2-t1

%调整时间Ts(2%)

n=length(y);

symbol=0; %symbol:超标标志

for i=1:1:n

for

j=1:1:n-i

if(abs(y(i+j)-yss)/yss>0.02)

symbol=1;

end

end

if

symbol==1

symbol=0;

else

break;

end

end

disp('调整时间Ts为:')

Ts=t(i)

disp('传递函数为:')

else

disp('因系统发散,无法分析动态参数')

end

3、程序清单(3)——根轨迹分析法

功能简介:作根轨迹图;作出阻尼比与自然振荡频率的网格线;求指定特殊点的闭环极点和对应的根轨迹增益。

function sys2=myfile_rlocus(num,den)

sys2=tf(num,den);

rlocus(sys2) %绘制系统的根轨迹图

grid %绘制ωn,ζ网格,

[k,r]=rlocfind(sys2) %指定特殊点的闭环极点和对应的根轨迹增益

4、程序清单(4)——频率响应分析法

功能简介:绘制伯德图;求相角稳定裕量及幅值交接频率与幅值稳定裕量及相角交接频率

function sys3=myfile_bode(num,den)

sys3=tf(num,den);

[gm,pm,wcp,wcg]=margin(sys3);

margin(sys3)

grid on

disp('增益裕度Gm=');disp(gm)

disp('相角交接频率Wcp=');disp(wcp)

disp('相位裕度Pm=');disp(pm)

disp('幅值交接频率Wcg=');disp(wcg)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值