当前位置:文档之家› Matlab关于数值计算的实现

Matlab关于数值计算的实现

Matlab关于数值计算的实现摘要:数值计算(numerical computation computation),主要研究更好的利用计算机更好的进行数值计算,解决各种数学问题。

数值分析包括离散傅里叶变换,考虑截断误差,计算误差,函数的敛散性与稳定性等。

在数学方面,数值计算的主要研究数值微分与积分,数据的处理与多项式计算,最优化问题,线性方程与非线性方程的求解,常微分方程的数值求解等。

同时,数值计算在物理,化学,经济等方面也有研究,本文暂且不表。

M atlab软件历经二十多年来的发展,已成为风靡世界的数学三大软件(matlb,Mathematica l,Maple)之一,在数学类科技应用软件中在数值计算方面首屈一指。

Matlab以矩阵为数据操作的基本单位,使得矩阵运算十分便捷快速,同时Matlab还提供了海量的计算函数,而且使用可靠地算法进行计算,能使用户在繁复的数学运算中解脱,Matlab还具有方便且完善的图形处理功能,方便绘制二维和三维图形并修饰。

目录1.数值分析(离散傅里叶变换,考虑截断误差,计算误差,函数的敛散性与稳定性)2.数值计算(数值微分与积分,数据的处理与多项式计算,最优化问题,线性方程与非线性方程的求解,常微分方程的数值求解)3.图形处理功能(方便绘制二维和三维图形并修饰)4.总结1.数据统计与分析Matlab 可以进行求矩阵的最大最小元素,平均值与中值,关于矩阵元素的求和与求积,累加和与累乘积,标准方程,相关系数,元素排序。

现在以求标准方差举例说明Matlab 的实现。

在Matlab 中,实现标准方差计算的函数为std 。

对于向量(Y ),std (Y )实现返回一个标准方差,而对于矩阵(A ),std (A )返回一个行向量,该行向量的每个元素对应着矩阵A 各行或各列的标准方差。

