matlab基本数据分析

2024-04-10

matlab基本数据分析(精选8篇)

篇1:matlab基本数据分析

matlab基本工作空间和函数之间的数据相互调用

matlab存储变量在一块内存区域中,该区域成为基本工作空间。脚本文件和命令行创建的变量都存储在基本工作空间里面(workspace),函数不使用基本工作空间,每个函数都有自己的函数空间。

下面是函数与工作空间共享数据的方法:

1、使用global,将变量声明为全局变量

2、使用evalin和assignin(常用方法)evalin:在函数M文件中访问工作空间中的变量

[a1,a2,…] = evalin(ws,expression)说明:在工作空间ws中执行expression命令或表达式,并将执行的结果保存在变量[a1,a2]中 例:

v = evalin(’base’,’var’);%把基本工作空间中的变量var的值赋值给局部变量。

v = evalin(’base’,’var’);%查询基本工作空间中的变量名称

assignin:将函数M文件中的变量的值传给指定的工作空间中的变量

assignin(ws,’var’,val);说明:将变量val的值赋给工作空间ws中的变量var,如果变量var在工作空间中不存在,则创建该变量。例:

assignin(’base’,’valueX’,xdata);

篇2:matlab基本数据分析

先来解读下题目,寥寥几句话,里面囊括的信息量却不少,然后这些都得自己去琢磨。首先对A矩阵能做LU分解,即能把A分解成这种形式A=L*U(U是上三角矩阵,是由A矩阵经过高斯消元后得到的,L是下三角矩阵,其对角线全为1,其他非零元素为在消去(i,j)位置元素过程中主元所乘的系数),条件有3,一是矩阵A必须为方阵,A如果不是方阵,就不要想着对它做LU分解啦,这是基本条件,牢记啊!二是矩阵A必须可逆,换种说法就是A必须为非奇异矩阵,这两种说法是等价的,而这又等价于A是满秩的,A是满秩又等价于A的行列式值非0,好绕,矩阵就是这样,很多定理其实是等价的,但是你得记住,不然在推导一些定理或公式的时候会犯一些基本的常识性错误。三是矩阵A在高斯消元过程中必须没有出现0主元,也就是说只有在对A进行高斯消元过程中没有出现进行交换这种情况下,A才能分解成L*U这种形式,如果对A进行高斯消元,中间某一步出现0主元,需要进行行交换了,这种情况下就不要想对A进行LU分解啦,因为不满足条件3啊!那么问题来了,假如出现了有0主元这种情况,我又想对A进行LU分解,那应该怎么办?

这就引出了带行变换的LU分解,也就是本文的主题。根据书上的定理,对任意一个非奇异矩阵(等价于可逆矩阵)都存在一个置换矩阵P使得P*A可以分解成L*U这种形式,即PA=LU。想想其实这定理也是不言自明的,刚才A不是要进行行变换才能继续高斯消元吗?而LU分解前提又是高斯消元过程中不能出现行交换,那好,我事先对A矩阵在高斯消元过程中需要交换的行给交换掉,形成一个新的矩阵B,那我对B高斯消元那肯定就不会出现需要行交换的情况,这就满足了LU分解第三个条件了,这样B不就可以进行LU分解了吗?是的,PA=LU这种形式的LU分解采用的就是这种思想。那么现在的问题是,怎么在代码中实现对A矩阵的LU分解,并输出P,L,U矩阵呢?我在网上搜了一下,发现结果大都不尽如人意,大多数程序吧只能说做A=LU这种形式的分解,一旦说A不满足条件3,那就死翘翘了,这种程序先不论其能否运行成功,结果是否正确,其鲁棒性也太差了!用个时髦点的词来说就是太low了!通用性太差了!不光如此,代码也没什么注释,可读性很差,让人怀疑是不是写给别人看的,尤其像我这种编程渣渣,看个代码费老半天劲都看不懂说什么。于是,我决定按自己的想法来走。

首先从最简单的情况考虑,这也是我们做研究、做学术、做工程必须要时刻牢记心中的一点,很多人喜欢一上来就把所有问题、把最复杂的情况、把方方面面都给考虑到,然后再开始实现他的想法,我自己也有这个习惯,但是,这并不是一个好习惯,一上来就好高骛远、就想着高大上这本质上是一种急功近利的表现,那样的话你会陷入到各种各样的技术细节当中,你会想半天却仍然写不出半点实质性的东西出来,所以最好的办法是,先考虑最简单、最核心的情况,这样不仅大大降低问题的复杂度,同时也为将来进一步扩展程序、解决更复杂的情况打下了一个坚实的基础。

在这个例子中,最简单的情况就是矩阵A在高斯消元过程中不需要进行行交换,也就是说A可以分解成A=L*U这种形式。这种情况下,代码如下。

function LUDecomposition(A,n)%A is the square matrix,n is the order of A

L=eye(n);%Let the L matrix be an identity matrix at first for i=1:n-1

for j=i+1:n

L(j,i)=A(j,i)/A(i,i);

A(j,:)=A(j,:)-(A(j,i)/A(i,i))*A(i,:);end end

U=A %A becomes U matrix after Gauss elimination L

可以试着令A=[2 2 2;4 7 7;6 18 22],调用函数获得L矩阵为[1 0 0;2 1 0;3 4 1],U矩阵为[2 2 2;0 3 3;0 4 4],用笔验算下,这个结果是正确的。代码运行结果如图所示:

