matlab实验3代码
实验三:使用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。
实验三用FFT对信号进行频谱分析和MATLAB程序
实验三用FFT对信号进行频谱分析和MATLAB程序实验三中使用FFT对信号进行频谱分析的目的是通过将时域信号转换为频域信号,来获取信号的频谱信息。
MATLAB提供了方便易用的函数来实现FFT。
首先,我们需要了解FFT的原理。
FFT(快速傅里叶变换)是一种快速计算离散傅里叶变换(DFT)的算法,用于将离散的时间域信号转换为连续的频域信号。
FFT算法的主要思想是将问题划分为多个规模较小的子问题,并利用DFT的对称性质进行递归计算。
FFT算法能够帮助我们高效地进行频谱分析。
下面是一个使用MATLAB进行频谱分析的示例程序:```matlab%生成一个10秒钟的正弦波信号,频率为1Hz,采样率为100Hzfs = 100; % 采样率t = 0:1/fs:10-1/fs; % 时间范围f=1;%正弦波频率x = sin(2*pi*f*t);%进行FFT计算N = length(x); % 信号长度X = fft(x); % FFT计算magX = abs(X)/N; % 幅值谱frequencies = (0:N-1)*(fs/N); % 频率范围%绘制频谱图figure;plot(frequencies, magX);xlabel('频率(Hz)');ylabel('振幅');title('信号频谱');```上述代码生成了一个10秒钟的正弦波信号,频率为1 Hz,采样率为100 Hz。
通过调用MATLAB的fft函数计算信号的FFT,然后计算每个频率分量的幅值谱,并绘制出信号频谱图。
在频谱图中,横轴表示频率,纵轴表示振幅。
该实验需要注意以下几点:1.信号的采样率要与信号中最高频率成一定比例,以避免采样率不足导致的伪频谱。
2.FFT计算结果是一个复数数组,我们一般只关注其幅值谱。
3.频率范围是0到采样率之间的频率。
实验三的报告可以包含以下内容:1.实验目的和背景介绍。
MATLAB实验程序
实验一要求: 查看matlab 的版本代码:version结果:ans =7.1.0.246 (R14) Service Pack 31.先求下列表达式的值,然后显示MATLAB 工作空间的使用情况并保存全部变量。
(1)z 1=2185sin 2e+z1=(2*sin(85*pi/180))/(1+exp(2))z =0.2375(2)z 2=⎥⎦⎤⎢⎣⎡+=++545.0-i 212其中),1ln(212x x x x=[2,1+2*i;-0.45,5]x =2.0000 1.0000 + 2.0000i-0.4500 5.0000>> z2=1/2*log(x+sqrt(1+x*x))z2 =0.7114 - 0.0253i 0.8968 + 0.3658i0.2139 + 0.9343i 1.1541 - 0.0044i(3)z 3=23.0ln )3.0sin(23.03.0a a e e aa +++--,a=-3.0,-2.9,-2.8, …3.0 提示:用冒号表达式生成a 向量,求各点的函数值时用点乘计算。
a=[-3.0:0.1:3.0]z3=1/2.*((exp(0.3.*a)-exp(-0.3.*a))).*sin(a+0.3)+log((0.3+a).*1/2)(4)z 4=⎪⎩⎪⎨⎧<≤+-<≤-<≤32,12,21,110,222t t t t t t t 其中t=0:0.5:2.5提示:用逻辑表达式求分段函数值。
t=0:0.5:2.5t =0 0.5000 1.0000 1.5000 2.0000 2.5000>> z4=t.^2.*(t>=0&t<1)+(t.^2-1).*(t>=1&t<2)+(t.^2-2*t+1).*(t>=2&t<3) z4 =0 0.2500 0 1.2500 1.0000 2.25002.已知:A=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡7653877344-3412,B=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡72-3321-31求下列表达式的值:(1)A+6*B和A-B+I(其中I为单位矩阵) A=[12,34,-4;34,7,87;3,65,7]A =12 34 -434 7 873 65 7>> B=[1,3,-1;2,0,3;3,-2,7]B =1 3 -12 0 33 -2 7>> A+6*Bans =18 52 -1046 7 10521 53 49>> I=eye(size(A))I =1 0 00 1 00 0 1>> A-B+Ians =12 31 -332 8 840 67 1(2)A*B和A.*BA*Bans =68 44 62309 -72 596154 -5 241>> A.*Bans =12 102 468 0 2619 -130 49(3)A^3和A.^3A^3ans =37226 233824 48604247370 149188 60076678688 454142 118820>> A.^3ans =1728 39304 -6439304 343 65850327 274625 343(4)A/B和B\AA/Bans =16.4000 -13.6000 7.600035.8000 -76.2000 50.200067.0000 -134.0000 68.0000>> B/Aans =0.1027 -0.0062 -0.00690.0617 0.0403 -0.03660.0205 0.0855 -0.0507(5)[A,B]和[A([1,3],:);B^2][A,B]ans =12 34 -4 1 3 -134 7 87 2 0 33 65 7 3 -2 7>> [A([1,3],:);B^2]ans =12 34 -43 65 74 5 111 0 1920 -5 403.设有矩阵A和BA=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡25242322212019181716151413121110987654321,B=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡111340794-23096-171603 (1) 求它们的乘积C 。
信号与系统MATL实验及代码
实验一、MATLAB编程基础及典型实例一、实验目的(1)熟悉MATLAB软件平台的使用;(2)熟悉MATLAB编程方法及常用语句;(3)掌握MATLAB的可视化绘图技术;(4)结合《信号与系统》的特点,编程实现常用信号及其运算。
示例一:在两个信号进行加、减、相乘运算时,参于运算的两个向量要有相同的维数,并且它们的时间变量范围要相同,即要对齐。
编制一个函数型m文件,实现这个功能。
function [f1_new,f2_new,n]=duiqi(f1,n1,f2,n2)a=min(min(n1),min(n2));b=max(max(n1),max(n2));n=a:b;f1_new=zeros(1,length(n));f2_new=zeros(1,length(n));tem1=find((n>=min(n1))&(n<=max(n1))==1);f1_new(tem1)=f1;tem2=find((n>=min(n2))&(n<=max(n2))==1);f2_new(tem2)=f2;四、实验内容与步骤− 2 t (2)绘制信号x(t)= esin( t=0:0.1:30; 23t ) 的曲线,t的范围在0~30s,取样时间间隔为0.1s。
y=exp(-sqrt(2)*t).*sin(2*t/3); plot(t,y);(3)在n=[-10:10]范围产生离散序列:x( n)=⎧2 n ,− 3⎨≤ n ≤ 3,并绘图。
⎩0, Othern=-10:1:10;z1=((n+3)>=0);z2=((n-3)>=0);x=2*n.*(z1-z2);stem(n,x);(4)编程实现如下图所示的波形。
t=-2:0.001:3;f1=((t>=-1)&(t<=1));f2=((t>=-1)&(t<=2));f=f1+f2;plot(t,f);axis([-2,3,0,3]);(5)设序列f1(k)={ 0 , 1 , 2 , 3 , 4 , 5 },f2(k)={ 6 , 5 , 4 , 3 , 2 , 1 , 0 }。
数字信号处理Matlab实验三-IIR数字滤波器的设计
XX XX 大学XXXX 学院实验名称 IIR 数字滤波器的设计实验目的:加深理解IIR 数字滤波器的时域特性和频域特性,掌握IIR 数字滤波器的设计原理与设计方法,以及I IR数字滤波器的应用。
实验内容:IIR 数字滤波器一般为线性移不变的因果离散系统,N 阶IIR 数字滤波器的系统函数可以表达为-1z 的有理多项式,即 -1-1-2-M =0012-1-2-N -112=1z +z +z ++z (z)==1+z +z ++z 1+zM j j M N Ni i b b b b b H a a a a ∑∑ 式中:系数i a 至少有一个非零。
对于因果II R数据滤波器,应满足M N ≤。
IIR 数字滤波器的设计主要通过成熟的模拟滤波器设计方法来实现。
首先在频域将数字滤波器设计指标转换为模拟滤波器设计指标,然后将任意的模拟滤波器为原型模拟低通滤波器指标,根据模拟滤波器的设计指标来设计出模拟低通滤波器(s)LP H ,然后又(s)LP H 经过相应的复频域转换得到H(s),最后又H(s )经过脉冲响应不变法或双线性变换法得到所需要的III R数字滤波器H (z)。
由此可见,IIR 数字滤波器设计的重要环节是模拟滤波器的设计。
设计模拟低通滤波器的主要方法有Butterwor t、Ch eby shev 、和椭圆等滤波器设计方法。
实验步骤1.Butterw ort 数字滤波器设计(1) Bu tt erwort 滤波器是通带阻带都单调衰减的滤波器。
调用b uttord 函数可以确定巴特沃斯滤波器的阶数,其格式为:[N,Omegac ]=bu tt ord(Omegap,Ome gas,Rp,As ,’s ’)。
其中,输入参数Rp,As 分别为通带最大衰减和阻带最小衰减,以d B为单位;Om eg ap,Omegas 分别为通带截止频率和阻带截止频率,‘s ’说明所设计的是模拟滤波器。
输出参数为滤波器的阶数,Omegac为3dB截止频率。
MATLAB-实验代码
实验 11、ones 语句:Y = ones(n) %生成n×n 全1 阵Y = ones(m,n) %生成m×n 全1 阵Y = ones([m n]) %生成m×n 全1 阵Y = ones(d1,d2,d3…) %生成d1×d2×d3×…全1 阵或数组Y = ones([d1 d2 d3…]) %生成d1×d2×d3×…全1 阵或数组Y = ones(size(A)) %生成与矩阵A 相同大小的全1 阵2、find 语句:k = find(x) %按行检索X 中非零元素的点,若没有非零元素,将返回空矩阵。
[i,j] = find(X) %检索X 中非零元素的行标i 和列标j 。
[i,j,v] = find(X) %检索X 中非零元素的行标i 和列标j 以及对应的元素值v 。
实验 31、编写一M 函数,a 和x 作为函数参数输入,函数里面分别用if 结构实现函数表示1()1x a x f x a x a ax a-≤-⎧⎪⎪=-<<⎨⎪≥⎪⎩function output=function1(x,a)result=0;if x<=-aresult=-1;elseif x>-a&x<aresult=x/a;else x>=aresult=1;endoutput=[result]; 2、编写一M 函数,迭代计算132n n x x +=+,给出可能的收敛值,其中x 的初值作为函数的参数输入。
function output=function2(x)y=0;while 1y=3/(x+2);if abs(y-x)<0.000001break;else x=y;endendoutput=[y]; end3、编写一M函数,实现212!!nxx xe xn=+++++L L近似计算指数,其中x为函数参数输入,当n+1步与n步的结果误差小于0.00001时停止,分别用for和while 结构实现。
MATLABSimulink和控制系统仿真实验报告
MATLAB/Simulink与控制系统仿真实验报告姓名:喻彬彬学号:K031541725实验1、MATLAB/Simulink 仿真基础及控制系统模型的建立一、实验目的1、掌握MATLAB/Simulink 仿真的基本知识;2、熟练应用MATLAB 软件建立控制系统模型。
二、实验设备电脑一台;MATLAB 仿真软件一个三、实验内容1、熟悉MATLAB/Smulink 仿真软件。
2、一个单位负反馈二阶系统,其开环传递函数为210()3G s s s =+。
用Simulink 建立该控制系统模型,用示波器观察模型的阶跃响应曲线,并将阶跃响应曲线导入到MATLAB 的工作空间中,在命令窗口绘制该模型的阶跃响应曲线。
3、某控制系统的传递函数为()()()1()Y s G s X s G s =+,其中250()23s G s s s+=+。
用Simulink 建立该控制系统模型,用示波器观察模型的阶跃响应曲线,并将阶跃响应曲线导入到MATLAB 的工作空间中,在命令窗口绘制该模型的阶跃响应曲线。
4、一闭环系统结构如图所示,其中系统前向通道的传递函数为320.520()0.11220s G s s s s s+=+++,而且前向通道有一个[-0.2,0.5]的限幅环节,图中用N 表示,反馈通道的增益为1.5,系统为负反馈,阶跃输入经1.5倍的增益作用到系统。
用Simulink 建立该控制系统模型,用示波器观察模型的阶跃响应曲线,并将阶跃响应曲线导入到MATLAB 的工作空间中,在命令窗口绘制该模型的阶跃响应曲线。
四、实验报告要求实验报告撰写应包括实验名称、实验内容、实验要求、实验步骤、实验结果及分析和实验体会。
五、实验思考题总结仿真模型构建及调试过程中的心得体会。
题1、(1)利用Simulink的Library窗口中的【File】→【New】,打开一个新的模型窗口。
(2)分别从信号源库(Sourse)、输出方式库(Sink)、数学运算库(Math)、连续系统库(Continuous)中,用鼠标把阶跃信号发生器(Step)、示波器(Scope)、传递函数(Transfern Fcn)和相加器(Sum)4个标准功能模块选中,并将其拖至模型窗口。
信号与系统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实验三
效果图: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绘图(含实验报告)
实验三 MATLAB 绘图一、实验目的1.掌握二维图形的绘制。
2.掌握图形的标注3.了解三维曲线和曲面图形的绘制。
二、实验的设备及条件计算机一台(带有以上的软件环境)。
设计提示1.Matlab 允许在一个图形中画多条曲线:plot(x1,y1,x2,y2,……)指令绘制y 1 = f 1(x 1), y 2 = f 2 (x 2 )等多条曲线。
Matlab 自动给这些曲线以不同颜色。
标注可用text 函数。
2.绘图时可以考虑极坐标和直角坐标的转换。
3.三维曲线绘图函数为plot3,注意参考帮助中的示例。
三、实验内容1.生成1×10 维的随机数向量a ,分别用红、黄、蓝、绿色绘出其连线图、杆图、阶梯图和条形图,并分别标出标题“连线图”、“杆图”、“阶梯图”、“条形图”。
2、绘制函数曲线,要求写出程序代码。
(1) 在区间[0:2π]均匀的取50个点,构成向量t(2) 在同一窗口绘制曲线y1=sin(2*; y2=3cos(t+;要求y1曲线为红色点划线,标记点为圆圈;y2为蓝色虚线,标记点为星号。
(3) 分别在靠近相应的曲线处标注其函数表达式。
3.将图形窗口分成两个绘图区域,分别绘制出函数:⎩⎨⎧+-=+=1352221x x y x y 在[0,3]区间上的曲线,并利用axis 调整轴刻度纵坐标刻度,使1y 在[0,12]区间上,2y 在[-2,]区间上。
4.用mesh 或surf 函数,绘制下面方程所表示的三维空间曲面,x 和y 的取值范围设为[-3,3]。
101022y x z +-=思考题:1. 编写一个mcircle(r)函数,调用该函数时,根据给定的半径r ,以原点为圆心,画一个如图所示的红色空心圆。
(图例半径r=5);左图参考polar函数的用法,右图绘制圆形的参数方程为x=sin (t ),y=cos (t )。
其中,t 的区间为0~2*pi ,步长为。
2.(1)绘一个圆柱螺旋线(形似弹簧)图。
MATLAB实验报告(word文档良心出品)
《MATLAB/Simulink与控制系统仿真》实验报告专业:班级:学号:姓名:指导教师:实验1、MATLAB/Simulink 仿真基础及控制系统模型的建立一、实验目的1、掌握MATLAB/Simulink 仿真的基本知识;2、熟练应用MATLAB 软件建立控制系统模型。
二、实验设备电脑一台;MATLAB 仿真软件一个 三、实验内容1、熟悉MATLAB/Smulink 仿真软件。
2、一个单位负反馈二阶系统,其开环传递函数为210()3G s s s=+。
用Simulink 建立该控制系统模型,用示波器观察模型的阶跃响应曲线,并将阶跃响应曲线导入到MATLAB 的工作空间中,在命令窗口绘制该模型的阶跃响应曲线。
图 1系统结构图图 2示波器输出结果图3、某控制系统的传递函数为()()()1()Y s G s X s G s =+,其中250()23s G s s s+=+。
用Simulink 建立该控制系统模型,用示波器观察模型的阶跃响应曲线,并将阶跃响应曲线导入到MA TLAB 的工作空间中,在命令窗口绘制该模型的阶跃响应曲线。
图 3系统结构图 图 4 示波器输出结果图图 5 工作空间中仿真结果图形化输出4、一闭环系统结构如图所示,其中系统前向通道的传递函数为320.520()0.11220s G s s s s s+=+++g ,而且前向通道有一个[-0.2,0.5]的限幅环节,图中用N 表示,反馈通道的增益为1.5,系统为负反馈,阶跃输入经1.5倍的增益作用到系统。
用Simulink 建立该控制系统模型,用示波器观察模型的阶跃响应曲线,并将阶跃响应曲线导入到MATLAB 的工作空间中,在命令窗口绘制该模型的阶跃响应曲线。
图 6 系统结构图图 7 示波器输出结果实验2 MATLAB/Simulink 在控制系统建模中的应用一、实验目的1、掌握MATLAB/Simulink 在控制系统建模中的应用; 二、实验设备电脑一台;MA TLAB 仿真软件一个 三、实验内容1、给定RLC 网络如图所示。
MATLAB实验一:运算基础实验报告
MATLAB实验报告
心得
本次实验是我们MA TLAB程序设计课程的第一次实验,虽然对MATLAB软件的运用还不是很熟练,但通过老师的讲解和对课本例题的分析,实验还是一步步地完成了,实验中遇到了一些难题,如:1(3)的求各点的函数值时,应该用点乘运算,开始时没有用点乘而得不出结果,老师提示错误,浪费了一些时间;另外,4中的find和length函数也不熟悉应用,也花了一点时间了解。
这些问题经过老师的讲解与和同学的交流一个个的解决了,也得出了实验结果。
本次实验基本达到了实验要求,同时通过此次实验,掌握了MA TLAB的基本使用,颇有收获。
另附MATLAB工作空间使用情况截图:。
matlab 实验三 matlab程序设计与优化
matlab 实验三 matlab程序设计与优化Matlab是一种高级的计算机编程语言,广泛应用于科学、工程、金融和其他领域。
在Matlab实验三中,我们将学习Matlab程序设计与优化。
本文将介绍Matlab实验三的内容和要求,并提供一些有用的技巧和建议,帮助读者更好地完成实验。
实验三的主要内容包括:1. Matlab程序设计基础2. Matlab程序优化技巧3. Matlab代码调试方法4. Matlab性能分析工具5. 实例分析与练习题下面我们将逐个介绍这些内容。
1. Matlab程序设计基础在本节中,我们将学习如何使用Matlab编写简单的程序。
以下是一些重要的概念和技巧:1)变量和数据类型:在Matlab中,变量可以存储不同类型的数据,如数字、字符串、逻辑值等。
常见的数据类型包括double、char、logical等。
2)运算符:Matlab支持各种数学运算符,包括加减乘除、幂运算等。
此外,还有逻辑运算符(如and、or)和比较运算符(如==、~=)。
3)控制结构:控制结构可以控制程序执行流程。
常见的控制结构包括if语句、for循环和while循环。
4)函数:函数是一种可重复使用的代码块,可以接受输入参数并返回输出结果。
Matlab中有很多内置函数,也可以编写自己的函数。
2. Matlab程序优化技巧在本节中,我们将学习如何优化Matlab程序以提高其性能。
以下是一些重要的技巧:1)向量化:向量化是一种将循环操作转换为矩阵操作的技术。
这样可以减少程序执行时间,并且使代码更简洁。
2)预分配数组:在编写Matlab程序时,应尽可能避免动态数组分配。
相反,应该预先分配所需大小的数组。
3)使用内置函数:Matlab中有许多内置函数,它们通常比用户自定义函数更快。
因此,在编写程序时应尽可能使用内置函数。
4)避免不必要的计算:在编写程序时,应尽可能避免不必要的计算。
例如,在循环中进行重复计算或计算已知结果等。
三个参数matlab程序,用matlab求定积分的三个实例代码
三个参数matlab程序,⽤matlab求定积分的三个实例代码⼀、符号积分符号积分由函数int来实现。
该函数的⼀般调⽤格式为:int(s):没有指定积分变量和积分阶数时,系统按findsym函数指⽰的默认变量对被积函数或符号表达式s求不定积分;int(s,v):以v为⾃变量,对被积函数或符号表达式s求不定积分;int(s,v,a,b):求定积分运算。
a,b分别表⽰定积分的下限和上限。
该函数求被积函数在区间[a,b]上的定积分。
a和b可以是两个具体的数,也可以是⼀个符号表达式,还可以是⽆穷(inf)。
当函数f关于变量x在闭区间[a,b]上可积时,函数返回⼀个定积分结果。
当a,b中有⼀个是inf 时,函数返回⼀个⼴义积分。
当a,b中有⼀个符号表达式时,函数返回⼀个符号函数。
例:求函数x^2+y^2+z^2的三重积分。
内积分上下限都是函数,对z积分下限是sqrt(x*y),积分上限是x^2*y;对y积分下限是sqrt(x),积分上限是x^2;对x的积分下限1,上限是2,求解如下:>>syms x y z %定义符号变量>>F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2) %注意定积分的书写格式F2 =1610027357/6563700-6072064/348075*2^(1/2)+14912/4641*2^(1/4)+64/225*2^(3/4) %给出有理数解>>VF2=vpa(F2) %给出默认精度的数值解VF2 =224.92153573331143159790710032805⼆、数值积分1.数值积分基本原理求解定积分的数值⽅法多种多样,如简单的梯形法、⾟普⽣(Simpson)法、⽜顿-柯特斯(Newton-Cotes)法等都是经常采⽤的⽅法。
它们的基本思想都是将整个积分区间[a,b]分成n个⼦区间[xi,xi+1],i=1,2,…,n,其中x1=a,xn+1=b。
matlab实验代码(总)
matlab实验代码(总)% 使⽤两种⽅法,创建⼀稀疏矩阵% 使⽤函数sparse,可以⽤⼀组⾮零元素直接创建⼀个稀疏矩阵。
该函数调⽤格式为:% S=sparse(i,j,s,m,n)% 其中i和j都为⽮量,分别是指矩阵中⾮零元素的⾏号与列号,% s是⼀个全部为⾮零元素⽮量,元素在矩阵中排列的位置为(i,j)% m为输出的稀疏矩阵的⾏数,n为输出的稀疏矩阵的列数。
%⽅法1A9=[0 0 1;0 3 0;2 4 0]B9=sparse(A9)C9=full(B9)%⽅法2A10=sparse([1 3 2 4],[2 3 1 4],[1 2 3 4],4,4)C10=full(A10)A11=[1 2 3];B11=[4 5 6];C11=3.^A11D11=A11.^B11%使⽤函数,实现矩阵左旋90°或右旋90°的功能。
A=[ 1 2 3 ; 4 5 6 ; 7 8 9 ]B=rot90(A,1)C=rot90(A,-1)%求S=2^0+2^1+2^2+2^3+2^4+……+2^10的值(提⽰:利⽤求和函数与累乘积函数。
)A=2*ones(1,10)%10个2B=cumprod(A)%平⽅C=sum(B)+1%加上2^0%建⽴⼀个字符串向量,删除其中的⼤写字母(提⽰:利⽤find函数和空矩阵。
)str='AAAbCcd'b=find(str>='A' & str<='Z');str(b)=[];% 输⼊⼀个百分制成绩,要求输出成绩等级A、B、C、D、E。
其中90分~100分为A,80分~89分为B,70分~79为C,60分~69分为D,60分以下为E。
switch(score)case num2cell(90:0.5:100)disp(['成绩等级为:A']);case num2cell(80:0.5:89.5)disp(['成绩等级为:B']);case num2cell(70:0.5:79.5)disp(['成绩等级为:C']);case num2cell(60:0.5:69.5)disp(['成绩等级为:D']);case num2cell(0:0.5:59.5)disp(['成绩等级为:E']);otherwisedisp(['输⼊成绩不合理!']);end%设计程序,完成两位数的加、减、乘、除四则运算,%即产⽣两个两位随机整数,再输⼊⼀个运算符号,做相应的运算,显⽰相应的结果,并要求结果显⽰类似于“a=x+y=34”。
实验三 多元函数的极值及Matlab实现
实验三多元函数的极值【实验目的】1.掌握MATLAB 软件有关的命令。
2.多元函数自由极值的求法3.多元函数条件极值的求法.【实验准备】1.计算多元函数的自由极值对于多元函数的自由极值问题,根据多元函数极值的必要和充分条件,可分为以下几个步骤:步骤1.定义多元函数),(y x f z =步骤2.求解正规方程0),(,0),(==y x f y x f y x ,得到驻点步骤3.对于每一个驻点),(00y x ,求出二阶偏导数,,,22222yz C y x z B x z A ∂∂=∂∂∂=∂∂=步骤4.对于每一个驻点),(00y x ,计算判别式2B AC −,如果02>−B AC ,则该驻点是极值点,当0>A 为极小值,0<A 为极大值;,如果02=−B AC ,判别法失效,需进一步判断;如果02<−B AC ,则该驻点不是极值点.2.计算二元函数在区域D 内的最大值和最小值设函数),(y x f z =在有界区域D 上连续,则),(y x f 在D 上必定有最大值和最小值。
求),(y x f 在D 上的最大值和最小值的一般步骤为:步骤1.计算),(y x f 在D 内所有驻点处的函数值;步骤2.计算),(y x f 在D 的各个边界线上的最大值和最小值;步骤3.将上述各函数值进行比较,最终确定出在D 内的最大值和最小值。
3.函数求偏导数的MATLAB 命令MATLAB 中主要用diff 求函数的偏导数,用jacobian 求Jacobian 矩阵。
diff(f,x,n)求函数f关于自变量x的n阶导数。
jacobian(f,x)求向量函数f关于自变量x(x也为向量)的jacobian矩阵。
可以用help diff,help jacobian查阅有关这些命令的详细信息【实验内容】例1:求函数z=sin(x)sin(y)sin(x+y)在0<x<pi/2,0<y<pi/2内的极大值.理论分析知:当X=pi/3y=pi/3z有极大值3/8*3^(1/2)Matlab程序:%定义二元函数clc;clear;syms x y;z=sin(x)*sin(y)*sin(x+y);ezsurf(x,y,z,[0,pi/2,0,pi/2]);%求解驻点dzx=diff(z,x)dzy=diff(z,y)[xx,yy]=solve('cos(x)*sin(y)*sin(x+y)+sin(x)*sin(y)*cos(x+y)=0',...'sin(x)*cos(y)*sin(x+y)+sin(x)*sin(y)*cos(x+y)=0','x','y')%对于定义域内的驻点求解二阶偏导函数A=diff(z,x,2);B=diff(diff(z,x),y);C=diff(z,y,2);D=A*C-B^2;%判别极大值点D1=subs(subs(D,'x',xx(1)),'y',yy(1))A1=subs(subs(A,'x',xx(1)),'y',yy(1))D2=subs(subs(D,'x',xx(2)),'y',yy(2))A2=subs(subs(A,'x',xx(2)),'y',yy(2))%极大值点和极大值[xx(2)yy(2)]JDZ=subs(subs(z,'x',xx(2)),'y',yy(2))程序运行结果ans=[1/3*pi,1/3*pi]JDZ=3/8*3^(1/2)例2函数32824−+−=y xy x z 的极值点和极值求函数32824−+−=y xy x z 的极值点和极值.首先用diff 命令求z 关于x,y 的偏导数>>clear;syms x y;>>z=x^4-8*x*y+2*y^2-3;>>diff(z,x)>>diff(z,y)结果为ans =4*x^3-8*yans =-8*x+4*y 即.48,843y x yz y x x z +−=∂∂−=∂∂再求解正规方程,求得各驻点的坐标。
实验3 根轨迹分析
-20
-15
-10 Real Axis (seconds )
-1
-5
0
5
>> p = [-1 -3 -10];
Root Locus 30
20
Imaginary Axis (seconds-1)
10
0
-10
-20
-30 -12
-10
-8
-6
-4
-1
-2
0
2
Real Axis (seconds )
>> p = [-1 -3 -5];
10
0
-10
-20
-30 -14
-12
-10
-8
-6
-4
-2
0
2
Real Axis (seconds -1)
(2)
可知此时增益 K 为 3.38。 [a,pole]=rlocfind(sys) Select a point in the graphics window selected_point = -2.1213 + 0.0000i a = 3.3812 pole = -11.7575 -2.1213 + 0.0000i -2.1213 - 0.0000i (3) >> z = [-5]; >> p = [-1 -3 -40]; >> k = [1]; >> sys1 = zpk(z, p, k) sys1 = (s+5) -----------------(s+1) (s+3) (s+40) Continuous-time zero/pole/gain model. >>rlocus(sys1)
matlab 3级dwt代码
在MATLAB中,你可以使用小波变换工具箱(Wavelet Toolbox)来实现离散小波变换(DWT)。
对于三级离散小波变换(3-level DWT),你可以通过多次应用一级DWT来实现。
以下是一个简单的示例代码,展示了如何在MATLAB中执行三级DWT:matlab% 加载或创建输入信号% 例如,这里我们创建一个简单的测试信号x = sin(2*pi*(0:0.01:1-0.01));% 选择小波基和分解级数waveletFunction = 'db1'; % 选择Daubechies小波基,阶数为1level = 3; % 设置分解级数为3% 执行三级DWT[cA,cD] = dwt(x,waveletFunction); % 第一级DWT[cA1,cD1] = dwt(cA,waveletFunction); % 第二级DWT[cA2,cD2] = dwt(cA1,waveletFunction); % 第三级DWT% cA2 是近似系数,cD1 和 cD2 是细节系数% 注意:这里我们只保留了近似系数和每一级的细节系数,没有保留更高频的细节系数% 如果你需要保留所有细节系数,你需要在每一级DWT后都分别保存cA和cD% 打印结果disp('Approximation coefficients at level 3:');disp(cA2);disp('Detail coefficients at level 2:');disp(cD2);disp('Detail coefficients at level 1:');disp(cD1);这段代码首先加载或创建一个输入信号x。
然后,它选择一个小波基(在这个例子中是Daubechies小波基,阶数为1)和分解级数(在这个例子中是3)。
接下来,它使用dwt函数执行三级DWT,每次都对近似系数进行分解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
hold on
plot(x3,y3)
2.利用menu函数输入选择参数ch。当ch=1时,产生[-10, 10]之间均匀分布的随机数;当ch=2时,产生[-5, 5]之间均匀分布的随机数;当ch=3时,产生[-1, 1]之间均匀分布的随机数;当ch=4时,产生均值为0,方差为1的正态分布随机数。要求使用switch函数。
a = -5; b = 5;
result = a + (b-a) * rand(1);
case 3
a = -1; b = 1;
result = a + (b-a) * rand(1);
case 4
result =randn(1);
解:
CH = menu('please choose a number', '1', '2','3','4');
switch CH
case 1
a = -10; b = 10;%注意两个分号
result = a + (b-a) * rand(1);
case 2
end
disp(result);
3、加权平均分程序编写,输入某同学某学期6门课程的成绩,并按学分2、3、2、4、2.5、1分别进行加权,计算出学生的加权平均分
解:
wi = [2 3 2 4 2.5 1];
s = input('\n请输入6门课程的成绩,以空格分隔:\n', 's');
k=1.5+0.02*(p-20);
else
k=1.9+0.01*(p-40);
end
k
5请修改下面的程序,让他们没有for循环语句!
解:
A=[1 2 3; 4 5 6; 7 8 9];
A(find(A>8|A<2))=0
6、编程求
的值,要求:
使用循环语句编程,但不能使用数组运算符和sum;
使用数组运算符和sum编程,不能使用循环结构。
解:
%方法一
y=0;
n=88;
for j=1:n
y=y+1/((j+1)^2);%注意分号
end
y %注意
%方法二
a=1:88;
y=sum(1./(a+1).^2)
即如王某完成25万元利润时,个人可得:
y=10*10%+10*5%+5*2% 万
据此编写程序,求企业职工的奖金
解:
p=input('请输入利润 p=');%注意下
if p<=10
k=0.1*p;
elseif p<=20
k=1+0.05*(p-10);
elseif p<=40
s = str2num(s); %s是一个ASCII字符串表示的数值,这种调用格式把字符串转换成数值
if numel(s) < 6 %numel()用于计算数组中满足指定条件的元素个数
error('课程不足6门');
end
xi = s(1:6);
average_score = sum(wi.*xi) / sum(wi);
fprintf('\n 加权平均分:%2f\n', average_score);
4、企业发放的奖金按照个人完成的的利润(I)提成,分段提成比例KI为
┍ 10% I<=10 万
┋ 5% 10<I<=20 万
KI= 2% 20<I<=40 万
┗ 1% I>40 万
1编写程序计算([-3, 3],步长0.01)
解:
x1=-3:0.01:(-1+0.01);
y1=(-x1.^2-4.*x1-3)/2;
plot(x1,y1)
x2=-1:0.01:(1-0.01);
y2=-x2.^2+1;
hold on
plot(x2,y2)
x3=1:0.01:3