文档库 最新最全的文档下载
当前位置:文档库 › 第一节 MATLAB 中的矩阵的输入

第一节 MATLAB 中的矩阵的输入

第一节 MATLAB 中的矩阵的输入
第一节 MATLAB 中的矩阵的输入

第一节 MATLAB 中的矩阵的输入

§1 直接输入

一、直接在工作窗中输入:

A=[2, 4, 6, 8;1 3 5 7; 0 0 0 0;1,0,1,0]

其意义是定义了矩阵 ,0101000075318642??????

? ??=A 二、如果矩阵中的元素是等步长的,可以用下面的方法

A=[1:0.2:2;1:6;2:2:12]

A=[1:5]'

“'”号在这里表示为转置,而 1:5 中间少了一个循环步长,此时将步长自动取为 1 。

§2 增删改

设已经定义 A=[1 2 3 4 5;10 8 6 4 2]; B=[0 1;1 0]; C=[1 2;2 4],

即已定义

A= B= C=

1 2 3 4 5 0 1 1 2

10 8 6 4 2 1 0 2 4

则命令:A=[[A(:,1:4);[C ,B]],[0 2 0 4]'] 将 A 定义成:

A= 而 A(:,3)=[]; 将删除 A 的第三列 ,得

1 2 3 4 0 A= 1 2 4 0

10 8 6 4 2 10 8 4 2

1 2 0 1 0 1 2 1 0

2 4 1 0 4 2 4 0 4

§3 命令生成

使用 MATLAB 命令生成矩阵一般使用下面的命令

1 命令 linspace ,它有两个格式:

a1=linspace(1,100)

%生成一个从1到100的有100 个元素的向量

a2=linspace(0,1)

%仍然是有 100 个元素但是是从 0 到 1 的向量

a3=linspace(0,-1) %请与上一个向量进行比较

上面是第一种格式 linspace(a,b),它是将 a 到 b 等分成 100份形成的向量。第二种

格式 linspace(a,b,n) 中的 n 为一个正整数,表示是从 a 到 b 等分成 n 份后形成的

向量。例如

a4=linspace(1,100,11)

%从1 到100 但只形成11 个元素的向量

a5=linspace(1,100,10) %自己体会这个命令作用

a6=linspace(0,1,11)'%加上了“'”表示转置

a7=linspace(0,-1,10) %自己体会这个命令作用

2 命令ones,zeros 分别形成元素全为1或全为零的矩阵它也有两种格式。请观察它们的作用:

ones(6,3) %生成6×3 阶元素全为 1 的矩阵

ones(5) %生成5 阶元素全为 1 的方阵

zeros(3,6) %生成3×6 阶元素全为零的矩阵

zeros(4) %生成四阶元素全为零的方阵

3 命令diag 生成对角阵及从矩阵的主对角线生成向量,例如:

diag([1 3 5 7]) %生成了以1 3 5 7 为主对角线的方阵:

ans=

1 0 0 0

0 3 0 0

0 0 5 0

00 0 7

相反如果先定义了一个三阶方阵:

A=[1 2 3;4 5 6;7 8 9]

显示:

A=

1 2 3

4 5 6

7 8 9

则命令a8=diag(A) 将用A 的主对角线生成新的列向量:

a8=

1

5

9

命令eye(n) 生成n 阶单位方阵,即主对角线上元素为1,其余元素为零的方阵。例如键入:A=eye(5) 将得到:

A=

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

0 0 0 0 1

第二节 MATLAB 文件处理

§1 文件编辑

如果要在 MATLAB 的工作窗定义矩阵,则用鼠标点击屏幕左上方的 File 选择

项,再从中选择 New 中的M-file 项并且用鼠标点击它,就打开了 MATLAB 文件

编辑窗并且可以在此窗中定义 MATLAB 矩阵了(注意对于已有的文件,可以选择 open 来打开它,然后对其进行修改)。在 MATLAB 文件编辑窗中定义的矩阵与工

作窗中定义的方法是完全一样。并且可以在MATLAB 文件编辑窗的菜单中使用菜

单命令直接运行。

可以在MATLAB 中使用菜单中的“File ”中的“Set path ”将当前工作文件夹定

义在你正在工作的文件夹。

§2 MATLAB 工作窗中变量值的保存与调用

MATLAB 工作窗中的变量在退出 MATLAB 工作状态后值不能保存,如果需

要保存,可以使用命令 save 将其存储到磁盘上,命令格式有两种:

第一种是用二进制格式来存储。例如先定义三个矩阵:

A1=[0:3;2*ones(4);4:-1:1] ; A2=[1 3 2 4];A3=zeros(3,1);

生成下列矩阵与向量:

().000,4231,123422223210321????

? ??==????? ??=A A A

键入:

save file1 A1 A2 A3

%用二进制格式以文件名 file1.mat 存储 A1,A2,A3

save file2.m A1 A3 –ascii

%用 ascii 码以文件名 file2.m 存储 A1,A3

我们还要注意:用二进制格式存储的文件连变量名一起存储并可再重新调入时

恢复变量的值,而用 ASCII 码存储的文件只存储了变量的值,而变量名是没有的。

用二进制格式存储的变量,可用命令 load 调用,调用格式为:

load <磁盘文件名>

例如,前面用 save file1 存储了所有变量 A1,A2,A3,调用时只要键入

load file1 即可。

第三节 MATLAB 中的矩阵运算

§1 矩阵运算命令与通常线性代数命令运算的异同

一、MATLAB 在运行时是以矩阵为单位进行运算的。它通常有两种运算,第一种是矩

阵运算,运算时满足线性代数中矩阵运算所规定一切运算法则,如加、减、乘,乘

方即幂运算(当然运算要符合规定的条件,例如矩阵 A 与矩阵 B 相乘,必

须 A 的列数等于 B 的行数),运算符号:

A+B , A -B , A B (注意“*”不能少) A^n

二、不同之处:

1、与通常矩阵运算不同之处在:在线性代数中矩阵不能与数相加减,而在

MATLAB 的矩阵运算中允许矩阵与数相加减。

2、函数命令可以直接作用到矩阵的每一个元素。

3、线性代数中矩阵没有除法,而MA TLAB 中有矩阵除法,例如:

输入 A=[1:3;4:6;7:9];b=[14,32,50]';c=A\b

显示: c=

2

4

4、函数作用到矩阵的每一个元素,例如如果令 A=[1 1/2 1/3; 1/2 1/4 1/8]*pi ,即

定义 ,8423

2???? ??=ππππππA 则 .)sin()sin()sin()sin()sin()sin()sin(84232???? ??=ππππππA

三、MATLAB 中除法运算的规定与意义:

1、运算定义:设已经定义好矩阵 A 与矩阵 B ,如果矩阵 A 与矩阵B 的行的维

数相同,则 MATLAB 中可以用矩阵 A 左除矩阵 B ,即可以令:

X=A\B

如果矩阵 A 与矩阵B 的列的维数相同,则 MATLAB 中可以用矩阵 A 右除矩阵 B ,

即可以令:

X=B/A

2、矩阵除法的意义

给出线性方程组 AX=B ,则 X=A 给出线性方程组的一个解。而 X=B/A 给出了线

性方程组 XA=B 的一个解。

目前我们用 MATLAB 求线性方程组的解只有三个方法:

当 A 是可逆方阵时,X=inv(A)*B 给出线性方程组AX=B 的唯一解。但是 A 不

可逆时方法失效。

可用命令 rref 化线性方程组 AX=B 的增广矩阵为行最简阶梯矩阵方法来求

解,但线性方程组可能出现无解(称为“超定”)、唯一解(称为“恰定”)及无穷多

解(称为“欠定”)的情形。

无论 A 是否可逆都可用MATLAB 除法求解,并且无论何种情形都是唯一解。

当方程存在唯一解时,三种方法求出的解是一样的。但是用除法作的解一般精

度更高。

方程为“超定”或者“欠定”时解意义则不同。

线性方程组 AX=b 为欠定时有无穷个解,X=A\b 得到其中解分量中零元素为最多

的一个特解。

线性方程组 AX=b 为超定时是无解的, 用

X=A\b

得到的是使范数 ||AX-b|| 为最小的解。我们不详细说明这个范数的意义,可理解

为使 AX-b 最接近于零的解。

例如方程组

??

???=++=++=++.50987,32654,1432z y x z y x z y x

通解为:

,121321????

? ??-+????? ??=????? ??t z y x

输入 A=[1:3;4:6;7:9];b=[14,32,50]';c=A\b

显示: c=

2

4

是其中有一个零分量的特解。

输入 d=[0 32 50]';g=A\d

显示 g =

1.0e+017 *

0.6305

-1.2610

0.6305

再输入 h=A*g-d

显示 h=32

96

14

因此 g 不满足 A*g=d ,只是使 A*g-d 尽可能接近于零。

§2 常用的数学运算命令

以下是一些在MATLAB 中最常用的数学运算命令(均用小写字母,命令的作用可在

MATLAB 中用 help <命令> 查询其作用与格式):

一、基本函数运算命令

1、三角函数: sin cos tan cot sec csc

2、反三角函数:asin acos atan acot asec acsc atan2(四象限反正切)

3、双曲函数: sinh cosh tanh coth sech csch

4、反双曲函数:asinh acosh atanh acoth asech acsch

5、复数:real imag conj angle

6、小数取整:fix(朝零方向),ceil(朝正无穷方向),floor(朝负无穷方向),round(四

舍五入)

7、对数与指数:log10 log exp

8、其它:sqrt abs sign sum prod solve

二、线性代数运算命令:

1、det inv rank rref eig cond

行列式求值命令 det , 矩阵求秩命令 rank ,求方阵的逆方阵命令,inv 求矩阵行最

简阶梯阵命令 rref ,求特征值与特征向量命令 eig ,求矩阵条件数命令 cond

三、多项式运算命令

MA TLAB 中用向量表示多项式,如 a=[ 1 2 3 0 4] 表示多项式:

,432234+++=x x x a

常用的多项式运算命令有:

1、多项式加减法:在次低的向量前面加零后使其元素个数相同,再按向量加减法

运算命令进行。

2、多项式 a 与多项式 b 相乘:c=conv(a, b);

3、多项式 a 除以多项式 b : [q, r]=deconv(a, b) q 是商, r 余项)

