资源描述
2012年数学建模培训材料——Matlab软件的使用
第一讲 Matlab 基本数值计算
一、矩阵
在Matlab中,一个矩阵可以使数学意义上的矩阵,也可以是标量或者向量。对于一个标量(一个数)可以将之作为的矩阵,而向量(一行或一列)则可以认为是或者的矩阵。另外,一个矩阵在Matlab中被认为是空矩阵,用“[]”表示。
1、矩阵的创建
矩阵的创建可以有以下几种形式
⑴直接输入
>> A=[1 2 3;4 3 7;2 4 1]
注意:每行间的元素用逗号或空格分开,行与行之间用分号或回车分开,矩阵标示是一对中括号[ ]。
也可以采用数组编辑器(Array Editor)像在Excel电子表格中据那样输入数据。
⑵通过语句和函数产生
常用的特殊矩阵:zeros:全零矩阵,ones:全1矩阵,eye:单位矩阵,rand:随机矩阵,diag:对角阵等。
例:>> A=ones(3,4)
>> E=eye(3)
>> D=diag([3 5 2])
⑶对矩阵进行裁剪或拼接
⑷从外部文件装入数据
外部数据文件可以是以保存的Matlab工作空间,也可以是文本(.txt)文件,或者是电子表格创建的文件(.xls).
例:已知一个文本格式的数据文件E:\Mathmodel\data1.txt
>> load e:\Mathmodel\data1.txt
得到一个变量名与文件名相同的矩阵(data1)。注意:文件的扩展名不能省略。
例:已知一个Excel文件的路径为E:\Mathmodel\data2.xls
a. 缺省操作:
>> NUMBER=xlsread('E:\Mathmodel\data2.xls')
>>[NUMBER,TXT]=xlsread('E:\Mathmodel\data2.xls')
默认操作是从第一个工作表(sheet1)中提取数据。
b. 从指定的工作表(而不是第一个)中提取数据:
>> NUMBER=xlsread('E:\Mathmodel\data2.xls','S2')
或者
>> NUMBER=xlsread('E:\Mathmodel\data2.xls',2)
c.从指定的工作表中读取指定区域的数据:
>> NUMBER=xlsread('E:\Mathmodel\data2.xls',2,'g3:i8')
2、Matlab的矩阵运算
⑴基本运算
矩阵的加(+)、减(-)、乘(*)、乘方(^)运算法则与代数中的定义完全一致。例如:
>> A=[1 2;3 4];B=[3 1;4 8];
>> A+B,A-B,A*B
矩阵的转置(A.'),矩阵的共轭转置(A')。
矩阵的除法:左除A\B,类似于求,右除B/A,类似于。
例:分别解矩阵方程和。
⑵矩阵分析
rank(A) 求矩阵A的秩
det(A) 返回方阵A的行列式
inv(A) 返回A的逆矩阵
null(A) 返回A的零空间的基,即的基础解系
norm(A) 返回矩阵A的2-范数,即
[V,D]=eig(A) 返回方阵A的特征值和特征向量,其中D为特征值构成的对角阵,每个特征值对应的V的列为属于该特征值的一个特征向量。如果只有一个输出,则得到特征值构成的列向量
例:求线性方程组的通解
>> A=[1 -1 1 -1;-1 1 1 -1;2 -2 -1 1];b=[1 1 -1]';
>> x0=A\b
>> null(A,'r')
或用初等行变换的方法:
>> rref([A b])
二、数组
代数中的数组是指有顺序的一列数,或称向量,在Matlab中除了行向量和列向量外,实际上矩阵也是数组的一种表现形式,相当于将矩阵的列按顺序接成一个列向量。因此二维数组的元素有两种定位方式:二维下标(subscripts)和一位索引(index)
例如:>> A=[1 2 3 ;4 5 6;7 8 9],>> A(1,3),>> A(7)
思考:1.这两者之间的转换公式?利用Matlab帮助学习sub2ind和ind2sub的用法。2.观察命令>> A=A(:)的结果。
生成等差数组的两个非常有用的指令:
a:s:b 生成首项为a,步长(公差)为s,末项不超过b的等差数列,当步长为1时可以省略。
linspace(a,b,n) 生成首项是a,末项是b,项数为n 的等差数列。
数组的运算:a+b a-b a.*b a./b a.\b a.^b
要求数组a 和 b 有相同的维数。
a 和b 之一也可以是一个标量,例如a 是标量,则先将其扩充为与b 同维数,全部元素都为a 的数组,再参与相应的运算。
举例
>> a=[1 3 5 7;2 4 6 8;9 11 13 15];b=[3 2 1 1;2 3 2 1;3 4 2 1];
观察a+b,a-b,a.*b,a./b,a.\b,a.^b,2+a,2.^a,a.^2
三、多项式
1、多项式的创建
Matlab中,多项式(Polynomial)是由一个向量表示,它的系数是按降序排列的。多项式在Matlab中表示为p=[a0,a1,…an],是一个n+1维数组。如果多项式中缺某幂次项,则应认为该幂次项的系数为0.
Poly(A),如果A为方阵,则创建矩阵A的特征多项式,若A是数组A=[a0,a1,…an],则创建(x-a0)(x-a1)…(x-an)生成的多项式的系数向量。例如
>> A=[1 2;3 4]; p=poly(A)
>> A=[1 2 3 4]; p=poly(A)
poly2str(P,’x’) 把多项式数组转换成字符串。例如poly2str(A,'x')
2、多项式的运算
⑴多项式的加减法
>> a=[1 3 5 7];b=[2 4 6 8];
>> c=a+b
>> poly2str(a,'x')
>> poly2str(b,'x')
>> poly2str(c,'x')
>> d=[1 3 4 6 -5] %d表示一个4次多项式
>> e=[0 c]+d %次数不同的多项式相加减,要在低次数组前面补零。
⑵多项式求根 roots(p)
⑶多项式的乘法和除法
p=conv(a,b) %生成多项式a 和 b 的乘积
[q,r]=deconv(a,b) %多项式a 除以b,商为q,余式为r
例 >> a=[1 3 5];b=[2 4 6]; p=conv(a,b)
>> a=[1 2 3 1];b=[2 1]; [q,r]=deconv(a,b)
验证: conv(q,b)+r
⑷特征多项式 poly(A)
思考:如何求矩阵A的特征值?
⑸多项式求值 polyval
y=polyval(p,x) %求多项式p 在x 处的值,即y=p(x),x可以是向量。
例 画出多项式的图形
>> p=[4 -2 0 7];
>> x=-1:0.1:1;y=polyval(p,x);
>> plot(x,y)
⑹多项式求导 polyder(p)
p=polyder(a) %返回多项式a 的导数
p=polyder(a,b) %返回多项式的乘积 a*b 的导数
[q,d]=polyder(a,b) %返回多项式的商a/b的导数,表示为q/d
四、数值微积分
1、diff 数值差分或符号微分
diff(A) %对向量或矩阵A的差分
diff(A,n) %对向量或矩阵A的n阶差分
例 >> A=[2 3 6 1 0 6],diff(A),diff(A,2)
>> A=[1 4 ;3 7; 2 0], diff(A) %按A的各列作差分
diff(fun) %对符号函数fun 求导
diff(fun,‘u’,n) %返回符号函数fun对变量u 的n 阶导数。
2、梯形积分法
z=trapz(x,y) %x,y要求是同维向量,当被积函数表达式未知时比较有用
例 求积分
>> x=-1:0.1:1;y=exp(-x.^2);
>> trapz(x,y)
3、高精度数值积分
z=quad(fun,a,b) 或 z=quadl(fun,a,b) %函数fun在区间[a,b]上的定积分
例 >> quadl('exp(-x.^2)',-1,1)
4、二重积分
Matlab提供了一个计算矩形区域上二重积分的函数dblquad
z=dblquad(fun,a,b,c,d) %求二元函数fun(x,y)在上的二重积分
例如 计算,其中
>> fun=inline('x.*exp(x.^2+y.^2)','x','y'); %inline函数
>> dblquad(fun,0,2,-2,2)
对于一般的不是矩形区域的二重积分,可以通过换元积分法将其化为矩形区域,或者可以参考自编程序 dblquad2.m
例 计算
先化为二次积分
>> fun=inline('1+x+y.^2','x','y'); %被积函数
>> c=inline('-sqrt(2*x-x^2)');d=inline('sqrt(2*x-x^2)'); %内积分上下限
>> dblquad2(fun,0,2,c,d)
上机练习
1、执行下列指令,观察其运行结果,理解其意义
⑴ [1 2;3 4]+10-2i;
⑵ [1 2;3 4].*[0.1 0.2;0.3 0.4];
⑶ [1 2;3 4].\[20 10;9 2];
⑷ [1 2;3 4].^2。
2、设有分块矩阵,其中E,R,O,S分别为单位矩阵、随机矩阵、零矩阵和对角阵,试通过数值计算验证。
3、设a=(1,2,3),b=(2 ,4,3),分别计算a./b,a.\b,a/b,a\b,分析结果的意义。
4、求矩阵方程的通解
5、求矩阵的行列式、逆矩阵、特征值和特征向量
6、求下列向量组的秩和它的一个最大无关组,并将其余向量用该最大无关组线性表示。
7、设有两个多项式,计算,,,。
8、求多项式的所有根,并计算分别在处的函数值。
9、求下列积分的数值解
⑴;⑵;⑶
10、求函数表示的曲面在区域上的面积。
11、用函数dblquad2计算二重积分的近似值:
,其中D是由直线所围成的区域。
展开阅读全文