matlab程序大全.docx
- 文档编号:4033858
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:25
- 大小:143.86KB
matlab程序大全.docx
《matlab程序大全.docx》由会员分享,可在线阅读,更多相关《matlab程序大全.docx(25页珍藏版)》请在冰豆网上搜索。
matlab程序大全
频率特性类题目
1一个系统的开环传递函数为,试绘制其当K=5、30时系统的开环频率特性Nyquist图,并判断系统的稳定性。
w=linspace(0.5,5,1000)*pi;
sys1=zpk([],[0-10-2],100)
sys2=zpk([],[0-10-2],600)
figure
(1)
nyquist(sys1,w)
title('systemnyquistchartswithk=5')
figure
(2)
nyquist(sys2,w)
title('systemnyquistchartswithk=30')
由图可知K=5时,开环Nyquist曲线没有包围(-1,j0)点,所以系统稳定。
K=30时,开环Nyquist曲线包围(-1,j0)点,所以系统不稳定。
2系统开环传递函数为,建立其零极点增益模型,然后分别绘制当K=5、K=30时系统的开环频率特性Bode图,并判断系统的稳定性。
sys1=zpk([],[0-10-2],100)
sys2=zpk([],[0-10-2],600)
figure
(1)
[Gm1,Pm1,Wcg1,Wcp1]=margin(sys1)
bode(sys1)
title('systembodechartswithk=5'),grid
figure
(2)
[Gm2,Pm2,Wcg2,Wcp2]=margin(sys2)
bode(sys2)
title('systembodechartswithk=30'),grid
因为K=5时,Wcg>Wcp,所以系统稳定。
K=10时,Wcg 3系统开环传递函数为,计算K=5和K=30时系统的幅值裕度与相位裕度。 sys1=zpk([],[0-10-2],100) sys2=zpk([],[0-10-2],600) [Gm1,Pm1,Wcg1,Wcp1]=margin(sys1) [Gm2,Pm2,Wcg2,Wcp2]=margin(sys2) 4已知某系统的闭环传递函数 如下,试用roots()命令来判断系统的稳定性。 num=[000325]; den=[124576]; D=num+den; roots(D) 5某单位负反馈系统的开环控制系统的传递函数为 (1)绘制系统的根轨迹; num=[10.80.64]; x=[0-0.05-5-40]; den=poly(x); rlocus(num,den) (2)当 时,绘制系统的Bode图,判断系统的稳定性,并且求出幅值裕度和相角裕度。 num=[10.80.64]; x=[0-0.05-5-40]; den=poly(x); sys=tf(num,den) bode(sys),grid [Gm,Pm,Wcg,Wcp]=margin(sys) 6已知系统的状态空间模型如下: x+ u x (1)绘制系统的Bode图和nyquist图; (2)求系统的幅值裕度和相位裕度; A=[1,-1;1,3];B=[1,0]'; C=[1,1];D=0; w=linspace(0.5,5,1000)*pi; sys=ss(A,B,C,D) figure (1),bode(sys),grid figure (2),nyquist(sys,w) [Gm,Pm,Wcg,Wcp]=margin(sys) 7已知单位负反馈系统的开环传递函数为 ,试绘制系统的单位阶跃响应、开环Bode图和Nyquist曲线,并求系统的幅值裕度和相位裕度。 sys=zpk(-1,[00-1],1) sys1=feedback(sys,1,-1) figure(3) step(sys1) figure (1) bode(sys),grid figure (2) nyquist(sys),grid [Gm,Pm,Wcg,Wcp]=margin(sys) 编写程序题 1编写两个m文件,分别使用for和while循环语句计算 。 y=0; fork=1: 200 y=y+k^3; end y y=0;k=1; whilek<=200 y=y+k^3; k=k+1; end y 2一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数,编写M文件,输出全部水仙花数。 form=100: 999 m1=fix(m/100); m2=fix((m-100*m1)/10); m3=fix(m-100*m1-10*m2); ifm==m1^3+m2^3+m3^3 disp(m) end end 3编写M文件,实现以下功能: 从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。 4编写M脚本文件,使得运行该文件后能求出[100,200]之间第一个能被21整除的整数。 fori=100: 200 ifmod(i,21)==0 break end end i 5先编写一个函数文件,文件名为tran,使得该函数文件实现直角坐标(x,y)与极坐标(ρ,θ)之间的转换。 然后编写脚本文件,文件名为main1,在脚本文件中实现如下功能: 要求用户从键盘输入直角坐标X和Y,调用函数文件实现直角坐标到极坐标的转换,输出极坐标的值。 tran.m: function[rho,theta]=tran(x,y) rho=sqrt(x*x+y*y); theta=atan(y/x); main1.m: x=input('Pleaseinputx=: ') y=input('Pleaseinputy=: ') [rho,theta]=tran(x,y); rho theta 6猜数游戏。 首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。 根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“Youwon”,同时退出游戏。 用户最多可以猜7次。 x=fix(100*rand (1)); i=1 whilei<=7 y=input('') ifx==y disp('Youwon') break; elseifx>y disp('Low') elsedisp('High') end i=i+1; end 7编写M脚本文件,分别使用for和while循环语句计算 的值,并且显示出sum的结果。 sum=0; fori=1: 10 sum=sum+i^i; end sum sum=0; whilei<=10 sum=sum+i^i; i=i+1; end sum 8用筛选法求某自然数范围内的全部素数。 素数是大于1,且除了1和它本身以外,不能被其他任何整数所整除的整数。 用筛选法求素数的基本思想是: 要找出2~m之间的全部素数,首先在2~m中划去2的倍数(不包括2),然后划去3的倍数(不包括3),由于4已被划去,再找5的倍数(不包括5),…,直到再划去不超过的数的倍数,剩下的数都是素数。 functiony=sushu(x) y=2: x; n=2: x; forj=2: x m=j*n; y=setdiff(y,m); end 9已知 ,当n=100时,求y的值。 y=0;n=100; fork=1: n y=y+(1/(2*k-1)); k=k+1; end y 10利用for循环计算1! +2! +3! +…..+20! 的值。 sum=0; fori=1: 20 y=1; forn=1: i y=y*n; end sum=sum+y; end sum 11用while循环来实现求1+2+……+100的值。 y=0;n=1; whilen<=100 y=y+n; n=n+1; end y 12编一函数计算以下分段函数值。 functiony=f(x); ifx<0 y=x; elseifx>=0&x<1 y=2*x^2+1; elsey=3*x^3+2*x^2+1; end 13我国新税法规定: 个体工商户的生产、经营所得和对企事业单位的承包经营、承租经营所得应缴纳的个人所得税为 全年收入中应缴纳所得税部分税率/% (1)不超过5000元的5 (2)超过5000元至10000元的部分10 (3)超过10000元至30000元的部分20 (4)超过30000元至50000元的部分30 (5)超过50000元的部分35 试编程加以计算。 x=input('x=') ifx<=5000 y=0.05*x; elseifx>5000&x<=10000 y=0.1*x; elseifx>10000&x<=30000 y=0.2*x; elseifx>30000&x<=50000 y=0.3*x; elsey=0.35*x; end y 14矩阵乘法运算要求两矩阵的维数相容,否则会出错。 设两个矩阵为A=[1,2;5,6];B=[7,9;20,11];先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。 A=[1,2;5,6];B=[7,9;20,11]; try C=A*B; catch C=A.*B; end C 15编制M脚本文件,要求从键盘逐个输入数值(input),然后判断输入的数是大于0还是小于0,并输出提示(使用disp命令)是正数(positiveone)还是负数(negativeone),同时记录输入的正数、负数的个数。 当输入0时,终止此M文件的运行(使用break命令);当输入第10个数字时,显示记录的正、负数个数并终止程序。 i=0;j=0; forn=1: 10 x=input('Thenumis: ') ifx>0 i=i+1; disp('positiveone') elseifx<0 j=j+1; disp('negativeone') elsebreak end end i,j 16一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数,编写M文件,输出全部水仙花数。 17编写M文件,实现以下功能: 从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。 sum=0;cnt=0; x=input('x=') whilex~=0 sum=sum+x; cnt=cnt+1; x=input('x=') end ifcnt>0 average=sum/cnt; end sum,average 18一数组的元素满足规则: a (1)=a (2)=1,a(3)=a (1)+a (2),a(4)=a (2)+a(3),…依次类推,求该数组中第一个大于10000的元素。 a (1)=1;a (2)=1;i=1; whilea(i)<=10000 a(i+2)=a(i+1)+a(i); i=i+1; end i a(i) 19某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示): price<200没有折扣 200≤price<5003%折扣 500≤price<10005%折扣 1000≤price<25008%折扣 2500≤price<500010%折扣 5000≤price14%折扣 请编写程序,使得当从计算机输入所售商品的打折前价格后,能输出其实际销售价格。 x=input('x=') ifx<200 y=x; elseifx>=200&x<500 y=0.97*x; elseifx>=500&x<1000 y=0.95*x; elseifx>=1000&x<2500 y=0.92*x; elseifx>=2500&x<5000 y=0.9*x; elsey=0.86*x; end y 20编写M脚本文件,分别使用for和while循环语句计算 的值,并且显示出sum的结果。 21已知 ,当n=100时,求y的值。 22编写函数文件使其实现如下功能: 当在命令窗口输入数字后,根据输入参数的个数决定输出的结果;当没有参数输入时,显示“无输入参数”;当有一个参数时,则以该参数为边绘制正方形;当有两个参数时,则以两个参数为长和宽绘制矩形。 functiony=H(varargin)%varargin表示可变的参数 ifnargin==0 disp('无输入参数') elseifnargin==1 r=varargin{1}; rectangle('position',[00rr])%表示从(0,0)点开始画宽为R,高为R的矩形 elsenargin==2 r1=varargin{1}; r2=varargin{2}; rectangle('position',[00r1r2]) end 23编制M脚本文件,要求从键盘逐个输入数值(input),然后判断输入的数是大于0还是小于0,并输出提示(使用disp命令)是正数(positiveone)还是负数(negativeone),同时记录输入的正数、负数的个数。 当输入0时,终止此M文件的运行(使用break命令);当输入第10个数字时,显示记录的正、负数个数并终止程序。 i=0;j=0; forx=1: 10 n=input('') ifn<0 i=i+1; disp('negativeone') elseifn>0 j=j+1; disp('positionone') elsebreak end end i j 24若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。 求[1,500]之间的全部完数。 form=1: 500 s=0; fork=1: m/2 ifrem(m,k)==0 s=s+k; end end ifm==s disp(m) end end 25今有多项式P1(x)=x^4-2x+1,P2(x)=x^2+4x-0.5,要求先求得P(x)=P1(x)+P2(x),然后计算xi=0.2*i各点上的P(xi)(i=0,1,2,…,5)值。 A=[100-21];B=[0014-0.5]; C=A+B i=0: 5; xi=0.2*i; y=polyval(C,xi) 26试编一个m程序,将一维数组x中的N个数按颠倒的次序重新存储。 要求运行程序后,在命令窗口提示“请用[]输入一个一维数组;”,输入完毕后若回车,就能在输出窗口显示刚才所输入的数组的颠倒次序。 (如N=5,原来x为: x=[13579] 而经过颠倒处理后x中数据的次序应该为: x=[97531]) x=input('请用[]输入一个一维数组: x=') x1=fliplr(x) 模型建立及转换题 1某系统的传递函数为 使用MATLAB求出状态空间表达式和零极点模型。 num=[1.323];den=[10.51.21]; sys=tf(num,den) nsys=zpk(sys) 2求出以下系统的传递函数 , A=[-1,0,1;1,-2,0;0,0,-3];B=[0,0,1]';C=[110];D=1; sys=ss(A,B,C,D) nsys=tf(sys) 3已知某系统的传递函数为: ,试用MATLAB语言求出该系统的传递函数模型、状态空间模型和零极点增益模型。 num=[12241220];den=[24622]; sys=tf(num,den) sys1=zpk(sys) sys2=ss(sys) 4已知双闭环调速系统电流环内的前向通道3个模块传递函数分别为: 试求串联连接的等效传递函数及其等效状态空间模型。 num1=[0.01281];den1=[0.040]; num2=[30];den2=[0.00167,1]; num3=[2.5];den3=[0.01281]; sys1=tf(num1,den1) sys2=tf(num2,den2) sys3=tf(num3,den3) sys=sys1*sys2*sys3 nsys=ss(sys) 5已知两个环节的传递函数分别为: 试求两环节并联连接等效传递函数的num与den向量及等效的状态空间模型。 num1=[1];den1=[12]; num2=[21];den2=[112]; sys1=tf(num1,den1) sys2=tf(num2,den2) sys=sys1+sys2 [num,den]=tfdata(sys,'v') nsys=ss(sys) 6将传递函数模型 转换为状态空间模型和零极点模型。 num=[10];den=[132]; sys=tf(num,den) sys1=zpk(sys) sys2=ss(sys) 7系统方程为 求出其状态空间表达式,写出A、B、C、D阵,建立其MATLAB状态空间模型,然后绘制其单位阶跃响应曲线。 A=[010;001;-16-11-6];B=[006]'; C=[100];D=0; sys=ss(A,B,C,D) step(sys) 8设有一质量弹簧阻尼系统,如下图所示。 F(t)为输入的外力,y(t)为质量块的位移,弹簧的弹性系数为k,阻尼器的阻尼系数为f。 系统的动态方程组为: 求出其状态空间表达式,写出A、B、C、D阵,建立其MATLAB状态空间模型,然后绘制其单位阶跃响应曲线(只要写出MATLAB语句即可)。 A=[01;-k/m-f/m];B=[0F(t)/m]; C=[10];D=0; sys=ss[A,B,C,D] step(sys) 9对下图中所示系统进行建模、模型转换及仿真: ⑴用MATLAB语言表示图示系统的模型,并给出传递函数、零极点和状态空间三种模型的具体表达。 num1=[10.5];den1=[10.1]; z=[];p=[0-2-10];k=[20]; sys1=tf(num1,den1) sys2=zpk(z,p,k) sys3=sys1*sys2 sys=feedback(sys3,1,-1) nsys1=tf(sys) nsys2=ss(sys) ⑵用MATLAB语言画出系统单位阶跃响应的波形。 10对图中所示的质量—弹簧—阻尼机械系统,系统的动力学方程为: 其中,m=5kg,k=2N/m,c=0.1N/m.s ,建立其MATLAB状态空间模型,写出A、B、C、D阵,然后绘制其单位阶跃响应曲线。 A=[0,1;-2/5,-0.1/5]; B=[0,2/5]'; C=[1,0]; D=0; sys=ss(A,B,C,D) step(sys) 11求下面系统在阶跃信号为0.11(t)时系统的响应。 并求系统性能指标: 稳态值、上升时间、调节时间、超调量 num=[20];den=[18364020]; sys=tf(num,den) final=polyval(num,0)/polyval(den,0) [y,t]=step(sys) [yp,k]=max(y) tp=t(k) chaotiao=100*(yp-final)/final n=1; whiley(n) n=n+1; end risetime=t(n) i=length(t); while(y(i)>0.98*final&y(i)<1.02*final) i=i-1; end ts=t(i) step(0.1*sys) 12已知系统传递函数 ,绘制系统阶跃响应曲线;绘出离散化系统阶跃响应曲线,采样周期 。 num=[1];den=[10.21.01]; sys1=tf(num,den) sys2=tf(num,den,0.3) figure (1) step(sys1) figure (2) step(sys2) 数值计算类题目 1求解以下线性代数方程: A=[1,0,2;1,1,3;3,1,2]; B=[2,1,1]'; X=inv(A)*B 2已知矩阵 , 试分别求出A阵和B阵的秩、转置、行列式、逆矩阵以及特征值。 A=[013;121;542];B=[218;414;332]; A1=rank(A) B1=rank(B) A2=A.' B2=B.' A3=det(A) B3=det(B) A4=inv(A) B4=inv(B) A5=eig(A) B5=eig(B) 3已知矩阵 , 在Command窗口中分别求出 、 矩阵为 中每个元素平方组成的矩阵、 矩阵为 阵乘以 阵、 矩阵为 阵和 阵数组乘积(即: 对应元素分别相乘的积构成的矩阵)。 A=[013;121;542];B=[218;414;332]; C=A^2 D=A.^2 E=A*B F=A.*B 4求复数矩阵 的转置C1与共轭转置C2。 A=[157;634];B=[3-13;22-3]; C=A+B*i C1=C.' C2=C' 5假设a、b、c和d的定义如下: ; ; ; 分别写出下列表达式的运算结果。 (1)a*b (2)a*c (3)a.*d (4)a*d ans= -12 -25 ans= 3 8 ans= 50 105 ans= 50 6求解由下面四个方程组成的方程组。 A=[2-312;1301;1-118;71-22]; B=[8675]'; C=inv(A)*B 7求解由下面四个方程组成的方程组。 A=[2-312;1301;1-118;71-22]; B=[1723951]'; C=inv(A)*B 8已知某班的5名学生的三门课成绩列表如下: 学生序号12345 高等数学7889647368 外语8377807870 MATLAB语言8291788268 试写出有关命令,先分别找出三门课的最高分及其学生序号;然后找出三门课总分的最高分及其学生序号。 A=[7889647368;8377807870;829178
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 程序 大全