(完整word版)matlab编程
- 格式:doc
- 大小:101.51 KB
- 文档页数:9
摘要基于MATLAB GUI的计算器设计是利用GUIDE创建图形用户界面进行计算器设计。
设计计算器时,主要是考虑到计算器的易用性、功能的常用程度进行计算器界面与功能的设计。
通过调整控件和文本的布局及颜色,使界面简单大方、布局合理,达到界面友好的效果。
计算器设计时主要利用到get和set两个函数进行各个控件属性值的传递和设置。
计算器实现的功能有:数字0~9和小数点的输入显示,平方、开平方和对数的输入显示。
进行四则运算、正弦计算、余弦计算、正切计算和余切计算,可以求阶乘、求百分数和求倒数。
可以进行括号及变量x与变量y的输入,结合坐标轴编辑框和曲线颜色编辑框实现函数的曲线绘制。
最后运行调试,实现基于MATLAB GUI的计算器的设计。
MATLAB GUI介绍MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
MATLAB是matrix和laboratory两个词的组合,意为矩阵工厂,主要面对科学计算、可视化以及交互式程设计的高科技计算环境。
MATLAB是将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言的编辑模式,特别是所附带的30多种面向不同领域的工具箱支持,使得它在许多科学领域中成为计算机辅助设计和分析、算法研究和应用开发的基本工具和首选平台。
MATLAB的图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。
MATLAB的图形用户界(GUI)是由光标,窗口,菜单、文字说明等对象构成一个用户界面。
> % Cripple Pachebel's Canon on Matlab% Have funfs = 44100; % sample ratedt = 1/fs;T16 = 0。
125;t16 = [0:dt:T16];[temp k] = size(t16);t4 = linspace(0,4*T16,4*k);t8 = linspace(0,2*T16,2*k);[temp i] = size(t4);[temp j] = size(t8);% Modification functionsmod4 = sin(pi*t4/t4(end));mod8 = sin(pi*t8/t8(end));mod16 = sin(pi*t16/t16(end));f0 = 2*146.8; % reference frequencyScaleTable = [2/3 3/4 5/6 15/16 ...1 9/8 5/4 4/3 3/2 5/3 9/5 15/8 .。
2 9/4 5/2 8/3 3 10/3 15/4 4 。
.。
1/2 9/16 5/8];% 1/4 notesdo0f = mod4.*cos(2*pi*ScaleTable(21)*f0*t4);re0f = mod4.*cos(2*pi*ScaleTable(22)*f0*t4);mi0f = mod4.*cos(2*pi*ScaleTable(23)*f0*t4);fa0f = mod4.*cos(2*pi*ScaleTable(1)*f0*t4);so0f = mod4.*cos(2*pi*ScaleTable(2)*f0*t4);la0f = mod4。
*cos(2*pi*ScaleTable(3)*f0*t4);ti0f = mod4.*cos(2*pi*ScaleTable(4)*f0*t4);do1f = mod4。
第二章 MATLAB 语言及应用实验项目实验一 MATLAB 数值计算三、实验内容与步骤1.创建矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=987654321a(1(2)用(3)用(42.矩阵的运算(1)利用矩阵除法解线性方程组。
⎪⎪⎩⎪⎪⎨⎧=+++=-+-=+++=+-12224732258232432143214321421x x x x x x x x x x x x x x x 将方程表示为AX=B ,计算X=A\B 。
(2)利用矩阵的基本运算求解矩阵方程。
已知矩阵A 和B 满足关系式A -1BA=6A+BA ,计算矩阵B 。
其中⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=7/10004/10003/1A ,Ps: format rata=[1/3 0 0;0 1/4 0;0 0 1/7];b=inv(a)*inv(inv(a)-eye(3))*6*a(3)计算矩阵的特征值和特征向量。
已知矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=1104152021X ,计算其特征值和特征向量。
(4)Page:322利用数学函数进行矩阵运算。
已知传递函数G(s)=1/(2s+1),计算幅频特性Lw=-20lg(1)2(2w )和相频特性Fw=-arctan(2w),w 的范围为[0.01,10],按对数均匀分布。
3.多项式的运算(1)多项式的运算。
已知表达式G(x)=(x-4)(x+5)(x 2-6x+9),展开多项式形式,并计算当x 在[0,20]内变化时G(x)的值,计算出G(x)=0的根。
Page 324(2)多项式的拟合与插值。
将多项式G(x)=x 4-5x 3-17x 2+129x-180,当x 在[0,20]多项式的值上下加上随机数的偏差构成y1,对y1进行拟合。
对G(x)和y1分别进行插值,计算在5.5处的值。
Page 325 四、思考练习题1.使用logspace 函数创建0~4π的行向量,有20个元素,查看其元素分布情况。
Ps: logspace(log10(0),log10(4*pi),20) (2) sort(c,2) %顺序排列 3.1多项式1)f(x)=2x 2+3x+5x+8用向量表示该多项式,并计算f(10)值. 2)根据多项式的根[-0.5 -3+4i -3-4i]创建多项式。
背出来,Matlab就无敌了一 matlab常用函数1、特殊变量与常数ans 计算结果的变量名computer 确定运行的计算机eps 浮点相对精度Inf 无穷大I 虚数单位inputname 输入参数名NaN 非数nargin 输入参数个数nargout 输出参数的数目pi 圆周率nargoutchk 有效的输出参数数目realmax 最大正浮点数realmin 最小正浮点数varargin 实际输入的参量varargout 实际返回的参量操作符与特殊字符+ 加 - 减*矩阵乘法 .* 数组乘(对应元素相乘)^ 矩阵幂 .^ 数组幂(各个元素求幂)\ 左除或反斜杠 / 右除或斜面杠。
/ 数组除(对应元素除)kron Kronecker张量积:冒号 () 圆括[] 方括。
小数点.。
父目录 .。
继续,逗号(分割多条命令) ; 分号(禁止结果显示)% 注释!感叹号 ' 转置或引用 = 赋值== 相等〈〉不等于& 逻辑与|逻辑或~逻辑非 xor 逻辑异或2、基本数学函数abs 绝对值和复数模长acos,acodh 反余弦,反双曲余弦acot,acoth 反余切,反双曲余切 acsc,acsch 反余割,反双曲余割 angle 相角asec,asech 反正割,反双曲正割secant 正切asin,asinh 反正弦,反双曲正弦 atan,atanh 反正切,双曲正切tangent 正切atan2 四象限反正切ceil 向着无穷大舍入complex 建立一个复数conj 复数配对cos,cosh 余弦,双曲余弦csc,csch 余切,双曲余切cot,coth 余切,双曲余切exp 指数fix 朝0方向取整floor 朝负无穷取整*** 最大公因数imag 复数值的虚部lcm 最小公倍数log 自然对数log2 以2为底的对数log10 常用对数mod 有符号的求余nchoosek 二项式系数和全部组合数real 复数的实部rem 相除后求余round 取整为最近的整数sec,sech 正割,双曲正割sign 符号数sin,sinh 正弦,双曲正弦sqrt 平方根 tan,tanh 正切,双曲正切3、基本矩阵和矩阵操作blkding 从输入参量建立块对角矩阵eye 单位矩阵linespace 产生线性间隔的向量logspace 产生对数间隔的向量numel 元素个数ones 产生全为1的数组rand 均匀颁随机数和数组randn 正态分布随机数和数组zeros 建立一个全0矩阵 colon) 等间隔向量cat 连接数组diag 对角矩阵和矩阵对角线fliplr 从左自右翻转矩阵flipud 从上到下翻转矩阵repmat 复制一个数组(完整word)MATLAB常用 reshape 改造矩阵roy90 矩阵翻转90度tril 矩阵的下三角triu 矩阵的上三角dot 向量点集cross 向量叉集ismember 检测一个集合的元素intersect 向量的交集 setxor 向量异或集 setdiff 向是的差集 union 向量的并集数值分析和傅立叶变换 cumprod 累积 cumsum 累加 cumtrapz 累计梯形法计算数值微分 factor 质因子 inpolygon 删除多边形区域内的点 max 最大值 mean 数组的均值 mediam 中值 min 最小值 perms 所有可能的转换 polyarea 多边形区域 primes 生成质数列表 prod 数组元素的乘积 rectint 矩形交集区域 sort 按升序排列矩阵元素 sortrows 按升序排列行 std 标准偏差 sum 求和 trapz 梯形数值积分 var 方差 del2 离散拉普拉斯 diff 差值和微分估计 gradient 数值梯度 cov 协方差矩阵 corrcoef 相关系数 conv2 二维卷积 conv 卷积和多项式乘法 filter IIR或FIR滤波器 deconv 反卷积和多项式除法 filter2 二维数字滤波器 cplxpair 将复数值分类为共轭对 fft 一维的快速傅立叶变换 fft2 二维快速傅立叶变换 fftshift 将FFT的DC分量移到频谱中心 ifft 一维快速反傅立叶变换 ifft2 二维傅立叶反变换 ifftn 多维快速傅立叶变换 ifftshift 反FFT偏移 nextpow2 最靠近的2的幂次 unwrap 校正相位角多项式与插值 conv 卷积和多项式乘法 roots 多项式的根 poly 具有设定根的多项式 polyder 多项式微分 polyeig 多项式的特征根 polyfit 多项式拟合 polyint 解析多项式积分 polyval 多项式求值 polyvalm 矩阵变量多项式求值 residue 部分分式展开 interp1 一维插值 interp2 二维插值 interp3 三维插值 interpft 使用FFT的一维插值 interpn 多维插值 meshgrid 为3维点生成x和y的网格 ndgrid 生成多维函数和插值的数组 pchip 分段3次Hermite插值多项式 ppval 分段多项式的值 spline 3次样条数据插值绘图函数 bar 竖直条图 barh 水平条图 hist 直方图 histc 直方图计数 hold 保持当前图形 loglog x,y对数坐标图 pie 饼状图 plot 绘二维图 polar 极坐标图 semilogy y轴对数坐标图 semilogx x轴对数坐标 subplot 绘制子图 bar3 数值3D竖条图 bar3h 水平3D条形图 comet3 3D慧星图 cylinder 圆柱体 fill3 填充的3D多边形 plot3 3维空间绘图 quiver3 3D震动(速度)图 slice 体积薄片图 sphere 球 stem3 绘制离散表面数据 wate***ll 绘制瀑布 trisurf 三角表面 clabel 增加轮廓标签到等高线图中 datetick 数据格式标记 grid 加网格线 gtext 用鼠标将文本放在2D图中 legend 图注 plotyy 左右边都绘Y轴 title 标题 xlabel X轴标签 ylabel Y轴标签 zlabel Z轴标签 contour 等高线图 contourc 等高线计算 contourf 填充的等高线图 hidden 网格线消影 meshc 连接网格/等高线 mesh 具有参考轴的3D网格 peaks 具有两个变量的采样函数 surf 3D阴影表面图 su***ce 建立表面低层对象 surfc 海浪和等高线的结合 surfl 具有光照的3D阴影表面 trimesh 三角网格图二 Matlab常用指令1、通用信息查询(General information)demo 演示程序 help 在线帮助指令 helpbrowser 超文本文档帮助信息 helpdesk 超文本文档帮助信息 helpwin 打开在线帮助窗 info MATLAB 和MathWorks 公司的信息 subscribe MATLAB 用户注册 ver MATLAB 和TOOLBOX 的版本信息 version MATLAB 版本 whatsnew 显示版本新特征2、工作空间管理(Managing the workspace)clear 从内存中清除变量和函数 exit 关闭MATLAB load 从磁盘中调入数据变量 pack 合并工作内存中的碎块 quit 退出MATLAB save 把内存变量存入磁盘 who 列出工作内存中的变量名 whos 列出工作内存中的变量细节 workspace 工作内存浏览器3 、管理指令和函数(Managing commands and functions)edit 矩阵编辑器 edit 打开M 文件 inmem 查看内存中的P 码文件 mex 创建MEX 文件 open 打开文件 pcode 生成P 码文件 type 显示文件内容 what 列出当前目录上的M、MAT、MEX 文件 which 确定指定函数和文件的位置4 、搜索路径的管理(Managing the seach patli)addpath 添加搜索路径 rmpath 从搜索路径中删除目录 path 控制MATLAB 的搜索路径 pathtool 修改搜索路径5、指令窗控制(Controlling the command window)beep 产生beep 声 echo 显示命令文件指令的切换开关 diary 储存MATLAB 指令窗操作内容 format 设置数据输出格式 more 命令窗口分页输出的控制开关6、操作系统指令(Operating system commands)cd 改变当前工作目录 computer 计算机类型 copyfile 文件拷贝 delete 删除文件 dir 列出的文件 dos 执行dos 指令并返还结果 getenv 给出环境值 ispc MATLAB 为PC(Windows)版本则为真 isunix MATLAB 为Unix 版本则为真 mkdir 创建目录 pwd 改变当前工作目录 unix 执行unix 指令并返还结果 vms 执行vms dcl 指令并返还结果 web 打开web 浏览器 ! 执行外部应用程序三 Matlab运算符和特殊算符1、算术运算符(Arithmetic operators)+ 加—减 * 矩阵乘 .*数组乘 ^ 矩阵乘方 .^ 数组乘方 \ 反斜杠或左除 / 斜杠或右除。
第1章MATLAB操作基础1.1 MATLAB概述1.1.2 MATLAB的主要功能1.数值计算MATLAB以矩阵作为数据操作的基本单位,还提供了十分丰富的数值计算函数。
2.绘图功能可以绘制二维、三维图形,还可以绘制特殊图形(与统计有关的图,例如:区域图、直方图、饼图、柱状图等)。
3.编程语言MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。
4.MATLAB工具箱MATLAB包含两部分内容:基本部分和各种可选的工具箱。
MATLAB工具箱分为两大类:功能性工具箱和学科性工具箱。
1.1.3MATLAB语言的特点❖语言简洁紧凑,使用方便灵活,易学易用。
例如:A=[1 2 3;4 5 6;7 8 9]一条语句实现了对3x3矩阵的输入。
❖语句功能强大,一条语句相当于其它语言的一个子程序,例如fft。
❖语句简单,内涵丰富。
同一个函数有不同的输入变量和输出变量,分别代表不同的含义。
❖Matlab既具有结构化的控制语句(if、for、while)又支持面向对象的程序设计。
❖方便的绘图功能。
❖包含功能强劲的工具箱。
❖易于扩展。
1.1.4 初识MATLAB例1-1 绘制正弦曲线和余弦曲线。
x=[0:0.5:360]*pi/180;plot(x,sin(x),x,cos(x));例1-2 求方程3x4+7x3+9x2-23=0的全部根。
p=[3,7,9,0,-23]; %建立多项式系数向量x=roots(p) %求根例1-3 求积分quad('x.*log(1+x)',0,1)例1-4 求解线性方程组。
a=[2,-3,1;8,3,2;45,1,-9];b=[4;2;17];x=inv(a)*b1.2 MATLAB的运行环境与安装1.2.1 MATLAB的运行环境硬件环境:(1) CPU(2) 内存(3) 硬盘(4) CD-ROM驱动器和鼠标软件环境:(1) Windows 98/NT/2000 或Windows XP(2) 其他软件根据需要选用1.2.2 MATLAB的安装运行系统的安装程序setup.exe,可以按照安装提示依次操作。
第2章图像获取2.3.2 二维连续傅里叶变换例2.2figure(1); %建立图形窗口1[u,v] = meshgrid(-1:0.01:1); %生成二维频域网格F1 = abs(sinc(u.*pi));F2 = abs(sinc(v.*pi));F=F1.*F2; %计算幅度频谱F=|F(u,v)|surf(u,v,F); %显示幅度频谱,如图2.3(b)shading interp; %平滑三维曲面上的小格axis off; %关闭坐标系figure(2); %建立图形窗口2F1=histeq(F); %扩展F的对比度以增强视觉效果imshow(F1); %用图像来显示幅度频谱,如图2.3(c)第3章图像变换3.4.4 二维FFT的MATLAB实现例3.2 简单图像及其傅里叶变换MATLAB程序:%建立简单图像d并显示之d = zeros(32,32); %图像大小32⨯32d(13:20,13:20) = 1; %中心白色方块大小为8⨯8figure(1); %建立图形窗口1imshow(d,'notruesize');%显示图像d如图3.5(a)所示%计算傅里叶变换并显示之D = fft2(d); %计算图像d的傅里叶变换,fft2(d) = fft(fft(d).').'figure(2); %建立图形窗口2imshow(abs(D),[-1 5],'notruesize'); %显示图像d的傅里叶变换谱如3.5(b)所示例3.3 MATLAB图像及其傅里叶变换谱MATLAB程序:figure(1);load imdemos saturn2; %装入MA TLAB图像saturn2imshow(saturn2); %显示图像saturn2如图3.6(a)所示figure(2);S= fftshift(fft2(saturn2)); %计算傅里叶变换并移位imshow(log(abs(S)),[ ]); %显示傅里叶变换谱如3.6(b)所示例3.4 真彩图像及其傅里叶变换谱MATLAB程序:figure(1);A=imread('image1.jpg'); %装入真彩图像,见图1.1(b)B=rgb2gray(A); %将真彩图像转换为灰度图像imshow(B); %显示灰度图像如图3.7(a)所示C=fftshift(fft2(B)); %计算傅里叶变换并移位figure(2);imshow(log(abs(C)),[ ]); %显示傅里叶变换谱如3.7(b)所示3.5.4 离散余弦变换的MATLAB实现例3.5 计算并显示真彩图像余弦变换的MATLAB程序如下:RGB=imread('image2.jpg'); %装入真彩图像figure(1);imshow(RGB); %显示彩色图像GRAY=rgb2gray(RGB); %将真彩图像转换为灰度图像figure(2);imshow(GRAY); %显示灰度图像如图3.10(a)所示DCT=dct2(GRAY); %进行余弦变换figure(3);imshow(log(abs(DCT)),[ ]); %显示余弦变换如图3.10(b)所示。
二、创新实验设计创新实验一:(7,4)汉明码的编码与译码实现1、实验目的实现(7,4)汉明码的编码与译码,通过这次实验不但加深了对汉明码编码和译码原理了解,而且对线性分组码有所了解。
2、实验原理线性分组码的构造方法比较简单、理论较为成熟,应用比较广泛。
汉明码是一种能够纠正一个错码的效率比较高的线性分组码,下面以(7,4)码为例就汉明码的编码与译码分别进行介绍:(1)编码原理一般来说,若汉明码长为n ,信息位数为k ,则监督位数r=n-k 。
若希望用r 个监督位构造出r 个监督关系式来指示一位错码的n 种可能位置,则要求21r n -≥或211rk r -≥++ (1)设汉明码(n,k )中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r ≥3。
若取r=3,则n=k+r=7。
这样就构成了(7,4)码。
用6543210a a a a a a a 来表示这7个码元,用123s s s 的值表示3个监督关系式中的校正子,则123s s s 的值与错误码元位置的对应关系可以规定如表1所列。
表2.1 校正子和错码位置的关系则由表1可得监督关系式:16542s a a a a =⊕⊕⊕()226531s a a a a =⊕⊕⊕()3 36430s a a a a =⊕⊕⊕()4 在发送端编码时,信息位6543a a a a 的值决定于输入信号,因此它们是随机的。
监督位2a 、1a 、a 应根据信息位的取值按监督关系来确定,为使所编的码中无错码,则123,,S S S 等于0,即65426531643000(5)0a a a a a a a a a a a a ⊕⊕⊕=⎧⎪⊕⊕⊕=⎨⎪⊕⊕⊕=⎩方程组(5)可等效成如下矩阵形式6543210111010001101010010110010a a a a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎢⎥⎣⎦(6)式(6)可简化为0T T HA =,H 为监督矩阵,则由式(6)可得到监督矩阵11101001101010=[P I ] (7)1011001r H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦因为生成矩阵'=[I Q]=[I ]k k G P ,所以由(7)得生成矩阵G 如下:[]k 10001110100110[']00101010001011k G I Q I P ⎡⎤⎢⎥⎢⎥===⎢⎥⎢⎥⎣⎦然后利用信息位和生成矩阵G 相乘产生整个码组,即有[][]65432106543=(8)A a a a a a a a a a a a G=其中A 为整个码组矩阵,6543a a a a 是信息位。
利用MATLAB生成Word文档fun ctio n ceshi_Word%利用MATLAB生成Word文档% ceshi_Word%% Copyright 2009 - 2010 xiezhh.% $Revisio n: 1.0.0.0 $ $Date: 2009/12/14 12:37:00 $%设定测试Word文件名和路径测试.doc'];%判断Word是否已经打开,若已打开,就在打开的Word中进行操作,否则就打开try%若Word服务器已经打开,返回其句柄WordWord = actxGetR unnin gServer('Word.Applicati on');catch%创建一个Microsoft Word服务器,返回句柄WordWord = actxserver('Word.Applicatio n');en d;%设置Word属性为可见Word.Visible = 1; % 或set(Word, 'Visible', 1);%若测试文件存在,打开该测试文件,否则,新建一个文件,并保存,文件名为测试if exist(filespec_user,'file');Docume nt = Word.Docume nts.Ope n(filespec_user);% Docume nt = in voke(Word.Docume nts,'Ope n',filespec_user);elseDocume nt = Word.Docume nts.Add;% Docume nt = in voke(Word.Docume nts, 'Add');Docume nt.SaveAs(filespec_user);endContent = Document.Content; % 返回Content 接口句柄Selection = Word.Selection; % 返回Selection 接口句柄Paragraphformat = Selection.ParagraphFormat; % 返回ParagraphFormat 接口句柄%页面设置Docume nt.PageSetup.TopMarg in = 60;Docume nt.PageSetup.BottomMarg in = 45;Docume nt.PageSetup.LeftMarg in = 45;Docume nt.PageSetup.RightMarg in = 45;%设定文档内容的起始位置和标题Con te nt.Start = 0; %设置文档内容的起始位置Word .doc%上边距60磅%下边距45磅%左边距45磅%右边距45磅title ='试卷分析';Conten t.Text = title;%输入文字内容 Conten t.F on t.Size =16 ; %设置字号为16 Co nten t.Fo nt.Bold =4 ; %字体加粗Con te nt.P aragraphs.Alig nment = 'wdAlig nParagraphCe nter :Select ion. TypeParagraph; xueqi = ' ( 2009 — 2010 学年第一学期)’;Selection.Text = xueqi; % 在当前位置输入文字内容Selectio n.Fo nt.Size = 12; % 设置字号为 12 Selectio n.Fo nt.Bold = 0; % 字体不加粗Tables = Docume nt.Tables.Add(Selectio n.Ra nge,12,9); %返回第1个表格的句柄DTI = Document.T ables.ltem(1); % 或 DTI = Tables; %设置表格边框DTI.Borders.OutsideLi neStyle = 'wdLi neStyleSi ngle'; DTI.Borders.OutsideLi neWidth = 'wdL in eWidth150pt';DTI.Borders.I nsideLi neStyle = 'wdLi neStyleSi ngle'; DTI.Borders.I nsideLi neWidth = 'wdL in eWidth150pt'; DTI.Rows.Alig nment = 'wdAlig nRowCe nter';DTI.Rows.ltem(8).Borders.ltem(1).Li neStyle = 'wdL in eStyleNo ne'; DTI.Rows.ltem(8).Borders.lte m( 3).Li neStyle = 'wdL in eStyleNo ne';DTI.Rows.Item(11).Borders.Item(1).Li neStyle = 'wdLi neStyleNo ne'; DTI.Rows.ltem(11).Borders.ltem(3).Li neStyle = 'wdLi neStyleNo ne'; %设置表格列宽和行高column_width = [53.7736,85.1434,53.7736,35.0094,...35.0094,76.6981,55.1887,52.9245,54.9057];% 定义列宽向量row_height = [28.5849,28.5849,28.5849,28.5849,25.4717,25.4717,...32.8302,312.1698,17.8302,49.2453,14.1509,18.6792]; % 定义行高向量%通过循环设置表格每列的列宽 for i = 1:9DTI.Colu mn s.Item(i).Width = colu mn _width(i);%居中对齐Selectio n.Start = Conten t.e nd; %设定下面内容的起始位置%回车,另起一段 Selectio n.MoveDow n;%光标下移(取消选中)paragraphformat.Alig nment = 'wdAlig nParagraphCe nter :Select ion. TypeParagraph; %回车,另起一段Select ion. TypeParagraph;%回车,另起一段Selection.Font.Size = 10.5; % 设置字号为 10.5%居中对齐%在光标所在位置插入一个12行9列的表格end%通过循环设置表格每行的行高for i = 1:12DTI.Rows.ltem(i).Height = row_height(i);end%通过循环设置每个单元格的垂直对齐方式for i = 1:12for j = 1:9DTI.Cell(i,j).VerticalAlig nment = 'wdCellAlig nV erticalCe nter'; endend%合并单元格DTI.Cell(1,4).Merge(DTI.Cell(1,5));DTI.Cell(2, 4).Merge(DTI.Cell(2, 5));DTI.Cell(3, 4).Merge(DTI.Cell(3, 5));DTI.Cell(4, 4).Merge(DTI.Cell(4, 5));DTI.Cell(5, 2).Merge(DTI.Cell(5, 5));DTI.Cell(5, 3).Merge(DTI.Cell(5, 6));DTI.Cell(6, 2).Merge(DTI.Cell(6, 5));DTI.Cell(6, 3).Merge(DTI.Cell(6, 6));DTI.Cell(5, 1).Merge(DTI.Cell(6, 1));DTI.Cell(7, 1).Merge(DTI.Cell(7, 9));DTI.Cell(8, 1).Merge(DTI.Cell(8, 9));DTI.Cell(9, 1).Merge(DTI.Cell(9, 3));DTI.Cell(9, 2).Merge(DTI.Cell(9, 3));DTI.Cell(9, 3).Merge(DTI.Cell(9, 4));DTI.Cell(9, 4).Merge(DTI.Cell(9, 5));DTI.Cell(10, 1).Merge(DTI.Cell(10, 9));DTI.Cell(11,5).Merge(DTI.Cell(11,9));DTI.Cell(12, 5).Merge(DTI.Cell(12, 9));DTI.Cell(11, 1).Merge(DTI.Cell(12, 4));Selection.Start = Content.end; % 设置光标位置在文档内容的结尾Select ion. TypeParagraph; %回车,另起一段Selection.Text ='主管院长签字:年月日';%输入文字内容Paragraphformat.Alig nment = 'wdAlig nParagraphRight'; % 右对齐Selection.MoveDown; % 光标下移%写入表格内容DTI.Cell(1,1).Range.Text ='课程名称';DTI.Cell(1,3).Range.Text ='课程号';DTI.Cell(1,5).Range.Text ='任课教师学院’;DTI.Cell(1,7).Range.Text ='任课教师DTI.Cell(2,1).Range.Text ='授课班级DTI.Cell(2,3).Range.Text ='考试日期DTI.Cell(2,5).Range.Text ='应考人数DTI.Cell(2,7).Range.T ext ='实考人数DTI.Cell(3,1).Range.T ext ='出卷方式DTI.Cell(3,3).Range.Text ='阅卷方式'; DTI.Cell(3,5).Range.T ext ='选用试卷A/B :DTI.Cell(3,7).Range.Text ='考试时间'; DTI.Cell(4,1).Range.Text ='考试方式'; DTI.Cell(4,3).Range.T ext ='平均分';DTI.Cell(4,5).Range.T ext ='不及格人数DTI.Cell(4,7).Range.Text ='及格率';DTI.Cell(5,1).Range.T ext ='成绩分布'; DTI.Cell(5,2).Range.Text = '90 分以上DTI.Cell(5,3).Ra nge.Text = '80---89 分DTI.Cell(6,2).Ra nge.Text = '70--79 分DTI.Cell(6,3).Ra nge.Text = '60---69 分DTI.Cell(7,1).Ra nge.Text =['试卷分析(含是否符合教学大纲、难度、知识覆'盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中 '存在的问题及改进措施等内容) '];DTI.Cell(7,1).Ra nge.ParagraphFormat.Alig nment = 'wdAlig nParagraphLeft :DTI.Cell(9,2).Range.Text ='签字::DTI.Cell(9,4).Range.Text ='年月日'; DTI.Cell(10,1).Range.Text ='教研室审阅意见:’;DTI.Cell(10,1).Ra nge.ParagraphFormat.Alig nment = 'wdAlig nParagraphLeft'; DTI.Cell(10,1).VerticalAlig nment = 'wdCellAlig nVerticalTop'; DTI.Cell(11,2).Range.Text ='教研室主任(签字):年月日';DTI.Cell(11,2).Ra nge.ParagraphFormat.Alig nment = 'wdAlig nParagraphLeft'; DTI.Cell(8,1).Ra nge.P aragraphFormat.Alig nment = 'wdAlig nParagraphLeft'; DTI.Cell(8,1).VerticalAlig nment = 'wdCellAlig nV erticalTop'; DTI.Cell(9,2).Borders.ltem(2).L in eStyle = 'wdLi neStyleN on e'; DTI.Cell(9,2).Borders.ltem(4).L in eStyle = 'wdLi neStyleN on e'; DTI.Cell(9,3).Borders.Item(4).L in eStyle = 'wdLi neStyleN on e'; DTI.Cell(11,1).Borders.Item(4).Li neStyle = 'wdL in eStyleNo ne'; %如果当前工作文档中有图形存在,通过循环将图形全部删除Shape = Document.Shapes; % 返回Shapes 接口的句柄ShapeCount = Shape.Count; % 返回文档中Shape 对象的个数if ShapeCou nt ~= 0;for i = 1:ShapeCo unt;Shape.Item(1).Delete; % 删除第 1 个 Shape 对象 en d;en d;%产生标准正态分布随机数,画直方图,并设置图形属性人占%'; 人占 %'; 人占%'; 人占%';zft = figure(' un its',' no rmalized','positi on',...[0.280469 0.553385 0.428906 0.251302],'visible','off); % 新建图形窗口,设为不可见set(gca,'position',[0.1 0.2 0.85 0.75]); % 设置坐标系的位置和大小data = normrnd(0,1,1000,1); % 产生标准正态分布随机数hist(data); %绘制标准正态分布随机数的频数直方图grid on; % 添加参考网格xlabel('考试成绩'); %为X轴加标签ylabel('人数'); %为Y轴加标签%将图形复制到粘贴板hgexport(zft, '-clipboard');%将图形粘贴到当前文档里(表格的第8行第1列的单元格里),并设置图形版式为浮于文字上方% Select ion .Ra nge.PasteSpecial;DTI.Cell(8,1).Ra nge. Paragraphs.ltem(1).Ra nge. PasteSpecial;Shape.ltem(1).WrapFormat.Type = 3;Shape.ltem(1).ZOrder('msoBringlnFrontOfText'); % 设置图片叠放次序为浮于文字上方delete(zft); %删除图形句柄Document.ActiveWindow.ActivePane.View.Type = 'wdPrintView'; % 设置视图方式为页面Document.Save; % 保存文档口Love is n ot a maybe thing. You know whe n you love some one.。
问题一1、问题描述本次作业中使用共轭梯度法求解232122212142min x x x x x x x +-++-,初始点取为T x )2,2,2(0=。
2、求解方法及求解程序(1)共轭梯度法:对于二次函数的无约束最小化问题:x b x Q x x f T T -=21)(,共轭梯度方法: k k k k d x x α+=+1其中步长k α由最小线性化准则确定:)(min )(k k k k k d x f d x ααα+=+。
既将函数)(x f 对α求导等于零,得到的α就是我们当前所求步长。
梯度方向:b Qx x f g k k k -=∇=)(共轭梯度的方向由下式生成:00g d -=1,...,1,1-=+-=-n k d g d k k k k β其中k β由下式给出:1)1(--=k k kk k g g g g T T β该方法在最多n 次迭代后,将终止于某个最优解处。
(2)求解程序frcg.mfunction [x ,val,k ]=frcg(fun,funs,x0)% 功能: 用FR共轭梯度法求解无约束问题: min f(x)%输入: x0是初始点, fun, gfun分别是目标函数和梯度%输出: x, val分别是近似最优点和最优值, k是迭代次数。
maxk=5000; %最大迭代次数rho=0。
6;sigma=0.4;k=0; epsilon=1e—4;n=length(x0);while(k〈maxk)g=feval(funs,x0); %计算梯度itern=k-(n+1)*floor(k/(n+1));itern=itern+1;%计算搜索方向if(itern==1)d=—g;elsebeta=(g’*g)/(g0'*g0);d=—g+beta*d0; gd=g'*d;if(gd>=0.0)d=—g;endendif(norm(g)<epsilon), break; end %检验终止条件m=0; mk=0;while(m<20) %Armijo搜索if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g'*d) mk=m; break;endm=m+1;endx0=x0+rho^mk*d;val=feval(fun,x0);g0=g; d0=d;k=k+1;endx=x0;val=feval(fun,x);fun.mfunction f=fun(x)f=x(1)^2-x(1)*x(2)+x(2)^2+2*x(1)-4*x(2)+x(3)^2; funs.mfunction fs=funs(x)fs=[2*x(1)—x(2)+2,2*x(2)—x(1)-4,2*x(3)]’;命令行输入: x0=[2,2,2]';[x,val,k]=frcg(’fun',’funs',x0)3、求解结果x =0.00002。
matlab 编程语言一、MATLAB 简介MATLAB 是一款由美国MathWorks 公司开发的数学软件,它具有强大的科学计算和可视化功能,广泛应用于数学计算、工程分析、控制系统设计、信号处理等领域。
MATLAB 的语言简洁易学,具有良好的可读性和实用性,为编程初学者和专业开发者提供了丰富的工具和功能。
二、MATLAB 编程基础1.变量与数据类型在MATLAB 中,变量不需要声明,直接使用即可。
变量类型包括标量、向量、矩阵等。
例如:```x = 1;y = [1, 2, 3];```2.运算符与表达式MATLAB 支持基本的算术运算、逻辑运算和关系运算。
例如:```a = 2 + 3;b = 5 * 6;c = a > b;```3.流程控制MATLAB 中的流程控制语句包括if、elseif、else、for、while、switch 等。
例如:```if x > 10disp("x 大于10");elseif 5 <= x && x < 10disp("5 到10 之间");elsedisp("x 小于5");end```4.函数与参数MATLAB 中的函数分为内置函数和用户自定义函数。
内置函数如sin、cos、sqrt 等,用户自定义函数可以使用以下方式定义:```function y = my_function(x)y = x^2;end```三、MATLAB 高级功能1.矩阵操作MATLAB 中的矩阵操作包括矩阵的创建、矩阵的运算、矩阵的转置、矩阵的逆等。
例如:```A = [1, 2; 3, 4];B = A * A;```2.图形绘制MATLAB 提供了丰富的绘图功能,可以轻松地绘制二维和三维图形。
例如:```figure;plot(x, y);```3.符号计算MATLAB 中的符号计算功能允许进行复杂的数学运算,如求解方程、求导、积分等。
中南大学MATLAB程序设计实践班级:材料0901姓名:杨力通学号:0604090102指导老师:汪冰峰材料科学与工程学院2012年4月10日一、编程实现“四阶龙格-库塔(R-K )方法求常微分方程”,并举一例应用之。
【实例】采用龙格-库塔法求微分方程:⎩⎨⎧==+-=0, 0)(1'00x x y y y 1、算法说明:在龙格-库塔法中,四阶龙格-库塔法的局部截断误差约为o(h5),被广泛应用于解微分方程的初值问题。
其算法公式为:)22(63211k k k hy y n n +++=+其中:⎪⎪⎪⎩⎪⎪⎪⎨⎧++=++=++==) ,()21,21()21 ,21(),(3423121hk y h x f k hk y h x f k hk y h x f k y x f k n n n n n n n n 2、流程图:2.1、四阶龙格-库塔(R-K )方法流程图:2.2、实例求解流程图:3、源程序代码3.1、四阶龙格-库塔(R-K)方法源程序:function [x,y] = MyRunge_Kutta(fun,x0,xt,y0,PointNum,varargin)%Runge-Kutta 方法解微分方程形为 y'(t)=f(x,y(x))%此程序可解高阶的微分方程。
只要将其形式写为上述微分方程的向量形式%函数 f(x,y): fun%自变量的初值和终值:x0, xt%y0表示函数在x0处的值,输入初值为列向量形式%自变量在[x0,xt]上取的点数:PointNum%varargin为可输入项,可传适当参数给函数f(x,y)%x:所取的点的x值%y:对应点上的函数值if nargin<4 | PointNum<=0PointNum=100;endif nargin<3y0=0;endy(1,:)=y0(:)'; %初值存为行向量形式h=(xt-x0)/(PointNum-1); %计算步长x=x0+[0:(PointNum-1)]'*h; %得x向量值for k=1:(PointNum) %迭代计算 f1=h*feval(fun,x(k),y(k,:),varargin{:});f1=f1(:)'; %得公式k1 f2=h*feval(fun,x(k)+h/2,y(k,:)+f1/2,varargin{:});f2=f2(:)'; %得公式k2 f3=h*feval(fun,x(k)+h/2,y(k,:)+f2/2,varargin{:});f3=f3(:)'; %得公式k3 f4=h*feval(fun,x(k)+h,y(k,:)+f3,varargin{:});f4=f4(:)'; %得公式k4 y(k+1,:)=y(k,:)+(f1+2*(f2+f3)+f4)/6; %得y(n+1) end3.2、实例求解源程序:%运行四阶R-K法clear, clc %清除内存中的变量x0=0;xt=2;Num=100;h=(xt-x0)/(Num-1);x=x0+[0:Num]*h;a=1;yt=1-exp(-a*x); %真值解fun=inline('-y+1','x','y'); %用inline构造函数f(x,y)y0=0; %设定函数初值PointNum=5; %设定取点数[x1,y1]=ode23(fun,[0,2],0);[xr,yr]=MyRunge_Kutta(fun,x0,xt,y0,PointNum);MyRunge_Kutta_x=xr'MyRunge_Kutta_y=yr'plot(x,yt,'k',x1,y1,'b--',xr,yr,'r-')legend('真值','ode23','Rung-Kutta法解',2)hold onplot(x1,y1,'bo',xr,yr,'r*')4、程序运行结果:MyRunge_Kutta_x =0 0.5000 1.0000 1.5000 2.0000MyRunge_Kutta_y =0 0.3932 0.6318 0.7766 0.8645二、变成解决以下科学计算问题:(一)[例7-2-4] 材料力学复杂应力状态的分析——Moore 圆。
Matlab常用命令集合1.常用命令—-〉管理命令和函数2.常用命令--〉管理变量和工作区(输入输出、内存管理等)3.常用命令—->管理命令控制窗口(command窗口)4.常用命令——〉文件和工作环境5.常用命令-—>启动和退出Matlab6.语言结构和调试命令--〉程序设计7.语言结构和调试命令--〉流程控制8.语言结构和调试命令—->交互输入9.语言结构和调试命令—-〉面向对象编程10.语言结构和调试命令-—〉程序调试11.语言结构和调试命令—->lasterr,lastwarn12.创建图形用户界面——〉对话框13.矩阵函数-数值线性代数-—〉矩阵分析14.矩阵函数-数值线性代数——>线性方程15.矩阵函数-数值线性代数-—〉特征值和奇异值16.矩阵函数-数值线性代数-—〉矩阵函数17.矩阵函数-数值线性代数--〉低级函数18.创建图形用户界面—-〉用户界面对象19.创建图形用户界面--〉其他函数20.创建图形用户界面-—〉其他函数21.图象可视化函数--〉三维绘图函数22.图象可视化函数—->绘制标注和网络23.图象可视化函数-—>体数据可视化24.图象可视化函数-—>表面、网格和轮廓绘制25.图象可视化函数-—〉域生成26.图象可视化函数--〉专门图形绘制27.图象可视化函数——〉视觉控制28.图象可视化函数-->颜色操作29.图象可视化函数—->打印函数30.图象可视化函数-->图形图象处理31.双重函数和非线性数值方法32.多项式和插值函数--〉多项式33.多项式和插值函数—-〉数据插值34.多项式命令补遗35.数组函数--〉单元数组函数36.数组函数——>多维数组函数37.位操作函数、结构和对象函数38.底层文件输入输出函数39.底层文件输入输出函数—-〉特殊函数40.字符串函数--〉常用函数41.字符串函数—->字符串操作42.字符串函数—->字符串和数值的转换43.字符串函数-->基转换44.声音处理函数-->常用声音函数45.声音处理函数-—>特殊声音函数46.声音处理函数-—〉WAV声音文件47.稀疏矩阵函数—->基本稀疏矩阵48.稀疏矩阵函数—-〉满阵和稀疏矩阵的转换49.稀疏矩阵函数—-〉稀疏矩阵的非零元素操作50.稀疏矩阵函数—->稀疏矩阵的可视化51.稀疏矩阵函数——〉排序算法52.稀疏矩阵函数—->范数、条件数和秩53.稀疏矩阵函数-—>线性方程的稀疏系统54.稀疏矩阵函数——〉线性方程的稀疏系统55.稀疏矩阵函数-->杂项函数56.数据分析和傅立叶变换—-〉基本运算57.数据分析和傅立叶变换--〉有限差分58.数据分析和傅立叶变换-—>相关59.数据分析和傅立叶变换——>滤波和卷积60.数据分析和傅立叶变换—-〉傅立叶变换61.数据分析和傅立叶变换-->向量函数62.数学函数和坐标变换—->基本数学函数63.数学函数和坐标变换--〉特殊函数64.数学函数和坐标变换-—〉坐标变换65.矩阵和矩阵操作基础--〉矩阵和数组基础66.矩阵和矩阵操作基础——〉特殊变量和常量67.矩阵和矩阵操作基础-—〉时间和日期68.矩阵和矩阵操作基础—->矩阵操作69.矩阵和矩阵操作基础-->特殊函数矩阵70.运算符和逻辑函数—->算数运算符71.运算符和逻辑函数—->关系运算符72.运算符和逻辑函数—-〉特殊函数73.运算符和逻辑函数——〉逻辑函数74.simulink的命令集75.rtw相关的命令1.常用命令——〉管理命令和函数addpath 添加目录到MATLAB搜索路径doc 在Web浏览器上现实HTML文档help 显示Matlab命令和M文件的在线帮助helpwinhelpdesk helplookfor 在基于Matlab搜索路径的所有M文件中搜索关键字partialpath 部分路径名path 所有关于路径名的处理pathtool 一个不错的窗口路径处理界面rmpath 删除搜索路径中指定目录type 显示指定文件的内容ver 版本信息version 版本号web 打开web页what 列出当前目录吓所有的M文件Mat文件和Mex文件whatsnew 显示readme文件which 显示文件位置(返回)2.常用命令-->管理变量和工作区(输入输出、内存管理等)clear 从内存中删除disp 显示文本或数组内容length 数组长度(最长维数)load 重新载入变量(从磁盘上)mlock 锁定文件,防止文件被错误删除munlock 解锁文件openvar 在数组编辑器中打开变量pack 整理内存空间save 保存变量到文件8*)size 数组维数who 列出内存变量whos 列出内存变量,同时显示变量维数workspace 显示工作空间窗口(返回)3.常用命令—-〉管理命令控制窗口(command窗口)clc 清空命令窗口echo 禁止或允许显示执行过程format 设置输出显示格式home 光标移动到命令窗口左上角more 设置命令窗口页输出格式(返回)4.常用命令--〉文件和工作环境cd 改变工作目录copyfile 复制文件delete 删除文件和图形对象diary 把命令窗口的人机交互保存到文件dir 显示目录edit 编辑文本文件fileparts 返回文件的各个部分fullfile 使用指定部分建立文件全名inmem 返回内存(伪代码区)的matlab函数名ls 在unix系统中列出目录(win中亦可)matlabroot 根目录mkdir 新建目录open 打开文件pwd 显示当前目录tempdir 返回系统临时目录的名字tempname 随机给出一个临时字符串(可用作文件名)! 直接调用操作系统command命令(返回)5.常用命令-—〉启动和退出Matlabmatlabrc Matlab的启动M文件exit 退出Matlabquit 退出Matlabstartup 运行matlab启动文件(返回)6.语言结构和调试命令-—〉程序设计builtin 从可重载方法中调用内置函数eval 执行包含可执行表达式的字符串evalc 计算并返回表达式的值evalin 执行某个工作空间中的包含表达式的字符串feval 执行函数(从函数名或函数句柄)function 函数头global 定义全局变量nargchk 检查输入参数数目persistent 定义常量script 作为脚本的M文件(返回)7.语言结构和调试命令——>流程控制break 停止执行循环case case语句,switch语句一部分switch switch_exprcase case_exprstatmentscaseotherwiseendcatch try—catch语句一部分,捕捉程序else if条件语句一部分elseif if条件语句一部分end 终止for、while、switch、try和if语句error 显示错误信息for 循环语句一(确定次数)if if条件语句other switch语句一部分return 返回到调用函数switch 开关语句try try程序块warning 类似于disp,但可被禁止while 循环语句(次数不确定)(返回)8.语言结构和调试命令-->交互输入input 交互输入keyboard 在M文件中遇到keyboard时将在命令窗口产生交互直到输入return命令menu 为用户输入产生一个选择菜单pause 暂停(返回)9.语言结构和调试命令—->面向对象编程class 创建一个对象或者返回一个对象类double 转换为双精度inferiorto 亚类关系inline 创建一个内联函数int8,int16,int32 转换到符号整数isa 检查是否为所给类的对象loadobj load函数用户定义扩展saveobj save函数用户定义扩展single 转换为单精度superiorto 超类关系uint8,uint16,uint32 转换到无符号整数10语言结构和调试命令-—〉程序调试dbclear 断点清除dbcont 重新开始执行dbdown 改变当前工作空间dbmex 调试Mex文件dbquit 退出调试模式dbstack 显示函数调用堆栈dbstatus 列出所有断点dbstep 从断点处执行dbstop 设置断点dbtype 列出带行号的M文件内容dbup 改变当前工作空间(返回)11.语言结构和调试命令-—〉lasterr,lastwarnlasterr 返回Matlab中产生的最后一个异常信息。
matlab编程步骤MATLAB是一种广泛使用的计算机程序语言,主要用于数值计算、数据可视化和算法开发。
作为一名内容创作者,我们需要了解MATLAB编程的基本步骤,以便为读者提供有用的信息。
以下是MATLAB编程步骤的详细介绍:1、了解MATLAB编程环境在开始编写MATLAB程序之前,需要了解MATLAB编程环境以及如何使用MATLAB集成开发环境(即IDE)执行代码。
MATLAB IDE可以帮助您快速编写、测试和调试MATLAB代码。
2、编写MATLAB脚本和函数MATLAB支持两种主要的编程方式:脚本和函数。
脚本是一组按顺序执行的MATLAB命令,而函数是一组用于执行特定任务的MATLAB命令。
这两种编程方式都需要熟悉。
3、使用MATLAB命令窗口在MATLAB命令窗口中,您可以使用MATLAB编程语言编写和执行代码。
MATLAB命令窗口对于快速调试MATLAB代码非常有用。
4、理解MATLAB数据类型在MATLAB编程中,常用的数据类型包括数字、字符串、矢量、矩阵和结构体等。
熟悉这些数据类型并理解如何使用它们是非常重要的。
5、使用MATLAB内置函数MATLAB提供了许多内置函数,可用于数值计算、字符串处理和图形处理等方面。
了解这些内置函数并学会如何使用它们可以节省您的时间和精力。
6、编写MATLAB程序编写MATLAB程序是将上述步骤汇总到一起的关键步骤。
一个典型的MATLAB程序通常需要完成以下任务:读取输入、执行计算、显示输出或结果。
7、测试MATLAB程序在编写MATLAB程序后,请务必测试它是否能够按预期运行。
测试可以通过使用MATLAB自带的单元测试工具或编写自己的测试脚本进行。
8、调试MATLAB程序如果程序无法按预期运行,则需要进行调试。
MATLAB IDE提供了强大的调试工具,例如断点、变量监视和堆栈跟踪等。
总结:MATLAB编程是一项强大而有用的技能。
此外,通过熟悉MATLAB语言和了解MATLAB编程环境,您可以更快、更高效地完成您的任务。
信号与系统-综合实验之音乐合成(1)请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音.请用sound 函数播放每个乐音,听一听音调是否正确。
最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何?代码如下:f =8000;t2=[0:1/f:1];t4=[0:1/f:0。
5];t8=[0:1/f:0.25];omg5=523.35;omg6=587.33;omg2=392;omg1=349。
23;omg6l=293.66;m1=sin(2*pi*omg5*t4);m2=sin(2*pi*omg5*t8);m3=sin(2*pi*omg6*t8);m4=sin(2*pi*omg2*t2);m6=sin(2*pi*omg1*t4);m7=sin(2*pi*omg1*t8);m8=sin(2*pi*omg6l*t8);m9=sin(2*pi*omg2*t2);m=[m1 m2 m3 m4 m6 m7 m8 m9];sound(m);听的时候发现在相邻乐音之间有杂音,这是由于相位不连续造成的。
(2)你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量.这种噪声严重影响合成音乐的质量,丧失真实感。
为了消除它,我们可以用图1。
5 所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。
此外建议用指数衰减的包络来表示.我采用的是指数衰减的包络.代码如下:f =8000;t2=[0:1/f:1];t4=[0:1/f:0。
5];t8=[0:1/f:0.25];omg5=523。
35;omg6=587。
33;omg2=392;omg1=349。
23;omg6l=293.66;m1=exp(—2*t4)。
*sin(2*pi*omg5*t4);m2=exp(-4*t8).*sin(2*pi*omg5*t8);m3=exp(—4*t8)。
实验一:Matlab操作环境熟悉一、实验目的1.初步了解Matlab操作环境.2.学习使用图形函数计算器命令funtool及其环境。
二、实验内容熟悉Matlab操作环境,认识命令窗口、内存工作区窗口、历史命令窗口;学会使用format 命令调整命令窗口的数据显示格式;学会使用变量和矩阵的输入,并进行简单的计算;学会使用who和whos命令查看内存变量信息;学会使用图形函数计算器funtool,并进行下列计算:1.单函数运算操作。
求下列函数的符号导数(1)y=sin(x);(2) y=(1+x)^3*(2-x);求下列函数的符号积分(1)y=cos(x);(2)y=1/(1+x^2);(3)y=1/sqrt(1—x^2);(4)y=(x1)/(x+1)/(x+2)求反函数(1)y=(x-1)/(2*x+3); (2) y=exp(x);(3) y=log(x+sqrt(1+x^2));代数式的化简(1)(x+1)*(x-1)*(x-2)/(x-3)/(x—4);(2)sin(x)^2+cos(x)^2;(3)x+sin(x)+2*x—3*cos(x)+4*x*sin(x);2.函数与参数的运算操作。
从y=x^2通过参数的选择去观察下列函数的图形变化(1)y1=(x+1)^2(2)y2=(x+2)^2(3) y3=2*x^2 (4) y4=x^2+2 (5) y5=x^4 (6) y6=x^2/2 3.两个函数之间的操作求和(1)sin(x)+cos(x) (2) 1+x+x^2+x^3+x^4+x^5乘积(1)exp(—x)*sin(x) (2) sin(x)*x商(1)sin(x)/cos(x); (2) x/(1+x^2); (3) 1/(x—1)/(x—2); 求复合函数(1)y=exp(u) u=sin(x) (2) y=sqrt(u) u=1+exp(x^2)(3) y=sin(u) u=asin(x) (4) y=sinh(u) u=-x实验二:MATLAB基本操作与用法一、实验目的1.掌握用MATLAB命令窗口进行简单数学运算。
function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag)% SFUNTMPL 是M—文件S函数模板% 通过剪裁,用户可以生成自己的S函数,不过一定要重新命名%利用S函数可以生成连续、离散混合系统等,实现任何模块的功能%%M-文件S函数的语法为:%[SYS,X0,STR,TS]= SFUNC(T,X,U,FLAG,P1,。
,Pn)%% 参数含义:% t是当前时间% x是S函数相应的状态向量% u是模块的输入%flag是所要执行的任务%%FLAG 结果功能% -——-- -——--———-----—--———————--—----—-—--—----—-------—-% 0 [SIZES,X0,STR,TS]模块初始化% 1 DX 计算模块导数% 2 DS 更新模块离散状态% 3 Y 计算模块输出% 4 TNEXT 计算下一个采样时间点% 9 []结束仿真%%% 用户切勿改动输出参数的顺序、名称和数目%输入参数的数目不能小于1,这四个参数的名称和排列顺序不能改动% 用户可以根据自己的要求添加额外的参数,位置依次为第5,6,7,8,9等.% S函数的flag参数是一个标记变量,具有6个不同值,分别为0,1,2,3,4,9 % flag的6个值分别指向6个不同的子函数% flag所指向的子函数也成为回调方法(Callback Methods)switch flag,%初始化,调用“模块初始化"子程序%case 0,[sys,x0,str,ts]=mdlInitializeSizes;%连续状态变量计算,调用“计算模块导数”子函数%case 1,sys=mdlDerivatives(t,x,u);%更新,调用“更新模块离散状态”子函数%case 2,sys=mdlUpdate(t,x,u);%输出,调用“计算模块输出”子函数%case 3,sys=mdlOutputs(t,x,u);%计算下一时刻采样点,调用“计算下一个采样时刻点"子函数%case 4,sys=mdlGetTimeOfNextVarHit(t,x,u);%结束,调用“结束仿真"子函数%case 9,sys=mdlTerminate(t,x,u);%其他的flag%otherwiseDAStudio.error(’Simulink:blocks:unhandledFlag', num2str(flag));end% end sfuntmpl%============================================================= ================%“模块初始化”子函数% 返回大小、初始条件和样本function [sys,x0,str,ts]=mdlInitializeSizes%调用simsizes函数,返回规范格式的sizes构架% 这条指令不要修改sizes = simsizes;% 模块的连续状态个数,0是默认值%用户可以根据自己的要求进行修改sizes.NumContStates = 0;%模块的离散状态个数,0是默认值%用户可以根据自己的要求进行修改sizes.NumDiscStates = 0;% 模块的输出个数,0是默认值% 用户可以根据自己的要求进行修改sizes.NumOutputs = 0;%模块的输入个数,0是默认值% 用户可以根据自己的要求进行修改sizes。
01 MATLABChapterMATLAB简介MATLAB是一种高级编程语言和环境,主要用于数值计算、数据分析、信号处理、图像处理等多种应用领域。
MATLAB具有简单易学、高效灵活、可视化强等特点,被广泛应用于科研、工程、教育等领域。
MATLAB提供了丰富的函数库和工具箱,方便用户进行各种复杂的数学计算和数据分析。
MATLAB安装与启动MATLAB界面介绍工作空间用于显示当前定义的所有变量及其值。
命令历史记录了用户输入过的命令及其输出结果。
基本运算与数据类型02矩阵运算与数组操作Chapter01020304使用`[]`或`zeros`、`ones`等函数创建矩阵创建矩阵使用`size`函数获取矩阵大小矩阵大小通过下标访问矩阵元素,如`A(i,j)`矩阵元素访问使用`disp`或`fprintf`函数显示矩阵信息矩阵信息矩阵创建与基本操作对应元素相加,如`C = A+ B`加法运算矩阵运算对应元素相减,如`C = A-B`减法运算数与矩阵相乘,如`B = k *A`数乘运算使用单引号`'`进行转置,如`B = A'`转置运算满足乘法条件的矩阵相乘,如`C = A * B`矩阵乘法使用`inv`函数求逆矩阵,如`B = inv(A)`逆矩阵数组创建数组大小数组元素访问数组操作数组操作01020304线性方程组求解数据处理与分析特征值与特征向量图像处理矩阵与数组应用实例03数值计算与数据分析Chapter数值计算基础MATLAB基本运算数值类型与精度变量与表达式函数与脚本数据分析方法数据导入与预处理学习如何导入各种格式的数据(如Excel、CSV、TXT等),并进行数据清洗、转换等预处理操作。
数据统计描述掌握MATLAB中数据统计描述的方法,如计算均值、中位数、标准差等统计量,以及绘制直方图、箱线图等统计图表。
数据相关性分析学习如何在MATLAB中进行数据相关性分析,如计算相关系数、绘制散点图等。
01 MATLABChapterMATLAB概述与特点发展历程及应用领域发展历程应用领域安装与界面介绍安装用户可以从MathWorks官网下载MATLAB安装程序,根据提示完成安装过程。
安装过程中需要选择安装路径、添加环境变量等步骤。
界面介绍MATLAB界面包括命令窗口、工作空间、当前目录窗口、命令历史窗口等部分。
用户可以在命令窗口中输入命令并执行,工作空间展示当前变量和函数,当前目录窗口显示当前工作路径下的文件和文件夹,命令历史窗口记录用户输入的命令历史。
01020304变量与数据类型条件语句与循环语句数组与矩阵操作函数编写与调用基本操作入门02数据类型与运算规则Chapter整数类型包括有符号和无符号整数,如int8、uint8、int16、uint16等。
浮点数类型包括单精度和双精度浮点数,如single、double。
特殊数值如Inf表示无穷大,-Inf表示负无穷大,NaN表示非数字。
字符数组01字符串操作02字符编码03逻辑型数据逻辑函数逻辑运算逻辑值(~)等逻辑运算符。
逻辑真(true)和逻辑假(false)。
数组与矩阵运算规则数组创建数组索引矩阵运算特殊矩阵03程序设计基础ChapterMATLAB 中变量名区分大小写,以字母开头,可包含字母、数字和下划线,不能是MATLAB保留字。
变量命名规则变量作用域特殊变量局部变量只在其所在的函数或脚本中有效,全局变量在整个MATLAB 工作环境中都有效。
MATLAB 提供了一些特殊变量,如ans 、pi 、i 或j (虚数单位)等,可以直接使用。
变量命名规则及作用域条件语句if-else语句用于根据条件执行不同的代码块,switch-case语句用于多分支选择。
循环语句for循环用于指定次数的重复执行,while循环用于满足条件时的重复执行。
流程控制语句break语句用于提前退出循环,continue语句用于跳过本次循环的剩余部分。
条件语句和循环语句应用函数定义MATLAB 中可以使用function 关键字定义函数,包括输入参数、输出参数和函数体。
AMI、HDB3、密勒码编码实现
——matlab仿真模拟【任务描述】
A.产生一个长为1000的二进制随机序列,“0”的概率为0.8,”1”的概率为0.2;
B.对上述数据进行归零AMI编码,脉冲宽度为符号宽度的50%,波形采样率为符号
率的8倍,画出前20个符号对应的波形(同时给出前20位信源序列);
C.改用HDB3码,画出前20个符号对应的波形;
D.改用密勒码,画出前20个符号对应的波形;
E.分别对上述1000个符号的波形进行功率谱估计,画出功率谱;
F.改变信源“0”的概率,观察AMI码的功率谱变化情况;
【基本思路】
采用调用子函数的方法,在掌握了各种码的编码规律之后实现编码功能。
具体实现了AMI码、HDB3码以及密勒码的编码。
而且调用了功率谱函数spectrum对各种码的功率谱以及不同信源概率下的功率谱进行了比较。
下面就详细介绍各种码形的变换思路:
1.A MI码
AMI码中信息码“0”对应着三元码序列中的“0”,信息码“1”则交替地变换为“+1”和“-1”的归零码。
2.H DB3码
在AMI码的基础上,当出现多于3个零的情况,利用其检错能力,使用异常代替长连零,以平衡码中的极性使得直流分量为0。
3.密勒码
密勒码中使用码元周期中点的跳变来代表“1”,当出现连续的“0”时出现电平跳变,否则码元周期内不出现跳变。
【程序清单】
Code.m:完成产生随机0、1序列并且将其用波形表示的功能。
AMI_Code.m:将随机序列转换为AMI码
HDB3_Code.m:将随机序列转换为HDB3码
Miller_Code.m:将随机序列转换为密勒码
Plot_spectrum.m:使用库函数绘制功率谱曲线
【仿真分析】
1.前20个符号所对应的各种码形
在一次的仿真中随机产生的前20个符号为:
0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0
显然,NRZ(L)码的波形即为原始的序列信息码
对应的AMI码为:
00 0 0 0 0 0 0 0 0 1 -1 0 0 1 0 0 0 -1 0 对应的HDB3码为:
10 0 1 -1 0 0 -1 0 0 1 -1 0 0 1 0 0 0 -1 0 对应的密勒码为:
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
1 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 0
可以看出:编码结果完全正确!
2.四种码形的功率谱
3.不同概率‘0’下AMI码形功率谱变化
【程序代码】figure
subplot(3,1,1)
plot(x_t(1:20*8))
axis([1,20*8,-1.5,1.5]); title('initial code') subplot(3,1,2)
plot(y_AMI(1:20*8)) axis([1,20*8,-1.5,1.5]); title('AMI code') subplot(3,1,3)
plot(y_HDB3(1:20*8)) axis([1,20*8,-1.5,1.5]); title('HDB3 code') figure
plot_spectrum(x_t,'b'); hold on
plot_spectrum(y_AMI,'r');
plot_spectrum(y_HDB3,'g');
title('Power spectrum of NRZ,AMI and HDB3 Code') legend('NRZ','AMI','HDB3')
%Code.m
N=1000;
fs=8;
x=ceil(rand(1,N)-0.8);
AMI=AMI_Code(x);
HDB3=HDB3_Code(x);
Miller=Miller_Code(x);
y=zeros(1,N*fs);
x_t=zeros(1,N*fs);
y_AMI=zeros(1,N*fs);
y_HDB3=zeros(1,N*fs);
y_Miller=zeros(1,N*fs);
for i=1:N*fs
if(mod(i-1,8)<=5 & mod(i-1,8)>=2)
y(i)=1;
else
y(i)=0;
end
%分别给画图序列赋值
y_AMI(i)=y(i)*AMI(ceil(i/8));
y_HDB3(i)=y(i)*HDB3(ceil(i/8));
y_Miller(i)=Miller(ceil(i/4));
x_t(i)=x(ceil(i/8));
end
%AMI_Code.m
function AMI=AMI_Code(x)
m=length(x);
%初始化AMI编码
AMI=zeros(1,m);
%反转标志初始化
f=0;
for i=1:m
%若原码为0,直接将AMI码置0
if x(i)==0
AMI(i)=0;
%否则,使得AMI码交替为+1,-1
else
f=XOR(f,1);
AMI(i)=2*f-1;
end
end
return;
%HDB3.m
function HDB3=HDB3_Code(x)
m=length(x);
%初始化HDB3编码
HDB3=zeros(1,m);
%初始化信息“1”标志B和连0数标志V B=-1;
V=-1;
i=1;
while (i<=m-3)
%若原码为1,交替为+1,-1
if(x(i)==1)
HDB3(i)=-1*B;
B=HDB3(i);
i=i+1;
else
%原码只有一个0
if(x(i+1)==1)
HDB3(i)=0;
HDB3(i+1)=-1*B;
B=HDB3(i+1);
i=i+2;
else
%原码有两个连续0
if(x(i+2)==1)
HDB3(i)=0;
HDB3(i+1)=0;
HDB3(i+2)=-1*B;
B=HDB3(i+2);
i=i+3;
else
%原码有三个连续0
if(x(i+2)==1)
HDB3(i)=0;
HDB3(i+1)=0;
HDB3(i+2)=0;
HDB3(i+3)=-1*B;
B=HDB3(i+3);
i=i+4;
%原码出现了四个连续0
else
%原始B、V标志不相同
if(Xor(B,V))
HDB3(i)=01;
HDB3(i+1)=0;
HDB3(i+2)=0;
HDB3(i+3)=B;
V=B;i=i+4;
%B、V标志相同
else
HDB3(i)=-1*B;
HDB3(i+1)=0;
HDB3(i+2)=0;
HDB3(i+3)=-1*B;
B=-1*B;V=B;i=i+4;
end
end
end
end
end
end
for j=i:m
if (x(j)==1)
HDB3(j)=-1*B;
B=HDB3(j);
else
HDB3(j)=0;
end
end
return;
%plot_spectrum.m
function plot_spectrum(x,str)
P=spectrum(x,8000,0,hanning(300));
plot(10*log10(P(:,1)),str);
return;function plot_spectrum(x,str)
P=spectrum(x,8000,0,hanning(300));
plot(10*log10(P(:,1)),str);
return;。