算法设计及分析实验报告_Matlab实现

合集下载

MATLAB实验报告

MATLAB实验报告

MATLAB实验报告一、实验目的本次 MATLAB 实验旨在深入了解和掌握 MATLAB 软件的基本操作和应用,通过实际编程和数据处理,提高解决问题的能力,培养编程思维和逻辑分析能力。

二、实验环境本次实验使用的是 MATLAB R2020a 版本,运行在 Windows 10 操作系统上。

计算机配置为英特尔酷睿 i5 处理器,8GB 内存。

三、实验内容(一)矩阵运算1、矩阵的创建使用直接输入、函数生成和从外部文件导入等方式创建矩阵。

例如,通过`1 2 3; 4 5 6; 7 8 9` 直接输入创建一个 3 行 3 列的矩阵;使用`ones(3,3)`函数创建一个 3 行 3 列元素全为 1 的矩阵。

2、矩阵的基本运算包括矩阵的加减乘除、求逆、转置等。

例如,对于两个相同维度的矩阵`A` 和`B` ,可以进行加法运算`C = A + B` 。

3、矩阵的特征值和特征向量计算通过`eig` 函数计算矩阵的特征值和特征向量,加深对线性代数知识的理解和应用。

(二)函数编写1、自定义函数使用`function` 关键字定义自己的函数,例如编写一个计算两个数之和的函数`function s = add(a,b) s = a + b; end` 。

2、函数的调用在主程序中调用自定义函数,并传递参数进行计算。

3、函数的参数传递了解值传递和引用传递的区别,以及如何根据实际需求选择合适的参数传递方式。

(三)绘图功能1、二维图形绘制使用`plot` 函数绘制简单的折线图、曲线等,如`x = 0:01:2pi; y = sin(x); plot(x,y)`绘制正弦曲线。

2、图形的修饰通过设置坐标轴范围、标题、标签、线条颜色和样式等属性,使图形更加清晰和美观。

3、三维图形绘制尝试使用`mesh` 、`surf` 等函数绘制三维图形,如绘制一个球面`x,y,z = sphere(50); surf(x,y,z)`。

(四)数据处理与分析1、数据的读取和写入使用`load` 和`save` 函数从外部文件读取数据和将数据保存到文件中。

现代控制系统分析与设计——基于matlab的仿真与实现

现代控制系统分析与设计——基于matlab的仿真与实现

现代控制系统分析与设计——基于matlab的仿真与实现近年来,随着工业技术的飞速发展,控制系统逐渐成为工业自动化过程中不可缺少的重要组成部分,因此其分析与设计也会受到人们越来越多的关注。

本文从控制系统的分类出发,介绍了基于Matlab 的分析与仿真方法,并结合详细的实例,展示了最新的Matlab软件如何用来设计现代控制系统,及如何实现仿真结果。

一、控制系统分类控制系统是将完整的物理系统划分为几个部分,通过规定条件把这些部分组合起来,共同完成某一特定任务的一种技术。

控制系统可分为离散控制系统和连续控制系统,离散控制系统的尺度以脉冲的形式表现,而连续控制系统的尺度以连续变量的形式表现,常见的连续控制系统有PID、环路反馈控制等。

二、基于Matlab的分析与仿真Matlab是一款实用的高级计算和数学工具,具有智能语言功能和图形用户界面,可以进行复杂数据分析和可视化。

Matlab可以用来开发控制系统分析与仿真,包括:数学建模,系统建模,状态估计与观测,数据处理,控制算法研究,仿真实验及系统原型开发等。

此外,Matlab还可以利用其它技术,比如LabVIEW或者C程序,将仿真结果实现在实物系统上。

三、实现现代控制系统分析与设计基于Matlab的现代控制系统分析与设计,需要从以下几个方面进行考虑。

1.数学建模:Matlab支持多种数学计算,比如代数运算、矩阵运算、曲线拟合等,可以用来建立控制系统的数学模型。