4、多项式求值: p1=polyval(a, x) (多项式 a 在点 x 处的值)

5、方阵多项式求值: p2=polyvalm(a, A) (矩阵多项式 a 在方阵 A 处的值)

6、多项式求根: p3=roots(a) (求多项式 a 的根)

7、多项式微分: p4=polyder(a)

8、多项式拟合: p5=polyfit(x,y,n)

例:x=[1 1.2 3 4.2 5]; y=x.^3-2*x.^2+3*x -1; p5=polyfit(x,y,3)

将得出: p5=1.0000 -2.0000 3.0000 -1.0000

四、高等数学中的数值运算命令

在MA TLAB 数值计算中很少有高等数学中的运算命令,下面只介绍两个:

1、求数值积分: trapz

2、差分: diff

MATLAB 中也有很多符号运算命令。但不在本课程中。在那些符号运算命令中能实

现许多高等数学中的运算。

五、显示格式

有 format rat, format long, format short, format long g, format short g,

format long e , format short e , format hex 等等。

第四节 MATLAB 的数组操作

前面我们谈到了 MATLAB 中有数与矩阵的加减法,这是线性代数中所没有的。

MATLAB 中还有许多与高等数学中内容不同的运算。这些运算对于求解实际问题

很有作用,它使编程比其它语言要简单方便得多。

MATLAB 中的数组运算就是其它计算机语言中所没有的使编程变得十分简单的

运算。

MATLAB 中的数组运算只在同阶矩阵中进行。

设 A,B 是两个已经定义好的同阶矩阵:

,,21222211121121

22221

11211??????? ??=??????? ??=mn m m n n mn m m n n b b b b b b b b b B a a a a a a a a a A 则数组运算 A.*B,A./B,A.^B 的值分别是: ,//////////.,*.2211222222212111`12121111221

122222221

2111`12121111??????? ??=??????? ??=mn mn m m m m n n n n mn mn m m m m n n n n b a b a b a b a b a b a b a b a b a B A b a b a b a b a b a b a b a b a b a B A .^^^^^^^^^.^2

211222222212111`12121111??????? ??=mn mn m m m m n n n n b a b a b a b a b a b a b a b a b a B A 除了前面讲过的数与矩阵的加减法(不算数组运算) 外,数与矩阵之

间还有下面的数组运算:

,^^^^^^^^^.^,//////////.21222211`121121222211`1211??????? ?

?=??????? ??=mn m m n n mn m m n n b a b a b a b a b a b a b a b a b a B a b a b a b a b a b a b a b a b a b a B a .^^^^^^^^^.^21

2222111211??????? ??=b a b a b a b a b a b a b a b a b a b A mn m m n n 从上面叙述可见矩阵与同阶矩阵之间(及数与矩阵之间)的数组运算的定义特点是:

1 定义在两个同阶矩阵或数与矩阵之间进行;

2 定义方法是前面一项与后面一项用小数点加运算符连结;

3 定义的实质是:当定义的运算在矩阵之间时,是相同位置上的元素进行由运

算符规定的运算。当定义的运算是矩阵与数之间,则是矩阵中的每一个元素与数进

行运算符规定的运算。

对于其他计算机语言,这些运算常常要通过双重循环才能完成,而在 MATLAB 中

只要简单地用“.”加运算符即可表示,这是 MATLAB 特别方便之处。

数组运算及函数运算定义容易记忆与使用,它在编程中十分方便,我们看后面

的例。

如果要画函数 e -x sin x 2 +1 在区间 [0,3] 上的图形,操作过程是:

x=0:0.01:3; %定义自变量 x 在区间 [0,3] 上的值

y=exp(x).*sin(x.^2)+1 %用数组运算计算函数值 y

plot(x,y) %作平面上的曲线图。

只用简单三行命令完成了在其他计算机语言中要用很长程序才能完成的程序,

这是 MATLAB 语言非常简便好用的原因。

第五节 MATLAB 作图

下面介绍 MATLAB 中的作图命令。

§1 二维作图命令plot

一、MATLAB 二维作图命令最常用的是 plot,除作图外,还有如下可控制的操作:

1、一张图上画多条曲线(可以使用hold命令)。

2、一个屏幕上开多个窗口作图(使用subplot命令)。

3、曲线选择线型、颜色(在每条曲线后加,’.b’ 或者,’color’,[1,0,0.5] 等)。

4、标注文字,使用命令:

title(‘字符’)图形标题

xlabel(‘字符’)x 轴标注,ylabel(‘字符’)y 轴标注,zlabel(‘字符’)z 轴标注,legend(‘字符’, ‘字符’,…) 可移动标注

text(x,y,(z),‘字符’) 在指定坐标标注

gtext(‘字符’) 用鼠标在图形中选择地方标注

5、坐标网格线显示与关闭命令grid

二、坐标轴控制(也适用于三维作图) axis

1、坐标轴刻度范围控制axis(xmin, xmax, ymin, ymax (, zmin, zmax))。

2、关闭坐标轴显示开关axis(‘off’) 或者axis off,axis(‘on’) 或者axis on

3、坐标轴等刻度命令axis(‘equal’) 或者axis equal

4、坐标轴等长命令axis(‘square’) 或者axis squal

5、使坐标等刻度与等长命令失效命令axis(‘normal’) 或者axis normal

三、下面介绍一个在实际应用中非常有用的命令:

ginput

该命令在三维空间中仍然可用,但效果不如二维空间中那么好。

四、背景色控制命令

figure(‘color’, [r, g, b]) 三维空间中此命令仍然适用。

五、程序标注

在程序中“%”后的部分用作标注。

六、还有许多二维作图命令,请大家参看有关参考书。我们仅就使用二维等值线contour命令用于求解线性方程组的例子。

MATLAB 二维作图命令contour可以用于求二维超越方程组的数值解。请看exmaple1.m:

x=[0:0.01:2.4995];

y=[0:0.01:2.4995]';

A=(0*y+1)*sin(x)+y.^2*(0*x+1)+log(5-(0*y+1)*x-y*(0*x+1))-7;

contour(x,y,A,[0,0])

hold on