这部分代码的主要思想是这样的,矩阵A的阶次为n的话,A在高斯消元后有n个非零主元。在消元过程中,A共需要消掉n-1个主元下面所有的元素,注意,第n个主元已经是矩阵的最后一个元素了,它的下面和右边都没有其他元素了,所以不存在说对第n个主元下面所有元素消去的情况。这就获得了我们代码的第一个for循环,从第1行主元开始消元,一直到第n-1行主元。而在获得每一行主元过程中,需要对该行主元下面所有元素都消去,假如现在要获得第i行主元的话,就是说要对该主元所在列的第i+1行到第n行元素都消掉,那么这就获得了我们代码的第二个for循环,从消去第i+1个元素开始一直到第n个元素。前文说过,消掉第(j,i)个位置元素过程中,主元所乘系数就是L矩阵第(j,i)位置的元素,所以有L(j,i)=A(j,i)/A(i,i)。然后的话,就是把A矩阵第j行减去第j行乘以L(j,i),这样就可以消掉第(j,i)个元素了,就是这行代码A(j,:)=A(j,:)-(A(j,i)/A(i,i))*A(i,:)。最后,执行完两层for循环后,A矩阵就成为了U矩阵,L矩阵也从最初的单位阵成了L矩阵。

好了,我们已经实现了最简单的情况了,下面考虑复杂点的情况,就是说对A进行PA=LU这种形式的分解。假如A在消元过程中出现0主元了,那么怎么办?很简单,只需要从该0主元下面所有元素中找到一个非0元素,然后将其所在的行与该0主元所在的行进行交换就行了,不要忘了,对A矩阵两行进行了交换,对应到P矩阵中的操作是相应的两行也要进行交换,因为我们是通过P矩阵两行交换后然后左乘A矩阵使得A矩阵两行进行交换的。A矩阵交换第i行和第k行元素对应到L矩阵中相应两行的消元系数也应该交换位置,就是说L矩阵的第i行和第k行元素也要交换位置,当然,主对角线上的1是不需要交换的,因为他们并不是消元系数。交换完成后,继续执行消元操作,其步骤和上面考虑的最简单的情况就是一样的了。就这样,我们就实现了PA=LU这种形式的分解。令A=[1 2-3 4;4 8 12-8;2 3 2 1;-3-1 1-4],代入函数运算得L矩阵为[1 0 0 0;-3 1 0 0;2-0.2 1 0;2-0.2 1 0;4 0 3.75 1],U矩阵为[1 2-3 4;0 5-8 8;0 0 6.4-5.4;0 0 0-3.75],P矩阵为[1 0 0 0;0 0 0 1;0 0 1 0;0 1 0 0],用笔验算下,结果与函数运行结果是一致的,当然了,这个函数我只是代了3,4个不同的A矩阵进去而已,可能样本数量不够多,但目前来说我觉得应该没什么问题了,如果有问题欢迎反馈给我。这部分代码如下:

function AdvanceLUDecomposition(A,n)%A is the square matrix,n is the order of A,A must be invertible

D=A;%Store matrix A in D,for later use

L=zeros(n);%Let the L matrix be an zero matrix at first

P=eye(n);%Let the permutation matrix be a identity matrix at first for i=1:n-1 for j=i+1:n

if A(i,i)==0 %A zero pivot appears on(i,i)position,we need to find a nonzero entry below it to be the new pivot,with row exchange for k=n:-1:i+1 %find a nonzero entry below the(i,i)entry in the i column,start from the last row

if A(k,i)~=0 %We have found a nonzero entry,to choose it as the new pivot,we need row exchange k<-->i

L([i k],:)=L([k i],:);%Permute i and k row in L matrix A([i k],:)=A([k i],:);%Permute i and k row in A matrix P([i k],:)=P([k i],:);%Permute i and k row in P matrix break;end end end

L(j,i)=A(j,i)/A(i,i);

A(j,:)=A(j,:)-(A(j,i)/A(i,i))*A(i,:);end end

U=A %A becomes U matrix after Gauss elimination

L=L+eye(n)%All entries on the diagonal of L matrix must be 1 P %output the permutation matrix

B=L*U %verify if the product of L and U equals to P*A

C=P*D %D is the original A matrix,check it out in row 2 %If B equals C,then it means the algorithm works correctly

%some key points and theroms about LU factorization

%Theorem 1 A nonsigular matrix Anxn possesses an LU factorization if and %only if a nonzero pivot does not emerge during row reduction to upper %triangular form with type III operations.%Theorem 2 For each nonsigular matrix A,there exist a permutation matrix P

%such that PA possesses an LU factorization PA=LU

%Remember,the concept of nonsingular matrix is for square matrix,it means %that the determinant is nonzero,and this is equivalent that the matrix has %full-rank

%Based on these conditions,the first thing about the matrix A on which we

%conduct LU factorization is that A must be a square matrix.The second %thing is A must be invertible,which is equal to the statement that A is %non-singular

代码运行结果如图所示:

最后补充一点,为什么要进行LU分解呢?这个问题很关键,很多人也许并不关注这个问题,我们学习很多时候都是只关注实现方法,却并不关心它存在的意义,这种学习是永远无法深入的,只能是停留在表面上,学习就应该多问为什么,多质疑这个东西存在的价值,存在的意义有多大,这样才能促使你去深入了解这个方法的优点和缺点,从而改进、完善它。简单点来说就是LU分解大大降低了算法复杂度,我们求解一个方程组Ax=b的时候,一般来说无非就两种方法,要么是高斯消元法,要么是先求A的逆矩阵,然后再乘以b获得x,而第二种方法比第一种方法要复杂并且限制更多,所以一般是用高斯消元法。高斯消元法解一个方程组算法复杂度是(n^3)/3,并且每获得一个新的b,要接x,都得执行复杂度为(n^3)/3的操作。而LU分解有什么好处呢?在第一次LU分解的时候,也就是说获得L和U的时候,其算法复杂度其实也是n^3,但是,一旦我们获得了L和U矩阵后,每次我们获得一个新的b要求对应的解x,算法复杂度就会大大降低,粗略来说就是n^2,把复杂度降低了一个级别,对于大型系统来说,这是非常了不起的一个改进,运算性能会大大提升。而实际应用中,这样的方法也是非常有意义的,实际系统中,A矩阵相当于系统里的各种滤波和变换操作,x相当于系统的输入,b相当与系统的输出,我们一般是获得了输出b,然后想求得输入x,只要系统不变,那么知道b,又知道了L和U矩阵,我们只需要对每一个新的b执行n^2次乘法/除法和n^2-n次加法/减法就可以获得b对应的输入x了,这是多么了不起的一个性能改进!正因为这样,LU分解在实际应用中用的也是非常广泛。

篇3:matlab基本数据分析

通过陆地枪械发射内弹道经典方程组的建立, 可得出弹道曲线p-t, v-t, p-x。这几条曲线反映了膛内压力的变化规律和弹丸速度的变化规律, 使我们能够较深入地了解陆地枪械工作时的内弹道特性。而目前根据战争的需要, 有些武器转战水下, 为了能更深入地了解水下枪械工作时的内弹道特性, 必须以陆地枪械发射内弹道经典方程组理论为基础, 建立适合水下枪械内弹道的物理和数学模型, 即水下枪械内弹道基本方程组。

1 水下枪械的内弹道分析与研究及方程组的建立

由于工作介质的改变, 常规枪械弹丸的运动情况与水下枪械弹丸的运动情况有着显著的不同。为了使弹丸在水中运动具有良好的稳定性且不做高速旋转, 选用滑膛式枪管, 弹丸选用箭型。当火药点燃以后, 火药燃气除了推动弹丸外还要推动弹丸前端的水柱一起运动。图1为水下枪械的内弹道简化模型。

图1中, lψ为药室自由容积的缩径长, x为弹丸在膛内的位移, l为弹丸的等效长度, lg为弹丸在膛内的全行程。

根据上述分析, 为了简化过程并得出比较实用的模型, 提出以下假设:

(1) 燃烧的火药服从燃烧几何定律, 即:

其中:ψ为已燃烧火药的相对质量;z为已燃火药的厚度;χ、λ 均为火药的药型系数。

(2) 不论是弹丸的运动还是火药的燃烧, 都是在平均压力的情况下进行的。

(3) 膛内的压力与火药的燃烧速度成正比关系, 即:

其中:p为火药燃气的压力;Ik为火药燃气压力的全冲量。

(4) 膛内弹丸的速度与膛内水柱的速度相同, 即:

其中:v为水柱和弹丸的速度。

(5) 不论是火药燃烧期间还是燃烧结束后, 燃烧生成物的成分始终保持不变。

(6) 减小火药力f或增加绝热指数K的值, 可以间接修正枪管内膛表面的热散失。

(7) 水的密度不受枪械发射时散出的热量影响。

(8) 各种形式的次要功用φ考虑。

根据以上假设应用牛顿第二定律以“弹丸和弹丸前枪管内的水柱”为研究对象得到膛内弹丸的运动方程为:

其中:S为枪膛横截面积;m为弹丸质量;ρ为水的密度。

此外, 我们还需要建立水下枪械的能量方程。弹丸及弹丸前端水柱在膛内运动过程中所包括的主要能量有:弹丸的动能;弹丸前端一定量水柱的动能;前端一定量水柱射出膛口时的动能E3;所耗损的克服各种摩擦力的能量E4 (包括弹丸前端水柱被弹丸推动时弹丸和水柱之间产生的摩擦、涡流等情况所耗损的能量, 克服弹丸、水柱和膛壁之间的摩擦所耗损的能量) ;由于热传递使火药燃气经过枪管、弹丸及药筒所耗损的能量E5;由于运动造成火药以及火药燃气能量的消耗E6。其中E1, E2为主要功;E3, E4, E5, E6为次要功。为简化计算模型, 可近似认为这些次要功均与E1成一定的比例关系。设K3, K4, K5, K6分别为E3, E4, E5, E6与E1的比例系数, 则有:

其中:为火药气体所完成的各种功;φ=1+K3+K4+K5+K6。

综上所述, 可以得到水下枪械内弹道的能量方程为:

其中:ω为装药量;药室自由容积缩径长, δ为火药密度, W0为药室容积, α为火药气体余容;θ=K-1;为火药气体的状态势能;为火药燃烧所生成的能量。

2 计算仿真结果

运用MATLAB软件对某型号水下枪械进行数值仿真计算, 可以得出p-t, v-t, p-x曲线, 如图2~图4所示。

从图2中可以看出火药燃气的压力达到峰值286MPa时经历的时间为0.6 ms, 弹丸在膛内的时间为2.5ms。从图3中可以看出256.8m/s为弹丸出管口的速度。从图4中可以看出火药燃气的压力达到最高值时是在弹丸在膛内运动了0.03 m处, 其数值高于常规枪械, 且速度上升较快, 这是由于膛内有了水柱的存在导致了弹后空间容积和弹丸位移增加较慢, 从而带来了膛内压力的快速提高。

