当前位置: 首页 > >

第3,4讲 MATLAB的运算基础37

发布时间:

第三讲 MATLAB的运算基础
1. 简单的数学运算
常用的数学运算符 ? +,—,*(乘),/(左除),\(右除),^(幂) ? 在运算式中,MATLAB通常不需要考虑空格;多条命 令可以放在一行中,它们之间需要用分号隔开; 逗号告诉MATLAB显示结果,而分号则禁止结果显示。 常用数学函数 abs, sin, cos, tan, asin, acos, atan, sqrt, exp, imag, real, sign, log, log10, conj等

elfun函数库中提供一系列复数函数
real 复数的实数部分 real(b) imag 复数的虚数部分 imag(b) abs 绝对值或模 abs(b) angle 幅角 angle(b) 结果为弧度 angle(b)*180/pi 结果为角度 conj 复数共轭 conj(b)

?

在MATLAB下进行基本数学运算,只需将运算式直接打 入提示号(>>)之後,并按入Enter键即可。例如: >>(5*2+1.3-0.8)*10/25

?

>>ans = 4.2000
?

运算是定义在数据结构上的,数组是其中最重要的一种 数据类型。 MATLAB的基本运算单元是 复数矩阵,标量、向量、 常数矩阵都是其中的特例。

注意:在运算时,数组与矩阵有显著不同,矩阵运算是从 矩阵整体出发;数组运算时从数组的元素出发。

2. MATLAB矩阵运算
2.1 矩阵的输入
a. 在命令窗口中输入
》a=1; b=2; c=3; 》x=[5 b c; a*b a+c c/b] x= 5.000 2.000 3.000 2.000 4.000 1.500 》y=[2,4, 5 3 6 8] y= 245 368

矩阵的建立可以通过赋值语句实现,赋值符号左边为变 量名,右边为矩阵元素。矩阵元素应用方括号([])括住。

?

矩阵生成不但可以使用数字(含复数),也可以使用 变量(或者说采用一个表达式),表达式可以由数字、变 量、运算符和函数等组成。
矩阵同行内的元素间用逗号或空格隔开,行与行之间 用分号,矩阵的元素直接排列在方括号内,大的矩阵可以 用分行输入,回车键代表分号。 例 在命令窗口输入语句 x=[-1.3 1+2+3 sqrt(5)]

?

Enter
6.0000 2.2361

x = -1.3000

b. 语句生成
(1)用线性等间距生成向量矩阵(start:step:end) 》a=[1:2:10] a= 1 3 5 7 9

其中start为起始值,step为步长,end为终 止值。当步长为1时可省略step参数;另外 step也可以取负数。

(2)a=linspace(n1,n2,n) 在线性空间上,行矢量的值从n1到n2,数据个数为n,缺省n为 100。 》a=linspace(1,10,10) a=

1 2 3 4 5 6 7 8 9 10

(3)a=logspace(n1,n2,n) 在对数空间上,行矢量的值从10n1到10n2,数据个数为n,缺 省n为50。这个指令为建立对数频域轴坐标提供了方便。 》a=logspace(1,3,3) a= 10 100 1000
(4)函数库elmat提供的常用的特殊矩阵生成函数 单位矩阵:eye(m,n); eye(m) 零矩阵:zeros(m,n); zeros(m) 一矩阵:ones(m,n); ones(m) 对角矩阵:对角元素向量 V=[a1,a2,…,an] A=diag(V) 随机矩阵:rand(m,n)产生一个0、1间均匀分布的m×n的随 机矩阵,rand(m)

?

>> eye(3,4)
ones(3,2) ans = 1 1 1 1 1 1

ans = 1 0 0 0 1 0 0 0 1 0 0 0

>> zeros(2) ans = 0 0
?

>> diag([2 3 6]) ans = 2 0 0 0 3 0 0 0 6

如果已知A为方阵,则 V=diag(A)可以提取A

的对角元素构成向量V。

0 0

>> rand(2,3)

>>

ans = 0.9501 0.2311 >>

0.6068 0.4860

0.8913 0.7621

(5)用于专门学科的特殊矩阵

魔方矩阵 magic(n)
功能:魔方矩阵的元素由1到n×n 的自然数组成,魔 方矩阵的每行、每列及两条对角线上的元素和都相等。 其每行、每列及对角线上的元素之和均等于(n3+n)/2。 对于n阶魔方阵,其元素由1,2,3,…,n2共n2个整数组成。
m1=magic(3) %产生3阶魔方阵 m2=magic(4) %产生4阶魔方阵
>> m=magic(3) m=