B=3*(0*y+1)*x+2.^y*(0*x+1)-(5-(0*y+1)*x-y*(0*x+1)).^3+1;

contour(x,y,B,[0,0])

hold off

此程序用于求方程组:

???-=---+=--++.

1)5(23,7)5ln(sin 32y x x y x y x y 的数值解。

此方法的优点是:可以看到图形全貌,可以求出多解情形,可以获极高精度。

练习 1:求曲线x e

y x sin 2-=与曲线1)1cos(22++=x x y 在区间[0, π]上的所有交点。

练习 2:求方程组 ()()???=+-+-=+++.

4cos )2(,5sin 2222222y x y x y x y x 的数值解。要求将解代入方程后每个方程左方减去右方后的绝对值小于 0.00001。

§2 三维作图命令

一、MATLAB 三维作图曲线作图命令最常用的是 plot3,contour3。除作图外,还有

如下可控制的操作:

三维曲线作图是对参数式为

??

???≤≤===).(),(),

(),(b t a t Z z t Y y t X x

作图。例如螺旋线: ?????≤≤===)100(,2/,

sin ,cos πt t z t y t x

作图命令是

t=[0:0.01:10*pi];x=cos(t);y=sin(t);z=t/2; plot3(x,y,z)

contour3是三维等值线作图。

二、三维曲面作图

常用的三维曲面作图命令有:mesh , surf, meshc, meshz , waterfall, 我们重点介绍

mesh 与 surf 。这两个命令都是作曲面图形,但是 mesh 是用网格作图,而 surf 是

用曲面片作图。效果有少许不同,但作图编程是相同的(这个作图过程比较复杂)。事

实上它们都是用曲面参数式

?????≤≤≤≤===),,(),,(),

,(),,(d v c b u a v u z z v u y y v u x x

作的图,因此要画曲面图形,首先得会写上面的参数式。然后会用上面的参数式编

程。注意在编程时 z 都是二维矩阵,行数与向量 u 的维数相同,列数与 v 的维数

相同,x, y 可以是与 z 维数相同的二维矩阵也可以是向量。请看下面马鞍面

22y x z -= 的作图过程:

y=[ -1 :0.1: 1]’; x=y’; z=(0*y+1)*x..^2- y.^2* (0*x+1); mesh(x,y,z);

这个命令等价于

y= [-1 :0.1: 1]’; x=y’; z= ones(size(y))*x.^2 - y.^2*ones(size(x)); surf(x,y,z);

上面作的图是以 z 的高度作为图形色彩数据的(这是缺省时的数据)。如果加上颜色、

光照、纹理、视角等设置,可以得出十分漂亮的图形。请看 example2.m 。

有时作图的参数式要使用比较复杂的数学运算,例如 2001 年全国数学建模竞赛

时要求从血管的 100 张切片中读出血管的中心与半径。竞赛中要求将血管中心线向

三个坐标平面投影。但是我们根据血管中心线可画出血管的三维图象。显然这更好

看更直观。曲面参数式的推导见《广西大学学报》2003年第3期,而程序请看

example3.m 。

练习3:画一个求生圈的图。

提示:求生圈的曲面参数方程为:

)2,0(),sin(),