3 结论

通过对水下枪械内弹道的动力学建模、仿真可以得到以下结论:水下枪械内弹道特性与常规枪械内弹道特性的不同之处在于膛内弹丸的速度提升比较慢, 膛内压力上升的速率比较快。

参考文献

[1]吴望一.流体力学[M].北京:北京大学出版社, 1983.

[2]金志明.枪炮内弹道学[M].北京:北京理工大学出版社, 2004.

篇4:Matlab的层次分析运用初探

关键词:Matlab;层次分析法;判断矩阵;决策

在当前信息化、全球化的大背景下,传统的手工计算已不能满足人们高效率、高准确度的决策需求。因此计算机辅助决策当仁不让地成为了管理决策的新工具、新方法。基于此,本文在充分发挥计算机强大运算功能的基础上,选用美国MathWorks公司的集成数学建模环境Matlab R2009a作为开发平台,使用M语言进行编程,对计算机辅助决策在层次分析法中的运用进行讨论。试图通过程序实现层次分析法在计算机系统上的运用,为管理决策探索出新的道路。

一、层次分析法的计算流程

根据层次分析法的相关理论,层次分析法的基本思想是将复杂的决策问题进行分解,得到若干个下层指标,再对下层指标进行分解,得到若干个再下层指标,如此建立层次结构模型,然后根据结构模型构造判断矩阵,进行单排序,最后,求出各指标对应的权重系数,进行层次总排序。

1.1 构造层次结构模型 在进行层次分析法的分析时,最主要的步骤是建立指标的层次结构模型,根据结构模型构造判断矩阵,只有判断矩阵通过了一致性检验后,方可进行分析和计算。其中,结构模型可以设计成三个层次,最高层为目标层,是决策的目的和要解决的问题,中间层为决策需考虑的因素,是决策的准则,最低层则是决策时的备选方案。一般来讲,准则层中各个指标的下级指标数没有限制,但在本文中设计的程序尚且只能在各指标具有相同数量的下级指标的假定下,完成层次分析法的分析,故本文后文选取的案例也满足这一假定。1.2 建立判断矩阵 判断矩阵是表示本层所有因素针对上一层某一个因素的相对重要性的比较给判断矩阵的要素赋值时,常采用九级标度法(即用数字1到9及其倒数表示指标间的相对重要程度)。1.3 检验判断矩阵的一致性 由于多阶判断的复杂性,往往使得判断矩阵中某些数值具有前后矛盾的可能性,即各判断矩阵并不能保证完全协调一致。当判断矩阵不能保证具有完全一致性时,相应判断矩阵的特征根也将发生变化,于是就可以用判断矩阵特征根的变化来检验判断的一致性程度。在层次分析法中,令判断矩阵最大的特征值为λmax,阶数为n,则判断矩阵的一致性检验的指标记为: ⑴ CI的值越大,判断矩阵的一致性越差。当阶数大于2时,判断矩阵的一致性指标CI与同阶平均随机一致性指标RI之比称为随机一致性比率。 ⑵ 当CR<0.1时,即可认为判断矩阵具有满意的一致性。然而由于在为各指标间相互重要性程度大小的判定过程中存在人为主观因素,因此在判断矩阵不能通过一致性检验时,需要对各指标间相互重要性程度重新进行赋值,直至其通过矩阵一致性检验。其最大特征值对应的特征向量即为该指标相对于上一级指标的重要性排序。1.4 进行层次总排序 在通过层次单排序得出各指标相对上一级指标的重要性排序向量后,沿递阶层次结构逐级依次由下往上进行矩阵计算,则可得到各底层指标对最高层的相对重要性权重,从而可对各底层指标的优先次序进行排序,找出重点指标并予以特别关注。

二、Matlab层次分析法程序设计思路

Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。Matlab可以进行矩阵运算、绘制函数和数据图像、设计算法、创建用户界面、连接用其他编程语言编写的程序等。Matlab以矩阵为计算单位,采用M语言作为程序语言,与C语言有诸多相似之处,并可方便地与C/C++、Microsoft Excel等工具和软件进行结合并进行代码共享和数据交换,可以方便地进行数值分析、图像处理等功能,配合功能强大的统计和金融工具箱,Matlab已经可以在概率统计、经济管理等方面发挥强大的作用。 笔者所编程序即是运用Matlab丰富的函数、矩阵运算和程序控制功能,探索其在层次分析法分析中的运用。程序通过三层循环结构,实现多个层次上各个判断矩阵的输入和生成,并可以通过计算它们的特征值,进行矩阵的一致性检验。当所有的判断矩阵一致性检验均通过后,程序将对各层次从下往上依次计算,最终得出各底层指标相对于准则层的权重系数,从而有助于选择最优方案,其中的平行四边形表示输入数据,菱形表示判断,根据判断结果的不同出现2个分支。

三、应用举例

某市一十字路口常常因行人过街拥挤,存在安全隐患,市政部门欲对该路口进行改造,现提出了3套改造方案:

方案1(S1):建地下通道;

方案2(S2):建人行天桥;

方案3(S3):拆除周围的旧建筑,拓宽街面。

市政部门认为,该改造工程需考虑如下几个方面的指标:

指标1(P1):通车能力的大小;

指标2(P2):交通安全系数的高低;

指標3(P3):建筑费用的高低;

指标4(P4):群众出行方便度的大小;

指标5(P5):市容整洁程度的高低。

现在需要就以上问题进行决策,需决定在三套方案(S1~S3)中选用最优方案。其主要步骤及操作如下所示。

