680 likes | 829 Views
大学计算机基础 —— 系统工具与环境 (理工科用). 赵 欢 肖德贵 李丽娟 洪跃山 编著. 第三部分 仿真及计算工具 第 11 章 MATLAB 应用. 大学计算机基础 —— 系统工具与环境(理工科用). 本章内容提要. 11.1 MATLAB 在高等数学中的应用 11.2 MATLAB 绘图 11.3 MATLAB 图像处理 11.4 小结. 11.1 MATLAB 在高等数学中的应用. 符号运算 1. 定义符号常量
E N D
大学计算机基础 —— 系统工具与环境 (理工科用) 赵 欢 肖德贵 李丽娟 洪跃山 编著
第三部分 仿真及计算工具 第11章 MATLAB应用 大学计算机基础 ——系统工具与环境(理工科用)
本章内容提要 11.1 MATLAB在高等数学中的应用 11.2 MATLAB绘图 11.3 MATLAB图像处理 11.4 小结
11.1 MATLAB在高等数学中的应用 • 符号运算 1. 定义符号常量 符号数学工具箱中的函数sym( )可以将一个数值常量A 定义成一个符号常量。其一般的使用形式为 sym(A) 例如 将一组数值常量定义成符号常量。 >>x=sym('sin(15)') x = sin(15) >>y=sym ('(3*4-2)/5+1') y = (3*4-2)/5+1
11.1 MATLAB在高等数学中的应用 2. 定义符号变量 定义符号变量可以有两种方法:使用函数sym( )或命令syms。其使用形式为 sym('x') 或 syms x y 例如 定义符号变量及其表达式 >> a=sym('x') a = x >> b=sym('y') b = y >> f=a^2+b^2 f = x^2 + y^2
11.1 MATLAB在高等数学中的应用 在该例中,定义符号x并赋值到符号变量a,同时利用a定义解析式f。需要注意的是,使用函数sym()每次只能定义一个符号变量,而使用syms一次可以定义多个符号变量。 例如 定义符号变量及表达式 >> syms x y >> f=x^2+y^2 f = x^2 + y^2
11.1 MATLAB在高等数学中的应用 3. 表达式求值 通过符号变量定义符号表达式以后,可以通过函数eval来求表达式的值。 例如 符号常量表达式求值。 >> x=sym('sin(15)'); >>eval(x) ans = 0.6503 包含符号变量的表达式求值时,应对符号变量赋初值。
11.1 MATLAB在高等数学中的应用 包含符号变量的表达式求值时,应对符号变量赋初值。 例如 符号变量表达式求值。 >> syms x y >> f=x^2+y^2 f = x^2 + y^2 >> x=5; >> y=4; >> eval(f) ans = 41
11.1 MATLAB在高等数学中的应用 4. 表达式化简 MATLAB 提供了化简和美化符号表达式的各种函数,具体有:合并同类项(collect)、多项式展开(expand)、因式分解(factor)等。 (1). 合并同类项(collect): 函数collect( )调用的格式有两种。 R = collect(S):对于多项式S 按默认独立变量的幂次降幂排列。 R = collect(S,v):对指定的对象v 计算,操作同上。
11.1 MATLAB在高等数学中的应用 (2). 表达式展开(expand) 利用函数expand( )来展开符号表达式。其命令格式如下: R = expand(S) 对符号表达式S 中每个因式的乘积进行展开计算。该命令通常用于计算多项式函数、三角函数、指数函数与对数函数等表达式的展开式。
11.1 MATLAB在高等数学中的应用 >> syms x y a b c t >>e1 = expand((x-2)*(x-4)*(y-t)) e1 = 8*y - 8*t + 6*t*x - 6*x*y - t*x^2 + x^2*y >> e2 = expand(cos(x+y)) e2 = cos(x)*cos(y) - sin(x)*sin(y) >>e3 = expand(exp((a+b)^3)) e3 = exp(3*a*b^2)*exp(3*a^2*b)*exp(a^3)*exp(b^3)
11.1 MATLAB在高等数学中的应用 >>e4 = expand(log(a*b/sqrt(c))) e4 = log((a*b)/c^(1/2)) >>e5 = expand([sin(2*t), cos(2*t)]) e5 = [ 2*cos(t)*sin(t), cos(t)^2 - sin(t)^2] >> e6 = expand((x+1)^3) e6 = x^3 + 3*x^2 + 3*x + 1
11.1 MATLAB在高等数学中的应用 (3). 因式分解(factor) 利用函数factor( )来进行符号表达式的因式分解。其使用格式为: factor(X) 参量X 可以是正整数、符号表达式矩阵。若X 为一正整数,则factor(X)返回X 的质数分解式。若X 为多项式或整数矩阵,则factor(X)分解矩阵的每一元素。 例如 因式分解示例。 >> syms a b x y >> f1 = factor(x^4-y^4) f1 = (x-y)*(x+y)*(x^2+y^2) >> f2 = factor([a^2-b^2, x^3+y^3]) f2 = [(a-b)*(a+b), (x+y)*(x^2-x*y+y^2)]
11.1 MATLAB在高等数学中的应用 • 符号运算 1. 多项式表示 在 MATLAB 中,多项式被表示成行向量的形式,它的系数是按降幂排列的,即按降幂次序将多项式的系数组成行向量,就可以在MATLAB 中建立一个多项式。例如,多项式 在MATLAB 中,按下面方式组成一个行向量 >> f = [-4 3 18 5 1] MATLAB 会将长度为n+1 的向量解释成一个n 次多项式。因此,若多项式某些项系数为零,则必须在向量中相应位置补零。
2. 多项式求值 在MATLAB中多项式被表示为一个行向量,因此任何一个行向量都可当作一个多项式,可以通过调用函数polyval来求多项式的值,使用格式为: y = polyval(p,x) 其中,p为行向量,x作为参数,计算前必须赋值。
11.1 MATLAB在高等数学中的应用 3. 多项式求根 多项式求根的函数是roots,返回结果可能是复数根。其使用格式为 y=roots(p) 其中p为行向量,用于表示一个多项式。
11.1 MATLAB在高等数学中的应用 4. 符号多项式 当已知多项式的系数时,可以利用函数poly2sym来构造符号多项式。 例如 对于多项式系数向量p=[-4 3 18 5 1]构造符号多项式并求值。 >> p=[-4 3 18 5 1]; >> f=poly2sym(p) f = - 4*x^4 + 3*x^3 + 18*x^2 + 5*x + 1 >> x=5; >> y=eval(f) y = -1649
11.1 MATLAB在高等数学中的应用 5. 从根创建多项式 假定已知多项式的根,则可以使用函数poly函数来求多项式向量,这个函数与roots是互逆函数。 例如 已知多项式的根为2、5、1,求多项式。 >> r=[2;5;1]; >> s=poly(r) s = 1 -8 17 -10 这里创建了多项式,根分别为2、5、1。
11.1 MATLAB在高等数学中的应用 • 函数极限 1. 一元函数的极限 假设已知函数,则极限问题一般描述为 其中L 可以是一个确定的值,也可以不是,对于某些问题来说,还可以是左右极限,在MATLAB中,直接调用函数limit来求极限,格式如下 (1) limit(expr, x,x0),其中expr为函数表达式,一般为符号表达式,x是变量,x0为极限点。 (2) limit(expr, x, x0, 'left'),expr、x、x0与上面格式相同,如果为左极限,则最后一个参数为’left’,否则为’right’。 在上面格式中,极限点x0可以是inf或-inf,表示正、负无穷大。
11.1 MATLAB在高等数学中的应用 2. 多元函数的极限 多元函数极限一般可表示为 在MATLAB中,同样是通过调用函数limit来实现,格式如下 (1) limit(limit(expr, x, x0), y, y0) (2) limit(limit(expr, y, y0), x, x0) 如果x0或y0不是确定的值,而是另外一个变量的函数,则顺序不能改变。
11.1 MATLAB在高等数学中的应用 • 函数求导 1. 函数的导数和高阶导数 如果函数和自变量都已知,则可以调用函数diff来求各阶导数,使用格式如下 (1) y=diff(expr, x),expr为函数表达式,x为自变量,求一阶导数 (2)y=diff(expr, x, n),求函数的n阶导数
2. 多元函数偏导数 多元函数偏导数仍然是通过调用diff来实现的,使用格式为 f=diff(diff(expr, x, m), y, n) 或者 f=diff(diff(expr, y, n), x, m)
11.1 MATLAB在高等数学中的应用 • 函数积分 • 不定积分 在MATLAB中,调用int函数直接求出符号函数表达式的不定积分解析式,使用格式为 F=int(expr, x),expr为函数的表达式,x为积分变量。
11.1 MATLAB在高等数学中的应用 2. 定积分 在MATLAB中,函数int同样可以用于求定积分,使用格式为F=int(expr, x, a, b),expr为函数的表达式,x为积分变量, [a, b]为积分区间。
级数运算 1. 泰勒(Taylor)展开式 根据泰勒定理,函数f(x)在x0的展开形式为: 其中R,为截断误差,也称为拉格朗日余项。如果,上式又称为麦克劳林(Maclaurin)公式。 事实上,要使用泰勒公式求函数的近似值是一件非常困难的事情,因为需要计算多项,特别是要计算高阶导数,调用MATLAB中的函数taylor可以直接导出泰勒公式,其使用格式为 (1) taylor(expr, x, k),expr为函数符号表达式,x为自变量,该方式为将函数在 0处做泰勒展开,k为展开项数。 (2) taylor(expr, x, k, a),该方式为将函数在a 处做泰勒展开。
11.1 MATLAB在高等数学中的应用 2. 级数求和 对于具有通项公式的级数,MATLAB提供了函数symsum来计算级数和,具体使用格式为 symsum(expr, n, a,b) expr为通项公式表达式,n为级数变量,a和b分别表示开始项和结束项。
11.1 MATLAB在高等数学中的应用 • 矩阵及线性方程组 1. 零矩阵、幺矩阵和单位矩阵 在矩阵理论中,将所有元素全为0的矩阵称为零矩阵,把所有元素全为1的矩阵称为幺矩阵,而将对角线元素全为1而其余元素全为0的矩阵称为单位矩阵。使用格式分别如下: (1) A=zeros(m),B=ones(m),C=eye(m),分别生成m×m阶零矩阵A、幺矩阵B和单位矩阵C。 (2) A=zeros(m,n),B=ones(m,n),C=eye(m,n),分别生成m×n阶零矩阵A、幺矩阵B和单位矩阵C。
11.1 MATLAB在高等数学中的应用 • 例如 下面分别生成零矩阵、幺矩阵和单位矩阵。 >> A=zeros(3) A = 0 0 0 0 0 0 0 0 0 >> B=ones(3) B = 1 1 1 1 1 1 1 1 1 >> C=eye(3) C = 1 0 0 0 1 0 0 0 1 >> D=zeros(2,3) D = 0 0 0 0 0 0 >> E=ones(2,3) E = 1 1 1 1 1 1 >> F=eye(2,3) F = 1 0 0 0 1 0
11.1 MATLAB在高等数学中的应用 2. 随机矩阵和魔方矩阵 使用函数rand()可以生成一个0~1之间的随机数,而使用rand(m,n)则可以生成一个m×n阶随机矩阵,使用rand(m)生成的是m×m阶随机方阵 魔方矩阵是指生成的方阵行、列、对角线之和相等的矩阵,通过函数magic(m)来实现。 例如 生成2×3阶随机方阵以及5阶魔方矩阵。 >> rand(2,3) ans = 0.7655 0.1869 0.4456 0.7952 0.4898 0.6463 >> magic(3) ans = 8 1 6 3 5 7 4 9 2
11.1 MATLAB在高等数学中的应用 3. 对角矩阵 对角矩阵的生成是通过调用函数diag来实现的,其基本格式为 (1) diag(p),生成以向量p的元素构成的对角矩阵,矩阵大小由p的元素个数决定。 (2) diag(p, k),将向量p的元素分布在对角线偏上或偏下的斜列上,k>0,代表上部,k<0代表下部,k=0时与(1)相同,生成的矩阵阶数=p的元素个数+k。
11.1 MATLAB在高等数学中的应用 3、矩阵行列式、秩、逆和条件数 在MATLAB中,通过调用函数det、rank、inv、cond即可分别求的矩阵的行列式的值、秩、矩阵的逆和条件数。
11.1 MATLAB在高等数学中的应用 4. 线性方程组求解 考虑线性方程组,很显然,利用矩阵的逆可以直接求解线性方程组: 这也称为直接法;也可以直接利用之前介绍的反除,即。
5. 矩阵的三角分解 根据线性代数理论,如果矩阵A是非奇异矩阵,则它一定可以分解为一个非奇异的单位下三角矩阵和非奇异上三角矩阵,使得成立,但由于需要涉及到选主元来交换某些行,因此还需要增加一个置换矩阵P来构成完整的三角分解,在MATLAB中,通过调用函数lu来实现上述过程。
6. 矩阵特征多项式和特征值 求矩阵特征多项式和特征值是线性代数中经常遇到的问题,在MATLAB中通过调用函数eig来实现,其调用格式为 (1) v=eig(A),求矩阵A的特征值,返回形式为由特征值组成的列向量。 (2) [b,v]=eig(A),返回结果b是由特征向量组成的矩阵,而v为以特征值为对角线的对角矩阵。
11.1 MATLAB在高等数学中的应用 • 方程求根 1. 函数零点 罗尔(Role)零点定理证明了对于,且,则必存在区间内的一点,使得,就是函数的零点。在MATLAB中使用函数fzero很容易求得零点,使用方式为 (1) fzero(myfun, x0),表示求函数fun在x0附近的零点,其中fun为函数句柄。 (2) fzero(myfun, [a b]),表示求函数fun在区间[a,b]上的零点。
11.2 Matlab绘图 • 二维图形 在 MATLAB 中,plot是最基本的二维绘图函数,其调用格式有: (1) plot(Y):若Y为实向量,则以该向量元素的下标为横坐标,以Y的各元素值为纵坐标,绘制二维曲线;若Y为复数向量,则等效于plot(real(Y),imag(Y));若Y为实矩阵,则按列绘制每列元素值相对其下标的二维曲线,曲线的条数等于Y的列数;若Y为复数矩阵,则按列分别以元素实部和虚部为横、纵坐标绘制多条二维曲线。 (2) plot(X,Y):若X、Y为长度相等的向量,则绘制以X和Y为横、纵坐标的二维曲线;若X 为向量,Y是有一维与Y同维的矩阵,则以X为横坐标绘制出多条不同色彩的曲线,曲线的条数与Y的另一维相同;若X、Y为同维矩阵,则绘制以X和Y对应的列元素为横、纵坐标的多条二维曲线,曲线的条数与矩阵的列数相同。
11.2 Matlab绘图 (3) plot(X1,Y1,X2,Y2,…Xn,Yn):其中的每一对参数Xi 和 Yi(i=1,2,...,n)的取值和所绘图形与(2)中相同。 (4) plot(X1,Y1,LineSpec,...):以LineSpec 指定的属性,绘制 所有Xn、Yn 对应的曲线。 (5) plot(...,'PropertyName',PropertyValue,...):对于由plot 绘制的所有曲线,按照设置的属性值进行绘制, PropertyName 为属性名,PropertyValue 为对应的属性 值。
11.2 Matlab绘图 例如 按不同颜色和线型绘图。 >>x=0:0.2:8; >>y1=0.2+sin(-2*x); >>y2=sin(x.^0.5); >>figure >>plot(x,y1,'g-+',x,y2,'r--d'); 曲线y1 采用绿色、实线、加号标记,曲线y2 采用红色、虚线、菱形标记,结果如图11.3所示。
11.2 Matlab绘图 • MATLAB 在绘图时会根据数据的分布范围自动选择坐标轴的刻度范围,通过调用函数axis指定坐标轴的刻度范围的格式为: axis([xmin,xmax,ymin,ymax]), 其中 xmin,xmax,ymin,ymax 分别表示x轴的起点、终点,y 轴的起点、终点; • 使用函数xlabel(‘option ’)和ylabel(‘option ’)来实现x轴y轴加标签; • 使用函数title(‘option ’)为图形加标题; • 使用函数legend(‘option ’)加标注; • 使用命令grid on/off添加或取消网格线; • 调用text(x, y, 'string')在指定的坐标(x,y)处加上文字。