sin())cos(5(),cos())cos(5(π≤≤?????=+=+=v u u z v u y v u x

练习4:画出在二维区域 x 2 + y 2≤1 上的马鞍面 z = x 2- y 2。

练习5:作曲面 z =x 2+y 2 与平面 4x +2y +5z =20 相交的图(要

求平面只画出被曲面截出的部分,参考右图)。

练习6:作圆柱面 x 2+z 2=1 与圆柱面 y 2+z 2=1 相交的图(要

求平面只画出在每卦限的部分)。

§3 MATLAB 动画

MATLAB 中的动画功能不是太强,并且需要使用 MATLAB 的底层作图命令,即图形的句柄操作。

MATLAB 中的作图命令如果使用了赋值语句,即将作图赋给了某个变量,则该变量即为此张图形的句柄。可以对此句柄设置一些图形属性,对于句柄图形我们在前面已经用到了,例如马鞍面的图形中的赋值语句

aa=surf(X,Y,Z);

就是将曲面的句柄赋给aa了,然后用

set(aa, 'Facecolor', [0,0.7,0], bb,' Facecolor',[ 0.7,0,0.7])

设置曲面颜色。

MATLAB 动画实际上就是在句柄中设置了图形将是被复盖还是改写等属性,然后在作图时按不同的位置画图(同时擦除前面的图形或者复盖前面的图形以实现动画)。

由于作动画一般要涉及编程,我们将此部分内容放到第四节中。

在图形的属性控制中要注意区分各种图形对象:figure, axes, line, patch, surface, image, text 等等。

§4 MATLAB 图象处理

MATLAB 可对图象作处理,常用的简单命令有:

imread, image, colormap

imread 可以读出图象数据,而image可以将图象数据显示为图象,而colormap可以设置图象色彩。

练习7:本文件夹中有一张图“figure0”,是2002年全国数学建模大赛中的一张图,要求从图中读出图形的内切圆圆心与半径。

在MA TLAB图象处理中还有光照、色彩、视角等许多处理。由于水平与时间关系,只能简单介绍。

第六节 MATLAB 编程

一、MATLAB 编程

MATLAB 可以单步运行,也可以编程运行。

与所有软件编程一样,MA TLAB中也有条件、分支、循环等语句。

条件语句:if … end 或者if … else … end

循环语句:for … end 或者while … end

需要指出,在其他许多语言中需要循环的地方在MATLAB中是不需要循环的。

下面我们看一个动画程序:画单摆的运动程序:pend.m。

figure('color',[1 1 1])

plot([-0.2;0.2],[0;0],'color','y','linestyle','-','linewidth',10);%画悬线的横梁

g=9.8; %重力加速度

l=1; %线长

theta0=pi/6; %初始角度

x0=l*sin(theta0); %初始x 值

y0=-l*cos(theta0); %初始y 值

axis([-0.75,0.75,-1.25,0]); %画坐标范围

axis('off'); %关闭坐标显示

head=line(x0,y0,'color','r','linestyle','.','erasemode','xor','markersize',40); %定义小球格式body=line([0;x0],[0;y0],'color','b','linestyle','-','erasemode','xor'); %定义悬线格式

t=0; %时间初值

dt=0.0005; %时间增量

while 1 %死循环(关闭窗口后中止循环) t=t+dt;

theta=theta0*cos(sqrt(g/l)*t); %计算时刻t 时的幅角

x=l*sin(theta); %计算时刻t 时的x 坐标

y=-l*cos(theta); %计算时刻t 时的y 坐标

set(head,'xdata',x,'ydata',y); %计算时刻t 时小球的位置set(body,'xdata',[0;x],'ydata',[0;y]); %计算时刻t 时悬线的位置drawnow; %重画小球与悬线

end

二、程序与函数

将MA TLAB运行中的每一句写在扩展名为“m”的文本文件中,就得到MATLAB 程序文件。程序中的变量值都在工作窗中。如果是写成

function [u , v, …]=fun(x , y, …)

则是MATLAB函数,函数参数x , y 可以是变量、向量或者矩阵,返回值u, v 也可以是变量、向量或者矩阵,存储时函数名必须与存储文件名相同。

例如,运行redotree(n, B) (设的初值为B=[0 0;0 1],取n=5 或者n=6),可以画

出一棵树的图形。而运行leafage1(n)可以画出一张树叶。

练习8:作曲面 z =x 2+y 2 与平面 4x +2y +5z =c ,c 从 40 变化到 20 的动画图

第七节 数据拟合

MATLAB 有数据插值与数据拟合功能,使用的命令是:interpn(注意这里的“n ”必须是一个具体正整数,一般为 n=1, 2, 3, …,表示)。

例如:运行exmaple51.m ,对南半球气旋作可视化显示图。

%exmaple51.m--南半球气旋数据,程序实现气旋数据可视化

y=5:10:85;x=1:12;

z=[ 2.4, 1.6, 2.4, 3.2, 1.0, 0.5, 0.4, 0.2, 0.5, 0.8, 2.4, 3.6; 18.7, 21.4, 16.2, 9.2, 2.8, 1.7, 1.4, 2.4, 5.8, 9.2, 10.3, 16; 20.8, 18.5, 18.2, 16.6, 12.9, 10.1, 8.3, 11.2, 12.5, 21.1, 23.9 ,25.5; 22.1, 20.1, 20.5, 25.1, 29.2, 32.6, 33.0, 31.0, 28.6, 32.0, 28.1, 25.6; 37.3, 28.8, 27.8, 37.2, 40.3, 41.7, 46.2, 39.9, 35.9, 40.3, 38.2, 43.4; 48.2, 36.6, 35.5, 40, 37.6, 35.4, 35, 34.7, 35.7, 39.5, 40, 41.9; 25.6, 24.2, 25.5, 24.6, 21.1, 22.2, 20.2, 21.2, 22.6, 28.5, 25.3, 24.3;

5.3, 5.3, 5.4, 4.9, 4.9, 7.1, 5.3, 7.3, 7, 8.6,

6.3, 6.6; 0.3, 0, 0, 0.3, 0, 0, 0.1, 0.2, 0.3, 0, 0.1, 0.3];

[xi,yi]=meshgrid(1:12,5:85); zi=interp2(x,y,z,xi,yi,'cubic');

surf(xi,yi,zi)

练习9:一天24小时每两小时的温度记录如下:

11 9 9 10 18 24 28 27 25 20 18 15 13

请用插值方法用出一天24小时的温度变化图。

用命令 curvefit(‘fun’,x0 , x , y) 可以作曲线拟合,其拟合功能比 MATHMATICA

更强。如某数据近似符合规律y (t )=a+be -kt ,已知从100到1000时分别对应于

cdata=0.00001*[454 499 535 565 590 610 626 639 650 659];

求 a, b, k 使

()∑=--+10

12

i i Kt c be a i 尽可能地小。此问题的解可由运行exmaple52.m 得到。

附录:内插及曲线拟合

我们常常会有从实验或是对物理现象观察所收集到的数据,分析这些数据需要有辅助的工具。通常这些原始数据如果会制成图,是成点状分布。我们需要将这些点连成曲线,再进一步将曲线转换成有意义的数学函数,才能对数据做比较和分析。上述的过程涉及到内插(interpolation)及曲线拟合(curve-fitting),我们会在以下介绍。

1 内插

假设一组已知的数据其型态为f(x k), =1, 2, …, n, x1=a, x x n=c, 假设某些点x i并不属于上述的x k但是a≤x i≤c,如果我们要估计这些点的函数值f(x i) 就须要做内插(interpolation)。我们可视原数据所描述的函数复杂程度来选择不同的数值内插方法。

? 1 内插

o 1.1 一维内插

o 1.2 二维内插

o 1.3 Spline 内插

1.1 一维内插

线性内插是假设在二个已知数据中的变化为线性关系,因此可由已知二点的座标(a, b)去计算通过这二点的斜线,公式如下:

其中a

\pcxfile[12cm,5cm]{fig9_1.pcx}

\caption{线性式与spline 函数的曲线拟合}

线性内插是最简单的内插方法,但其适用范围很小;如果原来数据的函数f有极大的变化,假设其数据点之间为线性变化并不合理。所以我们可以用二次、三次方程组或是另一种称为spline函数来近似原来数据的函数。MATLAB的一维内插函数是interp1,其语法为interp1(x,y,xi),interp1(x,y,xi,'method');其中的x,y是原已知的数据的x,y值,而xi则是要内插的数据点,另外method可以设定内插方法有

linear,cubic,spline,分别是一次、三次方程组和spline函数,其中预设方法是linear。

如果数据的变化较大,以spline函数内插所形成的曲线最平滑,所以效果最好。而三次方程组所得到的内插曲线平滑度,则介于线性与spline函数之间。

我们以下面的例子说明。假设有一个汽车发动机在定转速下,温度与时间(单位为sec)的三次量测值如下

其中温度的数据从20o C变化到503o C,如果要估计在t=2.6, 4.9 sec 的温度,可以下列指令计算

x=[0 1 2 3 4 5]'; % 键入时间

y=[0 20 60 68 77 110]'; % 键入第一组时间

y1=interp1(x,y,2.6) % 要内插的数据点为2.6

y1 = % 对应2.6 的函数值为64.8

64.8

y1=interp1(x,y,[2.6 4.9]) %内插数据点为2.6, 4.9,注意用[ ]将多个内插点放在其中

y1 =

64.8

106.7

y1=interp1(x,y,2.6,'cubic') % 以三次方程组对数据点2.6 作内插

y1 = % 对应2.6 的函数值为66.264

66.264

y1=interp1(x,y,2.6,'spline') % 以spline函数对数据点2.6 作内插

y1 = % 对应2.6 的函数值为66.368

66.368

以下的例子还配合绘图功能,用以比较不同内插方法的差异。

h=1:12;

temp=[5 8 9 15 25 29 31 30 22 25 27 24]; % 这组温度数据变化较大

plot(h,temp,'--',h,temp,'+') % 将线性内插结果绘图

h_3=1:0.1:12 % 要每0.1小时估计一次温度值

t_3=interp1(h,temp,h_3,'cubic') % 以三次方程组做内插

t_s=interp1(h,temp,h_3,'spline') % 以spline函数做内插

hold on

subplot(1,2,1)

plot(h,temp,'--',h,temp,'+',h_3,t_3) % 将线性及三次方程组内插绘图

subplot(1,2,2)

plot(h,temp,'--',h,temp,'+',h_3,t_s) % 将线性方程组及spline内插绘图

hold off

7.1.2 二维内插

二维内插与一维内插的区别是二维内插数据为二维,语法结构为interp2(X,Y,Z,XI,YI),其中X,Y,Z为已知数据,Z=Z(X,Y),而XI,YI 为要插值的数据点;如果语法结构为interp2(X,Y,Z,XI,YI,'method'),其中method可以为linear,cubic表示线形或三次方插值,我们以下例说明:

假设一汽车的转速(单位为:rpm)、温度(单位为:o C)、时间(单位为:sec)如下表:

其中温度的数据为20o C到503o C,如果要估计t=2.6, sec, rpm=2500的温度,可以利用下面的语句:

d2(:,1)=[0 1 2 3 4 5]'; % 将时间输入

d2(:,2)=[2000 20 60 68 77 110]'; % 将rpm=2000的温度输入

d2(:,3)=[3000 110 180 240 310 405]'; % 将rpm=3000 的温度输入

d2(:,4)=[4000 176 220 349 450 503]'; % 将rpm=4000 的温度输入

t=d2(2:6,1); %选择做内插的时间

rpm=d2(1,2:4); % 选择做内插的rpm

temp=d2(2:6,2:4); % 选择做内插的温度

temp_i=interp2(rpm,t,temp,2500,2.6) % 以线形内插决定rpm=2500,t=2.6 的温度

temp_i =

140.4000

1.3 Spline 内插

关于spline内插我们在1.1节已介绍过,它可以用interp1指定内插方式为spline来做。另一种方式也可以用spline(x,y,xi)来做,其中的x,y,xi的用法与interp1中的语法相同。事实上这二种方法采用相同的spline 函数做运算,也就是当我们执行

interp1(x,y,xi,'spline')时,MATLAB即呼叫spline(x,y,xi)做运算,再将计算结果传回interp1。

我们还是以在1.1 节相同的数据做spline 内插示范,

x=[0 1 2 3 4 5]';

y=[0 20 60 68 77 110]';

y1=spline(x,y,2.6)

y1 =

67.3

y1=spline(x,y,[2.6,4.9])

y1 =

67.3 105.2

3 曲线拟合

曲线拟合(curve-fitting) 故名思义就是要将一组离散的数据以一个近似的曲线方程组来代表。有了这个解析形态的方程组,我们就可以很方便去运用它。曲线拟合与前述的内插有许多相似之处,但是这二者最大的区别在于曲线拟合要找出一个曲线方程组而内插仅是要求出内插数值即可。

要找出近似一组数据(也就是最能代表这些数据)的曲线方程组,有许多选择,从简单的一阶线性方程组到高阶的多项式都有。我们以下就介绍二种方法:线性回归(linear regression),多项式回归(polynomial regression)。

3 曲线拟合

o 3.1 线性回归

o 3.2 多项式回归

o 3.3 多项式拟合及函数计算

3.1 线性回归

我们以一简单数据组来说明什么是线性回归。假设有一组数据型态为y=y(x),其中

x={0, 1, 2, 3, 4, 5}, y={0, 20, 60, 68, 77, 110}

如果我们要以一个最简单的方程组来近似这组数据,则非一阶的线性方程组莫属。先将这组数据绘图如下plot(x, y)

图中的斜线是我们随意假设一阶线性方程组y=20x,用以代表这些数据的一个方程组。以下将上述绘图的MATLAB 指令列出,并计算这个线性方程组的y 值与原数据y 值间误差平方的总合。

x=[0 1 2 3 4 5];

y=[0 20 60 68 77 110];

y1=20*x; % 一阶线性方程组的 y1 值

sum_sq = sum(y-y1).^2); % 误差平方总合为 573

axis([-1,6,-20,120])

plot(x,y1,x,y,'o'), title('Linear estimate'), grid

如此任意的假设一个线性方程组并无根据,如果换成其它人来设定就可能采用不同的线性方程组;所以我们 须要有比较精确方式决定理想的线性方程组。我们可以要求误差平方的总合为最小,做为决定理想的线性方 程序的准则,这样的方法就称为最小平方误差(least squares error)或是线性回归。MATLAB 的polyfit 函数提供了 从一阶到高阶多项式的回归法,其语法为polyfit(x,y,n),其中x,y 为输入数据组n 为多项式的阶数,n=1就是一阶 的线性回归法。polyfit 函数所建立的多项式可以写成

0111)(a x a x a x a x f n n n n ++++=--

从polyfit 函数得到的输出值就是上述的各项系数n n a a a a ,,,,110- ,以一阶线性回归为例n=1,所以只有10,a a 二个输出值。如果指令为coef=polyfit(x,y,n),则coef(1)= 0a , coef(2)= 1a ,...,coef(n+1)= n a 。注意上式对n 阶的多 项式会有 n+1 项的系数。我们来看以下的线性回归的示范:

x=[0 1 2 3 4 5];

y=[0 20 60 68 77 110];

coef=polyfit(x,y,1); % coef 代表线性回归的二个输出值

a0=coef(1); a1=coef(2);

ybest=a1*x+a0; % 由线性回归产生的一阶方程组

sum_sq=sum(y-ybest).^2); % 误差平方总合为 356.82