8 3 4
>>

1 5 9

6 7 2

范得蒙矩阵 vander(V)
生成以向量V为基础向量的范得蒙矩阵,矩阵元素最后一列 全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒 数第二列的点乘积。可以用一个指定向量生成一个范得蒙矩阵。

v1=vander([1;2;3;5]) v2=vander(1:3) v3=vander(1:4)
v1 = 1 8 27 125
v2 = 1 4 9 v3 = 1 1 1 1 8 4 2 1 27 9 3 1 64 16 4 1

1 1 1 4 2 1 9 3 1 25 5 1

1 2 3

1 1 1

帕斯卡矩阵
n阶帕斯卡矩阵的生成函数的格式:pascal(n) 求(x+y)4的展开式。 ? >> p1=pascal(4) p1 = 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 ? >>

由执行结果可知,矩阵次对角线上的元素 1,4,6,4,1即为展开式的系数。

c. 通过MAT数据文件加载矩阵 通过load命令或选择菜单File→Import Data命令 加载MAT数据文件来创建矩阵。 d. 在M文件中创建矩阵
M文件实际上是一种包含MATLAB代码的文本文件;通 过在MATLAB命令窗口中运行M文件创建矩阵。

t1=linspace(0,2*pi,5) t2=linspace(1,4,5) t3=logspace(0,2,3)

2.2 矩阵的运算
(1) 转置:对于实矩阵用(’)符号或(.’)求转置结果是 一样的;然而对于含复数的矩阵,则(’)将同时对复数 进行共轭处理,而 (.’)则只是将其排列形式进行转置。 》b=[1+2i 2-7i]' 》a=[1 2 3;4 5 6]' a= 1 2 4 5 》a=[1 2 3;4 5 6].' a= 1 2 4 5

b=
1.0000 - 2.0000i 2.0000 + 7.0000i 》b=[1+2i 2-7i].' b=

3

6

3

6

1.0000 + 2.0000i
2.0000 - 7.0000i

(2) 四则运算与幂运算 + - * \ 和 / ^ .* .\ 和 ./ .^ 如:a=[1 2;3 4];b=[ 3 5; 5 9] 》c=a+b d=a-b 》c= d= 4 7 -2 -3 8 13 -2 -5 》a*b=[13 23; 29 51] 》a/b=[-0.50 0.50;3.50 –1.50] 》a\b=[-1 -1;2 3] 》a^3=[37 54; 81 118] 》a.*b=[3 10;15 36] 》a./b=[0.33 0.40;0.60 0.44] 》a.\b=[3.00 2.50;1.67 2.25] 》a.^3= [1 8; 27 64] ? 只有维数相同的矩阵才能进行 加减运算。 ? 注意只有当两个矩阵中前一个 矩阵的列数和后一个矩阵的行 数相同时,才可以进行乘法运 算。 ? a\b运算等效于求a*x=b的解; 而a/b等效于求x*b=a的解。只 有方阵才可以求幂。

? 点运算是两个维数相同矩阵对 应元素之间的运算,在有的教 材中也定义为数组运算。

(3)逆矩阵与行列式计算 求逆:inv(A); 求行列式:det(A) 要求矩阵必须为方阵

》a=[1 2 3; 4 5 6; 2 3 5]; 》b=inv(a) b= -2.3333 2.6667 0.3333 1.0000

0.3333 -2.0000

-0.6667 -0.3333 1.0000

》det(a)
ans = -3

2.3 矩阵的操作
(1) 矩阵下标 ?MATLAB通过确认矩阵下标,可以对矩阵进行插入子块,提取子 块和重排子块的操作。
? ? ? ?

? ?

?

A(m,n):提取第m行,第n列元素 A(:,n):提取第n列元素 A(m,:):提取第m行元素 A(m1:m2,n1:n2):提取第m1行到第m2行和第n1列到第n2列的 所有元素(提取子块)。 A(:):得到一个长列矢量,该矢量的元素按矩阵的列进行排列。 矩阵扩展:如果在原矩阵中一个不存在的地址位置上设定一个数 (赋值),则该矩阵会自动扩展行列数,并在该位置上添加这个 数,而且在其他没有指定的位置补零。 消除子块:如果将矩阵的子块赋值为空矩阵[ ],则相当于消除了 相应的矩阵子块。

(2) 矩阵的大小 ? [m,n]=size(A,x):返回矩阵的行列数m与n,当x=1,则只 返回行数m,当x=2,则只返回列数n。 ? length(A)=max(size(A)):返回行数或列数的最大值。 ? rank(A):求矩阵的秩
》a=[1 2 3;3 4 5]; 》[m,n]=size(a) 》length(a) 》rank(a) ans = 2

