第四章 MATLAB的数值计算功能
- 格式:doc
- 大小:181.00 KB
- 文档页数:33
Matlab中常用的数值计算方法数值计算是现代科学和工程领域中的一个重要问题。
Matlab是一种用于数值计算和科学计算的高级编程语言和环境,具有强大的数值计算功能。
本文将介绍Matlab中常用的数值计算方法,包括数值积分、数值解微分方程、非线性方程求解和线性方程组求解等。
一、数值积分数值积分是通过数值方法来近似计算函数的定积分。
在Matlab中,常用的数值积分函数是'quad'和'quadl'。
'quad'函数可以用于计算定积分,而'quadl'函数可以用于计算无穷积分。
下面是一个使用'quad'函数计算定积分的例子。
假设我们想计算函数f(x) = x^2在区间[0, 1]上的定积分。
我们可以使用如下的Matlab代码:```f = @(x) x^2;integral = quad(f, 0, 1);disp(integral);```运行这段代码后,我们可以得到定积分的近似值,即1/3。
二、数值解微分方程微分方程是描述自然界各种变化规律的数学方程。
在科学研究和工程应用中,常常需要求解微分方程的数值解。
在Matlab中,可以使用'ode45'函数来求解常微分方程的数值解。
'ode45'函数是采用基于Runge-Kutta方法的一种数值解法。
下面是一个使用'ode45'函数求解常微分方程的例子。
假设我们想求解一阶常微分方程dy/dx = 2*x,初始条件为y(0) = 1。
我们可以使用如下的Matlab代码:```fun = @(x, y) 2*x;[x, y] = ode45(fun, [0, 1], 1);plot(x, y);```运行这段代码后,我们可以得到微分方程的数值解,并绘制其图像。
三、非线性方程求解非线性方程是指方程中包含非线性项的方程。
在很多实际问题中,我们需要求解非线性方程的根。
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数值计算功能下面将详细介绍MATLAB数值计算功能的一些主要方面:1. 矩阵运算和线性代数:MATLAB具有强大的矩阵操作功能,可以直接对矩阵进行加减乘除、求逆矩阵、求特征值等运算。
MATLAB中的线性方程组求解函数(如`linsolve`和`inv`)可以更轻松地解决各种线性代数问题。
2. 数值积分和微分:MATLAB提供了多种数值积分和微分函数,用于求解一元和多元函数的定积分、不定积分、数值微分和数值求导。
例如,可以使用`integral`函数计算函数的定积分,并使用`diff`函数计算函数的导数或`gradient`函数计算梯度。
3. 方程求解:MATLAB提供了一系列函数,用于解决非线性方程和代数方程组。
这些函数包括`fsolve`(用于求解非线性方程),`roots`(用于求解多项式方程的根)和`solve`(用于求解代数方程组)等。
4. 曲线拟合和数据拟合:MATLAB提供了多个函数用于曲线拟合和数据拟合,包括`polyfit`(多项式拟合),`lsqcurvefit`(非线性最小二乘曲线拟合),`interp1`(一维插值)和`griddata`(多维数据插值)等。
这些函数可以帮助用户找到数据之间的模式和关系。
5. 常微分方程(ODE)求解:MATLAB提供了用于求解常微分方程组(ODE)的函数,既可以用传统的数值方法求解,也可以用符号计算求解。
用户可以使用`ode45`、`ode23`或`ode15s`等函数来求解初值问题或边界值问题。
6. 线性最小二乘拟合:MATLAB中的`lsqnonlin`函数可以用于线性最小二乘问题的求解,包括曲线拟合、数据拟合、参数估计等。
用户可以使用该函数来找到使得拟合曲线和观测数据之间残差最小的参数。
7. 数值优化:MATLAB包含一系列优化函数,可以求解常规优化问题、无约束优化问题、约束优化问题等。
用户可以使用函数`fminsearch`、`fminunc`和`fmincon`等来找到函数的最小值或最大值。
MATLAB数值计算功能
MATLAB是一种非常强大的数值计算软件,被广泛应用于科学计算、
工程计算和数据分析等领域。
它提供了丰富的数值计算功能,包括基本的
数学运算、线性代数、数值积分、微分方程求解、优化算法等。
下面将详
细介绍一些常见的数值计算功能。
1.数学运算:
MATLAB提供了丰富的数学函数,可以进行各种基本的算术运算,如
加减乘除、幂运算、取模运算等。
同时,它还提供了一些高级的数学函数,如三角函数、指数函数、对数函数等。
通过这些函数,用户可以进行各种
复杂的数学运算。
2.线性代数:
3.数值积分:
4.微分方程求解:
5.优化算法:
MATLAB提供了各种优化算法,如线性规划、非线性规划、整数规划、二次规划等。
用户可以通过设定目标函数和约束条件,利用MATLAB的优
化函数寻找最佳的解。
这对于优化问题的求解非常有用,如工程设计、生
产调度等。
6.统计分析:
7.数据可视化:
总之,MATLAB的数值计算功能非常丰富,可以满足各种数学计算和数据分析的需求。
它不仅提供了各种基本的数学运算功能,还提供了高级的线性代数、数值积分、微分方程求解、优化算法和统计分析等功能。
同时,其强大的数据可视化功能也是很多用户选择MATLAB作为数值计算工具的重要原因之一。
MATLAB的功能及特点经过MathWorks公司的不断完善升级,MATLAB进展得越来越优秀,主要表现在:1. 数值计算功能演草纸式的数学运算和高质量、高牢靠的数值运算力量使其优于其他数值计算软件。
2. 符号计算功能在数学、应用科学和工程计算领域,经常会遇到符号计算的问题。
MATLAB通过收购MAPLE的使用权,实现了符号计算功能。
3. 数据分析和可视化功能对科学讨论和工程计算中的大量原始数据,用MATLAB分析时通常可以用图形的方式显现出来,这不仅使数据间的关系清楚明白,而且对于揭示其内在本质往往起着较大的作用。
4. 文字处理功能MATLAB Notebook为用户供应了强大的文字处理功能。
他允许用户从一个文字处理程序(Microsoft Word)访问MATLAB的数值计算和可视化结果。
MATLAB Notebook就象一个会运算的文稿,在该文件中,可以编辑文字、随时修改计算命令、随时计算并绘制图形。
这对于撰写科技报告、论文、专著的科学工与老师,以及对于演算理工科习题的广阔同学,都是特别有用的。
5. SIMULINK动态仿真功能SIMULINK是用来建模、分析和仿真各种动态系统的交互环境,供应了采纳鼠标拖放的方法建立系统框图模型的交互界面。
通过SIMULINK供应的丰富的功能块,可以快速地创建系统的模型,不需要书写一行行代码。
与其他高级程序设计语言相比较,MATLAB不但在数学语言的表达与解释方面表现出人机交互的高度全都,而且具有如下特点:1. 基于向量、数组和矩阵的高级程序设计语言。
2. 界面友好、编程效率高。
3. 高级图形和可视化数据处理力量。
4. 广泛解决各学科专业领域内简单问题的力量。
5. 拥有一个强大的仿真工具——SIMULINK。
6. 支持科学和工程计算标准的开放式、可扩充结构。
7. 跨平台兼容。
MATLAB数值计算教程第一章:MATLAB入门1.1 MATLAB简介MATLAB(Matrix Laboratory)是一款强大的数值计算软件,广泛用于工程、科学和金融领域。
它的特点是简单易用、高效快速,并且拥有丰富的工具箱和函数库。
1.2 MATLAB环境搭建要使用MATLAB进行数值计算,首先需要安装MATLAB软件,并进行必要的配置。
通过官方网站下载安装程序,根据提示进行安装即可。
安装完成后,打开MATLAB环境,即可开始使用。
1.3 MATLAB基本操作在MATLAB环境中,可以通过命令行窗口输入和执行命令,也可以使用脚本文件进行批量处理。
常用的基本操作包括变量赋值、算术运算、函数调用等。
例如,使用"="符号赋值变量,使用"+"、"-"、"*"、"/"等符号进行算术运算。
第二章:向量和矩阵操作2.1 向量操作在MATLAB中,向量是一种特殊的矩阵,可以通过一组有序的元素构成。
向量可以进行基本的算术运算,如加法、减法、乘法、除法,还可以进行向量的点积、叉积等操作。
可以使用内置函数和运算符来实现。
2.2 矩阵操作矩阵是MATLAB中最常用的数据结构之一,使用矩阵可以进行多个向量的组合和运算。
可以进行矩阵的加法、减法、乘法、除法等操作,也可以进行矩阵的转置、求逆、求特征值等操作。
MATLAB提供了大量的函数和工具箱来支持矩阵的操作。
第三章:数值计算方法3.1 数值积分数值积分是一种用数值方法计算定积分的方法。
在MATLAB 中,可以使用内置函数来进行数值积分,如trapz函数和quad函数。
也可以使用Simpson法则、复合辛普森法等方法实现数值积分。
3.2 数值微分数值微分是一种用数值方法计算导数的方法。
在MATLAB中,可以使用内置函数进行数值微分,如diff函数和gradient函数。
数据和函数的可视化【例】用图形表示离散函数1)6(--=n y 。
n=0:12; %产生一组自变量数据 y=1./abs(n-6); %计算相应点的函数值 plot(n,y,'r*','MarkerSize',20) %用红花标出数据点 grid on %画坐标方格【例】用图形表示连续调制波形)9sin()sin(t t y =。
t1=(0:11)/11*pi; % <1> y1=sin(t1).*sin(9*t1);t2=(0:100)/100*pi; % <3> y2=sin(t2).*sin(9*t2);subplot(2,2,1),plot(t1,y1,'r.'),axis([0,pi,-1,1]),title('子图 (1)') subplot(2,2,2),plot(t2,y2,'r.'),axis([0,pi,-1,1]),title('子图 (2)') subplot(2,2,3),plot(t1,y1,t1,y1,'r.') axis([0,pi,-1,1]),title('子图 (3)') subplot(2,2,4),plot(t2,y2)axis([0,pi,-1,1]),title('子图 (4)')【例】简单例题,比较方便的试验指令。
【例】用图形表示连续调制波形)9sin()sin(t t y 及其包络线。
t=(0:pi/100:pi)'; %长度为101的时间采样列向量 <1> y1=sin(t)*[1,-1]; %包络线函数值,是(101x2)的矩阵 <2> y2=sin(t).*sin(9*t); %长度为101的调制波列向量 <3> t3=pi*(0:9)/9; %<4>y3=sin(t3).*sin(9*t3);plot(t,y1,'r:',t,y2,'b',t3,y3,'bo') % <5> axis([0,pi,-1,1]) %控制轴的范围<6>【例】用复数矩阵形式画利萨如(Lissajous )图形。
第四章MATLAB 的数值计算功能Chapter 4: Numerical computation of MATLAB一、多项式(Polynomial)`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则其系数矢量(Vector of coefficient)为:P=[a0 a1… a n-1 a n]如将根矢量(Vector 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函数直接输入多项式的系数矢量,就可方便的建立符号形式的多项式。
例:创建多项式x3-4x2+3x+2poly2sym([1 -4 3 2])ans =x^3-4*x^2+3*x+2POLY Convert roots to polynomial.POLY(A), when A is an N by N matrix, is a row vector withN+1 elements which are the coefficients of the characteristicpolynomial, DET(lambda*EYE(SIZE(A)) - A) .POLY(V), when V is a vector, is a vector whose elements arethe coefficients of the polynomial whose roots are theelements of V . For vectors, ROOTS and POLY are inversefunctions of each other, up to ordering, scaling, androundoff error.b) 由根矢量创建多项式通过调用函数p=poly(ar)产生多项式的系数矢量, 再利用poly2sym函数就可方便的建立符号形式的多项式。
注:(1)根矢量元素为n ,则多项式系数矢量元素为n+1;(2)函数poly2sym(pa) 把多项式系数矢量表达成符号形式的多项式,缺省情况下自变量符号为x,可以指定自变量。
(3)使用简单绘图函数ezplot可以直接绘制符号形式多项式的曲线。
例1:由根矢量创建多项式。
将多项式(x-6)(x-3)(x-8)表示为系数形式a=[6 3 8] %根矢量pa=poly(a) %求系数矢量ppa=poly2sym(pa) %以符号形式表示原多项式ezplot(ppa,[-50,50])pa =1 -17 90 -144ppa =x^3-17*x^2+90*x-144注:含复数根的根矢量所创建的多项式要注意:(1)要形成实系数多项式,根矢量中的复数根必须共轭成对;(2)含复数根的根矢量所创建的多项式系数矢量中,可能带有很小的虚部,此时可采用取实部的命令(real)把虚部滤掉。
进行多项式的求根运算时,有两种方法,一是直接调用求根函数roots,poly和roots互为逆函数。
另一种是先把多项式转化为伴随矩阵,然后再求其特征值,该特征值即是多项式的根。
例3:由给定复数根矢量求多项式系数矢量。
r=[-0.5 -0.3+0.4i -0.3-0.4i];p=poly(r)pr=real(p)ppr=poly2sym(pr)p =1.0000 1.1000 0.5500 0.1250pr =1.0000 1.1000 0.5500 0.1250ppr =x^3+11/10*x^2+11/20*x+1/8c) 特征多项式输入法用poly函数可实现由矩阵的特征多项式系数创建多项式。
条件:特征多项式系数矢量的第一个元素必须为一。
例2:求三阶方阵A的特征多项式系数,并转换为多项式形式。
a=[6 3 8;7 5 6; 1 3 5]Pa=poly(a) %求矩阵的特征多项式系数矢量Ppa=poly2sym(pa)Pa =1.0000 -16.0000 38.0000 -83.0000Ppa =x^3-17*x^2+90*x-144注:n 阶方阵的特征多项式系数矢量一定是n +1阶的。
注:(1)要形成实系数多项式,根矢量中的复数根必须共轭成对;(2)含复数根的根矢量所创建的多项式系数矢量中,可能带有很小的虚部,此时可采用取实部的命令(real)把虚部滤掉。
进行多项式的求根运算时,有两种方法,一是直接调用求根函数roots,poly和roots互为逆函数。
另一种是先把多项式转化为伴随矩阵,然后再求其特征值,该特征值即是多项式的根。
例4:将多项式的系数表示形式转换为根表现形式。
求x3-6x2-72x-27的根a=[1 -6 -72 -27]r=roots(a)r =12.1229-5.7345-0.3884MATLAB约定,多项式系数矢量用行矢量表示,根矢量用列矢量表示。
>>1. 多项式的乘除运算(Multiplication and division of polynomial)多项式乘法用函数conv(a,b)实现,除法用函数deconv(a,b)实现。
例1:a(s)=s2+2s+3, b(s)=4s2+5s+6,计算a(s)与b(s)的乘积。
a=[1 2 3]; b=[4 5 6];c=conv(a,b)cs=poly2sym(c,’s’)c =4 13 28 27 18cs =4*s^4+13*s^3+28*s^2+27*s+18例2:展开(s2+2s+2)(s+4)(s+1) (多个多项式相乘)c=conv([1,2,2],conv([1,4],[1,1]))cs=poly2sym(c,’s’)%(指定变量为s)c =1 7 16 18 8cs =s^4+7*s^3+16*s^2+18*s+8例2:求多项式s^4+7*s^3+16*s^2+18*s+8分别被(s+4),(s+3)除后的结果。
c=[1 7 16 18 8];[q1,r1]=deconv(c,[1,4]) %q—商矢量,r—余数矢量[q2,r2]=deconv(c,[1,3])cc=conv(q2,[1,3]) %对除(s+3)结果检验test=((c-r2)==cc)q1 =1 3 4 2r1 =0 0 0 0 0q2 =1 4 4 6r2 =0 0 0 0 -10cc =1 7 16 18 18test =1 1 1 1 11. 其他常用的多项式运算命令(Other computation command of polynomial)pa=polyval(p,s) 按数组运算规则计算给定s 时多项式p 的值。
pm=polyvalm(p,s) 按矩阵运算规则计算给定s 时多项式p 的值。
[r,p,k]=residue(b,a) 部分分式展开,b,a 分别是分子分母多项式系数矢量,r,p,k 分别是留数、极点和直项矢量p=polyfit(x,y,n) 用n 阶多项式拟合x ,y 矢量给定的数据。
polyder(p) 多项式微分。
注: 对于多项式b(s)与不重根的n 阶多项式a(s)之比,其部分分式展开为:)()()(2211s k p s r L p s r p s r s a s b n n +-++-+-=式中:p 1,p 2,…,p n 称为极点(poles),r 1,r 2,…,r n 称为留数(residues),k(s)称为直项(direct terms),假如a(s)含有m 重根p j ,则相应部分应写成:m j m j j j j jp s r L p s r p s r )()(121-++-+--++RESIDUE Partial-fraction expansion (residues).[R,P,K] = RESIDUE(B,A) finds the residues, poles and direct term of a partial fraction expansion of the ratio of two polynomials B(s)/A(s). If there are no multipleroots,B(s) R(1) R(2) R(n)---- = -------- + -------- + ... + -------- + K(s)A(s) s - P(1) s - P(2) s - P(n)Vectors B and A specify the coefficients of the numerator and denominatorpolynomials in descending powers of s. The residuesare returned in the column vector R, the pole locations in column vector P, and the direct terms in row vector K. The number of poles is n = length(A)-1 = length(R) = length(P). The direct term coefficient vector is empty if length(B) < length(A),otherwiselength(K) = length(B)-length(A)+1.If P(j) = ... = P(j+m-1) is a pole of multplicity m, then the expansion includes terms of the formR(j) R(j+1) R(j+m-1)-------- + ------------ + ... + ------------s - P(j) (s - P(j))^2 (s - P(j))^m[B,A] = RESIDUE(R,P,K), with 3 input arguments and 2 output arguments, converts the partial fraction expansion back to the polynomials with coefficients in B and A.例3:对(3x4+2x3+5x2+4x+6)/(x5+3x4+4x3+2x2+7x+2) 做部分分式展开a=[1 3 4 2 7 2];b=[3 2 5 4 6];[r,s,k]=residue(b,a)r =1.1274 + 1.1513i1.1274 - 1.1513i-0.0232 - 0.0722i-0.0232 + 0.0722i0.7916s =-1.7680 + 1.2673i-1.7680 - 1.2673i0.4176 + 1.1130i0.4176 - 1.1130i-0.2991k =[] (分母阶数高于分子阶数时,k将是空矩阵,表示无此项)例5:对一组实验数据进行多项式最小二乘拟合(least square fit)x=[1 2 3 4 5]; % 实验数据y=[5.5 43.1 128 290.7 498.4];p=polyfit(x,y,3) %做三阶多项式拟合x2=1:.1:5;y2=polyval(p,x2); % 根据给定值计算多项式结果plot(x,y,’o’,x2,y2)一.线性代数(Linear Algebra)解线性方程(Linear equation)就是找出是否存在一个唯一的矩阵x,使得a,b满足关系:ax=b 或xa=bMALAB中x=a\b 是方程ax=b 的解,x=b/a是方程式xa=b的解。