matlab矩阵操作汇总

matlab矩阵操作大全 1.1.1数值矩阵的生成 1.实数值矩阵输入 MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。 不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多 重的方括号。如: >> Time = [11 12 1 2 3 4 5 6 7 8 9 10] Time = 11 12 1 2 3 4 5 6 7 8 9 10 >> X_Data = [2.32 3.43 ; 4.37 5.98] X_Data = 2.43 3.43 4.37 5.98 >> vect_a = [1 2 3 4 5] vect_a = 12~ 3 4 5 >> Matrix_B = [1 2 3 ; >> 2 3 4 ; 3 4 5] Matrix_B = 1 2 3 2 3 4 3 4 5 >> Null_M = [ ] %生成一个空矩阵

2 .复数矩阵输入 复数矩阵有两种生成方式: 第一种方式 1/ 13

例1-1 >> a="2".7。b=13/25 >> C 二[1,2*a+i*b,b*sqrt(a) 5.4000 + 0.5200i 0.8544 5.3000 4.5000 第2种方式 例1-2 >> R=[1 2 3 。 4 5 6], M=[11 12 13 。 14 15 16] R = I 2 3 4 5 6 M = II 12 13 14 15 16 >> CN="R"+i*M CN = 1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i 4.0000 +14.0000i 5.0000 +15.0000i 6.0000 +16.0000i si n(pi/4),a+5*b,3.5+1] C= 1.0000 0.7071

矩阵在matlab中的基本命令