ans =
3 》max(size(a)) ans = 3

m=
2 n= 3

(3) 了解矩阵操作函数:flipud;fliplr;rot90
a=[1 2 3;3 4 5]; a1=flipud(a) a2=fliplr(a) a3=rot90(a)
运行结果: a1 = 3 4 1 2

5 3

a2 = 3 5

2 4

1 3

a3 = 3 2 1

5 4 3

3. MATLAB多项式处理
(1)多项式的建立与表示方法
?

在MATLAB中,多项式使用降幂系数的行向量表示,如: 多项式 x 4 ? 12x 3 ? 0 x 2 ? 25x ? 116

表示为:p=[1 -12 0 25 116],使用函数roots可以求出多项式等 于0的根,根用列向量表示。若已知多项式等于0的根,函数 poly可以求出相应多项式。 r=roots(p) r= 11.7473 2.7028 -1.2251 + 1.4672i -1.2251 - 1.4672i

p=poly(r) p= 1 -12 -0 25 116

(2)多项式的运算
?相乘conv a=[1 2 3] ; b=[1 2] c=conv(a,b)=1 4 7 6 conv指令可以嵌套使用,如conv(conv(a,b),c) ?相除deconv [q,r]=deconv(c,b) q=1 2 3 %商多项式 r=0 0 0 %余多项式 ?求多项式的微分多项式polyder polyder(a)=2 2 ?求多项式函数值polyval(p,n):将值n代入多项式求解。 polyval(a,2)=11

(3)多项式的拟合
?

?

多项式拟合又称为曲线拟合,其目的就是在众多的样本点中进行拟 合,找出满足样本点分布的多项式。这在分析实验数据,将实验数 据做解析描述时非常有用。 命令格式:p=polyfit(x,y,n),其中x和y为样本点向量,n为所求多 项式的阶数,p为求出的多项式。

a=[0 2 4 5 12 11 6 5];b=[7 8 0 6 1 2 3 4]; p1=polyfit(a,b,3) p2=polyfit(a,b,5)
p1 = -92/20803 81/721 -1123/903 4597/601

p2 = 35/9043 1175/166 >>

-281/2311

590/449

-841/151

2780/399

(4)*多项式插值 ? 多项式插值是指根据给定的有限个样本点,产生另外的估计点 以达到数据更为*滑的效果。该技巧在信号处理与图像处理上应用 广泛。
?

所用指令有一维的interp1、二维的interp2、三维的interp3。 这些指令分别有不同的方法(method),设计者可以根据需要选 择适当的方法,以满足系统属性的要求。Help polyfun可以得到更 详细的内容。

y= interp1(xs,ys,x,’method’) ? 在有限样本点向量xs与ys中,插值产生向量y,所用方法定义在 method中,有4种选择: linear:默认值,在样本点上斜率变化很大 nearest:执行速度最快,输出结果为直角转折 spline:最花时间,但输出结果也最*滑

xs=[0 2 3 5 8 9 12]; ys=[3 6 9 8 0 6 9]; x=[0:0.1:12]; y1=interp1(xs,ys,x, 'nearest'); y2=interp1(xs,ys,x, 'linear'); y3=interp1(xs,ys,x, 'spline'); plot(xs,ys, 'o',x,y1, 'b', x,y2, 'k', x,y3, 'r')

第四讲 符号运算
符号计算的特点: ? 1)符号计算定义在符号变量的基础上,符号表 达式计算前必须定义符号变量。 ? 2)符号计算是精确计算。 ? 3)符号计算的计算速度较慢。 ? 4)符号计算的运算符和基本数学函数与数值计 算中的运算符和基本数学函数几乎完全相同。

一、创建符号变量
syms arg1 arg2 …参数 %简化形式 功能:创建多个符号变量。
例 创建符号矩阵,并求逆、对角阵、行列式和秩
%方法: 用syms命令创建相同的符号矩阵 ? syms m n p q ; A=[m n;p q] ; ? inv_A=inv(A) %求A的逆矩阵 ? diag_A=diag(A) %求A的对角线 ? det_A=det(A) %求A的行列式 ? rank_A=rank(A) %求A的秩

1. 合并同类项
?

二、符号多项式函数

collect (S,v)

功能:合并多项式S的同类项。其中S是符号表达 式,v是合并同类项的变量。 注:函数pretty可给出多项式的易读形式。
例 合并多项式

( x ? x ? 1)( x ? 1) 的同类项。
3 2

