第四章 数值计算
- 格式:docx
- 大小:189.36 KB
- 文档页数:8
m a t l a b入门经典教程--第四章数值计算-CAL-FENGHAI.-(YICAI)-Company One1第四章数值计算4.1引言本章将花较大的篇幅讨论若干常见数值计算问题:线性分析、一元和多元函数分析、微积分、数据分析、以及常微分方程(初值和边值问题)求解等。
但与一般数值计算教科书不同,本章的讨论重点是:如何利用现有的世界顶级数值计算资源MATLAB。
至于数学描述,本章将遵循“最低限度自封闭”的原则处理,以最简明的方式阐述理论数学、数值数学和MATLAB计算指令之间的内在联系及区别。
对于那些熟悉其他高级语言(如FORTRAN,Pascal,C++)的读者来说,通过本章,MATLAB卓越的数组处理能力、浩瀚而灵活的M函数指令、丰富而友善的图形显示指令将使他们体验到解题视野的豁然开朗,感受到摆脱烦琐编程后的眉眼舒展。
对于那些经过大学基本数学教程的读者来说,通过本章,MATLAB精良完善的计算指令,自然易读的程序将使他们感悟“教程”数学的基础地位和局限性,看到从“理想化”简单算例通向科学研究和工程设计实际问题的一条途径。
对于那些熟悉MATLAB基本指令的读者来说,通过本章,围绕基本数值问题展开的内容将使他们体会到各别指令的运用场合和内在关系,获得综合运用不同指令解决具体问题的思路和借鉴。
由于MATLAB的基本运算单元是数组,所以本章内容将从矩阵分析、线性代数的数值计算开始。
然后再介绍函数零点、极值的求取,数值微积分,数理统计和分析,拟合和插值,Fourier分析,和一般常微分方程初值、边值问题。
本章的最后讨论稀疏矩阵的处理,因为这只有在大型问题中,才须特别处理。
从总体上讲,本章各节之间没有依从关系,即读者没有必要从头到尾系统阅读本章内容。
读者完全可以根据需要阅读有关节次。
除特别说明外,每节中的例题指令是独立完整的,因此读者可以很容易地在自己机器上实践。
MATLAB从版升级到版后,本章内容的变化如下:MATLAB从版起,其矩阵和特征值计算指令不再以LINPACK和EISPACK库为基础,而建筑在计算速度更快、运行更可靠的LAPACK和ARPACK程序库的新基础上。
第四章MATLAB 的数值计算功能Chapter 4: Numerical computation of MATLAB数值计算是MATLAB最基本、最重要的功能,是MATLAB最具代表性的特点。
MATLAB在数值计算过程中以数组和矩阵为基础。
数组是MATLAB运算中的重要数据组织形式。
前面章节对数组、矩阵的特征及其创建与基本运算规则等相关知识已作了较详尽的介绍,本章重点介绍常用的数值计算方法。
一、多项式(Polynomial)`多项式在众多学科的计算中具有重要的作用,许多方程和定理都是多项式的形式。
MATLAB提供了标准多项式运算的函数,如多项式的求根、求值和微分,还提供了一些用于更高级运算的函数,如曲线拟合和多项式展开等。
1.多项式的表达与创建(Expression and Creating of polynomial)(1) 多项式的表达(expression of polynomial)_Matlab用行矢量表达多项式系数(Coefficient)和根,系数矢量中各元素按变量的降幂顺序排列,如多项式为:P(x)=a0x n+a1x n-1+a2x n-2…a n-1x+a n则其系数矢量(V ector of coefficient)为:P=[a0 a1… a n-1 a n]如将根矢量(V ector of root)表示为:ar=[ ar1 ar2… ar n]则根矢量与系数矢量之间关系为:(x-ar1)(x- ar2) … (x- ar n)= a0x n+a1x n-1+a2x n-2…a n-1x+a n(2)多项式的创建(polynomial creating)a,系数矢量的直接输入法利用poly2sym函数直接输入多项式的系数矢量,就可方便的建立符号形式的多项式。
例1:创建给定的多项式x3-4x2+3x+2poly2sym([1 -4 3 2])ans =x^3-4*x^2+3*x+2也可以用poly2str.求一个方阵对应的符号形式的多项式。
《MATLAB仿真与应用》
实验报告
第四章数值计算
一、实验目的
1、熟悉根据已知数据进行回归法曲线拟合
2、熟悉根据已知数据进行多项式曲线拟合
3、熟悉根据已知数据利用指定方法进行数据插值(临近插值、线性插值、立方插值、三次样条插值)
4、熟悉脚本文件和函数文件的概念,各自的特点,以及二者的区别
5、熟悉主函数和私有函数的特点
6、了解Matlab编程的特点
二、实验内容
1、多项式拟合 x已知自变量的取值 y相应的函数值 n多项式的系数
p=polyfit(x,y,n)
2、多项式计算求值函数 p=polyval(p,x2)
3、产生图例 legend(‘fitting’,’origin’)
4、多项式插值 yi=interp1(x,y,xi,method)
5、外插运算 yi=interp1(x,y,xi,method,’extrap’)
6、二维插值 y=interp2(x,y,z,xi,yi,method)
7、临近插值 ynearest=interp1(time,temp,xi,’nearest’)
8、线性插值 ylinear=interpre1(time,t emp,xi,’linear’)
9、立方插值 ycublic=interp1(time,temp,xi,’cublic’)
10、三次样条插值 yspline=interp1(time,temp,xi,’spline’)
11、延时函数 pause
12、比较 function compare_interp()
13、一个典型多元函数 peaks
14、数组A、B共同产生网格[A,B]= meshgrid(A,B)
15、将多个图画到一个平面 subplot
16、绘制矩阵的等高线 contour
三、思考练习题
1、给出两组数据x=[0 0.3 0.8 1.1 1.6 2.3]' y=[0.82 0.72 0.63 0.60 0.55 0.50]',我们可以简单地认为这组数据在一条衰减的指数函数曲线上,y=C1+C2e^-t通过曲线拟合求出这条衰减曲线的表达式,并且在图形窗口画出这条曲线,已知的点用*表示
>> x=[0 .3 .8 1.1 1.6 2.3]';y=[0.82 0.72 0.63 0.60 0.55 0.50]';
>> X=[ones(size(x)) exp(-x)];
>> c=X\y
c =
0.4760
0.3413
>> T=(0:0.1:2.5)';Y=[ones(size(T)) exp(-T)]*c;
>> plot(T,Y,'-',x,y,'*')
2、通过测量得到一组数据
t 1 2 3 4 5 6 7 8 9 10
y 4.842 4.362 3.754 3.368 3.169 3.083 3.034 3.016 3.012 3.005 分别采用y1(t)=C1+C2e^-t和y2(t)=d1+d2te^-t进行拟合,并画出拟合曲线进行对比
t=(1:1:10)';y=[4.842 4.362 3.754 3.368 3.169 3.083 3.034 3.016 3.012 3.005]'; >> X1=[ones(size(t)) exp(-t)];
>> c=X1\y
c =
3.1621
5.1961
>> X2=[ones(size(t)) t.*exp(-t)];
>> d=X2\y
d =
3.0039
5.0046
T=(1:0.1:10)';Y1=[ones(size(T)) exp(-T)]*c;plot(T,Y1,'-',t,y,'o')
T=(1:0.1:10)';Y2=[ones(size(T)) T.*exp(-T)]*d;plot(T,Y2,'-',t,y,'o')
3、从某一个过程中通过测量得到:
t 0 0.2 0.4 0.6 0.8 1.0 2.0 5.0
y 1.0 1.51 1.88 2.13 2.29 2.40 2.60 -4.00 分别采用多项式拟合和指数函数进行拟合。
>> t=[0 .2 .4 .6 .8 1.0 2.0 5.0]';y=[1.0 1.51 1.88 2.13 2.29 2.40 2.60 -4.00]'; >> x=[ones(size(t)) t t.^2];
>> a=x\y;
>> T=(0:0.1:5.0)';Y=[ones(size(T)) T T.^2]*a;
>> plot(T,Y,'-',t,y,'O')
>> x=[ones(size(t)) exp(-t) t.*exp(-t)];
>> a=x\y;
>> T=(0:0.1:5.0)';Y=[ones(size(T)) exp(-T) T.*exp(-T)]*a;
>> plot(T,Y,'-',t,y,'O')
4、对应时间矢量t,测得一组矢量y
t 0 0.3 0.8 1.1 1.6 2.3
y 0.5 0.82 1.14 1.25 1.35 1.40
采用一个带有线性参数的指数函数进行拟合,y=a0+a1e^-t+a2te^-t,利用回归方法求出拟合函数,并画出拟合曲线,已知点用圆点表示。
>> t=[0 .3 .8 1.1 1.6 2.3]';y=[0.5 0.82 1.14 1.25 1.35 1.40]';
>> x=[ones(size(t)) exp(-t) t.*exp(-t)];a=x\y
1.3974
-0.8988
0.4097
>> T=(0:0.1:2.5)';X=[ones(size(T)) exp(-T) T.*exp(-T)]*a;
>> plot(T,X,'-',t,y,'o')
5、某钢材厂的产量从1990到2010年的产量如下表所示,请利用三次样条插值的方法1999年该钢材厂的产量,并画出曲线,已知数据用‘*’表示。
>> t=1990:2:2010;y=[75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 249.633 256.344]';interp1(t,y,1999,'spline')
139.2796
>> T=(1990:0.2:2010)';Y=interp1(t,y,T,'spline');plot(t,y,'*',T,Y,'-')
四、实践中遇到的问题及解决方法
1、混淆曲线拟合编程步骤
在进行实际操作中,无法对每一条指令的作用做到特别了解,并且经过反复的操作,并询问同学,掌握了曲线拟合的指令。
2、插值各种算法不理解内涵
插值种类很多,查阅网络资料例子,并询问同学,互相讨论,最终了解各种算法的意义与实际应用方式。
3、错误使用polyval
使用时输入了过多的参数
4、polyfit
使用该函数时,误将()打成[],报错:圆括号或方括号不对称或异常
4、M函数语句与算法
由于在前几章并未过多接触M文件,对于Matlab编程本身掌握甚少。
在例子中出现的多个语句例如meshigrid、surfc、figure(2)、,其中包括数据可视化的概念。
为了快速了解并掌握,进行了借鉴网络资料的步骤,通过对一些查阅到的例子进行理解与操作,使得自己在M文件、编程内容有了些许的掌握,但是想要熟练运用,应当更广泛学习并多加练习。