答:
>>f='(-1)*exp(-(abs(x)))*abs(sin(cos(abs(x))))';
>>x=fminsearch(f,0),ymax=exp(-(abs(x)))*abs(sin(cos(abs(x))))
x=
0
ymax=
0.8415
1-6设D2y-3Dy+2y=x,y(0)=1,Dy(0)=0,求y(0.5)的值。
答:
>>f='D2y-3*Dy+2*y=x';g=dsolve(f,'y(0)=1,Dy(0)=0','x');x=0.5;y=eval(g)
y=
0.6100
1-7求方程cos(t)^2*exp(-0.1t)=0.5t的解。
答:
>>t1=solve('cos(t)^2*exp(-0.1*t)=0.5*t','t');t=eval(t1)
t=
0.8329
1-8求方程组:
x^2+y^2=1,xy=2的解。
答:
>>[x,y]=solve('x^2+y^2=1','x*y=2','x','y')
x=
-1/2*(1/2*5^(1/2)+1/2*i*3^(1/2))^3+1/4*5^(1/2)+1/4*i*3^(1/2)
-1/2*(1/2*5^(1/2)-1/2*i*3^(1/2))^3+1/4*5^(1/2)-1/4*i*3^(1/2)
-1/2*(-1/2*5^(1/2)+1/2*i*3^(1/2))^3-1/4*5^(1/2)+1/4*i*3^(1/2)
-1/2*(-1/2*5^(1/2)-1/2*i*3^(1/2))^3-1/4*5^(1/2)-1/4*i*3^(1/2)
y=
1/2*5^(1/2)+1/2*i*3^(1/2)
1/2*5^(1/2)-1/2*i*3^(1/2)
-1/2*5^(1/2)+1/2*i*3^(1/2)
-1/2*5^(1/2)-1/2*i*3^(1/2)
1-9求f(kT)=kexp(-akT)的Z变换表达式。
答:
>>symsktz;f=k*exp(-a*t);F=ztrans(f,t,z)
f=
k*z/exp(-a)/(z/exp(-a)-1)
1-10求一阶微分方程Dx=ax+by(t),x(0)=x0的解。
答:
>>f='Dx=a*x+b*y';x=dsolve(f,'x(0)=x0','t')
x=
-b*y/a+exp(a*t)*(b*y+x0*a)/a
1-12求以下方程组边值问题的解。
Df=3f+4g,Dg=-4f+3g,f(0)=0,g(0)=1
答:
>>f='Dx1=3*x1+4*x2,Dx2=-4*x1+3*x2';[x1,x2]=dsolve(f,'x1(0)=0,x2(0)=1','t')
x1=
exp(3*t)*sin(4*t)
x2=
exp(3*t)*cos(4*t)
第2章控制系统的数学模型及其转换
2-1已知系统的传递函数为
试用MATLAB建立其状态空间表达式。
答:
>>num=[111];den=[16116];[A,B,C,D]=tf2ss(num,den)
A=
-6-11-6
100
010
B=
1
0
0
C=
111
D=
0
2-2已知系统的状态空间表达式为
试用MATLAB求其传递函数阵。
答:
>>A=[01;-2-3];B=[10;11];C=[10;11];D=zeros(2,2);
>>[num1,den1]=ss2tf(A,B,C,D,1),[num2,den2]=ss2tf(A,B,C,D,2)
num1=
01.00004.0000
02.00002.0000
den1=
132
num2=
00.00001.0000
01.00001.0000
den2=
132
2-3已知两子系统的传递函数分别为
,
试利用MATLAB求两子系统串联和并联时系统的传递函数。
答:
>>num1=1;den1=[132];num2=1;den2=[130];
>>[num,den]=series(num1,den1,num2,den2)
num=
00001
den=
161160
>>num1=1;den1=[132];num2=1;den2=[130];
>>[num,den]=parallel(num1,den1,num2,den2)
num=
00262
den=
161160
2-4设系统的状态空间表达式为
若取线性变换阵
设新的状态变量为
,则利用MATLAB求在新状态变量下,系统状态空间表达式。
答:
>>A=[01;-2-3];B=[1;2];C=[30];D=[0];P=[11;1-1];
>>[A1,B1,C1,D1]=ss2ss(A,B,C,D,P)
A1=
-20
3-1
B1=
3
-1
C1=
1.50001.5000
D1=
0
2-5已知离散系统状态空间表达式
试用MATLAB求其系统的脉冲传递函数。
答:
>>A=[01;13];B=[0;1];C=[11];D=0;T=1;[A1,B1,C1,D1]=c2dm(A,B,C,D,T)
A1=
2.95987.3357
7.335724.9669
B1=
1.9598
7.3357
C1=
11
D1=
0
第3章连续系统的数字仿真
3-1已知线性定常系统的状态空间表达式为
且初始状态为零,试利用四阶-龙格库塔法求系统的单位阶跃响应。
答:
%ex3_1.m
r=1;A=[01;-5-6];B=[2;0];C=[12];d=0;
Tf=5;h=0.1;
x=[zeros(length(A),1)];y=0;t=0;
fori=1:
Tf/h
K1=A*x+B*r;
K2=A*(x+h*K1/2)+B*r;
K3=A*(x+h*K2/2)+B*r;
K4=A*(x+h*K3)+B*r;
x=x+h*(K1+2*K2+2*K3+K4)/6;
y=[y;C*x];t=[t;t(i)+h];
end
plot(t,y)
3-2设单位反馈系统的开环传递函数
试利用二阶-龙格库塔法求系统的单位阶跃响应。
答:
%ex3_2.m
r=1;numo=4;deno=[1,2,0];[num,den]=cloop(numo,deno);
[A,b,C,d]=tf2ss(num,den);
Tf=5;h=0.1;
x=[zeros(length(A),1)];y=0;t=0;
fori=1:
Tf/h
K1=A*x+b*r;
K2=A*(x+h*K1)+b*r;
x=x+h*(K1+K2)/2;y=[y;C*x];t=[t;t(i)+h];
end
plot(t,y)
3-4利用input()函数修改例3-1所给程序ex3_1.m,将其中给定的参数r,numo,deno,numh和denh利用键盘输入,使其变为连续控制系统面向传递函数的通用数字仿真程序。
答:
3-5利用input()函数修改例3-2所给程序ex3_2.m,将其中给定的参数r,P,W,W0和Wc利用键盘输入,使其变为连续控制系统面向结构图的通用数字仿真程序。
答:
第4章连续系统按环节离散化的数字仿真
4-1已知非线性习题如图题4-1所示,试利用连续系统按环节离散化的数字仿真方法,求输出量y的动态响应,并与无非线性环节进行比较。
(图略)
答:
%ex4_1.m%主程序
R=10;
P=[0.110.5155;011000;212000;10110000];
W=[000-1;1000;0100;0010];
W0=[1;0;0;0];Wc=[0001];
Tf=25;T=0.02;
A=P(:
1);B=P(:
2);C=P(:
3);D=P(:
4);
FZ=P(:
5);S=P(:
6);
n=length(A);
fori=1:
n
if(A(i)~=0)
if(B(i)==0)
E(i)=0;F(i)=0;G(i)=0;H(i)=0;
L(i)=(C(i)+D(i)/T)/A(i);Q(i)=-D(i)/(A(i)*T);
else
E(i)=exp(-A(i)*T/B(i));
F(i)=(D(i)/B(i)-C(i)/A(i))*((1-E(i))*B(i)/(A(i)*T)-1);
G(i)=(D(i)/B(i)-C(i)/A(i))*(1+(E(i)-1)*(1+B(i)/(A(i)*T)));
H(i)=1;L(i)=D(i)/B(i);Q(i)=0;
end
else
if(B(i)~=0)
E(i)=1;F(i)=0.5*C(i)*T/B(i);G(i)=F(i);
H(i)=1;L(i)=D(i)/B(i);Q(i)=0;
else
disp('A(i)=B(i)=0');
end
end
end
x=[zeros(length(A),1)];x0=x;z=x;
u=[zeros(length(A),1)];u0=u;
y=[zeros(length(Wc(:
1)),1)];t=0;
forj=1:
Tf/T
u1=u;u=W*x+W0*R;
fori=1:
n
if(FZ(i)~=0)
if(FZ(i)==1)u(i)=saturation(u(i),S(i));end
if(FZ(i)==2)u(i)=deadzone(u(i),S(i));end
if(FZ(i)==3)[u(i),u0(i)]=backlash(u0(i),u(i),u1(i),S(i));end
if(FZ(i)==4)u(i)=sign1(u(i),S(i));end
end
end
x1=x;
fori=1:
n
z(i)=E(i)*z(i)+F(i)*u(i)+G(i)*u1(i);
x(i)=H(i)*z(i)+L(i)*u(i)+Q(i)*u1(i);
end
fori=1:
n
if(FZ(i)~=0)
if(FZ(i)==5)x(i)=saturation(x(i),S(i));end
if(FZ(i)==6)x(i)=deadzone(x(i),S(i));end
if(FZ(i)==7)[x(i),x0(i)]=backlash(x0(i),x(i),x1(i),S(i));end
if(FZ(i)==8)x(i)=sign1(x(i),S(i));end
end
end
y=[y,Wc*x];t=[t,t(j)+T];
end
plot(t,y)
%saturation.m%子程序
functionx=saturation(u,s)
if(abs(u)>=s)