第1步:根据题目建立层次结构模型。由于题目要求对3套方案均需考虑5个指标,故可画出指标体系结构图。

第2步:形成判断矩阵。形成判断矩阵,需要对各指标相互的重要性进行标度,矩阵的上三角部分与下三角部分以对角线为分界,对称呈倒数排列,对角线上元素均为1,因为各指标与自身的重要性为“同等重要”,不同的指标A1对A2的重要性与A2对A1的重要性互为倒数。

第3步:将以上各矩阵输入程序,进行计算。在Matlab的命令窗口依次按提示输入矩阵后,程序输出结果。

接着,程序对各矩阵计算所得的最大特征值对应的特征向量按下式进行标准化

再给出各指标的特征向量组成的矩阵

进而得出三套方案相对于目标的权重向量为

程序经比较,发现方案1权重系数最大,进而得出最终结论:方案1(地下通道)占优。

四、总结及分析

本文通过使用Matlab软件进行编程,在满足同一层次中各指标对所有的下级指标均产生影响的假定条件下,实现了层次分析法的分析运算。本程序允许用户自由设定指标层次结构内的层次数以及各层次内的指标数,通过程序的循环,用户只需输入判断矩阵的部分数据,程序可依据层次分析法的计算流程进行计算并作出判断。本程序可以方便地处理层次分析法下较大的运算量,解决层次分析法的效率问题,提高计算机辅助决策的时效性。

参考文献:

[1]王翼,王歆明.MATLAB基础及在经济学与管理科学中的应用[M].北京:机械工业出版社,2009,7.

篇5:matlab基本数据分析

1、求矩阵最大特征值及特征向量 用matlab求:

输入:A=[1 1/2 2 1/4;2 1 1 1/3;1/2 1 1 1/3;4 3 3 1]

[x,y]=eig(A)得出:特征向量x=[0.2688 0.3334 0.2373 0.8720]

最大特征值λmax=4.1964

2、一致性检验

CI=(λmax-n)/(n-1)=(4.1964-4)/(4-1)=0.0655 CR=CI/RI=0.0655/0.9=0.0727

(注:维数为4时,RI=0.9)CR=0.0727<0.1,矩阵一致性通过检验

篇6:matlab基本数据分析

基于MATLAB的电传控制系统仿真与分析

MATLAB语言在控制系统仿真与分析方面具有众多优点,文章具体分析了基于MATLAB语言的`SIMULINK模型的仿真求解方法.以某型飞机为例,分析了该飞机纵向通道、横向通道及航向通道的工作原理,并对该飞机电传控制系统进行数值仿真.通过仿真,讨论了电传控制系统对飞机动态性能的影响.

作 者:张亮 葛志浩 董新民 ZHANG Liang GE Zhi-hao DONG Xin-min 作者单位:空军工程大学工程学院,陕西,西安,710038刊 名:电光与控制 ISTIC PKU英文刊名:ELECTRONICS OPTICS & CONTROL年,卷(期):12(5)分类号:V247关键词:电传控制系统 数值仿真 动态特性

篇7:matlab基本数据分析

课程编号:02072006

适用专业:电子信息工程、信息对抗技术、电磁场与无线技术、电波传播与天线专业

学 时 数:56

学 分 数:3.5

开课学期:第3学期

先修课程:高等数学,线性代数,C语言与高级程序设计 执 笔 者:程建

编写日期:2012.04

审核人:吕明

一、课程性质和目标

授课对象:本科生 课程类别:学科基础课

教学目标:本课程主要介绍MATLAB软件平台的使用和编程技巧、数值计算方法的基础理论和基本算法,并在通用软件平台MATLAB上开展教学。通过该课程的学习,学生应了解MATLAB软件平台的基本特性、数值计算方法的基础理论,掌握MATLAB的使用、MATLAB的编程技巧和数值计算的基本方法,具备MATLAB软件平台的熟练编程能力和数值求解算法的MATLAB编程实现的能力。

二、课程内容安排和要求

(一)教学内容、要求及教学方法

本课程课堂教学内容主要包括两大部分:MATLAB软件平台及编程;数值分析基础理论与基本算法。

1.MATLAB软件平台及编程

(1)MATLAB概论 授课时数: 2学时 教学内容:

1)MATLAB软件平台简介

MATLAB软件平台的历程、影响、特点和功能等的介绍。2)MATLAB软件平台入门

MATLAB软件平台的命令窗口、当前目录浏览器窗口、工作空间浏览器窗口、历史命令窗口和数组编辑器窗口等的介绍。3)MATLAB的常量、运算符和基本操作

MATLAB使用的常量值、各种运算符、基本操作命令和帮组命令与帮助窗口等的介绍,并以范例形式加以说明。教学要求:

熟悉和了解MATLAB软件平台,掌握MATLAB的常量、运算符和基本操作。

(2)MATLAB基础知识 授课时数: 4学时 教学内容: 1)MATLAB的数组与矩阵

数组与矩阵的概念;数组或矩阵元素的标识、访问与赋值;数组与矩阵的输入法;矩阵的特有运算。

2)字符串和符号矩阵

字符串变量和函数求值;符号变量;符号矩阵的创建方法;符号矩阵的运算;符号矩阵运算中特有命令的应用。3)多项式及其运算

多项式运算函数;多项式运算举例。教学要求:

熟悉和了解MATLAB的字符串、符号矩阵和多项式的操作和运算,掌握MATLAB的数组与矩阵的操作和运算。

(3)MATLAB程序设计 授课时数: 2学时 教学内容:

1)M文件及函数编写

M文件的特点和编写技巧;MATLAB的函数特点和编写技巧;参数与变量;数据类型。2)程序结构

MATLAB的选择结构;MATLAB的循环结构。3)程序终止与异常

MATLAB程序的终止控制;MATLAB程序的异常处理。教学要求:

掌握M文件和函数的编写,掌握MATLAB的数据类型和程序结构,了解MATLAB程序的终止控制和异常处理语句。

(4)MATLAB数据的图形表示 授课时数: 2学时 教学内容: 1)MATLAB二维绘图

基本二维绘图;特殊的二维绘图函数;填充多边形。2)MATLAB三维绘图

三维图形的基本函数;绘制三维折线及曲线;绘制三维网格曲面。教学要求:

掌握MATLAB的二维绘图和三维绘图指令和编程技巧,了解MATLAB的二维绘图和三维绘图的应用。

(5)Simulink建模与仿真基础 授课时数: 4学时 教学内容: 1)Simulink的基本操作与模型窗口

介绍Simulink的启动、Simulink模型库的打开、Simulink仿真模型建立、仿真参数设置等基本操作,以及模型窗口的组成和功能等。2)模型创建与系统仿真

介绍模型创建的基本操作、信号线的操作、模型的文本注释,仿真模型库的基本模块和参数设置,以及复杂系统的仿真与分析。3)子系统创建与封装

介绍子系统的创建、条件执行子系统,以及子系统的封装。4)用MATLAB命令创建和运行Simulink模型

介绍用MATLAB命令创建Simulink模型的相关指令、模块和信号线添加的相关指令、模块参数与属性的操作指令等,以及用MATLAB命令运行Simulink模型的操作等。教学要求:

熟悉和了解Simulink的基本操作与模型窗口功能,掌握模型创建与系统仿真的基本方法、子系统创建与封装的基本方法,了解用MATLAB命令创建和运行Simulink模型。

2.数值分析基础理论与基本算法

(1)数值计算的基本概念 授课时数:3学时 教学内容:

1)数值分析简介

数值分析的原理和基本思想介绍;应用实例分析。2)误差与有效数字

误差、误差限、相对误差、相对误差限和有效数字的定义及相互关系;误差的来源和误差的基本特性;误差的计算(估计)的基本方法。3)算法的适定性问题与MATLAB中的数值计算精度

数值分析中的病态和不稳定性问题介绍;病态问题和不稳定算法的实例分析;避免误差危害的若干原则;MATLAB中的数值计算精度。教学要求:

熟悉和了解数值分析的基本概念,掌握误差分析的基本方法,了解数值计算算法设计中应当关注的基本问题。

(2)线性方程组的数值方法 授课时数: 6学时 教学内容:

1)高斯消元法

高斯消元法;主元方式的高斯消元法;MATLAB函数实现。2)矩阵分解

矩阵LU分解的一般计算公式;利用LU分解的线性方程组求解方法;Cholesky分解;MATLAB函数实现。

3)向量范数与矩阵范数

向量范数及其性质;矩阵函数及其性质;常用范数形式;MATLAB函数实现。4)线性方程组的迭代法求解 Jacobi迭代法;高斯_赛德尔迭代法;MATLAB函数实现;迭代法的收敛性。5)方程组的病态问题与误差分析

线性方程组解的误差分析;条件数和方程组的病态性。6)方阵的特征值和特征向量的计算

方阵特征方程的求解法;计算特征值和特征向量的迭代法;MATLAB函数实现。教学要求:

理解各种线性方程组数值求解,掌握求解方法和解的误差分析方法,掌握方阵的特征值和特征向量的数值求解方法,能MATLAB编程实现求解算法。

(3)函数的数值逼近授课时数: 5学时 教学内容:

1)代数多项式插值问题

插值多项式的存在唯一性;插值基函数和插值多项式的一般形式;插值的误差分析;多项式插值的Runge现象;MATLAB函数实现。2)分段低次插值

分段线性插值;Hermite插值和分段Hermite插值;MATLAB函数实现。3)

三次样条插值

样条插值的定义;三次样条函数的计算;MATLAB中的插值函数。4)曲线拟合的最小二乘法

曲线拟合的最小二乘法法;多项式拟合方法;MATLAB中的多项式拟合函数; 教学要求:

了解插值和曲线拟合方法的思路,掌握插值和曲线拟合及误差分析方法,能MATLAB编程实现插值和拟合算法。

(4)数值积分 授课时数: 4学时 教学内容:

1)插值型求积公式

线性和二次求积公式;求积公式的代数精度;插值型求积公式;MATLAB函数实现;求积公式的误差分析。2)复化求积公式

牛顿-科特斯求积公式;几个低次牛顿-科特斯求积公式;复化矩形公式;复化梯形公式;复化Simpson公式;MATLAB函数实现。3)高斯求积公式

高精度求积公式;高斯点的基本特性;高斯求积公式;MATLAB中的数值积分函数。教学要求:

了解各种数值积分方法的思路;掌握数值积分及误差分析方法;MATLAB编程实现数值积分算法。

(5)常微分方程初值问题 授课时数: 4学时 教学内容:

1)欧拉方法

基本理论和方程离散化;欧拉方法;改进的欧拉方法;MATLAB函数实现。2)稳定性与收敛性分析

欧拉方法的稳定性;欧拉方法的收敛性及收敛速度。3)龙格-库塔法

二阶龙格-库塔公式;三阶龙格-库塔公式;MATLAB函数实现。教学要求:

了解常微分方程初值问题数值求解方法的思路;掌握欧拉及改进欧拉方法和龙格-库塔法,能MATLAB编程实现算法,并进行算法的稳定性和收敛性分析。

(6)非线性方程求解 授课时数: 3学时 教学内容:

1)非线性方程的求解方法

非线性方程求解的基本原理;二分法、黄金分割法、迭代法、牛顿法。2)求解非线性方程数值解的MATLAB编程实现

代数方程求根指令;求函数零点指令。教学要求:

了解非线性方程数值求解方法的思路;掌握非线性方程求解的基本原理和基本方法,能MATLAB编程实现算法。

(7)课程总结 授课时数: 1学时

教学内容:

对课程教学内容进行归纳总结。

(二)自学内容和要求 1.MATLAB软件及编程

复习或自学MATLAB软件使用方法、自学MATLAB软件的工具箱使用方法,能使用MATLAB编程完成数值分析算法的程序设计。

2.课程设计 基本要求:

针对MATLAB编程、Simulink建模与仿真和数值分析的基本理论应用与仿真等相关内容进行课外的课题设计、实现和总结报告,提高学生对实际问题的分析能力、实现能力和文档编写能力。

命题形式:

(1)任课教师命题(2)学生自主命题

考查方式:(1)设计、分析与总结报告(2)MATLAB编程实现代码和仿真图

(三)实践性教学环节和要求

1.MATLAB软件平台与MATLAB程序设计实验

学时数: 4学时

实验项目的性质和任务:

通过上机编程实验,使学生熟悉对MATLAB软件平台的使用,使学生掌握MATLAB的编程技巧,让学生对MATLAB软件平台在科学计算中的重要作用有深入了解。实验题目涉及知识点:

MATLAB软件平台的基本操作、M文件编写、MATLAB程序设计。实验要求:

能熟练操作MATLAB软件平台,能利用M文件完成MATLAB的程序设计。

2.Simulink仿真实验

学时数: 4学时

实验项目的性质和任务:

通过上机编程实验,使学生对Simulink的重要作用和模型库有深入了解,能利用模型库完成复杂系统的建模和仿真,能根据实际问题需求完成子系统创建和封装。实验题目涉及知识点:

Simulink的基本操作、模型库、复杂系统建模与仿真、子系统创建和封装。实验要求:

能熟练操作Simulink和使用模型库的相关模块,能完成复杂系统建模与仿真,并能灵活使用子系统。

3.线性方程组求解和函数数值逼近方法实验

学时数: 4学时

实验项目的性质和任务:

通过上机编程实验,使学生对数值分析的病态问题、线性方程组求解、矩阵特征值与特征向量求解和函数的数值逼近方法有初步理解。实验题目涉及知识点:

病态方程求解、矩阵分解和方程组求解、矩阵特征值与特征向量求解、Lagrange插值和数据的多项式曲线拟合。实验要求:

能完成算法设计和MATLAB编程,并对实验结果进行分析。

4.数值求积、常微分方程和非线性方程求解方法实验

学时数: 4学时

实验项目的性质和任务:

通过上机实验,使学生熟悉和掌握数值积分、常微分方程和非线性方程求解知识及编程实现方法。

实验题目涉及知识点:

数值积分、常微分方程和非线性方程数值求解。实验要求:

能完成算法设计和MATLAB编程,并对实验结果进行分析。

三、考核方式

平时成绩+上机实验+课程设计+课程考试(开卷)成绩比例:

平时成绩+上机实验 30% 课程设计 20% 课程考试 50%

四、建议教材及参考资料 1.教材

《MATLAB数值计算方法》,张德丰等编著,机械工业出版社,2010。

2.参考资料

篇8:应用MATLAB分析语音信号

1 设计方案

文中利用MATLAB中的file菜单中的Import data命令来读入采集的语音信号, 将它赋值给向量y。再将该向量y看做一个普通的信号, 对其进行FFT变换实现频谱分析, 再依据实际情况对它进行滤波。对于波形图与频谱图 (包括滤波前后的对比图) 都可以用MATLAB画出。同时还可以通过sound命令来对语音信号进行回放, 以便在听觉上感受声音的变化。

2 具体设计

2.1 语音的录入与打开

利用MATLAB中的file菜单中Import data命令读入采集的语音信号, 采样值放在向量y中, fs表示采样频率 (Hz) 。sound (data, fs) 用于表示对声音的回放。向量y则代表了一个信号 (也即一个复杂的“函数表达式”) , 也就是说可以像处理一个信号表达式一样处理这个声音信号[1]。函数abs (x) 用于计算复向量x的幅值[2]。图1、图2分别表示原始语音信号采样前后的频谱。

2.2 滤波器设计相关原理

设计数字滤波器的任务就是寻求一个因果稳定的线性时不变系统, 并使系统函数H (z) 具有指定的频率特性[3]。数字滤波器从实现的网络结构或者从单位冲激响应分类, 可以分成无限长单位冲激响应 (IIR) 数字滤波器和有限长单位冲激响应 (FIR) 数字滤波器。数字滤波器频率响应的3个参数分别是:幅度平方响应、相位响应和群时延响应[4]。

文中利用MATLAB软件设计FIR低通滤波器频率fs=10 000。Rp=1;Rs=100;wdelta=ws-wp;wp=2×pi×1 000/fs;ws=2×pi×1 200/fs;调用函数N=ceil (8×pi/wdelta) ;wn= (wp+ws) /2;完成设计。

FIR高通滤波器设计频率fs=22050;wp=2×pi×5000/fs;ws=2×pi×4800/fs;Rp=1;Rs=100;wdelta=wp-ws;调用函数N=ceil (8×pi/wdelta) ;wn= (wp+ws) /2;完成设计。

FIR带通滤波器设计频率fs=22050;wp1=2×pi×1200/fs;wp2=2×pi×3000/fs;ws1=2×pi×000/fs;ws2=2×pi×3200/fs;Rp=1;Rs=100;wp= (wp1+ws1) /2;ws= (wp2+ws2) /2;wdelta=wp1-ws1;N=ceil (8×pi/wdelta) ;wn=[wp ws];调用函数[b, a]=fir1 (N, wn/pi, 'bandpass') ;完成设计。

IIR带阻滤波器设计频率fs=22050;[z, p, k]=buttap (3) ;[b, a]=zp2tf (z, p, k) ;, 调用函数[bt, at]=lp2bs (b, a, fs×2×pi, 2000×2×pi) ;[h1, w1]=freqs (b, a) ;[hh, wh]=freqs (bt, at) ;完成设计。

其中, 对于不同类型的滤波器参数wp和ws有一些限制:对于低通滤波器wpws;对于带通滤波器, wp和ws分别为具有2个元素的矢量, wp=[wp1, wp2]和ws=[ws1, ws2], 并且ws1

2.2.1 设计FIR低通滤波器

用MATLAB画出此语音信号在FIR低通滤波器滤波前、后的时域波形和在FIR低通滤波器滤波前后的频谱。其中图3表示设计的FIR低通滤波器, 此低通滤波器性能指标为:fb=1000 Hz, fc=1200 Hz, Rs=100 d B, Rp=1 d B。图4表示语音信号经过FIR低通滤波器前后的频谱。

分析:设计中最大衰减Rp=1 d B=0.89时, fb=1000 Hz, 由图4可看出基本上符合。而最小衰减为Rs=100 d B=0.00005时fc=1200 Hz也符合。由于采取的采样点数比较大, 滤波前后的频谱比较相近, 但仔细看图4中还是滤掉了高频部分, 只留下了想要的低频部分。

2.2.2 设计FIR高通滤波器

图5表示设计的FIR高通滤波器, 此高通滤波器性能指标为:fs=4800 Hz, fb=5000 Hz, Rs=100 d B, Rp=1 d B。图6表示语音信号经过FIR高通滤波器前后的频谱。

分析:设计中最大衰减Rp=1 d B=0.89时, fb=5000 Hz, 由图6可看出基本上符合。而最小衰减为Rs=100 d B=0.00005时fc=4800 Hz也符合。由于采取的采样点数比较大, 图6中还是滤掉了低频部分, 只留下了想要的高频部分, 但这部分高频幅度很小, 说明本语言信号低频成分比较多, 相反高频成分很少, 且幅值很小。

2.2.3 设计FIR带通滤波器

用MATLAB画出此语音信号在FIR带通滤波器滤波前、后的时域波形和在FIR带通滤波器滤波前、后的频谱。其中图7表示设计的FIR带通滤波器, 此带通滤波器性能指标为:fb1=1200 Hz, fb2=3000 Hz, fc1=1000 Hz, fc2=3200 Hz, As=100 d B, Ap=1 d B。

图8表示语音信号经过FIR带通滤波器前后的频谱。

分析:设计中最大衰减Rp=1 d B=0.89时, fb1=12000 Hz, fb2=3000 Hz, 由图7, 图8可看出基本上符合。而最小衰减为Rs=100 d B=0.00005时fc1=1000 Hz, fc2=3200 Hz也符合。图8中滤掉了不需要的低频和高频部分, 只留下了想要的部分, 但这部分幅度很小, 最大为0.7。

2.2.4 设计IIR带阻滤波器

用MATLAB画出此语音信号在IIR带阻滤波器滤波前、后的时域波形和在IIR带阻滤波器滤波前、后的频谱。其中图9表示设计的IIR带阻滤波器, 此带阻滤波器性能指标为:带宽为2000 Hz, 中心频率为fs。

分析:图9与图10比较, 原信号通过带阻滤波器后信号的幅度变小。通过带阻滤波器后, 频率幅值也相应地减小。在设计预想的3000~5000Hz内的频率部分被阻止, 留下了想要的频率部分, 基本符合初衷。

3 结论

文中实际上是想将数字信号处理技术应用于语音的处理这一领域。作为存储于计算机中的语音信号, 它本身就是离散化了的向量。只需将这些离散的量提取出来, 就可以对其进行处理了。文中用到了处理数字信号的强有力工具MATLAB, 通过对MATLAB中命令函数的调用, 很轻易利用数字信号的理论分析和处理实际化语音。这样就完全利用数字信号处理的知识来解决实际问题。

参考文献

[1]管爱红, 张红梅, 杨铁军, 等.MATLAB基础及其应用教程[M].北京:电子工业出版社, 2009:226-229.

[2]罗军辉, 罗勇江, 白义臣, 等.MATLAB7.0在数字信号处理中的应用[M].北京:机械工业出版社, 2005:87-115.

[3]黄海梅, 熊桂林, 杨勇.信号分析与处理[M].湖南:国防科技大学出版社, 2000:125-153.

[4]张智星.MATLAB程序设计与应用[M].北京:清华大学出版社, 2002:213-219.

上一篇:天国的眼泪下一篇:ghost 参数详细说明软件教程