实验三MATLAB程序设计
Matlab实验报告(三)-MATLAB绘图
实验目的1.掌握MATLAB的基本绘图命令。
2.掌握运用MATLAB绘制一维、二维、三维图形的方法.3.给图形加以修饰。
一、预备知识1.基本绘图命令plotplot绘图命令一共有三种形式:⑴plot(y)是plot命令中最为简单的形式,当y为向量时,以y的元素为纵坐标,元素相应的序列号为横坐标,绘制出连线;若y为实矩阵,则按照列绘出每列元素和其序列号的对应关系,曲线数等于矩阵的列数;当y为复矩阵时,则按列以每列元素的实部为横坐标,以虚部为纵坐标,绘出曲线,曲线数等于列数。
⑵ plot(x,y,[linspec])其中linspec是可选的,用它来说明线型。
当x和y为同维向量时,以x为横坐标,y为纵坐标绘制曲线;当x是向量,y是每行元素数目和x维数相同的矩阵时,将绘出以x为横坐标,以y中每行元素为纵坐标的多条曲线,曲线数等于矩阵行数;当x为矩阵,y为相应向量时,使用该命令也能绘出相应图形。
⑶ plot(x1,y1,x2,y2,x3,y3……)能够绘制多条曲线,每条曲线分别以x和y为横纵坐标,各条曲线互不影响。
线型和颜色MATLAB可以对线型和颜色进行设定,线型和颜色种类如下:线:—实线:点线 -.虚点线——折线点:.圆点 +加号 *星号 x x型 o 空心小圆颜色:y 黄 r 红 g 绿 b 蓝 w 白 k 黑 m 紫 c 青特殊的二维图形函数表5 特殊2维绘图函数[1] 直方图在实际中,常会遇到离散数据,当需要比较数据、分析数据在总量中的比例时,直方图就是一种理想的选择,但要注意该方法适用于数据较少的情况。
直方图的绘图函数有以下两种基本形式。
·bar(x,y) 绘制m*n 矩阵的直方图.其中y 为m *n 矩阵或向量,x 必须单向递增。
·bar(y) 绘制y 向量的直方图,x 向量默认为x=1:m close all; %关闭所有的图形视窗。
x=1:10;y=rand (size(x )); bar(x,y ); %绘制直方图.123456789100.51Bar()函数还有barh ()和errorbar ()两种形式,barh()用来绘制水平方向的直方图,其参数与bar()相同,当知道资料的误差值时,可用errorbar ()绘制出误差范围,其一般语法形式为:errorbar (x,y,l,u)其中x,y 是其绘制曲线的坐标,l ,u 是曲线误差的最小值和最大值,制图时,l 向量在曲线下方,u 向量在曲线上方。
实验三 信号卷积的MATLAB实现
实验三信号卷积的MATLAB实现一、实验名称:信号卷积的MATLAB实现二、实验目的:1.增加学生对卷积的认识2.了解MATLAB这个软件的一些基础知识3.利用MATLAB计算信号卷积4.验证卷积的一些性质三、实验原理:用MATLAB实现卷积我们先必须从信号下手,先把信号用MATLAB语句描述出来,然后再将这些信号带入到我们写好的求卷积的函数当中来计算卷积。
在本章中我们将信号分为连续信号和离散序列两种来实现卷积并验证卷积的一些性质。
MATLAB强大的图形处理功能及符号运算功能,为我们实现信号的可视化提供了强有力的工具。
在MATLAB中通常有两种方法来表示信号,一种是用向量来表示信号,另一种则是用符号运算的方法来表示信号。
用适当的MATLAB 语句表示出信号后,我们就可以利用MATLAB的绘图命令绘制出直观的信号波形。
连续时间信号,是指自变量的取值范围是连续的,且对于一切自变量的取值,除了有若干不连续点以外,信号都有确定的值与之对应的信号。
从严格意义上来讲,MATLAB并不能处理连续信号,在MATLAB中,是用连续信号在等时间间隔点的样值来近似地表示连续信号的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。
在MATLAB中连续信号可用向量或符号运算功能来表示。
1.向量表示法对于连续时间信号f(t),我们可以用两个行向量f和t来表示,其中向量t是行如t=t1:p:t2的MATLAB命令定义的时间范围向量,t1为信号起始时间,t2为中止时间,p为时间间隔。
向量f为连续信号f(t)在向量t所定义的时间点上的样值。
例如对于连续信号f(t)=sin(t),我们可以用如下两个向量来表示:t=-10:1.5:10;f=sin(t)用上述向量对连续信号表示后,就可以用plot命令来绘出该信号的时域波形。
Plot命令可将点与点间用直线连接,当点与点间的距离很小时,绘出的图形就成了光滑的曲线。
命令如下:plot(t,f)title(‘f(t)=sint’)xlabel(‘t’)axis([-10,10,-1.1,1.1])绘制的信号波形如图3.1所示,当把时间间隔p取得更小(如0.01)时,就可得到sint较好的近似波形,如图3.2所示。
实验三_M_文件及_MATLAB_程序设计与调试
实验三M 文件及MATLAB 程序设计与调试一、实验目的全面掌握在MA TLAB 下进行程序设计的有关问题,具体涉及到M 脚本文件和M 函数文件的编写、全局和局部变量的使用、流程控制结构、提高程序执行效率的设计技术、程序调试等问题。
二、实验内容1、关于M 脚本文件和M 函数文件MATLAB 的M 文件有两类:脚本文件和函数文件。
(1)脚本文件——将原本要在MATLAB 的指令窗口中直接输入的语句,放在一个以.m 为后缀的,称为脚本文件中。
有了脚本文件,可直接在MATLAB 中输入脚本文件名(不含后缀)。
MATLAB 会打开这一脚本文件,并依次执行脚本文件中的每一条语句,这与在MATLAB 中直接输入语句的结果完全一致。
(2)函数文件——它的第一行必须是函数定义行。
M 函数文件由5 部分构成:◆函数定义行◆H1 行◆函数帮助文本◆函数体◆注释注意:在函数文件中,除了函数定义行之外,其它部分都是可以省略的。
但作为一个函数,为了提高函数的可用性,应加上H1 行和函数帮助文本,为了提高函数的可读性,应加上适当的注释。
例如:function y = mean(x)% MEAN Average or mean value.% For vectors, MEAN(X) is the mean value of the elements in X.% For matrices, MEAN(X) is a row vector containing the mean value of each column.[m,n]=size(x);if m==1% Determine whether x is a vectorm=n;endy = sum(x)/m;①函数定义行:function y = mean(x)function 为函数定义的关键字,mean 为函数名,y 为输出变量,x 为输入变量当函数具有多个输出变量时,则以方括号括起;当函数具有多个输入变量时,则直接用圆括号括起。
Matlab实验三 绘制根轨迹
for
Principles of Automatic Control
实验三 绘制根轨迹 1: 绘制根轨迹 2: 参量分析
① 绘制根轨迹 rlocus(sys)
Gk
(s)
K *(s 1) (s 2)(s 3)
rlocus(num, den)
rlocus(sys,k)
②参量分析(根轨迹图上一顿乱点即可)
K1
(s a )nm
1
根轨迹渐进线的方程是新的根轨迹方程。
Байду номын сангаас
• 例: 绘制根轨迹及其渐近线
G(s)
K1
s(s 1)(s 2)
⑥讨论增加零点对根轨迹的影响 试试-2至-4之间的零点
G(s)
K1
s(s 1)(s 2)
r=rlocus(sys)
Gk
(s)
K *(s 1) (s 2)(s 3)
r=rlocus(num, den)
[r,k]=rlocus(sys)
[r,k]=rlocus(num, den)
③测量出根轨迹增益和对应闭环极点坐标,
在窗口显示
Gk
(s)
K *(s 1) (s 2)(s 3)
[k,poles] = rlocfind(sys)
[k,poles] = rlocfind(sys,p) P为已知的要研究的闭环极点。
④绘制零、极点以及在窗口显示零极点
pzmap(sys)
Gk
(s)
K *(s 1) (s 2)(s 3)
[p,z]=pzmap(sys) 求解零极点的好方法
⑤绘制根轨迹渐近线
一般人我不告诉他:
当根轨迹渐进线与实轴的交点已求出后, 可得到方程,这是根轨迹渐进线的方程。
实验三:使用matlab求解最小费用最大流算问题
北京联合大学实验报告项目名称: 运筹学专题实验报告学院: 自动化专业:物流工程班级: 1201B 学号:2012100358081 姓名:管水城成绩:2015 年 5 月 6 日实验三:使用matlab求解最小费用最大流算问题一、实验目的:(1)使学生在程序设计方面得到进一步的训练;,学习Matlab语言进行程序设计求解最大流最小费用问题。
二、实验用仪器设备、器材或软件环境计算机,Matlab R2006a三、算法步骤、计算框图、计算程序等1.最小费用最大流问题的概念。
在网络D(V,A)中,对应每条弧(vi,vj)IA,规定其容量限制为cij(cij\0),单位流量通过弧(vi,vj)的费用为dij(dij\0),求从发点到收点的最大流f,使得流量的总费用d(f)为最小,即mind(f)=E(vi,vj)IA2。
求解原理。
若f是流值为W的所有可行流中费用最小者,而P是关于f的所有可扩充链中费用最小的可扩充链,沿P以E调整f得到可行流fc,则fc是流值为(W+E)的可行流中的最小费用流.根据这个结论,如果已知f是流值为W的最小费用流,则关键是要求出关于f 的最小费用的可扩充链。
为此,需要在原网络D的基础上构造一个新的赋权有向图E(f),使其顶点与D的顶点相同,且将D中每条弧(vi,vj)均变成两个方向相反的弧(vi,vj)和(vj,vi)1新图E(f)中各弧的权值与f中弧的权值有密切关系,图E(f)中各弧的权值定义为:新图E(f)中不考虑原网络D中各个弧的容量cij。
为了使E(f)能比较清楚,一般将长度为]的弧从图E(f)中略去.由可扩充链费用的概念及图E(f)中权的定义可知,在网络D中寻求关于可行流f的最小费用可扩充链,等价于在图E(f)中寻求从发点到收点的最短路.因图E(f)中有负权,所以求E(f)中的最短路需用Floyd算法。
1.最小费用流算法的框图描述。
图一2.计算最小费用最大流MATLAB源代码,文件名为mp_mc.mfunction[Mm,mc,Mmr]=mp_mc(a,c)A=a; %各路径最大承载流量矩阵C=c; %各路径花费矩阵Mm=0; %初始可行流设为零mc=0; %最小花费变量mcr=0;mrd=0;n=0;while mrd~=inf %一直叠代到以花费为权值找不到最短路径for i=1:(size(mcr’,1)—1)if a(mcr(i),mcr(i+1))==infta=A(mcr(i+1),mcr(i))—a(mcr(i+1),mcr(i)); elseta=a(mcr(i),mcr(i+1));endn=min(ta,n);%将最短路径上的最小允许流量提取出来endfor i=1:(size(mcr’,1)-1)if a(mcr(i),mcr(i+1))==infa(mcr(i+1),mcr(i))=a(mcr(i+1),mcr(i))+n;elsea(mcr(i),mcr(i+1))=a(mcr(i),mcr(i+1))—n;endendMm=Mm+n;%将每次叠代后增加的流量累加,叠代完成时就得到最大流量 for i=1:size(a,1)for j=1:size(a’,1)if i~=j&a(i,j)~=infif a(i,j)==A(i,j) %零流弧c(j,i)=inf;c(i,j)=C(i,j);elseif a(i,j)==0 %饱合弧c(i,j)=inf;c(j,i)=C(j,i);elseif a(i,j)~=0 %非饱合弧c(j,i)=C(j,i);c(i,j)=C(i,j);endendendend[mcr,mrd]=floyd_mr(c) %进行叠代,得到以花费为权值的最短路径矩阵(mcr)和数值(mrd)n=inf;end%下面是计算最小花费的数值for i=1:size(A,1)for j=1:siz e(A’,1)if A(i,j)==infA(i,j)=0;endif a(i,j)==infa(i,j)=0;endendendMmr=A—a; %将剩余空闲的流量减掉就得到了路径上的实际流量,行列交点处的非零数值就是两点间路径的实际流量for i=1:size(Mmr,1)for j=1:size(Mmr’,1)if Mmr(i,j)~=0mc=mc+Mmr(i,j)*C(i,j);%最小花费为累加各条路径实际流量与其单位流量花费的乘积endendend利用福得算法计算最短路径MATLAB源代码,文件名为floyd_mr。
MATLAB(实验三)
实验三1.利用 rand 函数编写一个新的函数 rand2,该函数能够产-之间的随机数,其中 n 为任意正数。
该函数以 rand 生[],n n函数为子函数。
解:function x=rand2(a,b,n)x=round(rand(a,b)*2*n-n);2.依据第五章创建的结构体,使用该结构体对一个班级的学生成绩进行管理,如计算总分、平均分、排列名次等。
解:student=struct('name',{'Hunter','Allen','Henry'},'number',{'1801','1803','1827'},'score',{[65 89 59],[48 63 75],[74 55 88]})student(1)Hunter_sum=sum(student(1).score)Hunter_mean=mean(student(1).score)student(2)Allen_sum=sum(student(2).score)Allen_mean=mean(student(2).score)student(3)Henry_sum=sum(student(3).score)Henry_mean=mean(student(3).score)score_sum=[ Hunter_sum,Allen_sum,Henry_sum];sort(score_sum,'descend')3.编写程序判断输入的年份是否为闰年并计算这一天是一年当中的第几天(包括当天)。
其中要求把判断闰年和计算天数的程序分别编写为两个函数文件leapyear.m和countday.m,并在主程序中输入要计算的年、月、日,实现对这两个函数的调用,输出信息说明该年是否是闰年和该天是一年的第几天。
实验三利用MATLAB进行系统频域分析
实验三利用MATLAB进行系统频域分析系统频域分析是指通过对系统的输入输出信号进行频域分析,从而分析系统的频率响应特性和频率域特征。
利用MATLAB进行系统频域分析可以方便地实现信号的频谱分析、滤波器设计等功能。
下面将介绍如何利用MATLAB进行系统频域分析的基本步骤。
一、信号频谱分析1. 将信号导入MATLAB环境:可以使用`load`函数导入数据文件,或者使用`audioread`函数读取音频文件。
2. 绘制信号的时域波形图:使用`plot`函数绘制信号的时域波形图,以便对信号的整体特征有一个直观的了解。
3. 计算信号的频谱:使用快速傅里叶变换(FFT)算法对信号进行频谱分析。
使用`fft`函数对信号进行频域变换,并使用`abs`函数计算频谱的幅度。
4. 绘制信号的频谱图:使用`plot`函数绘制信号的频谱图,以便对信号的频率特征有一个直观的了解。
二、滤波器设计1.确定滤波器类型和要求:根据系统的要求和信号的特性,确定滤波器的类型(如低通滤波器、高通滤波器、带通滤波器等)和相应的频率响应要求。
2. 设计滤波器:使用MATLAB中的滤波器设计函数(如`fir1`、`butter`、`cheby1`等)来设计滤波器。
这些函数可以根据指定的滤波器类型、阶数和频率响应要求等参数来生成相应的滤波器系数。
3. 应用滤波器:使用`filter`函数将滤波器系数应用到信号上,得到滤波后的信号。
三、系统频率响应分析1. 生成输入信号:根据系统的要求和实际情况,生成相应的输入信号。
可以使用MATLAB中的信号生成函数(如`square`、`sine`、`sawtooth`等)来生成基本的周期信号,或者使用`randn`函数生成高斯白噪声信号。
2.绘制输入信号的频谱图:使用前面提到的信号频谱分析方法,绘制输入信号的频谱图。
3. 输入信号与输出信号的频域分析:使用`fft`函数对输入信号和输出信号进行频谱分析,并使用`abs`函数计算频谱的幅度。
信号与系统matlab实验习题3 绘制典型信号及其频谱图
绘制典型信号及其频谱图答案在下面四个常用信号及其傅里叶变换式如表1所示。
(1)绘制单边指数信号及其频谱图的MATLAB程序如下:close all;E=1;a=1;t=0:0.01:4;w=-30:0.01:30;f=E*exp(-a*t);F=1./(a+j*w);plot(t,f);xlabel('t');ylabel('f(t)');figure;plot(w,abs(F));xlabel('\omega');ylabel('|F(\omega)|');figure;max_logF=max(abs(F));plot(w,20*log10(abs(F)/max_logF));xlabel('\omega');ylabel('|F(\omega)| indB');figure;plot(w,angle(F));xlabel('\omega');ylabel('\phi(\omega)');请更改参数,调试此程序,绘制单边指数信号的波形图和频谱图。
观察参数a 对信号波形及其频谱的影响。
注:题目中阴影部分是幅频特性的对数表示形式,单位是(dB),请查阅相关资料,了解这种表示方法的意义及其典型数值对应的线性增益大小。
(2)绘制矩形脉冲信号、升余弦脉冲信号和三角脉冲信号的波形图和频谱图,观察并对比各信号的频带宽度和旁瓣的大小。
(3)更改参数,调试程序,绘制单边指数信号的波形图和频谱图。
观察参数a对信号波形及其频谱的影响。
答案附上程序代码:close all;E=1;a=1;t=0:0.01:4;w=-30:0.01:30;f=E*exp(-a*t);F=1./(a+j*w);plot(t,f);xlabel('t');ylabel('f(t)');figure;plot(w,abs(F));xlabel('\omega');ylabel('|F(\omega)|';E=1,a=1,波形图 频谱图更改参数E=2,a=1;更改参数a ,对信号波形及其频谱的影响。
MATLAB程序设计实验报告
MATLAB 程序设计实验报告一、实验目的1. 通过实验熟悉MATLAB 仿真软件的使用方法;2. 掌握用MATLAB 对连续信号时域分析、频域分析和s 域分析的方法,利用绘图命令绘制出典型信号的波形,了解这些信号的基本特征;3. 掌握用MATLAB 对离散信号时域分析、频域分析和z 域分析的方法,利用绘图命令绘制出典型信号的波形,了解这些信号的基本特征;4. 通过绘制信号运算结果的波形,了解这些信号运算对信号所起的作用。
二、实验设备1. 计算机:2. MATLAB R2007a 仿真软件三、实验原理对系统的时域分析信号的时域运算包括信号的相加、相乘,信号的时域变换包括信号的平移、反折、倒相及信号的尺度变换。
(1)信号的相加和相乘:已知信号)(1t f 和)(2t f ,信号相加和相乘记为)()(1t f t f =)(2t f +;)()(1t f t f =)(2t f *。
(2)信号的微分和积分:对于连续时间信号,其微分运算是用diff 函数来完成的,其语句格式为:diff(function,’variable’,n),其中function 表示需要进行求导运算的信号,或者被赋值的符号表达式;variable 为求导运算的独立变量;n 为求导的阶数,默认值为求一阶导数。
连续信号的积分运算用int 函数来完成,语句格式为:diff(function,’variable’,a,b),其中function 表示需要进行被积信号,或者被赋值的符号表达式;variable 为求导运算的独立变量;a,b 为积分上、下限,a 和b 省略时为求不定积分。
(3)信号的平移、翻转和尺度变换信号的平移包含信号的左移与右移,信号的翻转包含信号的倒相与折叠,平移和翻转信号不会改变信号)(t f 的面积和能量。
信号的尺度变换是对信号)(t f 在时间轴上的变化,可使信号压缩或扩展。
)(at f 将原波形压缩a 倍,)/(a t f 将原波形扩大a 倍。
MATLAB实验三
效果图:2. 当k = 1,2,3时,在同一幅图用同时画出函数sin()y kx 的图形。
MATLAB 代码:x = 0:pi/100:2*pi; y1 = sin(x); y2 = sin(2*x); y3 = sin(3*x); plot(x,y1,x,y2,x,y3) axis([0 2*pi -1 1])legend('y = sin(x)','y = sin(2x)','y = sin(3x)')注:legend 的作用是对图中的不同曲线做标注效果图:以上画图的效果也可以用hold on实现:x = 0:pi/100:2*pi;y1 = sin(x);y2 = sin(2*x);y3 = sin(3*x);plot(x,y1);hold on;plot(x,y2);plot(x,y3);hold offsubplot(2,2,4); plot(x,y)title('y = exp(x)*sin(4x)')注:title 的作用是给图形写上标题 效果图:4. 作隐函数3330x y xy +-=(笛卡尔儿叶形线)的图形 MATLAB 代码:ezplot('x^3+y^3-3*x*y',[-2 2 -2 2])axis equal注: axis equal 的作用是把纵横坐标的刻度比例一致 效果图:5. 在极坐标系下画出心形线2(1cos )r θ=+ MATLAB 代码:theta = 0:pi/100:2*pi; r = 2*(1+cos(theta)); polar(theta,r,'r')注:参数’r’是表示用红色作图,参数与颜色之间的关系如下表所示:b 蓝色g 绿色r 红色c 青绿色m 洋红色y 黄色k 黑色效果图:5. 画出空间螺旋线cos(),sin(),x t y t z t ===的图形MATLAB 代码:t = 0:pi/100:10*pi;x = cos(t);y = sin(t);z = t;plot3(x,y,z)title('x = cos(t),y = sin(t) z = t')效果图:7. 画出MATLAB测试函数peaks的图形MATLAB代码:[X,Y,Z] = peaks;surf(X,Y,Z)shading interpcolormap(cool)注:shading可使用的参数及含义如下:faceted 网络修饰,这是缺省的方式flat 去掉黑色线条,根据小方格的值确定颜色interp 颜色整体改变,根据小方块四角的值差补过度点的值确定颜色colormap为色图设定函数,其参数及含义如下:hsv ——饱和值色图gray ——线性灰度色图hot ——暖色色图cool ——冷色色图bone ——兰色调灰色图copper ——铜色色图pink ——粉红色图prism ——光谱色图jet ——饱和值色图IIflag ——红、白、蓝交替色图六、课堂练习1. 在同一坐标系中画出函数1sin(2*3)y x=+,2sin(32)y x=+的图形,且对于不以同的曲线使用不同的线型;>> x=0:pi/100:2*pi;y1=sin(2*x+3);y2=sin(3*x+2);plot(x,y1,'r-',x,y2,'g+')legend('y1=sin(2*x+3)','y2=sin(3*x+2)')>>2. 当k 分别取1, 2, 3, 4的时候,在同一个窗口的四个子图中分别画出函数*sin(*)y t k t ,每个子图加上适当的标题;>> t = 0:pi/100:2*pi;% 画第一幅子图y = t.*sin(1*t);subplot(2,2,1);3. 画出三个两两相切的圆(假设这个三个圆的方程分别是:22221,(3)4x y x y +=-+=,22(4)9x y +-=);>> ezplot('x^2+y^2=1',[-7 7 -7 7]);hold onezplot('(x-3)^2+y^2=4',[-7 7 -7 7]);hold onezplot('x^2+(y-4)^2=9',[-7 7 -7 7]);4. 在极坐标系下画出三叶形曲线3*sin(3*)r θ=,并尝试不同的线形和颜色; theta = 0:pi/100:2*pi;>> r=3*sin(3*theta);>> polar(theta,r,'r')theta = 0:pi/100:2*pi; r=3*sin(3*theta); polar(theta,r,'g+')5. 画出星形线332*cos ,2*sin x t y t ==的图形; >> t = 0:pi/100:10*pi;x=2*cos(t).^3;>> y=2*sin(t).^3;>> plot(x,y)6. 画出双纽线22222()3*()x y x y +=-的图形; ezplot('(x^2+y^2)^2=3*(x^2-y^2)',[-3 3 -3 3])7. 画出三维曲线图:*cos ,*sin ,x t t y t t z t ===>> t=0:pi/100:2*pi;>> x=t.*cos(t);>> y=t.*sin(t);>> z=t;>> plot3(x,y,z)8. 分别用mesh和surf函数画出马鞍面2246x yz=-+9x=-pi:pi/50:pi;y=x;[X,Y]=meshgrid(x,y); z=-X.^2./4+Y.^2./6.*9; mesh(X,Y,z)>> x=-pi:pi/50:pi;y=x;[X,Y]=meshgrid(x,y); z=-X.^2./4+Y.^2./6.*9; >> surf(X,Y,z)9. 画出球心在原点的球。
《MATLAB程序设计》实验指导书
三、
实验仪器和设备
1、 计算机一台。 2、 MATLAB7.0 以上集成环境。
四、
预习要求
2
《MATLAB 程序设计》实验指导书
1、 复习 MATLAB 的启动与Байду номын сангаас出,熟悉 MATLAB 运行环境。 2、 复习 MATLAB 中矩阵的生成以及矩阵运算的基本原理。
五、
实验内容及步骤
实验内容:
1、 求下列表达式的值 1) z1
5
《MATLAB 程序设计》实验指导书
2) 函数调用 函数文件编制好后,就可调用函数进行计算了。函数调用的一般格式为 [输出实参表]=函数名(输入实参表) 注意:函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个 数一致,否则会出错。函数调用时,实参先传递给形参,然后再执行函数功能。 5、 选择结构 1) if 语句 a) 单分支 if 语句 if 条件 语句块 end b) 双分支 if 语句 if 条件 语句块 1 else 语句块 2 end c) 多分支 if 语句 if 条件 1 语句块 1 elseif 条件 2 语句块 2 …… elseif 条件 n 语句块 n else 语句块 n+1 end 2) switch 语句 switch 表达式 case 结果表 1 语句块 1 case 结果表 2 语句块 2 ……
二、
实验原理
1、 M 文件 用 MATLAB 语言编写的程序,称为 M 文件,它们的扩展名均为.m。M 文件根据 调用方式的不同分为两类,命令文件(Script file)和函数文件(Function file) 。 2、 建立新的 M 文件 启动 MATLAB 文本编辑器有 3 种方法: 1) 单击工具栏上的“New M-File”命令按钮。 2) 从 MATLAB 主窗口的“File”菜单中选择“New”菜单项,再选择“M-file”命令。 3) 在 MATLAB 命令窗口输入命令“edit”。 3、 打开已有的 M 文件 1) 在当前目录窗口选中要打开的 M 文件,双击鼠标左键。 2) 单击 MATLAB 主窗口工具栏上的“Open File”命令按钮,再从弹出的对话框中 选择所需打开的 M 文件。 3) 从 MATLAB 主窗口的“File”菜单中选择“Open”命令,在“Open”对话框中选中 所需打开的文件。 4) 在 MATLAB 命令窗口输入命令“edit 文件名” 。 4、 函数文件 1) 函数文件的基本结构 函数文件由 function 语句引导,其基本结构为: function 输出形参表=函数名(输入形参表) 注释说明部分 函数体语句 注意:函数名的命名规则与变量名相同。当输出形参多于一个时,应用方括号 括起来。
matlab程序设计与应用实验指导书
在matlab中,有一种特殊的运算,因为其运算苻是在有关算术运算苻前面加点,因此叫点运算。点运算苻有.*,./,.\和.^。两个矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。
三、实验仪器和设备
1.计算机1台
四、预习要求
1.复习特殊矩阵的产生。
2.复习矩阵的加减乘除与乘方运算,以及相应的点运算。
(1)求它们的乘积C;
(2)将矩阵C的右下角3*2子矩阵赋给D;
(3)察看matlab工作空间的使用情况。
六、实验报告要求
实验报告应包括实验目的、实验内容、流程图、程序清单、运行结果以及实验的收获与体会。
实验二、
一、实验目的
1,掌握生成特殊矩阵的方法;
2,掌握矩阵分析的方法;
3,用矩阵求逆法求解线性方程组。
5,完成以下各题,将答案写入实验报告,并在机器上运行结果验证
(1)编写一个函数文件求两个数的最大值。
(2)编写一个函数文件求三个数的最大值。
(3)编写一个函数文件,求矩阵的最大元
(4)编写一个函数文件,以向量为参数,对向量元素进行排序并输出
六、实验报告要求
1.完成实验内容中的计算;
2.验证实验内容中计算所得结果的正确性。
(3)try语句
3)循环结构
(1)for语句
(2)while语句
(3)break语句与continue语句
(4)循环的嵌套
3,函数文件
function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
三、实验仪器和设备
1.计算机1台
四、预习要求
Matlab实验三答案
Matlab实验三答案实验三 MATLAB语言的程序设计一、实验目的:1、熟悉MATLAB程序编辑与设计环境2、掌握各种编程语句语法规则及程序设计方法3、函数文件的编写和设计4、了解和熟悉跨空间变量传递和赋值二、实验基本知识:1、程序流程控制语句for循环结构语法:for i=初值:增量:终值语句1……语句nend说明:1.i=初值:终值,则增量为1。
2.初值、增量、终值可正可负,可以是整数,也可以是小数,只须符合数学逻辑。
while 循环结构语法:while 逻辑表达式循环体语句end说明:1、whiIe结构依据逻辑表达式的值判断是否执行循环体语勾。
若表达式的值为真,执行循环体语句一次、在反复执行时,每次都要进行判断。
若表达式的值为假,则程序执行end之后的语句。
2、为了避免因逻辑上的失误,而陷入死循环,建议在循环体语句的适当位置加break语句、以便程序能正常执行。
(执行循环体的次数不确定;每一次执行循环体后,一定会改变while 后面所跟关系式的值。
)3、while循环也可以嵌套、其结构如下:while逻辑表达式1循环体语句1while逻辑表达式2循环体语句2end循环体语句3endif-else-end分支结构if 表达式1语句1else if 表达式2(可选)语句2else(可选)语句3endend说明:1.if结构是一个条件分支语句,若满足表达式的条件,则往下执行;若不满足,则跳出if结构。
2.else if表达式2与else为可选项,这两条语句可依据具体情况取舍。
3.注意:每一个if都对应一个end,即有几个if,记就应有几个end。
switch-case结构语法:switch表达式case常量表达式1语句组1case常量表达式2语句组2……otherwise语句组nend说明:1.switch后面的表达式可以是任何类型,如数字、字符串等。
2.当表达式的值与case后面常量表达式的值相等时,就执行这个case后面的语句组如果所有的常量表达式的值都与这个表达式的值不相等时,则执行otherwise后的执行语句。
实验三 MATLAB用于根轨迹分析
实验三 MATLAB用于根轨迹分析
一、实验目的
通过使用MATLAB完成根轨迹绘制、部分分式展开以及根轨迹分析等工作。
二、实验原理
绘制根轨迹可用函数rlocus(num,den)或rlocus(num,den,k)。
其中num,den分别对应系统开环传递函数的分子系数和分母系数构成的数组。
如果参数k是指定的,将按照给定的参数绘制根轨迹图,否则k是自动确定的,k的变化范围为0到∞。
三、实验内容
用MATLAB绘制系统的根轨迹图。
四、实验代码
1、
num=[1];
den=[1 3 2 0];
rlocus(num,den)
2、
Gc=tf(1,[1 5]);
Go=tf([1 1],[1 8 0]);
H=tf(1,[1 2]);
rlocus(Gc*Go*H);
v=[-10 10 -10 13];
axis(v);
grid on
五、实验结果
1、
2、
六、实验总结
本次实验通过MATLAB实现了由系统结构图绘制根轨迹图。
七、实验心得
本次实验相对于前两次实验来说比较简单、较为容易实现,但是需要结合其它相关的函数比如说Gain、Pole、Damping等函数来加以理解。
实验三MATLAB的程序设计
end
ifk==0
Y=1;
elseifk==1&&n==1
Y=1;
elseifk<=n
Y=(n/k)*c(k-1,n-1);
end
程序测试:
>> c(0,0)
ans =
1
>> c(0,1)
ans =
1
>> c(3,4)
ans =
4
7,计算以下和式,并估计其求和公式以及验证:
functionY=s(n)
Y=0;
fork=1:n
Y=Y+k;
end
测试:
>> s(3)
ans =
6
functionY=s(n)
Y=0;
fork=1:n
Y=Y+k^2;
end
测试:
>> s(3)
ans =
14
functionY=s(n)
Y=0;
fork=1:n
Y=Y+k^3;
end
测试:
>> s(2)
4
>> Joseph0(7,4)
2
11,求出 之间的所有素数;
M函数文件:
functionout = nprimes(N)
A= [1:N];
A(1)=0;
i=2;
whilei<= floor(sqrt(N));
forj= 2:fix(N/i)
A(i*j) = 0;
end;
i = A(find(A>i,1));
Matlab程序设计方案及应用实验讲义
封面作者:PanHongliang仅供个人学习Matlab程序设计及应用实验讲义自编电子科学与工程系2013.02 实验一 MATLAB环境与命令窗口1、实验目的1)熟悉MATLAB的操作环境及基本操作方法;2)掌握MATLAB的搜索路径及其设置方法;3)熟悉MATLAB帮助信息的查阅方法;2、实验主要仪器设备和材料计算机PC一台 2010a软件3、实验内容和原理1、先建立自己的工作目录,再将自己的工作目录设置到MATLAB的搜索路径下,再实验用help命令能否查询到自己的工作目录。
2、在MATLAB环境下验证下面几个例子,并总结MATLAB的主要优点。
1)绘制正弦曲线和余弦曲线2)求方程的全部根3)求积分4)求解线性方程组3、利用MATLAB的帮助功能分别查询inv 、plot、 max 、round等函数的功能与用法4、完成下列操作:1)在MATLAB命令窗口输入以下命令:x=0:pi/10:2*pi。
y=sin(x)。
2)在工作空间窗口选择变量y,再在工作空间窗口选择绘图菜单命令或在工具栏中单击绘图命令按钮,绘制变量的图形,并分析图形的含义。
5、访问MathsWorks公司的主页,查询有关MATLAB的产品信息。
思考与练习1、如何启动和退出MATLAB的集成环境?2、简述MATLAB的主要功能。
3、如果一个MATLAB命令包含的字符很多,需要分成多行输入,该如何处理?4、help命令和look for命令有何区别?5、在MATLAB环境下,建立一个变量fac,同时又在当前目录下建立了一个M 文件fac.m,如果需要运行fac.m文件,该如何处理?实验二数值数组的创建与运算1、实验目的1)掌握MATLAB数据对象的特点以及数据的运算规则。
2)掌握MATLAB中建立矩阵的方法以及矩阵处理的方法。
3)掌握MATLAB分析的方法。
2、实验主要仪器设备和材料计算机PC一台 2010a软件3、实验内容和原理1、求下列表达式的值:1)2),其中,,,。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2014秋2012级《MATLAB程序设计》实验报告班级:软件C121姓名:冯杨腾学号:125692实验三 MATLAB程序设计一、实验目的1、掌握建立和执行M文件的方法。
2、掌握选择结构、多分支选择结构程序的编程方法。
3、掌握多种循环结构程序的编程方法。
4、掌握定义函数文件和调用函数文件的方法。
二、实验内容1、MATLAB M文件的创建与使用。
(1)建立自己工作目录,如D:\MATLAB。
在File菜单中,单击Set Path菜单项,在弹出对话框中建立目标文件夹,:单击Add Folder按钮,将自己的工作目录D:\MATLAB添加到搜索目录之中,按Save按钮保存,如图1。
图1 工作目录设置(2)在M文件编辑器中编制命令行文件。
在File菜单中,单击New—>M-File,弹出M文件编辑器,如图2:图2 编辑器在编辑器中输入如下命令程序:%求小于2000且为2的整数次幂的正整数。
f(1)=2;k=1;while f(k)<1000f(k+1)=f(k)*2;k=k+1;endf,k调试后,将其以形式保存在D:\MATLAB中。
(3)命令行程序运行。
进入命令窗口,键入test1,观察运行结果:f =Columns 1 through 92 4 8 16 32 64 128 256512Column 101024k =10(4)按上述步骤,在在编辑器中输入如下函数文件:function f=tt(n)%求小于任何正整数且为2的整数次幂的正整数。
%c=n(n)%n 可取任意正整数。
%2004年8月。
f(1)=2; k=1;while f(k)<ceil(n/2) %ceil 函数取最近的正整数 f(k+1)=f(k)*2; k=k+1; end f调试后,将其以形式保存在D:\MATLAB 中。
(5)进入命令窗口,键入test2(9),观察程序运行结果。
>> test2(9) f =2 4 8 ans =2 4 82、编写一个函数M 文件,计算下面函数的值,给出标量x 的值,调用该函数后,返回y 的值。
sin ,(),036,3x x y x x x x x ≤⎧⎪=<≤⎨⎪-+>⎩选择一些数据测试编写的函数。
源程序 :function [y]=myfun(x)if x<=0y=sin(x);elseif x>3y=-x+6;elsey=x;end运行结果:>> test(0)ans =>> test(2)ans =2>> test(5)ans =13、编写一个函数M文件,返回向量x中元素的和、平均值、最大值、最小值、均方根值。
其中方均根值(Root Mean Square)的计算公式为:rms=并用下面数据测试你写的函数:(1)x=sin(0::6*pi)(2)x=rand(1,200),得到的x为200个(0,1)之间均匀分布的随机数。
源程序:function [sum_x,m_x,max_x,min_x,rsm_x] = myfun7(x)sum_x=0;a=x;for k=a;sum_x=sum_x+k;n=length(x);for i=1:nm_x=sum_x/n;endendmin_x=x(1);for t=1:nif min_x>x(t)min_x=x(t);endendmax_x=x(1);for t=1:nif max_x<x(t)max_x=x(t);endendsum_x1=0;for t=1:nsum_x1=sum_x1+x(t).^2; rms_x=sqrt(sum_x1/n); endsum_xm_xmax_xmin_xrms_x运行结果:(1)>> x=sin(0::6*pi);>> myfun7(x)sum_x =m_x =max_x =min_x =rms_x =2)>> x=rand(1,200);>> myfun7(x)sum_x = m_x = max_x = min_x = rms_x =4、编写一个函数M 文件,若给出一个向量12[,,]n x x x x =,函数返回如下范德蒙矩阵。
122221211112111n nn n n n x x x x x x x x x ---⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦例如在命令窗口输入>>v =myvander([2 3 4 5]),得1111234549162582764125v ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦,同时生成一些数据测函数。
源程序:function[v]=myvander(x) n=length(x); v=ones(n,n); for j=1:n for i=1:nv(i,j)=x(j)^(i-1); end end运行结果:x=([2 3 4 5]); >> test(x) ans =1 1 1 12345 4 9 16 25 8 27 64 125 >> x=([1 2 3 ]); >> test(x) ans =1 1 1 123 14 95、分别使用while 和for 编写命令文件,用循环语句编程计算s 值:10322()n s n n ==-∑同时对编写的文件设置断点,观察变量取值的变化情况。
(1)For 循环:function[]=test() s=0;for n=2:1:10s=s+(n^3-n^2); enddisp(s) end运行结果:>> test() 2640(2)While 循环:function[]=test() s=0; n=2;while n<=10s=s+(n^3-n^2); n=n+1; enddisp(s) end运行结果:>> test()26406、数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。
重复此过程,最终得到的结果为1。
如:2?13?10?5?16?8?4?2?16?3?10?5?16?8?4?2?1建立命令M文件,完成上述功能,要求显示数字处理过程。
源程序:function X = test()n=input('请输入一个正整数');X(1)=n;i=2;while n~=1if rem(n,2)==0n=n/2;elseif rem(n,2)==1n=n*3+1;endX(i)=n;i=i+1;endend运行结果:请输入一个正整数2ans =2 1请输入一个正整数3ans =3 10 5 16 84 2 1请输入一个正整数12ans =12 6 3 10 5 16 8 4 2 17、设计一个学生身高的管理系统,输出身高的基本分为5等:很高、较高、中等、较矮、矮,其中190cm以上为“很高”,[180cm,190cm)区间为“较高”,[170cm,180cm)为“中等”,[1160cm,170cm)为“较矮”,160cm以下为“矮”,要求分别用if 语句和switch语句实现(1)for语句:n=100;for i =1:na=input('请输入身高');if a >disp('很高')elseif a>=&&a<disp('较高')elseif a>=&&a<disp('中等')elseif a>=&&a<disp('较矮')elseif a<disp('矮')endend运行结果:请输入身高很高请输入身高较高请输入身高中等请输入身高较矮请输入身高矮switch语句:x=input('身高为:');n=(x-100)/10;switch floor(n)case{10,9}disp('很高');case{8}disp('较高');case{7}disp('中等');case{6}disp('较矮');case{5,4,3,2,1,0}disp('矮')end运行结果:身高为:195很高身高为:185较高身高为:175中等身高为:165较矮身高为:155矮8、Fibonacci数组的元素满足Fibonacci规则:a k+2=a k+a k+1,(k=1,2,3,…);且a1= a2=1。
请设计一段程序,求出该数组中第一个大于10000的元素要求显示的结果为:i=21a(i)=10946或者a(21)=10946源程序:a(1)=1;a(2)=1;i=2;while a(i)<=10000a(i+1)=a(i-1)+a(i);i=i+1;end;i,a(i)运行结果:i =21ans =10946源程序:n=100;a(1)=1;a(2)=1for i=3:na(i)=a(i-1)+a(i-2);if a(i)>=10000a(i),break;end;end;i运行结果:a =Columns 1 through 121 123 5 8 13 21 34 55 89 144Columns 13 through 21233 377 610 987 1597 2584 4181 6765 10946ans =10946i =219、编写一个函数文件,用于求两个输入矩阵的乘积和点乘,然后在命令行窗口中调用该函数,要求:(1)当两矩阵是尺寸相同的方阵时,返回它们的乘积和点乘。
(2)当两矩阵不是尺寸相同的方阵时,则根据它们的尺寸,分别进行乘积或点乘(3)当两矩阵的尺寸不能满足乘积或点乘的要求时,则提示“这两个矩阵不能乘”源程序:function [] = test(x,y)[m,n]=size(x);[i,j]=size(y);if m==n&&i==j&&m==iz1=x*y;z2=x.*y;disp(z1);disp(z2);elseif n==iz1=x*y;disp(z1);elseif m==i&&n==jz2=x.*y;disp(z2);elseif n~=idisp('这两个矩阵不能相乘');endend运行结果:1)>> x=[1 2 3; 4 5 6;7 8 9];>> y=[1 2 3; 4 5 6;7 8 9];>> test(x,y)30 36 4266 81 96102 126 1501 4 916 25 3649 64 812)>> y=[1 2 3; 4 5 6];>> x=[1 2 3; 4 5 6];>> test(x,y)1 4 916 25 363)>> x=[1 2 2; 2 3 3;3 4 4];>> y=[1 2 3; 4 5 6];>> test(x,y)这两个矩阵不能相乘10、编写一个阶乘函数,然后在如下程序中调用该函数,“分别使用for和while语句找出最小的n值,使得n!>10100,并求出n!”(1)For语句:Function[]=factorial()n=1;s=1;for n=1:10000s=s*n;if(s>10100)break;enddisp(n);end运行结果:1234567(2)While语句:function[]=factorial()n=1;s=1;while s<=10100n=n+1;s=s*n;enddisp(n);end运行结果:>> factorial()811、下列程序用来判断一个人的体温是否处于危险状态。