2.系统建模:Matlab可以用于控制系统的建模和仿真,包括并行系统建模、混沌建模、非线性系统建模、时滞建模、系统设计建模等。

3.状态估计与观测:Matlab可以用来计算系统状态变量,并且可以根据测量信号估计系统状态,用于系统诊断和控制。

4.数据处理:Matlab可以用来处理控制系统中的大量数据,可以更好地研究控制系统的特性,以便进行更好的设计和控制。

5.算法研究:Matlab可以用来研究新的控制算法,以改进控制系统的性能。

数值分析实验报告1

数值分析实验报告1
end
p
得到m=(00)T
即M0=0 ;M1=;M2=;M3=;M4=0
则根据三次样条函数定义,可得:
S(x)=
接着,在Command Window里输入画图的程序代码,
下面是画牛顿插值以及三次样条插值图形的程序:
x=[ ];
y=[ ];
plot(x,y)
hold on
for i=1:1:5
y(i)= *(x(i)*(x(i)*(x(i)*(x(i)*(x(i)*(x(i)*(x(i)
Pn=f(x0)+f[x0,x1](x-x0)+ f[x0,x1,x2](x-x0) (x-x1)+···+ f[x0,x1,···xn](x-x0) ···(x-xn-1)
我们要知道牛顿插值多项式的系数,即均差表中得部分均差。
在MATLAB的Editor中输入程序代码,计算牛顿插值中多项式系数的程序如下:
【实验原理】
《数值分析》第二章“插值法”的相关内容,包括:牛顿多项式插值,三次样条插值,拉格朗日插值的相应算法和相关性质。
【实验环境】(使用的软硬件)
软件:
MATLAB 2012a
硬件:
电脑型号:联想 Lenovo 昭阳E46A笔记本电脑
操作系统:Windows 8 专业版
处理器:Intel(R)Core(TM)i3 CPU M 350 @
实验内容:
【实验方案设计】
第一步,将书上关于三种插值方法的内容转化成程序语言,用MATLAB实现;第二步,分别用牛顿多项式插值,三次样条插值,拉格朗日插值求解不同的问题。
【实验过程】(实验步骤、记录、数据、分析)
实验的主要步骤是:首先分析问题,根据分析设计MATLAB程序,利用程序算出问题答案,分析所得答案结果,再得出最后结论。

Matlab实验报告

Matlab实验报告

实验结果及分析实验1:程序如下x=1:10y=2*x;plot(x,y)仿真结果:实验结果分析:仿真结果是条很规则的直线,X轴和Y轴一一对应,清楚明了,而序又特别简单。

所以用Maltab 软件很方便地画出规则的直线,方便研究。

实验结果及分析1、A=2、A=1A=实验结果及分析实验三 Matlab在信号与系统中的应用实验名称实验1、掌握信号与系统课程中基本知识的Matlab编程、仿真方法目的实验原理实验1程序:b=[1];a=[1 1];p=;t=0:p:5;x=exp(-3*t);subplot(1,2,1);impulse(b,a,0:p:5);title('冲激响应');subplot(1,2,2);step(b,a,0:p:5);title('阶跃响应');实验内容<设计性实验>1、用MATLAB在时域中编程求解y′(t)+y(t)=f(t), f(t)= exp(-3t)ε(t)的冲激响应、阶跃响应。

在simulink仿真环境下,设计系统框图,分析系统的冲激响应、阶跃响应。

<设计性实验>(选做)2、用MATLAB在时域中编程求解y′(t)+y(t)=f(t), f(t)=(1+exp(-3t))ε(t)的冲激响应、阶跃响应,要求用conv编程实现系统响应。

在simulink仿真环境下,设计系统框图,分析系统的冲激响应、阶跃响应。

实验结果及分析实验1仿真结果:simulink仿真环境下冲激响应阶跃响应实验名称实验四 Matlab在数字信号处理中的应用实验结果及分析实验1仿真结果:6khz12kHZ。

基于MATLAB的神秘数算法设计与实现

基于MATLAB的神秘数算法设计与实现

YAN h n — ha . Se i GUI S a — h i h o u
( te t sa dC m ue c neD p r e tG n a oma U iesy , a zo inx 4 00,hn ) Mahmai n o p tr i c e at n , a nnN r l nvr t G nh uJag i 10 C ia c Se m i 3
妙地设计并实现 了计算包含指定括符种类 、 括符对数及指定 深度 时 s 表达 式个数 的算法 , s 从而解决 了相 应的神秘数 问题 。 最 后在 M T A 上实现时 , ALB 又借助存储表 , 了大量 的重复计算 , 避免 极大地提升 了程序的运行速度 。 解决 s 表达式问题的相 s 关思想与技术 , 可以运用到程序的编译中去 , 也可以在相类 似的问题求解 中得到广泛运用 。
( 赣南师范学 院数学与计算机系 , 江西 赣州 3 10 4 00) 摘要 : 在几种常用的算法设计策略中 , 递归策略是设计有效算法最常用 的策略之一 , 递归技术的应用往往使 得设计 出来 的算 法简 洁易懂且易于分析。 通过仔细分析 S s表达式的形式 定义 , 提取 出 s s表 达式的 内在特征 , 运用递归 的算 法设计思想 , 巧
3 )如 果 A是 s s表 达式 , A 中不含 字 符 ‘ ’ ‘ ’ 且 { , },
1 引言
“ 全国计算 机仿 真 大奖 赛 ”是 高 教 司与 中 国 自动 化协
维普资讯
第 4 第 6 2卷 0期
文章编号 :0 6—94 ( 07)6—0 3 10 3 8 20 0 37—0 4
计 算 机 仿 真
27 6 0 年O月 0
基 于 MAT A 的神 秘数 算 法 设计 与 实现 L B

(完整word)Matlab实验报告

(完整word)Matlab实验报告

实验一: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命令窗口进行简单数学运算。

计算电磁学之FDTD算法的MATLAB语言实现

计算电磁学之FDTD算法的MATLAB语言实现

South China Normal University课程设计实验报告课程名称:计算电磁学指导老师:专业班级: 2014级电路与系统姓名:学号:FDTD算法的MATLAB语言实现摘要:时域有限差分(FDTD)算法是K.S.Yee于1966年提出的直接对麦克斯韦方程作差分处理,用来解决电磁脉冲在电磁介质中传播和反射问题的算法。

其基本思想是:FDTD计算域空间节点采用Yee元胞的方法,同时电场和磁场节点空间与时间上都采用交错抽样;把整个计算域划分成包括散射体的总场区以及只有反射波的散射场区,这两个区域是以连接边界相连接,最外边是采用特殊的吸收边界,同时在这两个边界之间有个输出边界,用于近、远场转换;在连接边界上采用连接边界条件加入入射波,从而使得入射波限制在总场区域;在吸收边界上采用吸收边界条件,尽量消除反射波在吸收边界上的非物理性反射波。

本文主要结合FDTD算法边界条件特点,在特定的参数设置下,用MATLAB语言进行编程,在二维自由空间TEz网格中,实现脉冲平面波。

关键词:FDTD;MATLAB;算法1 绪论1.1 课程设计背景与意义20世纪60年代以来,随着计算机技术的发展,一些电磁场的数值计算方法逐步发展起来,并得到广泛应用,其中主要有:属于频域技术的有限元法(FEM)、矩量法(MM)和单矩法等;属于时域技术方面的时域有限差分法(FDTD)、传输线矩阵法(TLM)和时域积分方程法等。

其中FDTD是一种已经获得广泛应用并且有很大发展前景的时域数值计算方法。

时域有限差分(FDTD)方法于1966年由K.S.Y ee提出并迅速发展,且获得广泛应用。

K.S.Y ee用后来被称作Y ee氏网格的空间离散方式,把含时间变量的Maxwell旋度方程转化为差分方程,并成功地模拟了电磁脉冲与理想导体作用的时域响应。

但是由于当时理论的不成熟和计算机软硬件条件的限制,该方法并未得到相应的发展。

20世纪80年代中期以后,随着上述两个条件限制的逐步解除,FDTD便凭借其特有的优势得以迅速发展。

自己编写算法功率谱密度三种MATLAB实现方法

自己编写算法功率谱密度三种MATLAB实现方法

自己编写算法功率谱密度三种matlab实现方法功率谱密度的三种 tlab实现方法一:实验目的: (1)掌握三种算法的概念、应用及特点;(2)了解谱估计在分析中的作用;(3) 能够利用burg法对作谱估计,对的特点加以分析。

二;实验内容:(1)简单说明三种方法的原理。

(2)用三种方法编写程序,在 tlab中实现。

(3)将计算结果表示成图形的形式,给出三种情况的功率谱图。

(4)比拟三种方法的特性。

(5)写出自己的心得体会。

三:实验原理: 1.周期图法:周期图法又称直接法。

它是从随机 x(n)中截取N长的一段,把它视为能量有限x(n)真实功率谱的估计的抽样. 认为随机序列是广义平稳且各态遍历的,可以用其一个样本x(n)中的一段来估计该随机序列的功率谱。

这当然必然带来误差。

由于对采用DFT,就默认在时域是周期的,以及在频域是周期的。

这种方法把随机序列样本x(n)看成是截得一段的周期延拓,这也就是周期图法这个名字的来历。

2. 相关法(间接法): 这种方法以相关函数为媒介来计算功率谱,所以又叫间接法。

这种方法的具体步骤是:第一步:从无限长随机序列x(n)中截取长度N的有限长序列列第二步:由N长序列求(2M-1)点的自相关函数序列。

(2-1) 这里,m=-(M-1)…,-1,0,1…,M-1,MN,是双边序列,但是由自相关函数的偶对称性式,只要求出m=0,。

,M-1的傅里叶变换,另一半也就知道了。

第三步:由相关函数的傅式变换求功率谱。

即以上过程中经历了两次截断,一次是将x(n)截成N长,称为加数据窗,一次是将x(n)截成(2M-1)长,称为加延迟窗。

因此所得的功率谱仅是近似值,也叫谱估计,式中的代表估值。

一般取M<<N,因为只有当M较小时,序列傅式变换的点数才较小,功率谱的计算量才不至于大到难以实现,而且谱估计质量也较好。

因此,在FFT问世之前,相关法是最常用的谱估计方法。

三:Burg法: AR模型功率谱估计又称为自回归模型,它是一个全极点的模型,要利用AR模型进行功率谱估计须通过levinsondubin递推算法由 Yule-Walker方程求得AR的参数:σ2,α1α2…αp。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4 / 37
if ((n ~= fix(n))||(n<0)) error('n 必须为非负整数! !'); end %计算阶乘 if n==0 x=1; else x = factorial(n-1)*n; end end function x=fibonacci(n) %%求斐波那契数列 %%输入:正整数 n %输出:斐波那契数列中第 n 个数 %例外处理 if ((n ~= fix(n))||(n<1)) !'); error('n 必须为正整数! end %计算 if n==1||n==2 x = 1; else x = fibonacci(n-1)+fibonacci(n-2); end end
3 / 37
error('A 和 B 必须同时为方阵! !'); end if (a_row ~= b_list) error('方阵 A 与 B 的维数必须相等! !'); end %矩阵相乘运算 n=a_row; X=zeros(n,n);%初始化 X for i=1:n for j=1:n for k=1:n X(i,j)=X(i,j)+A(i,k)*B(k,j); end end end end
测试:
x = gcd(123,234) x= 3
二、 验证给定数组中的所有元素是否唯一
代码:
function x=UniqueElements(A) %% 验证给定数组中的所有元素是否唯一 %输入:一个数组 1xN 矩阵 A
2 / 37
%输出:1--该数组所有元素唯一 % 0--该数组所有元素不唯一 x = 1; N = size(A,2); for i = 1:(N-1) for j=(i+1):N if A(i) == A(j) x = 0; break; end end end end
算法设计与分析实验报告
说明:本实验报告的算法全部用 Matlab 实现
目录: 一、求最大公约数的欧几里得算法 二、验证给定数组中的所有元素是否唯一 三、计算两个 N 阶矩阵的乘积 四、递归算法(阶乘、Fibonacci 数列) 五、KMP 模式匹配算法 六、Huffman 编码 七、图的遍历(深度优先搜索算法 DFS、广度优先搜索算法 BFS) 八、Dijkstra 算法、Kruskal 算法和 Prim 算法 九、排序算法(选择、冒泡、归并、快速、插入) 十、二叉树的三序遍历(前序、中序、后序)
测试:
>> t='this is a kmp string matching test string'; >> p='string';
1 / 37
一、 求最大公约数的欧几里得算法
代码:
function x = gcd(m,n) %% 求最大公约数的欧几里得算法 %输入:两个整数 m, n %输出:m,n 的最大公约数 x if (m ~= fix(m))||(n ~=fix(n)) error('两个输入变量必须为整数! !'); end if (m~=0)&&(n~=0) while n~=0 r = mod(m,n); m = n; n = r; end x = m; else error('两个输入变量均不能为零! !'); end end
测试:
A=[1 2 3 4]; B=[5 6 7 8]; X = MatrixMultiplication(A,B) X= 19 43 22 50
四、 递归算法(阶乘、Fibonacci 数列)
代码:
function x=factorial(n) %%求正整数 n 的阶乘 %%输入:正整数 n %输出:n 的阶乘 x=n*(n-1)*(n-2)*...*3*2*1 %例外处理
测试:
x=UniqueElements([2 0 1 1 0 5 1 5 2 7]) x= 0 >> x=UniqueElements([1 3 5 7 8 9 2 Fra bibliotek]) x= 1
三、 计算两个 N 阶矩阵的乘积
代码:
function X = MatrixMultiplication(A,B) %%计算两个 N 阶矩阵的乘积 %%输入:两个 N 阶矩阵 A,B %输出:矩阵 A 与 B 的乘积 X %例外处理 [a_row,a_list]=size(A); [b_row,b_list]=size(A); if (a_row ~= a_list||(b_row~=b_list))
测试:
x=factorial(5) x= 120 x=fibonacci(1) x=
5 / 37
1 >> x=fibonacci(2) x= 1 >> x=fibonacci(3) x= 2 >> x=fibonacci(4) x= 3 >> x=fibonacci(5) x= 5 >> x=fibonacci(10) x= 55
五、 KMP 模式匹配算法
代码:
function KMP(T, P) %%KMP:此算法是一种改进的字符串匹配算法 %输入: % T--原字符串 % P--模式
6 / 37
%输出: % 返回所有匹配字符串第一个字符的下标 n = length(T); m = length(P); pi= Compute_Prefix(P); q = 0; for i = 1:n while ( (q > 0) && (P(q+1) ~= T(i) )) q = pi(q); end if P(q+1)==T(i) q = q + 1; end if q == m temp = i - m ; fprintf('Pattern occurs with shift %u.\n' ,temp); q = pi(q); end end end function pi = Compute_Prefix(P) %%KMP 函数的子函数 m = length(P); pi(1)=0; k = 0; for q = 2:m while ( (k>0) && (P(k+1) ~= P(q) )) k = pi(k); end if P(k+1) == P(q) k=k+1; end pi(q)=k; end end
相关文档
最新文档