一、矩阵的表示 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 二,矩阵的创建: 1、直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是:e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 2、利用MATLAB函数创建矩阵 基本矩阵函数如下: (1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n 维的全1矩阵; (2) zeros()函数:产生全为0的矩阵;

(3) rand()函数:产生在(0,1)区间均匀分布的随机阵; (4) eye()函数:产生单位阵; (5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。 3、利用文件建立矩阵 当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵。 二、矩阵的简单操作 1.获取矩阵元素 可以通过下标(行列索引)引用矩阵的元素,如Matrix(m,n)。 也可以采用矩阵元素的序号来引用矩阵元素。 矩阵元素的序号就是相应元素在内存中的排列顺序。 在MATLAB中,矩阵元素按列存储。 序号(Index)与下标(Subscript )是一一对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。 其相互转换关系也可利用sub2ind和ind2sub函数求得。 2.矩阵拆分

Matlab界面、矩阵操作

科学计算与MATLAB语言

教学内容 第1讲介绍MATLAB概述与运算基础第2讲介绍MATLAB程序设计 第3讲MATLAB文件操作 第4讲绘图形功能 第5讲线形代数中的数值计算问题 第6讲数据处理方法与多项式 第7讲MATLAB符号计算 第8讲MATLAB的图形用户界面设计

第一讲MATLAB概述与运算基础MATLAB语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,自1984年由美国MathWorks公司推向市场以来,历经十多年的发展与竞争,现已成为国际公认的最优秀的工程应用开发环境。MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。

在欧美各高等院校,MATLAB已经成为线性代数、自动控制理论、数字信号处理、时间序列分析、动态系统仿真、图像处理等课程的基本教学工具,成为大学生、硕士生以及博士生必须掌握的基本技能。 MATLAB: 是英文MATrix LABorotory(矩阵实验室) 的缩写。

一. MATLAB特点:

1. 数值计算和符号计算功能 MATLAB的数值计算功能包括:矩阵运算、多项式和有 理分式运算、数据统计分析、数值积分、优化处理等。符 号计算将得到问题的解析解。 2.MATLAB语言 MATLAB除了命令行的交互式操作以外,还可以程序方式 工作。使用MATLAB可以很容易地实现C或FORTRAN语言的几乎全部功能,包括Windows图形用户界面的设计。 3.图形功能 MATLAB提供了两个层次的图形命令:一种是对图形句柄进行的低级图形命令,另一种是建立在低级图形命令之上的高级图形命令。利用MATLAB的高级图形命令可以轻而易举地绘制二维、三维乃至四维图形,并可进行图形和坐标的标识、视角和光照设计、色彩精细控制等等。

matlab中的矩阵的基本运算命令

1.1 矩阵的表示 1.2 矩阵运算 1.2.14 特殊运算 1.矩阵对角线元素的抽取 函数diag 格式X = diag(v,k) %以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。 X = diag(v) %以v为主对角线元素,其余元素为0构成X。 v = diag(X,k) %抽取X的第k条对角线元素构成向量v。k=0:抽取主对角线元素;k>0:抽取上方第k条对角线元素;k<0抽取下方第k条对角线元素。 v = diag(X) %抽取主对角线元素构成向量v。 2.上三角阵和下三角阵的抽取 函数tril %取下三角部分 格式L = tril(X) %抽取X的主对角线的下三角部分构成矩阵L L = tril(X,k) %抽取X的第k条对角线的下三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。函数triu %取上三角部分 格式U = triu(X) %抽取X的主对角线的上三角部分构成矩阵U U = triu(X,k) %抽取X的第k条对角线的上三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。3.矩阵的变维 矩阵的变维有两种方法,即用“:”和函数“reshape”,前者主要针对2个已知维数矩阵之间的变维操作;而后者是对于一个矩阵的操作。 (1)“:”变维 (2)Reshape函数变维 格式 B = reshape(A,m,n) %返回以矩阵A的元素构成的m×n矩阵B B = reshape(A,m,n,p,…) %将矩阵A变维为m×n×p×… B = reshape(A,[m n p…]) %同上 B = reshape(A,siz) %由siz决定变维的大小,元素个数与A中元素个数 相同。 (5)复制和平铺矩阵 函数repmat 格式 B = repmat(A,m,n) %将矩阵A复制m×n块,即B由m×n块A平铺而成。 B = repmat(A,[m n]) %与上面一致 B = repmat(A,[m n p…]) %B由m×n×p×…个A块平铺而成 repmat(A,m,n) %当A是一个数a时,该命令产生一个全由a组成的m×n矩阵。 1.3 矩阵分解 1.3.1 Cholesky分解 函数chol 格式R = chol(X) %如果X为n阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足R'*R = X;若X非正定,则产生错误信息。 [R,p] = chol(X) %不产生任何错误信息,若X为正定阵,则p=0,R与上相同;若X非正定,则p为正整数,R是有序的上三角阵。 1.3.2 LU分解

matlab矩阵的表示和简单操作

matlab矩阵的表示和简单操作 一、矩阵的表示 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 二,矩阵的创建: 1、直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是:e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 2、利用MATLAB函数创建矩阵 基本矩阵函数如下: (1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand()函数:产生在(0,1)区间均匀分布的随机阵; (4) eye()函数:产生单位阵; (5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。 3、利用文件建立矩阵 当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n 的二维矩阵。 二、矩阵的简单操作 1.获取矩阵元素 可以通过下标(行列索引)引用矩阵的元素,如Matrix(m,n)。 也可以采用矩阵元素的序号来引用矩阵元素。 矩阵元素的序号就是相应元素在内存中的排列顺序。 在MATLAB中,矩阵元素按列存储。 序号(Index)与下标(Subscript )是一一对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。 其相互转换关系也可利用sub2ind和ind2sub函数求得。

MATLAB矩阵及其运算函数表

MATLAB 矩阵及其运算函数表 函数名函数功能 abs( ) 绝对值、负数的模、字符串的ASCII码值都可用来求字符串矩阵所 对应的ASCII码数值矩阵double( ) char( ) 可以把ASCII码数值矩阵转换为字符串矩阵 fix( ) 向零方向取整 floor( ) 不大于自变量的最大整数 ceil( ) 不小于自变量的最小整数 round( ) 四舍五入到最邻近的整数 rem(x,y) 求余函数 mod(x,y) % exp( ) 指数函数 [ ] 空操作符 format 格式符设置或改变数据输出格式 (其中格式符决定数据的输出格式) e1:e2:e3 冒号表达式可以产生一个行向量 (其中e1为初始值,e2为步长,e3为终止值) linspace(a,b,n) 产生一个行向量 (其中a和b是生成向量的第一个和最后一个元素,n是元素总数) [注:linspace(a,b,n)与a:(b-a)/(n-1):b等价] A(:,j) 表示取A矩阵的第j列全部元素 A(i,:) 表示A矩阵第i行的全部元素 A(i,j) 表示取A矩阵第i行、第j列的元素 A(i:i+m,:) 表示取A矩阵第i~i+m行的全部元素 A(:,k:k+m) 表示取A矩阵第k~k+m列的全部元素 A(i:i+m,k:k+m) 表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素 zeros 产生全0矩阵(零矩阵) ones 产生全1矩阵(幺矩阵) eye 产生单位矩阵 rand 产生0~1间均匀分布的随机矩阵 randn 产生均值为0,方差为1的标准正态分布随机矩阵 zeros(size(A)) 建立一个与矩阵A同样大小的零矩阵 reshape(A,m,n) 在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵magic(n) 生成一个n阶魔方矩阵(其每行、每列及两条对角线上的元素和都相等) vander(V) 生成以向量V为基础向量的范得蒙矩阵(最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积) hilb(n) 生成希尔伯特矩阵 invhilb(n) 求n阶的希尔伯特矩阵的逆矩阵 (用一般方法求逆会因原始数据的微小扰动而产生不可靠的计算结果) toeplitz(x,y) 生成一个以x为第1列,y为第1行的托普利兹矩阵(除第1行第1列外,

MATLAB中矩阵常用的操作函数

MATLAB中矩阵常用的操作函数 1. zeos : 生成零矩阵 2. ones : 生成1矩阵 3. eye : 生成单位矩阵 4. rand : 返回[0,1]之间的平均分布的随机数(矩阵) 5. randn : 返回标准正态分布的随机数(矩阵) 6. mean : 返回列的均值 7. std : 返回列的方差 8. magic : 返回魔方矩阵,即行、列,对角线元素之和都相等的矩阵 9. hilb : 返回Hilbert矩阵,即H(i,j)=1/(i+j-1) 的矩阵 10. toeplitz : 返回toeplitz矩阵 11. 常用运算: 和:A+B 积:A*B 转置:A',注意:如果A是复矩阵,则A'是共轭转置 行列式:det(A) 逆:inv(A) 内积:dot(a, b) 秩:rank(A) 迹:trace(A) 12. 线性方程组:Ax=b,可以用左除运算:x=A\b;也可以用逆运算:x=inv(A)*b,但效率不如左除运算。 13. Jordan 标准型:jordan(A),返回A的Jordan标准型。或者用两个参数接收结果:[V, J] = jordan(A),那么J是A的Jordan标准型,V是用到的相似变换矩阵,即A=V*J*inv(V)。 14. SVD分解,即奇异值分解:[U, S, V] = svd(A),A=USV'。 15. 特征值:eig(A)返回A的所有特征值。如果用两个参数接收结果:[E, F] = eig(A),那么E 的列是A的特征向量,F是A的特征值。 16. 范数: 1范数:norm(A, 1) 2范数:norm(A, 2) 无穷范数:norm(A, inf) Frobenius范数(也叫Euclid范数,简称F-范数或者E-范数),即A全部元素平方和的平方根:norm(A, 'fro') 17. 矩阵函数:通用方法是funm(A, @fun),即计算矩阵A的fun函数。

6---matlab---对矩阵中元素的操作

对矩阵中元素的操作:删除某一行: clc clear all a=[1 2 3;4 5 6] a(:,3)=[]; a 结果: a = 1 2 3 4 5 6 a = 1 2 4 5 >> 添加一行元素:clc

a=[1 2 3;4 5 6] a(3,:)=[7 8 9] 结果: a = 1 2 3 4 5 6 a = 1 2 3 4 5 6 7 8 9 >>

clc clear all a=ones(2,3) b=zeros(1,2) c=eye(2) d=diag(1:3) e=diag([1 2 3;4 5 6]) f=rand(2,3) g=randn(2,3) g1=tril(g) g2=triu(g) 结果: a = 1 1 1 1 1 1 b =

0 0 c = 1 0 0 1 d = 1 0 0 0 2 0 0 0 3 e = 1 5

f = 0.8147 0.1270 0.6324 0.9058 0.9134 0.0975 g = -0.4336 3.5784 -1.3499 0.3426 2.7694 3.0349 g1 = -0.4336 0 0 0.3426 2.7694 0 g2 = -0.4336 3.5784 -1.3499 0 2.7694 3.0349

程序四: 在(30,50)之间的随机分布的五阶矩阵: 程序: a=rand(5) b=30.*a+20 结果: a = 0.3171 0.7655 0.6463 0.6551 0.3404 0.9502 0.7952 0.7094 0.1626 0.5853 0.0344 0.1869 0.7547 0.1190 0.2238 0.4387 0.4898 0.2760 0.4984 0.7513 0.3816 0.4456 0.6797 0.9597 0.2551 b = 29.5130 42.9655 39.3894 39.6529 30.2116 48.5067 43.8560 41.2809 24.8784 37.5580 21.0334 25.6062 42.6406 23.5699 26.7144 33.1623 34.6929 28.2808 34.9509 42.5380 31.4468 33.3676 40.3911 48.7923 27.6529

matlab中矩阵基本运算命令.docx

1.1矩阵的表示 1.2矩阵运算 1.2.14特殊运算 1.矩阵对角线元素的抽取 函数diag 格式X = diag(v,k)% 以向量 v 的元素作为矩阵 X 的第 k 条对角线元素,当 k=0 时, v 为 X 的主对角线;当 k>0 时,v 为上方第 k 条对角线;当 k<0 时, v 为下方第 k 条对角线。 X = diag(v)% 以 v 为主对角线元素,其余元素为 0 构成 X。 v = diag(X,k)%抽取 X 的第 k 条对角线元素构成向量 v。k=0:抽取主对角线元素; k>0 :抽取上方第 k 条对角线元素;k<0 抽取下方第 k 条对角线元素。 v = diag(X)% 抽取主对角线元素构成向量 v。 2.上三角阵和下三角阵的抽取 函数tril% 取下三角部分 格式L = tril(X)%抽取 X 的主对角线的下三角部分构成矩阵L L = tril(X,k)% 抽取 X 的第 k 条对角线的下三角部分; k=0 为主对角线; k>0 为主对角线以上; k<0 为主对角线以下。 函数triu% 取上三角部分 格式U = triu(X)%抽取 X 的主对角线的上三角部分构成矩阵U U = triu(X,k)% 抽取 X 的第 k 条对角线的上三角部分; k=0 为主对角线; k>0 为主对角线以上; k<0 为主对角线以下。3.矩阵的变维 矩阵的变维有两种方法,即用“:”和函数“reshape,”前者主要针对 2 个已知维数矩阵之间的变维操作;而后者是对 于一个矩阵的操作。 (1)“:”变维 (2)Reshape 函数变维 格式 B = reshape(A,m,n)%返回以矩阵 A 的元素构成的 m×n 矩阵 B B = reshape(A,m,n,p,)% 将矩阵 A 变维为 m×n×p× B = reshape(A,[m n p])%同上 B = reshape(A,siz)% 由 siz 决定变维的大小,元素个数与 A 中元素个数 相同。 (5)复制和平铺矩阵 函数repmat 格式 B = repmat(A,m,n)% 将矩阵 A 复制 m×n 块,即 B 由 m×n 块 A 平铺而成。 B = repmat(A,[m n])%与上面一致 B = repmat(A,[m n p]) %B 由 m×n×p× 个 A 块平铺而成 repmat(A,m,n)%当 A 是一个数 a 时,该命令产生一个全由 a 组成的 m×n 矩阵。 1.3矩阵分解 1.3.1Cholesky 分解 函数chol 格式R = chol(X)% 如果 X 为 n 阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足 R'*R = X ;若 X 非正定,则产生错误信息。 [R,p] = chol(X)% 不产生任何错误信息,若X 为正定阵,则p=0 ,R 与上相同;若X 非正定,则p 为正整数, R 是有序的上三角阵。 1.3.2 LU 分解

MATLAB(1)-矩阵的基本操作

第二章 MATLAB 基础知识上机练习题目 (1)矩阵的基本操作 一、 答卷形式:新建一个word 文档,将以下每道练习题使用的命令(或程 序)及其结果按顺序排列在该word 文档中,文档中必须写上自己的名字和学号,并以自己的名字命名,最后提交word 文档。 二、 练习题目: 1、 生成一个3×3的矩阵A ,它的元素为你任意指定的9个不同的正整数,计算A 的行列式A 并将其赋值给变量b ,若b ≠0,求出矩阵B =1A -。若b =0,重新选择A 。 将所生成的矩阵A 及B 连在一起,构成一个3×6的矩阵,并付给变量C ,在workspace 中观察C 的类型、大小以及当前值。并用save 命令将C 存储为一个数据文件以备下列题目利用Load 命令调用; 2、 利用load 命令调出C 并取出它的1-2行,2-4列的子块,另存为一个2×3的矩阵d ,生成一个与d 相同大小的随机矩阵矩阵e ,计算d +e , d -e ,e d '*,d .*e , ()5 e d ' ,将e d '*结果中所有的对角线元素全部换为0.5。 3、 完成下列计算: 4、

4、利用rand(4,6)命令生成一个随机矩阵T,求T的矩阵大小,每一行、 每一列的最大值和最小值,整个矩阵的最大值与最小值;然后将整个矩阵的最大值所在位置的元素换为1000,将最小值所在位置的元素取为-1000。 >> T=rand(4,6) T = 0.8143 0.1966 0.3517 0.9172 0.3804 0.5308 0.2435 0.2511 0.8308 0.2858 0.5678 0.7792 0.9293 0.6160 0.5853 0.7572 0.0759 0.9340 0.3500 0.4733 0.5497 0.7537 0.0540 0.1299 >> RowMax=max(T) //每一列的最大值 RowMax = 0.9293 0.6160 0.8308 0.9172 0.5678 0.9340 >>k=T' //转秩后,求每一列的最大值就是原矩阵每行的最大值 k = 0.8143 0.2435 0.9293 0.3500 0.1966 0.2511 0.6160 0.4733 0.3517 0.8308 0.5853 0.5497 0.9172 0.2858 0.7572 0.7537 0.3804 0.5678 0.0759 0.0540 0.5308 0.7792 0.9340 0.1299 LineMax=max(k)

Matlab矩阵操作函数汇总

矩阵创建相关函数 cat函数 语法说明:A = cat(n,A1,A2,… ,Am) 功能介绍:创建多维数组 实例: >> A1 = [1 2 3; 4 5 6; 7 8 9];A2 = A1'; A3 = A1 - A2; >> A4 = cat(3, A1, A2, A3) A4(:,:,1) = 1 2 3 4 5 6 7 8 9 A4(:,:,2) = 1 4 7 2 5 8 3 6 9 A4(:,:,3) = 0 -2 -4 2 0 -2 4 2 0 n = 3是构造三维数组,n = 1和2分别构造[A1;A2]以及[A1,A2],都是二维数组。

eye函数 功能介绍:单位矩阵生成 语法说明: ?Y = eye(n),生成n*n单位矩阵 ?Y = eye(m, n),生成m*n单位矩阵 ?Y = eye(sizes(A)),生成与矩阵A相同大小的单位矩阵实例: >> n = 3; m = 5; >> Y1 = eye(n) Y1 = 1 0 0 0 1 0 0 0 1 >> Y2 = eye(m, n) Y2 = 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 ones函数

功能介绍:全1矩阵生成 语法说明: ?Y=ones(n):生成n*n全1矩阵 ?Y =one(m,n):生成m*n全1矩阵 ?Y=ones([m,n]):生成m*n全1矩阵 ?Y=ones(d1,d2,d3):生成d1*d2*d3全1矩阵 ?Y=ones([d1,d2,d3]):生成d1*d2*d3全1矩阵 ?Y=ones(size(A)):生成与矩阵A相同大小的全1矩阵 strcmp函数 功能介绍:字符串比较函数 语法说明: ?Y=strcmp(str1,str2):比较两个字符串是否相等,返回值是0或者 ‘==’也是比较前后两个字符串,且要求前后两个字符串长度相同,但是是每个位置都进行比较。返回的一般是一个数组 实例: >> D = strcmp('hello', 'Hello') D = >> D = strcmp('Hello','Hello') D = 1

MATLAB中对矩阵的基本操作

eye 单位矩阵 zeros 全零矩阵 ones 全1矩阵 rand 均匀分布随机阵genmarkov 生成随机Markov矩阵linspace 线性等分向量 logspace 对数等分向量 logm 矩阵对数运算 cumprod 矩阵元素累计乘cumsum 矩阵元素累计和 toeplitz Toeplitz矩阵 disp 显示矩阵和文字内容 length 确定向量的长度 size 确定矩阵的维数 diag 创建对角矩阵或抽取对角向量find 找出非零元素1的下标matrix 矩阵变维 rot90 矩阵逆时针旋转90度 sub2ind 全下标转换为单下标 tril 抽取下三角阵 triu 抽取上三角阵 conj 共轭矩阵 companion 伴随矩阵 det 行列式的值 norm 矩阵或向量范数 nnz 矩阵中非零元素的个数 null 清空向量或矩阵中的某个元素orth 正交基 rank 矩阵秩 trace 矩阵迹 cond 矩阵条件数 inv 矩阵的逆 rcond 逆矩阵条件数

lu LU分解或高斯消元法 pinv 伪逆 qr QR分解 givens Givens变换 linsolve 求解线性方程 lyap Lyapunov方程 hess Hessenberg矩阵 poly 特征多项式 schur Schur分解 expm 矩阵指数 expm1 矩阵指数的Pade逼近 expm2 用泰勒级数求矩阵指数 expm3 通过特征值和特征向量求矩阵指数funm 计算一般矩阵函数 logm 矩阵对数 sqrtm 矩阵平方根 spec 矩阵特征值 gspec 矩阵束特征值 bdiag 块矩阵,广义特征向量 eigenmar- 正则化Markov特征 kov 向量 pbig 特征空间投影 svd 奇异值分解 sva 奇异值分解近似 cumprod 元素累计积 cumsum 元素累计和 hist 统计频数直方图 max 最大值 min 最小值 mean 平均值 median 中值 prod 元素积 sort 由大到小排序

MATLAB矩阵及矩阵操作

MATLAB矩阵及矩阵操作 数值数组(Numeric Array)和数组运算(Array Operations)始终是MATLAB的核心内容。自MATLAB5.x版起,由于其“面向对象”的特征,这种数值数组(以下简称为数组)成为了MATALB最重要的一种内建数据类型(Built-in Data Type),而数组运算就是定义在这种数据结构上的方法(Method)。 本节系统阐述:一、二维数值数组的创建、寻访;数组运算和矩阵运算的区别;实现数组运算的基本函数;多项式的表达、创建和操作;常用标准数组生成函数和数组构作技法;高维数组的创建、寻访和操作;非数NaN、“空”数组概念和应用;关系和逻辑操作。 顺便指出:(1)本章所涉内容和方法,不仅使用于数值数组,而且也将部分地延伸使用于在其他数据结构中。 一、变量和数据 1 数据类型 MATLAB7.3定义了15种基本的数据类型 1.1 建立double类型数据:例:(注:double为系统默认数据类型) a=3.3 a = 3.3000

方法一:whos 要查看的变量名注:查看多个变量时各变量之间用空格分开,不能用逗号分开 例:查看上面定义的变量a whos a Name Size Bytes Class a 1x1 8 double array Grand total is 1 element using 8 bytes 方法二:使用class函数,函数调用常用格式:str = class(object) ——函数返回object的类型 例:class(a) ans = double 方法三:使用isa函数,函数调用常用格式:n = is(object,'类型')——函数返回值为1,说明object为第二个参数指定的类型,0表示不是。 例:isa(a,'double') ans = 1 isa(a,'char') ans = 1.2建立其他数值类型数据的方法 ●使用single、int_、uint_分别建立单精度、有符号整型、无符号整型的数据例: b=single(a)%建立单精度变量b b = 3.3000 whos a b %查看变量a b的详细信息 Name Size Bytes Class a 1x1 8 double array b 1x1 4 single array Grand total is 2 elements using 12 bytes class(b) %获取变量b的数据类型ans = single isa(b,'single') ans = 1 c=int8(a) %尝试把变量a的值改为3.8,看结果有何变化,得出什么结论? c = 3 class(c)%获取变量c的数据类型ans = int8 isa(c,'int8') ans = 1 结论:a的值改为3.8后变量c的值变为4,说明在MATLAB中将一个浮点型数据转换为整型数据是遵循“四舍五入”的法则 2、数值 ●需了解MATLAB表达方式的组成、类型 ●了解数组(array)、矩阵(matrix)、向量(vector)、标量(数字)(scalar)的概念和它们 之间的关系。 ●标量和向量是矩阵的特例,而矩阵是数组的特例。 ●复数(complex)和复数矩阵——实数矩阵是复数矩阵的特例,虚部为0 MATLAB把复数作为一个整体处理,虚数单位用自定义变量i或j表示。

MATLAB 矩阵操作大全

MATLAB 矩阵操作大全 转载自: https://www.wendangku.net/doc/857869170.html,/dengjianqiang2011/article/details/8753807 MATLAB矩阵操作大全 一、矩阵的表示 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 二,矩阵的创建: 1、直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 2、利用MATLAB函数创建矩阵 基本矩阵函数如下: (1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand()函数:产生在(0,1)区间均匀分布的随机阵; (4) eye()函数:产生单位阵; (5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。

3、利用文件建立矩阵 当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n 的二维矩阵。 二、矩阵的简单操作 1.获取矩阵元素 可以通过下标(行列索引)引用矩阵的元素,如Matrix(m,n)。 也可以采用矩阵元素的序号来引用矩阵元素。 矩阵元素的序号就是相应元素在内存中的排列顺序。 在MATLAB中,矩阵元素按列存储。 序号(Index)与下标(Subscript )是一一对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。 其相互转换关系也可利用sub2ind和ind2sub函数求得。 2.矩阵拆分 利用冒号表达式获得子矩阵: (1) A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。 (2) A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;A(:,k:k+m)表示取A矩阵第 k~k+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m 列中的所有元素。此外,还可利用一般向量和end运算符来表示矩阵下标,从而获得子矩阵。end表示某一维的末尾元素下标。 利用空矩阵删除矩阵的元素: 在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[]。注意,X=[]与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。 3、特殊矩阵 (1) 魔方矩阵魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。对于n阶魔方阵,其元素由1,2,3,…,n2共n2个整数组成。MATLAB提供了求魔方矩阵的函数magic(n),其功能是生成一个n阶魔方阵。

matlab矩阵操作

[转]matlab相关矩阵操作及相关实例 第1章矩阵及其基本运算 MATLAB,即―矩阵实验室‖,它是以矩阵为基本运算单元。因此,本书从最基本的运算单元出发,介绍MATLAB的命令及其用法。 1.1 矩阵的表示 1.1.1 数值矩阵的生成 1.实数值矩阵输入 MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。 不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。如: >> Tim e = [11 12 1 2 3 4 5 6 7 8 9 10] Tim e = 11 12 1 2 3 4 5 6 7 8 9 10 >> X_Data = [2.32 3.43;4.37 5.98] X_Data = 2.43 3.43 4.37 5.98 >> vect_a = [1 2 3 4 5] vect_a = 1 2 3 4 5 >> Matrix_B = [1 2 3; >> 2 3 4;3 4 5] Matrix_B = 1 2 3 2 3 4 3 4 5 >> Null_M = [ ] %生成一个空矩阵 2.复数矩阵输入 复数矩阵有两种生成方式: 第一种方式 例1-1 >> a=2.7;b=13/25; >> C=[1,2*a+i*b,b*sqrt(a); sin(pi/4),a+5*b,3.5+1] C= 1.0000 5.4000 + 0.5200i 0.8544 0.7071 5.3000 4.5000 第2种方式 例1-2

MATLAB矩阵运算基础练习题

第2章 MATLAB 矩阵运算基础 在MATLAB 中如何建立矩阵?? ?? ??194375,并将其赋予变量a 请产生一个100*5的矩阵,矩阵的每一行都是[1 2 3 4 5] 产生一个1x10的随机矩阵,大小位于(-5 5) 有几种建立矩阵的方法各有什么优点 可以用四种方法建立矩阵: ①直接输入法,如a=[2 5 7 3],优点是输入方法方便简捷; ②通过M 文件建立矩阵,该方法适用于建立尺寸较大的矩阵,并且易于修改; ③由函数建立,如y=sin(x),可以由MATLAB 的内部函数建立一些特殊矩阵; ④通过数据文件建立,该方法可以调用由其他软件产生数据。 在进行算术运算时,数组运算和矩阵运算各有什么要求 进行数组运算的两个数组必须有相同的尺寸。进行矩阵运算的两个矩阵必须满足矩阵运算规则,如矩阵a 与b 相乘(a*b )时必须满足a 的列数等于b 的行数。 数组运算和矩阵运算的运算符有什么区别 在加、减运算时数组运算与矩阵运算的运算符相同,乘、除和乘方运算时,在矩阵运算的运算符前加一个点即为数组运算,如a*b 为矩阵乘,a.*b 为数组乘。 计算矩阵??????????897473535与???? ??????638976242之和,差,积,左除和右除。 求?? ?? ??+-+-+-+-++=i 44i 93i 49i 67i 23i 57i 41i 72i 53i 84x 的共轭转置。 计算???? ??=572396a 与??????=864142b 的数组乘积。 “左除”与“右除”有什么区别 在通常情况下,左除x=a\b 是a*x=b 的解,右除x=b/a 是x*a=b 的解,一般情况下,a\bb/a 。 对于B AX =,如果??????????=753467294A ,???? ??????=282637B ,求解X 。 已知:???? ??????=987654321a ,分别计算a 的数组平方和矩阵平方,并观察其结果。 ??????-=463521a ,?? ????-=263478b ,观察a 与b 之间的六种关系运算的结果。

相关文档
相关文档 最新文档