




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、“数值计算方法”上机实验指导书实验一 误差分析实验1.1(病态问题)实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。问题提出:考虑一个高次的代数多项式显然该多项式的全部根为1,2,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动其中是一个非常小的数。这相当
2、于是对(1.1)中的系数作一个小的扰动。我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。实验内容:为了实现方便,我们先介绍两个MATLAB函数:“roots”和“poly”。其中若变量a存储n+1维的向量,则该函数的输出u为一个n维的向量。设a的元素依次为,则输出u的各分量是多项式方程的全部根;而函数 的输出b是一个n+1维向量,它是以n维向量v的各分量为根的多项式的系数。可见“roots”和“poly”是两个互逆的运算函数。上述简单的MATLAB程序便得到(1.2)的全部根,程序中的“ess”即是(1.2)中的。实验要求:(1) 选择充分小的ess,反复
3、进行上述实验,记录结果的变化并分析它们。如果扰动项的系数很小,我们自然感觉(1.1)和(1.2)的解应当相差很小。计算中你有什么出乎意料的发现?表明有些解关于如此的扰动敏感性如何?(2) 将方程(1.2)中的扰动项改成或其它形式,实验中又有怎样的现象出现?(3) (选作部分)请从理论上分析产生这一问题的根源。注意我们可以将方程(1.2)写成展开的形式, 同时将方程的解x看成是系数的函数,考察方程的某个解关于的扰动是否敏感,与研究它关于的导数的大小有何关系?为什么?你发现了什么现象,哪些根关于的变化更敏感?思考题一:(上述实验的改进)在上述实验中我们会发现用roots函数求解多项式方程的精度不高
4、,为此你可以考虑用符号函数solve来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考MATLAB的帮助。思考题二:(二进制产生的误差)用MATLAB计算。结果居然有误差!因为从十进制数角度分析,这一计算应该是准确的。实验反映了计算机内部的二进制本质。思考题三:(一个简单公式中产生巨大舍入误差的例子)可以用下列式子计算自然对数的底数 这个极限表明随着n的增加,计算e值的精度是不确定的。现编程计算与exp(1)值的差。n大到什么程度的时候误差最大?你能解释其中的原因吗?相关MATLAB函数提示:poly(a) 求给定的根向量a生成其对应的多项式系
5、数(降序)向量roots(p) 求解以向量p为系数的多项式(降序)的所有根poly2sym(p) 将多项式向量p表示成为符号多项式(降序)sym(arg) 将数字、字符串或表达式arg转换为符号对象syms arg1 arg2 argk 将字符arg1,arg2,argk定义为基本符号对象solve(eq1) 求符号多项式方程eq1的符号解实验二 插值法实验2.1(多项式插值的振荡现象)问题提出:考虑一个固定的区间上用插值逼近一个函数。显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。我们自然关心插值多项式的次数增加时,是否也更加靠近被逼近的函数。龙格(Runge)给出一个例子是极著名
6、并富有启发性的。设区间-1,1上函数 实验内容:考虑区间-1,1的一个等距划分,分点为 则拉格朗日插值多项式为 其中的是n次拉格朗日插值基函数。实验要求:(1) 选择不断增大的分点数目n=2,3.,画出原函数f(x)及插值多项式函数在-1,1上的图像,比较并分析实验结果。(2)选择其他的函数,例如定义在区间-5,5上的函数重复上述的实验看其结果如何。(3)区间a,b上切比雪夫点的定义为 以为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析原因。实验2.2(样条插值的收敛性)问题提出:多项式插值是不收敛的,即插值的节点多,效果不一定就好。对样条函数插值又如何呢?理论上证明样条插值的
7、收敛性是比较困难的,但通过本实验可以验证这一理论结果。实验内容:请按一定的规则分别选择等距或者非等距的插值节点,并不断增加插值节点的个数。考虑实验2.1中的函数或选择其他你有兴趣的函数。实验要求:(1)随节点个数增加,比较被逼近函数和样条插值函数误差的变化情况。分析所得结果并与拉格朗日多项式插值比较(可以用MATLAB的函数“spline”作此函数的三次样条插值,取n=10、20,分别画出插值函数及原函数的图形)。(2)样条插值的思想是早产生于工业部门。作为工业应用的例子考虑如下问题:某汽车制造商用三次样条插值设计车门的曲线,其中一段的数据如下:xk012345678910yk0.00.791
8、.532.192.713.033.272.893.063.193.29yk0.80.2要求:i.自己编程计算(用三弯矩、三转角方程均可) ii.主函数myspline(x,y,边界类型,边界值,xi ) 其中:x 节点 y 节点上的函数值 xi 未知节点 返回:S(xi) iii.三对角方程组用追赶法求解(书P160)。实验2.3:(一维插值的应用画图)画你自己的手的形状,在MATLAB中输入figure(position,get(0,screensize)axes(position,0 0 1 1)x,y=ginput;将你的手掌张开放在计算机屏幕上,然后使用计算机鼠标选取一系列点勾勒出手的
9、轮廓,按回车键结束ginput过程,这样就获得了一系列你的手掌外形数据点。也可以这样获得数据点,先把手放在一张白纸上,并用笔画出它的轮廓线,然后将纸贴在计算机屏幕上,透过纸能看到平面上的鼠标,并通过ginput记录下轮廓上的点。将和坐标值看作是两个独立变量的函数,独立变量的取值为从1到记录的点的数目。利用MATLAB的插值函数进行插值,并画出你的手掌外形轮廓。思考题:(二维插值)1. 在一丘陵地带测量高程,x和y方向每隔100米测一个点,得高程数据如下。试用MATLAB的二维插值函数“interp2”进行插值,并由此找出最高点和该点的高程。yx1002003004001006366976244
10、782006987126304783006806745984124006626265523342. 画出山区地貌图。利用MATLAB的peaks函数生成某山区的一些地点及其高度三维数据(单位:m)。命令格式:x,y,z=peaks(n),生成的n阶矩阵x,y,z为测量的山区地点三维数据(n=30)。根据peaks函数生成的数据,利用Matlab二维插值画出该山区的地貌图和等值线图(提示函数:interp2、meshgrid、plot3等)。相关MATLAB函数提示:plot(x,y) 作出以数据(x(i),y(i)为节点的折线图,其中x,y为同长度的向量subplot(m,n,k) 将图形窗口
11、分为m*n个子图,并指向第k幅图yi=interp1(x,y,xi) 根据数据(x,y)给出在xi的分段线性插值结果yipp=spline(x,y) 返回样条插值的分段多项式(pp)形式结构pp=csape(x,y,边界类型,边界值) 生成各种边界条件的三次样条插值yi=ppval(pp,xi) pp样条在xi的函数值ZI=interp2(x,y,z,xi,yi) x,xi为行向量,y,yi为列向量,z为矩阵的双线性二维插值ZI=interp2(,spline) 使用二元三次样条插值ZI=griddata(x,y,z,xi,yi) x,y,z均为向量(不必单调)表示数据,xi,yi为网格向量的
12、三角形线性插值(不规则数据的二维插值)实验三 函数逼近与曲线拟合实验3.1(曲线逼近方法的比较)问题提出:曲线的拟合和插值,是逼近函数的基本方法,每种方法具有各自的特点和特定的适用范围,实际工作中合理选择方法是重要的。实验内容:考虑实验2.1中的著名问题。下面的MATLAB程序给出了该函数的二次和三次拟合多项式。x=-1:0.2:1;y=1/(1+25*x.*x);xx=-1:0.02:1;p2=polyfit(x,y,2);yy=polyval(p2,xx);plot(x,y,o,xx,yy);xlabel(x);ylabel(y);hold on;p3=polyfit(x,y,3);yy=
13、polyval(p3,xx);plot(x,y,o,xx,yy);hold off;适当修改上述MATLAB程序,也可以拟合其他你有兴趣的函数。实验要求:(1)将拟合的结果与拉格朗日插值及样条插值的结果比较。(2)归纳总结数值实验结果,试定性地说明函数逼近各种方法的适用范围,及实际应用中选择方法应注意的问题。实验3.2:(最小二乘拟合的经验公式和模型)1.(已知经验公式):某类疾病发病率为和年龄段(每五年为一段,例如05岁为第一段,610岁为第二段)之间有形如的经验关系,观测得到的数据表如下1234567890.8982.383.071.842.021.942.222.774.02101112
14、131415161718194.765.466.5310.916.522.535.750.661.681.8实验要求:(1)用最小二乘法确定模型中的参数和(提示函数:lsqcurvefit,lsqnonlin)。(2)利用MATLAB画出离散数据及拟合函数图形。(3)利用MATLAB画出离散点处的误差图,并计算相应的均方误差。2(最小二乘拟合模型未知)某年美国轿车价格的调查资料如表,其中表示轿车的使用年数,表示相应的平均价格,实验要求:试分析用什么形式的曲线来拟合表中的数据,并预测使用4.5年后轿车的平均价格大致为多少?1 2 3 4 5 6 7 8 9 102615 1943 1494 10
15、87 765 538 484 290 226 204实验3.3(研究最佳平方逼近多项式的收敛性质)实验内容和要求:取函数,在-1,1上以勒让德多项式为基函数,对于构造最佳平方逼近多项式,令,将的曲线画在一个图上。令,画出的曲线。做出之间的最小二乘曲线,能否提出关于收敛性的猜测。思考题一:(病态)考虑将0,130等分节点,用多项式生成数据,再用polyfit求其3次、5次、10次、15次拟合多项式,并分析误差产生的原因。思考题二:调研Matlab拟合工具箱的使用。相关MATLAB函数提示:p=polyfit(x,y,k) 用k次多项式拟合向量数据(x,y),返回多项式的降幂系数,当k=n-1时,
16、实现多项式插值,这里n是向量维数实验四 数值积分与数值微分实验4.1 (高斯数值积分方法用于积分方程求解)问题提出:线性的积分方程的数值求解,可以被转化为线性代数方程组的求解问题。而线性代数方程组所含未知数的个数,与用来离散积分的数值方法的节点个数相同。在节点数相同的前提下,高斯数值积分方法有较高的代数精度,用它通常会得到较好的结果。实验内容:求解第二类Fredholm积分方程首先将积分区间a,b等分成n份,在每个子区间上离散方程中的积分就得到线性代数方程组。实验要求:分别使用如下方法,离散积分方程中的积分1.复化梯形方法;2.复化辛甫森方法;3.复化高斯方法。求解如下的积分方程。1),方程的
17、准确解为;2),方程的准确解为;比较各算法的计算量和误差以分析它们的优劣。实验4.2(高维积分数值计算的蒙特卡罗方法)问题提出:高维空间中的积分,如果维数不很高且积分区域是规则的或者能等价地写成多重积分的形式,可以用一元函数积分的数值方法来计算高维空间的积分。蒙特卡罗方法对计算复杂区域甚至不连通的区域上的积分并没有特殊的困难。实验内容:对于一般的区域,计算其测度(只要理解为平面上的面积或空间中的体积)的一般方法是:先找一个规则的区域A包含,且A的测度是已知的。生成区域A中m个均匀分布的随机点,如果其中有n个落在区域中,则区域的测度m()为n/m。函数f(x)在区域上的积分可以近似为:区域的测度
18、与函数f(x)在中n个随机点上平均值的乘积,即实验要求:假设冰琪淋的下部为一锥体而上面为一半球,考虑冰琪淋体积问题:计算锥面上方和球面内部区域的体积。如果使用球面坐标,该区域可以表示为如下的积分:用蒙特卡罗方法可以计算该积分。另一方面,显然这样的冰琪淋可以装在如下立方体的盒子里而该立方体的体积为8。只要生成这个盒子里均匀分布的随机点,落入冰琪淋锥点的个数与总点数之比再乘以8就是冰琪淋锥的体积。比较两种方法所得到的结果。类似的办法可以计算复杂区域的测度(面积或体积)。试求由下列关系所界定区域的测度:相关MATLAB函数提示:diff(x) 如果x是向量,返回向量x的差分;如果x是矩阵,则按各列作
19、差分diff(x,k) k阶差分q=polyder(p) 求得由向量p表示的多项式导函数的向量表示qFx=gradient(F,x) 返回向量F表示的一元函数沿x方向的导函数F(x),其中x是与F同维数的向量z=trapz(x,y) x表示积分区间的离散化向量;y是与x同维数的向量,表示被积函数;z返回积分的近似值z=guad(fun,a,b,tol) 自适应步长Simpson积分法求得Fun在区间a,b上的定积分,Fun为M文件函数句柄,tol为积分精度z=dblquad(fun,a,b,c,d,tol,method) 求得二元函数Fun(x,y)的重积分z=triplequad(fun,a
20、,b,c,d,e,f,tol,method) 求得三元函数Fun(x,y,z)的重积分实验五 解线性方程组的直接方法实验5.1 (主元的选取与算法的稳定性)问题提出:Gauss消去法是我们在线性代数中已经熟悉的。但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss消去法作为数值算法的稳定性呢?Gauss消去法从理论算法到数值算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。实验内容:考虑线性方程组 编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss消去过程。实验要求:(1)取矩阵,则方程有解。取n=10计算矩
21、阵的条件数。让程序自动选取主元(顺序消元),结果如何?(2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。重复上述实验,观察记录并分析实验结果。实验5.2(线性代数方程组的性态与条件数的估计)问题提出:理论上,线性代数方程组的摄动满足 矩阵的条件数确
22、实是对矩阵病态性的刻画,但在实际应用中直接计算它显然不现实,因为计算通常要比求解方程还困难。实验内容:MATLAB中提供有函数“condest”可以用来估计矩阵的条件数,它给出的是按1-范数的条件数。首先构造非奇异矩阵A和右端,使得方程是可以精确求解的。再人为地引进系数矩阵和右端的摄动,使得充分小。实验要求:(1)假设方程Ax=b的解为x,求解方程,以1-范数,给出的计算结果。(2)选择一系列维数递增的矩阵(可以是随机生成的),比较函数“condest”所需机器时间的差别.考虑若干逆是已知的矩阵,借助函数“eig”很容易给出cond2(A)的数值。将它与函数“cond(A,2)”所得到的结果进
23、行比较。(3)利用“condest”给出矩阵A条件数的估计,针对(1)中的结果给出的理论估计,并将它与(1)给出的计算结果进行比较,分析所得结果。注意,如果给出了cond(A)和的估计,马上就可以给出的估计。(4)估计著名的Hilbert矩阵的条件数。思考题一:(Vadermonde矩阵)设 ,其中,(1)对n=2,5,8,计算A的条件数;随n增大,矩阵性态如何变化?(2)对n=5,解方程组Ax=b;设A的最后一个元素有扰动10-4,再求解Ax=b(3)计算(2)扰动相对误差与解的相对偏差,分析它们与条件数的关系。(4)你能由此解释为什么不用插值函数存在定理直接求插值函数而要用拉格朗日或牛顿插
24、值法的原因吗?相关MATLAB函数提示:zeros(m,n) 生成m行,n列的零矩阵ones(m,n) 生成m行,n列的元素全为1的矩阵eye(n) 生成n阶单位矩阵rand(m,n) 生成m行,n列(0,1)上均匀分布的随机矩阵diag(x) 返回由向量x的元素构成的对角矩阵tril(A) 提取矩阵A的下三角部分生成下三角矩阵triu(A) 提取矩阵A的上三角部分生成上三角矩阵rank(A) 返回矩阵A的秩det(A) 返回方阵A的行列式inv(A) 返回可逆方阵A的逆矩阵V,D=eig(A) 返回方阵A的特征值和特征向量norm(A,p) 矩阵或向量的p范数cond(A,p) 矩阵的条件数
25、L,U,P=lu(A) 选列主元LU分解R=chol(X) 平方根分解Hi=hilb(n) 生成n阶Hilbert矩阵实验六 解线性方程组的迭代法实验6.1(病态的线性方程组的求解)问题提出:理论的分析表明,求解病态的线性方程组是困难的。实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b的求解,其中系数矩阵H为Hilbert矩阵, 这是一个著名的病态问题。通过首先给定解(例如取为各个分量均为1)再计算出右端b的办法给出确定的问题。实验要求:(1)选择问题的维数为6,分别用Gauss消去法、列主元Gauss消去法、J迭代法、GS迭代法和SOR迭代法求解方程组,其各自的结果如何?将
26、计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数(至少到100),仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法实验6.2 书上P211计算实习题2,其中N=100,第二小问改为用Jacobi迭代、G-S迭代、红黑排序的G-S迭代求解,并比较他们之间的收敛速度;进一步,用BSOR迭代求解,试找出最优松弛因子。实验七 非线性方程求根实验7.1(迭代法、初始值与收敛性)实验目的:初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨迭代法及初始值与迭代收敛性的关系。问题提出:迭代法是求解非线性方程的基本思想方法,与线性方程的情况一样,其构造方
27、法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。实验内容:考虑一个简单的代数方程 针对上述方程,可以构造多种迭代法,如 在实轴上取初始值x0,请分别用迭代(7.1)-(7.3)作实验,记录各算法的迭代过程。实验要求:(1)取定某个初始值,分别计算(7.1)-(7.3)迭代结果,它们的收敛性如何?重复选取不同的初始值,反复实验。请自选设计一种比较形象的记录方式(如利用MATLAB的图形功能),分析三种迭代法的收敛性与初值选取的关系。(2)对三个迭代法中的某个,取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异?(3)线性方程组迭代法的收敛性是不依赖初始值选取的。
28、比较线性与非线性问题迭代的差异,有何结论和问题。相关MATLAB函数提示:x=fzero(fun,x0) 返回一元函数fun的一个零点,其中fun为函数句柄,x0为标量时,返回在x0附近的零点;x0为向量a,b时,返回函数在a,b中的零点x,f,h=fsolve(fun,x0) 返回一元或多元函数x0附近fun的一个零点,其中fun为函数句柄,x0为迭代初值;f返回fun在x的函数值,应该接近0; h返回值如果大于0,说明计算结果可靠,否则不可靠实验八 常微分方程初值问题数值解法实验8.1(Lorenz问题与混沌)问题提出:考虑著名的Lorenz方程 其中s,r,b为变化区域有一定限制的实参数
29、。该方程形式简单,表面上看并无惊人之处,但由该方程提示出的许多现象,促使“混沌”成为数学研究的崭新领域,在实际应用中也产生了巨大的影响。实验内容:先取定初值y0=(0,0,0),参数s=10,r=28,b=8/3,用MATLAB的数值求常微分方程函数ods45编程对(8.1)进行求解实验要求:(1)对目前取定的参数值s,r和b,选取不同的初值y0进行运算,观察计算的结果有什么特点?解的曲线是否有界?解的曲线是不是周期的或趋于某个固定点?(2)在问题允许的范围内适当改变其中的参数值s,r,b,再选取不同的初始值y0进行运算,观察并记录计算的结果有什么特点?是否发现什么不同的现象?思考题一:考虑如
30、下常微分方程 先固定其中参数:r=0.9,b=3,a=1,k0=0,m=1,初始值为原点,t的范围为0-500分别取不同的k1,如1,1.5,2,2.5,3,3.5等,绘图观察相位图(x,x)的变化情况,能找到其中的规律吗?试试改变其它参数呢?相关MATLAB函数提示:t,y=ode45(odefun,tspan,y0) odefun表示f(t,y)的函数句柄,t是标量,y是标量或向量;tspan是二维向量t0,tf,表示自变量初值t0和终值tf;y0表示初值向量,若无输出参数,则作出图形附录MATLAB简介这里介绍MATLAB一些入门知识,包括MATLAB桌面和窗口,MATLAB命令格式、数
31、据格式、数据文件和变量管理,MATLAB的数组和矩阵运算,MATLAB的字符串、元胞和结构等数据类型,MATLAB的程序设计方法,MATLAB作图方法在线帮助的使用和程序文件和目录的管理等。表一 MATLAB的基本命令主题词含义主题词含义format设置数据显示格式feval函数求值who显示变量名input提示输入whos显示变量信息disp输出clear清除内存变量tic启动秒表save保存工作变量到文件toc时间读数(秒)load从文件装载变量help帮助linspace区间等分lookfor查找length获取数组长度type列程序清单size矩阵大小which查找文件目录max最大值
32、double双精度min最小值str2num字符串转化为数值sum求和num2str数值转化为字符串find条件检索一、MATLAB桌面启动MATLAB后,就进入MATLAB的桌面,图1为MATLAB6.1的默认(Default)桌面。第一行为菜单栏,第二行为工具栏,下面是三个最常用的窗口。右边最大的是命令窗口(Command Window),左上方前台为发行说明书窗口(Launch pad),后台为工作空间(Workspace),左下方为命令历史(Command History)后台为当前目录(Current Directory)。1.窗口(1)命令窗口该窗口是进行MATLAB操作最主要的窗
33、口。窗口中“”为命令输入提示符,其后输入运算命令,按回车键就可执行运算,并显示运算结果.。图1(2)发行说明书窗口发行说明书窗口是MATLAB所特有的,用来说明用户所拥有的Mathworks公司产品的工具包、演示以及帮助信息。(3)工作空间在默认桌面,位于左上方窗口前台,列出内存中MATLAB工作空间的所有变量的变量名、尺寸、字节数。用鼠标选中变量,击右键可以打开、保存、删除、绘图等操作。(4)当前目录在默认桌面,位于左下方窗口后台,用鼠标点击可以切换到前台。该窗口列出当前目录的程序文件(.m)和数据文件(.mat)等。用鼠标选中文件,击右键可以进行打开、运行、删除等操作。(5)命令历史(Co
34、mmand History)该窗口列出在命令窗口执行过的MATLAB命令行的历史记录。用鼠标选中命令行,击右键可以进行复制、执行(Evaluate Selection)、删除等操作。除上述窗口外,MATLAB常用窗口还有编程器窗口、图形窗口等。二、数据和变量1.表达式在命令窗口作一些简单的计算,就如同使用一个功能强大的计算器,使用变量无须预先定义类型。例如,设球半径为r=2,求球的体积。r=2 %表达式将2赋予变量rr= %系统返回r的值2 v=4/3*pi*r3 %pi为内置常量,乘方用表示v= 33.5103几个表达式可以写在一行,用分号(;)或逗号(,)分割,用分号(;)使该表达式运算结
35、果不显示,而逗号(,)则显示结果。也可以将一个长表达式分在几行上写,用三点()续行。若需要修改已执行过的命令行,可以在命令历史中找到该命令行复制,再粘贴至命令窗口修改。也可以直接使用键盘调出已执行过的命令行修改。2.数据显示格式MATLAB默认的数据显示格式为短格式(short):当结果为整数,就作为整数显示;当结果是实数,以小数点后四位的长度显示。若结果的有效数字超出一定范围,以科学计数法显示(如3.2000e-006表示)。数据显示格式可使用命令Format改变。例如: format long;v %长格式,16位v = 33.112 format short;v %短格式v = 33.5
36、103 format rational;v %有理格式,近似分数v = 6501/194 3.复数MATLAB中复数可以如同实数一样,直接输入和计算。例如: a=1+2i;b=5-4*i;c=a/bc = -0.0732 + 0.3415i4.预定义变量MATLAB有一些预定义变量(表1),启动时就已赋值,可以直接使用,如前我们使用的圆周率pi和虚数单位i.表1 常用预定义变量变量名说 明i或j虚数单位pi圆周率3.14159eps浮点数识别精度2(-52)=realmin最小正实数realmax最大正实数inf无穷大NaN没有意义的数预定义变量在工作空间观察不到。如果预定义变量被用户重新赋值
37、,则原来的功能暂不能使用。当这些用户变量被清除(clear)或MATLAB重新启动后,这些功能得以恢复。5.用户变量MATLAB变量名总以字母开头,以字母、数字或下划线组成,区分大小写,有效字符长度为63个。如A,a,a1,a_b都是合法的,且a与A表示不同变量。在Command Window中使用的变量一旦被赋值,就会携带这个值存在于工作空间,直到被清除或被赋予新的值。ans是系统一个特别的变量名。若一个表达式运算结果没有赋予任何变量,系统自动用ans存放答案。例如: A=5+4i;b=5-4*i;B=1;A*b %没有定义A*b的输出变量ans = 41%ans来接受计算结果,注意这是大写
38、A与小写b的乘积,尽管我们可以使用工作空间来查询和清除变量,但使用下列命令方式更快捷: whos%查询Workspace中的变量列表 Name Size Bytes Class A 1x1 16 double array (complex) B 1x1 8 double array a 1x1 16 double array (complex) ans 1x1 8 double array b 1x1 16 double array (complex) c 1x1 16 double array (complex)Grand total is 6 elements using 80 bytes
39、 A %查询变量A的值A = 5.0000 + 4.0000i clear A%清除变量A A%再查询A的值,已经不存在了? Undefined function or variable A. clear%清除Workspace中所有变量 whos%Workspace中已没有任何变量了 三、数组和矩阵运算MATLAB基本数据单元是无需指定维数的数组。数组运算是MATLAB最鲜明的特点,一方面可以使得计算程序简明易读,另一方面可以提高计算速度。1.数组的输入最常用的数组是双精度数值数组(double array)。一维数组相当于向量,二维数组相当于矩阵,一维数组可以视为二维数组的特例。二维数组的
40、第一维称为“行”,第二维称为“列”。MATLAB数组无需预先定义维数。直接输入数组的元素,用中括号()表示一个数组,同行元素间用空格或逗号分隔,不同行间用分号或回车分隔,例如: clear;a=1,2,3;4,5,6;7,8,9a = 1 2 3 4 5 6 7 8 9或 a=1 2 3%这种方式特别适用于大型矩阵4 5 67 8 9a = 1 2 3 4 5 6 7 8 9对于等差数列构造的一维数组,可用冒号运算生成,也可用函数linspace生成。 b=0:3:10%初值:增量:终值b = 0 3 6 9 b=0:10%增量为1可省略b = 0 1 2 3 4 5 6 7 8 9 10 b
41、=10:-3:0%递减b = 10 7 4 1 b=linspace(0,10,4)%将区间0,10等分为4-1=3份b = 0 3.3333 6.6667 10.0000 length(b)%查询b的长度ans = 4 b(3)%查询b的第三个元素ans = 6.6667 b(1,end)%查询b的首和尾元素ans = 0 10二维数组元素双下标编址按通常方式,单下标编址按列排序。 size(a)%查询数组a的尺寸ans = 3 3 a(3,2),a(6)ans = 8ans = 8 c=a(1 3,2 3)%提取a的第一、第三行和第二、第三列(分块矩阵)c = 2 3 8 9 d=a(2,
42、:)%提取a的第二行d = 4 5 6 a(:)%将a所有元素按单下标顺序排为列向量ans = 1 4 7 2 5 8 3 6 9一些特殊的二维数组可以用函数产生,例如: a=zeros(2,4)%生成2行4列零矩阵a = 0 0 0 0 0 0 0 0 b=ones(1,4)%生成1行4列1矩阵b = 1 1 1 1 c=a;b%拼接c = 0 0 0 0 0 0 0 0 1 1 1 1 c(2,1)=100%修改部分元素c = 0 0 0 0 100 0 0 0 1 1 1 1 reshape(c,2,6)%按2行6列重排矩阵元素ans = 0 1 0 0 1 0 100 0 1 0 0
43、1注意:数组下标对应矩阵的行和列,编址一律从1开始,不能用0.矩阵输入也可用“load”命令从外部数据文件导入2.数组运算数组运算是指数组对应元素之间的运算,也称点运算。矩阵的乘法、乘方和除法有特殊的数学含义,并不是数组对应元素的运算,所数组乘法、乘方和除法的运算符前特别加了一个点。特别要区分数组运算在乘法、乘方和除法上的意义和表示上与矩阵运算的不同。表2 数组运算符运算符号说明数组加与减A+B与A-B对应元素之间加减数乘数组k*A或A*kk乘A的每个元素数与数组加减k+A或k-Ak加(减)A的每个元素数组乘数组A.*B点运算只有点乘、点乘方、点除三个,表示对应元素之间的运算;(.*)是一个整
44、体,点(.)不能漏掉,(.)和(*)之间也不能有空格数组乘方A.k,k.A数除以数组k./A数组除法左除A.B,右除B./A clear;A=1 -1;0 2;B=0 1;1 -1; A.*B%注意不是A*Bans = 0 -1 0 -2 A.B,A./BWarning: Divide by zero.ans = 0 -1.0000 Inf -0.5000Warning: Divide by zero.ans = Inf -1 0 -2 A.2ans = 1 1 0 4 1./AWarning: Divide by zero.ans = 1.0000 -1.0000 Inf 0.50003.矩
45、阵运算矩阵是一个二维数组,所以矩阵的加、减、数乘等运算与数组运算是一致的。但是有两点需要注意:(1)对于乘法、乘方和除法等三种运算,矩阵运算与数组运算的运算符及含义不同:矩阵运算按线性变换定义,使用通常符号;数组运算按对应元素运算定义,使用点运算符;(2)数与矩阵加减、矩阵除法在数学上是没有意义的,在MATLAB中为简便起见,定义了这两类运算,其含义见表3.表3 矩阵运算符运算符号说明转置A加与减A+B与A-B同数组运算数乘矩阵k*A或A*k同数组运算矩阵乘法A*B矩阵乘方Ak数与矩阵加减k+A与k-Ak+A等价于k*ones(size(A)+A矩阵除法左除AB,右除B/A它们分别为矩阵方程A
46、X=B和XA=B的解 A=1 2;3 4;B=4 3;2 1; 100+Aans = 101 102 103 104 A*B,A.*B%注意矩阵运算和数组运算的区别ans = 8 5 20 13ans = 4 6 6 4 AB,B/A,A.B,B./A%注意矩阵运算和数组运算的区别ans = -6.0000 -5.0000 5.0000 4.0000ans = -3.5000 2.5000 -2.5000 1.5000ans = 4.0000 1.5000 0.6667 0.2500ans = 4.0000 1.5000 0.6667 0.25004.数学函数数组的数学函数也是按每个元素的运算
47、,使用通常的函数符号,常用数学函数见表4表4 数学函数函数意义函数意义sin正弦fix向0取整cos余弦mod模余tan正切rem除法余数cot余切abs绝对值(模)asin反正弦exp指数函数acos反余弦log自然对数sqrt开方log10以10为底的对数 A=4 -1;3 2; B=exp(A)B = 54.5982 0.3679 20.0855 7.3891 C=fix(B)C = 54 0 20 7 D=sin(C)D = -0.5588 0 0.9129 0.6570 E=log(D)Warning: Log of zero.E = -0.5820 + 3.1416i -Inf -
48、0.0911 -0.4201 5.关系与逻辑运算MATLAB的关系运算和逻辑运算符都是对于元素的操作,其结果是特殊的逻辑数组(logical array)表5,“真”用1表示,“假”用0表示,而逻辑运算中,所有非零元素作为1(真)处理。表5 关系运算和逻辑运算运算符含义运算符含义小于&与大于非=大于等于all= =等于any=不等于 A=-2:4,B=4:-1:-2A = -2 -1 0 1 2 3 4B = 4 3 2 1 0 -1 -2 ABans = 0 0 0 0 1 1 1 A=Bans = 0 0 0 1 0 0 0 A&B %逻辑运算中,所有非零元素作为1(真)处理ans = 1 1 0 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国餐饮连锁行业运营市场深度调查及投资策略研究报告
- 2025-2030年中国阿莫西林行业竞争现状及投资战略研究报告
- 2025-2030年中国镀层钢板市场运营态势与发展风险分析报告
- 2025-2030年中国酒石酸美托洛尔缓释片行业发展趋势及投资战略研究报告
- 2025-2030年中国运动服饰行业运行现状及发展前景趋势分析报告
- 2025-2030年中国西厨设备行业市场发展现状及前景趋势分析报告
- 2025-2030年中国营养保健食品市场发展状况及投资战略研究报告
- 病人转运合同范本
- 2025河北省安全员B证(项目经理)考试题库
- 2025年广东省安全员知识题库及答案
- 2025年天津三源电力集团限公司社会招聘33人高频重点模拟试卷提升(共500题附带答案详解)
- 西安2025年陕西西安音乐学院专任教师招聘20人笔试历年参考题库附带答案详解
- 国家安全与生态安全
- 课题申报参考:养老金融在三支柱养老金体系中的作用机制与路径仿真研究
- 2024-2025学年第二学期学校团委工作计划(附2月-6月安排表)
- 培养自律能力主题班会
- 【物理】牛顿第一定律 2024-2025学年人教版物理八年级下册
- 2025网格员考试题库及参考答案
- 2025年春新冀教版英语三年级下册课件 U1L1
- 川教版2024-2025学年六年级下册信息技术全册教案
- HYT 087-2005 近岸海洋生态健康评价指南
评论
0/150
提交评论