一般调用std 函数的格式为std (A ,flag ,dim )Dim 取1或者2分别对应求各列或各行的标准方差,flag 取1时,按照标准方差的计算公式∑-=-=Ni x x S i N 121)(11来计算。

若flag 取2,则用公式∑-==Ni x x S i N122)(1进行计算。

默认的flag 取值为0,dim 取值为1。

课本page1432. 离散傅里叶变换离散傅里叶变换广泛应用于信号的分析,光谱和声谱分析、全息技术等各个领域。

但直接计算dft 的运算量与变化的长度N 的平方成正比,当N 较大时,计算量太大。

随着计算机技术的迅速发展,在计算机上进行离散傅里叶变换计算成为可能。

特别是快速傅里叶变换算法的出现,为傅里叶变换的应创造了条件。

(1):傅里叶变换算法的简述。

傅立叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。

许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅立叶变换用正弦波作为信号的成分. f(t)是t 的周期函数,如果t 满足狄里赫莱条件:在一个以2T为周期内f(X)连续或只有有限个第一类间断点,附f (x )单调或可划分成有限个单调区间,则F (x )以2T 为周期的傅里叶级数收敛,和函数S (x )也是以2T 为周期的周期函数,且在这些间断点上,函数是有限值;在一个周期内具有有限个极值点;绝对可积。

则有下图①式成立。

称为积分运算f(t)的傅立叶变换,②式的积分运算叫做F(ω)的傅立叶逆变换。

F(ω)叫做f(t)的像函数,f(t)叫做F(ω)的像原函数。

F(ω)是f(t)的像。

f(t)是F(ω)原像。

①傅立叶变换②傅立叶逆变换(2)离散傅里叶变化的实现Matlab提供了对向量或对矩阵进行离散傅里叶变换的函数.1. g(x):返回向量的离散傅里叶变换.设晓得长度为n,若为2的幂次,则为以2为基数快速傅里叶变换,否则为运算速度很慢的非2次幂次的算法。

对于矩阵x,个g(x)应用于矩阵每一列。

2.g(x,n)计算n点离散傅里叶变化。

限定向量的长度为n,若x的长度小于n,则不足部分不上0;若大于n,则删去超出的那些元素。

对于矩阵X,它同样应用于矩阵的每一列,只是限定了向量长度为n3.g(x,[],dim):这是对于矩阵而言的函数调用格式,,前者的功能与g(x)基本相同,而后者则与g(x,n)基本相同。

只是当参数dim=1时,改函数作用于x的每一列;当dim=2时,则作用x的每一行。

值得一提的是,当一只给出的样本数n0是2的幂次时,可以取一个n使他大于n0且是2的幂次,然后利用函数格式g(x,n)进行快速的傅里叶变换。

是七速度大大的提升。

例如:给定函数:g(t)=12sin(2pi*10t+pi\4)+5cos(2pi*40t)取N=100,试从x为0-1采样,绘制相应的振幅-频率图。

程序如下:N=100 采样点数T=1; % 采样时间终点t=linspace(0,T,N);% 给出N个采样时间ti(I=1:N)x=12*sin(2*pi*10*t+pi/4)+5*cos(2*pi*40*t);% 求各采样点样本值xdt=t(2)-t(1);% 采样周期f=1/dt;% 采样频率(Hz)X=fft(x); % 计算x的快速傅立叶变换XF=X(1:N/2+1); % F(k)=X(k)(k=1:N/2+1)f=f*(0:N/2)/N; % 使频率轴f从零开始plot(f,abs(F),'-*') % 绘制振幅-频率图xlabel('Frequency');ylabel('|F(k)|');2.数值计算一、数值微分与积分Matlab数值积分MATLAB提供最简单的积分函数是梯形法trapz,我们先说明梯形法语法trapz(x,y),其中x,y 分别代表数目相同的阵列或矩阵,而y与x的关系可以由是一函数型态(如y=sin(x))或是不以函数描述的离散型态。

我们看一简单积分式以下为MA TLAB 的程式(and(1,101)产生101个均匀随机数,每个数都介于0-1之间)>> x=0:pi/100:pi;>> y=sin(x);>> k=trapz(x,y)k =1.9998clearx=sort(rand(1,101)*pi);y=sin(x);trapz(x,y)ans =1.99812.TLAB 另外提供二种积分函数,它们分别是辛普森法quad 和牛顿-康兹法quad8。

三种方法的精确度由低而高,分别为trapz, quad, quad8。

由于这二种方法依据的积分法不同于梯形法,因此它们的语法就和trapz 不同;其语法为quad('function',a,b) (quad8语法相同),其中function是一已定义函数的名称(如sin, cos, sqrt, log 等),而a, b是积分的下限和上限。

和trapz比较,quad, quad8不同之处在于这二者类似解析式的积分式,只须设定上下限及定义要积分的函数;而trapz则是针对离散点型态的数据做积分。

我们看一简单积分式以下为MATLAB 的程式>> a=0; b=0.5;>> kq=quad('sqrt',a,b)kq =0.2357>> kq8=quad8('sqrt',a,b)kq8 = 0.2357⎰--203521dx x xclearfun=inline('1./(x.^3-2*x-5)') ezplot(fun,[0,2])[q,n]=quad(fun,0,2) % [q,n] = quad(fun,a,b,⋯) %同时返回%函数计算的次数n q =-0.4605 n = 533.积分与三重积分⎰⎰+πππ2)]cos()sin([dxdyy x x yfun=inline('y*sin(x)+x*cos(y)') Q=dblquad(fun,pi,2*pi,0,pi) Q = -9.8698[x,y]=meshgrid(pi:.1:2*pi,0:.1:pi); z=fun(x,y); mesh(x,y,z)Matlab数值微分若有一函数f(x) 在x=a 的微分可表示为上述微分项在几何上的意义为在x=a 点的切线斜率. 下面介绍的差分表示式,数值差分即是用来求数值微分的方法。

差分表示法我们知道一微分项的计算,可以在二相邻点x+h 和x 间函数取下列极限求得若将原连续的空间以多个离散点取代。

则上述的极限以离散点的方式计算,即是以下的差分式(difference equation)上式被称为前向差分而高阶微分项可以利用低阶微分项来计算,举例来说一个二阶微分式可以表示为上述提及的后向差分式,在MA TLAB 有对应的diff 函数来计算二相邻点的差值,它的语法为diff(x),其中x代表一组离散点。

假设有x, y(x)的数据为x=[1 3 5 7 9], y=[1 4 9 16 25]则diff(x)=[2 2 2 2], diff(y)=[3 5 7 9],注意二者皆以后向差分计算且数据点只剩4 个而不是5个。

而dy/dx 的数值微分则为dy/dx=diff(y)./diff(x)。

因此要计算下列多项式在[-4, 5] 区间的微分>> x=linspace(-4,5); % 产生100个x的离散点>> p=[1 -3 -11 27 10 -24]; %被积函数各项的系数>> f=polyval(p,x);>> plot(x,f) % 将多项式函数绘图>> title('Fifth-deg. equation')>> dfb=diff(f)./diff(x); % 注意要分别计算diff(f)和diff(x) >> xd=x(2:length(x)); % 注意只有99个df值,而且是对应x2,x3,...,x100的点>> plot(xd,dfb ) % 将多项式的微分项绘图>> title('Derivative of fifth-deg. equation')>> num=f(3:length(f))-f(1:length(f)-2); % 注意中央差分是f(k+1)-f(k-1)>> deno=x(3:length(f))-x(1:length(f)-2); % 注意中央差分是x(k+1)-x(k-1)>> df_c=num./deno;>> xd=x(2:length(x)-1); % xd的点数只有98个>> plot(xd,df_c)>> title('Derivative of fifth-deg. polynomial')二、线性方程与非线性方程的求解1.线性方程组求解在MATLAB中,线性方程的求解分为两种:一是直接解法,就是在没有舍入误差的情况下,通过有限的矩阵的初等运算来求的方程组的解;二是符号解法。

相关主题