x=sym('x'); f=(x^3+x+1)*(x^2+1); g=collect(f)

g=

x^5+2*x^3+x^2+x+1
>>

例 合并多项式

( x ? xe ? 1)( x ? e )
2

?t

?t

的同类项。

s=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');

e1=collect(s)

%合并关于x的同类项系数

e2=collect(s,'exp(-t)') %合并关于exp(-t)的同类项系数 e1 = x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t) e2 = x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x

2. 因式分解

factor(s) 功能:把符号表达式S转换为多个因式相乘的形式, 各多项式的系数均为有理数。
?
? ?

例:x ? a
3

3

?

syms x a; f=factor(x^3-a^3); pretty(f,'x')

执行结果如下: ? ans =
? ?

2

2

-(a - x) (a + a x + x )

例 问入取何值时,齐次方程组有非0解?
?(1 ? ? ) 1 ? 2x 2 ? 4x 3 ? 0 x ? x ? 2x 1 ? (3 ? ? ) 2 ? x 3 ? 0 ? x ? x 1 ? x 2 ? (1 ? ? ) 3 ? 0
syms k; A=[1-k -2 4;2 3-k 1;1 1 1-k]; D=det(A) ; factor(D) ans = -k*(k-2)*(-3+k) %运行结果

3. 化简
?

simplify(s) simple(s)

功能:返回符号表达式s的简化形式。

例 化简

x 1 f ( x) ? 2 ? x ? x ?1 x ?1

?方法1:
syms x;

f=x/(x^2+x+1)+1/(x-1);
simple(f)

ans = (2*x^2+1)/(x-1)/(x^2+x+1)

?方法2:
syms x; f=x/(x^2+x+1)+1/(x-1); simplify(f) ans = (2*x^2+1)/(x^3-1)

?

例 化简

f ?

3

1 6 12 ? 2 ? ?8 3 x x x
? ?

syms x; f=(1/x^3+6/x^2+12/x+8)^(1/3); sfy1=simplify(f) sfy2=simplify(sfy1) g1=simple(f) g2=simple(g1)

?
? ? ? ? ? ? ? ? ? ?

>> sfy1 = ((2*x+1)^3/x^3)^(1/3) sfy2 = ((2*x+1)^3/x^3)^(1/3) g1 = (2*x+1)/x g2 = 2+1/x >>

% 运行结果

? cos(t ) ?例 计算 ? ? sin(t )

? sin(t ) ? ? ? cos(t ) ?

4

syms t ; A=[cos(t) -sin(t); sin(t), -cos(t)]; B=A^4 %计算A的4次幂 C=simple(B) %化简为最简形式
>> B= [ cos(t)^2*(cos(t)^2-sin(t)^2)-sin(t)^2*(cos(t)^2-sin(t)^2), 0] [0, cos(t)^2*(cos(t)^2-sin(t)^2)-sin(t)^2*(cos(t)^2-sin(t)^2)] C= [ 1/2*cos(4*t)+1/2, 0] [ 0, 1/2*cos(4*t)+1/2]

三、 符号微积分
?

diff(f,a,n)

功能:返回符号表达式的微分形式,a为自变量, 可缺省,n缺省时为一阶微分。
>> diff(x^2+y^2,x,2) ??? Undefined function or variable 'x'.

>> >> syms x;diff(x^2+y^2,x,2) ??? Undefined function or variable 'y'.
>>

syms x y;diff(x^2+y^2,x,2) ans = 2
>>syms x y;diff(x^2+y^2,2) ans = 2 >>
?

%默认自变量时

int(f,x,x0,xfan)

功能:返回符号表达式的积分形式,x也可缺省,自动确认。
x0,xfan缺省时为不定积分,不缺省时表示积分的上下限。

>> syms x;int(2,x)
ans = 2*x >> syms x;int(2,x,0,x) ans = >> syms x;int(2,x,0,4) 2*x ans =

>>

>> 8
>>

总 结
?

MATLAB的窗口环境是基础的基础,要求熟练掌握语句命令的输入、 变量的使用、基本的数学函数及各种工作空间与文件管理的命令。 要善于运用help命令自学。 MATLAB具有强大的矩阵运算能力,要求熟练掌握矩阵的输入与生 成,掌握矩阵的基本运算及操作,区分带点运算与不带点运算的不 同;掌握多项式的建立与表示方法及多项式的基本运算。 本章所要掌握的是MATLAB语言的运算基础,包括:矩阵运算及多 项式处理。 创建符号变量;符号多项式的运算;符号微积分的计算;

?

?

?




友情链接: