文档库 最新最全的文档下载
当前位置:文档库 › matlab数值数组及向量化运算

matlab数值数组及向量化运算

matlab数值数组及向量化运算
matlab数值数组及向量化运算

第2章 数值数组及向量化运算

数值数组(Numeric Array )和数组运算(Array Operations )始终是MATLAB 的核心内容。

本章教学内容:数组浮点算法的特点;一、二维数值数组的创建和寻访;常用标准数组生成函数和数组构作技法;数组运算和向量化编程;实现数组运算的基本函数;关系和逻辑操作。

2.1 数值计算的特点和地位

【例2.1-1】已知t t t f cos )(2

=,求dt t f x s x

?

=

)()(。

(1)符号计算解法

syms t x %定义符号变量 ft=t^2*cos(t) sx=int(ft,t,0,x) ft =

t^2*cos(t) sx =

x^2*sin(x)-2*sin(x)+2*x*cos(x)

(2)数值计算解法

dt=0.05;

t=0:dt:5; %取一些离散点 Ft=t.^2.*cos(t);

Sx=dt*cumtrapz(Ft); %梯形法求定积分

t(end-4:end) %end 表示最后一个元素 Sx(end-4:end) %Sx 的最后5个元素 plot(t,Sx,'.k','MarkerSize',12) xlabel('x'),ylabel('Sx'),grid on ans =

4.8000 4.8500 4.9000 4.9500

5.0000 ans =

-20.1144 -19.9833 -19.7907

-19.5345 -19.2131

图 2.1-1 在区间[0, 5]采样点上算得的定积分值

【例2.1-2】已知

)

sin(

)(t

e

t

f-

=,求?=4

)(

)

(dt

t

f

x

s。

本例演示:被积函数没有“封闭解析表达式”,符号计算无法解题!(1)符号计算解法

syms t x

ft=exp(-sin(t))

sx=int(ft,t,0,4)

ft =

exp(-sin(t))

Warning: Explicit integral could not be found.

> In sym.int at 58

sx =

int(exp(-sin(t)),t = 0 .. 4)

(2)数值计算解法

dt=0.05;

t=0:dt:4;

Ft=exp(-sin(t));

Sx=dt*cumtrapz(Ft);

Sx(end)

plot(t,Ft,'*r','MarkerSize',4)

hold on

plot(t,Sx,'.k','MarkerSize',15)

hold off

xlabel('x')

legend('Ft','Sx')

ans =

3.0632

图 2.1-2 在区间[0, 4]中间的被积函数及其原函数的离散计算结果

小结:

(1)符号计算

长处——可以对包含变量字符、参数字符和数字的表达式进行推理、运算,并给出符号结果,与高等数学中的解析式比较接近;符号计算的短处——很多问题无解或求解时间过长。

(2)数值计算

在确定一组自变量采样点基础上,执行数值计算的表达式在已知的数值点上进行计算。它适用范围比符号计算广,以有限的精度表现有限时间和范围内的函数关系。

2.2数值数组的创建和寻访

MATLAB把数组看作存储和运算的基本单元,而标量数据看作(1×1)的数组。

2.2.1 一维数组的创建

1.递增/减型一维数组的创建

数组元素值的大小按递增或递减的次序排列,数组元素之间的“差”是“确定的”,即“等步长”。

(1)“冒号”生成法

x=a : inc : b ;a—数组的第一个元素;inc—步长,默认值为1;最后一个元素小于等于b。

(2)线性(或对数)定点法

x=linspace(a, b, n);产生线性等间隔(1×n)行数组,等价于x=a : (b-a)/(n-1) : b ;

x=logspace(a, b, n);产生对数等间隔(1×n)行数组,n—一维数组的长度。

(线性等分向量)linspace=linear space linear 线性的 space间隔

2.通用型一维数组的创建

利用函数生成特殊形式数组。

【例2.2-1】一维数组的常用创建方法举例。

a1=1:6

a2=0:pi/4:pi

a3=1:-0.1:0

a1 =

1 2 3 4 5 6

a2 =

0 0.7854 1.5708 2.3562 3.1416

a3 =

Columns 1 through 6

1.0000 0.9000 0.8000 0.7000 0.6000 0.5000

Columns 7 through 11

0.4000 0.3000 0.2000 0.1000 0

b1=linspace(0,pi,4)

b2=logspace(0,3,4)

b1 =

0 1.0472 2.0944 3.1416

b2 =

1 10 100 1000

c1=[2 pi/2 sqrt(3) 3+5i]

c1 =

Columns 1 through 3

2.0000 1.5708 1.7321

Column 4

3.0000 + 5.0000i

rand('state',0)

c2=rand(1,5) %均匀随机数组

c2 =

0.9501 0.2311 0.6068 0.4860 0.8913

2.2.2 二维数组的创建

1. 小规模数组的直接输入法

【例2.2-2】在MATLAB环境下,用下面三条指令创建二维数组C。

a=2.7358; b=33/79;

C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]

C =

1.0000 5.4716 + 0.4177i 0.6909

0.7071 4.8244 3.5000 + 1.0000i

数组的三个要素:括号[];逗号或空格;分号或回车键。

2. 中规模数组的数组编辑器创建法

3( 的数组。

【例2.2-3】根据现有数据创建一个)8

图2.2-1 利用数组编辑器创建中规模数组

3.中规模数组的M文件创建法

【例2.2-4】创建和保存数组 AM的 MyMatrix.m 文件。

(1)打开文件编辑调试器,并在空白填写框中输入所需数组(见图2.2-2)。

(2)在文件的首行,编写文件名和简短说明,以便查阅(见图2.2-2)。

(3)保存此文件,并且文件起名为 MyMatrix.m 。

(4)以后只要在MATLAB指令窗中,运行 MyMatrix.m文件,数组 AM 就会自动生成于 MATLAB内存中。

图2.2-2 利用M文件创建数组

4.利用MATLAB函数创建数组

【例2.2-5】标准数组产生的演示。

ones(2,4) %产生全1元素数组zeros —产生全0元素数组

ans =

1 1 1 1

1 1 1 1

randn('state',0) %产生正态分布随机数组;rand —产生均匀分布随机数组

randn(2,3)

ans =

-0.4326 0.1253 -1.1465

-1.6656 0.2877 1.1909

D=eye(3) %产生单位数组

D =

1 0 0

0 1 0

0 0 1

diag(D) %产生对角数组

ans =

1

1

1

diag(diag(D))

ans =

1 0 0

0 1 0

0 0 1

randsrc(3,20,[-3,-1,1,3],1) %在指定字符集生成均匀随机数组;random —生成各种分布随机数组ans =

Columns 1 through 10

3 1 3 -1 -3 3 -3 -3 -1 3

1 3 1 3 -1 1 1 1 1 1

3 -1 -3 -1 1 -1 3 -1 -1 1

Columns 11 through 20

-1 -1 -3 1 1 -3 3 -1 1 3

1 1 3 -1 -1 -3 -1 -1 1 -3

1 -1 -3 3 -1 -1 3 -1 3 3

2.2.3 二维数组元素的标识和寻访

【例2.2-6】本例演示:数组元素及子数组的各种标识和寻访格式;冒号的使用;end的作用。

A=zeros(2,6)

A(:)=1:12

A =

0 0 0 0 0 0

0 0 0 0 0 0

A =

1 3 5 7 9 11

2 4 6 8 10 12

A(2,4)

A(8)

ans =

8

ans =

8

A(:,[1,3])

A([1,2,5,6]')

ans =

1 5

2 6

ans =

1

2

5

6

A(:,4:end)

ans =

7 9 11

8 10 12

A(2,1:2:5)=[-1,-3,-5]

A =

1 3 5 7 9 11 -1 4 -3 8 -5 1

2 B=A([1,2,2,2],[1,3,5] )

B =

1 5 9

-1 -3 -5

-1 -3 -5

-1 -3 -5

L=A<3

A(L)=NaN

L =

1 0 0 0 0 0

1 0 1 0 1 0

A =

NaN 3 5 7 9 11 NaN 4 NaN 8 NaN 12

2.2.4数组构作技法综合

【例 2.2-7】数组操作函数reshape, diag, repmat的用法;空阵 [ ] 删除子数组的用法。

a=1:8

A=reshape(a,4,2) %在总元素不变的前提下,改变数组的行数或列数

A=reshape(A,2,4)

a =

1 2 3 4 5 6 7 8

A =

1 5

2 6

3 7

4 8

A =

1 3 5 7

2 4 6 8

b=diag(A)

B=diag(b)

b =

1

4

B =

1 0

0 4

D1=repmat(B,2,4) %按指定的行数2、列数4,把B作为模块铺放形成更大维数的数组

D1 =

1 0 1 0 1 0 1 0

0 4 0 4 0 4 0 4

1 0 1 0 1 0 1 0

0 4 0 4 0 4 0 4

D1([1,3],: )=[ ]

D1 =

0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 4

【例2.2-8】函数flipud, fliplr, rot90对数组的操作体现着“矩阵变换”。 A=reshape(1:9,3,3) A =

1 4 7

2 5 8

3 6 9

B=flipud(A) %以数组“水平中线”为对称轴,交换上下对称位置上的数组元素 B =

3 6 9 2 5 8 1

4 7

C=fliplr(A) %以数组“垂直中线”为对称轴,交换左右对称位置上的数组元素 C =

7 4 1 8 5 2 9 6 3

D=rot90(A,2) %把数组逆时针旋转90度 D =

9 6 3 8 5 2 7 4 1

2.3 数组运算

2.3.1数组运算的由来和规则 1.数组运算规则

(1)同维数组运算

n m ij a A ?=][,n m ij b B ?=][,n m ij c C ?=][

(2)标量和数组运算

a ,n m ij

b B ?=][,n m ij

c C ?=][

(3)函数的数组运算

)(?f ,n m ij x X ?=][

结 论:数组运算是对单个元素进行运算。

2.数组运算符及数组运算函数 (1)运算符

+, -, .*, ./(.\), .^(乘方运算),.'(表示非共轭转置),关系、逻辑运算符。

数组运算两个数组必须同维数,矩阵还必须乘法要求的维数;矩阵左除运算是MATLAB 专门设计的一种运算。

(2)运算函数

三角、反三角函数;双曲、反双曲函数;指数、对数函数(exp, sqrt, log, log10);园整、求余函数(round, fix, mod, floor );模、角、虚实部(abs, angle, real, imag, conj );符号函数(sign )。

2.3.2数组运算和向量化编程

【例 2.3-1】欧姆定律:i

u

r =

,其中i u r , ,分别是电阻(欧姆)、电压(伏特)、电流(安培)。验证实验:据电阻两端施加的电压,测量电阻中流过的电流,然后据测得的电压、电流计算平均电阻值。(测得的电压电流具体数据见下列程序)。 (1)非向量化程序 clear

vr=[0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41];

ir=[0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345]; % -------------------- L=length(vr); for k=1:L

r(k)=vr(k)/ir(k); end

% --------------------------- sr=0; for k=1:L

sr=sr+r(k); e nd

rm=sr/L rm =

30.5247 (2)向量化程序 clear

vr=[0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41];

ir=[0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345]; r=vr./ir rm=mean(r)

r =

31.7857 30.0000 30.9000 29.4483 30.6780 29.8837 30.0669 30.8171 31.4935 30.1739 rm =

30.5247

小 结:

(1)采用“数组运算”(“向量化运算”)模式处理反复执行的标量运算,提高程序的执行性能; (2)采用“向量或矩阵运算”模式去执行那些传统上靠多重循环标量运算完成的矩阵计算。

【例 2.3-2】用间距为0.1的水平线和垂直线均匀分割]5.2,5.2[],5,5[-∈-∈y x 的矩形域,在所有水平线和垂直线交点上计算函数)sin(xy z =的值,并图示。 (1) clear

x=-5:0.1:5;

y=(-2.5:0.1:2.5)'; N=length(x); M=length(y); for ii=1:M

for jj=1:N

X0(ii,jj)=x(jj); Y0(ii,jj)=y(ii);

Z0(ii,jj)=sin(abs(x(jj)*y(ii))); end end (2)

[X,Y]=meshgrid(x,y); Z=sin(abs(X.*Y)); (3)

norm(Z-Z0) ans = 0 (4)

surf(X,Y,Z) xlabel('x') ylabel('y') shading interp view([190,70])

图 3.3-1 指定域上的二元函数图形

2.4关系操作和逻辑操作

在程序流控制、逻辑推理中,需要“真”和“假”判断。

MATLAB约定:非0看作“逻辑真”;数组运算结果中的1表示“真”、0表示“假”;“数值类”有关操作同样适用于关系和逻辑操作。

2.4.1关系操作

>(大于),>=(大于等于),<(小于),<=(小于等于), ==(等于)~=(不等于)

【例2.4-1】关系运算示例。

A=1:9,B=10-A

r0=(A<4)

r1=(A==B)

A =

1 2 3 4 5 6 7 8 9

B =

9 8 7 6 5 4 3 2 1

r0 =

1 1 1 0 0 0 0 0 0

r1 =

0 0 0 0 1 0 0 0 0

【例2.4-2】关系运算应用。

t=-3*pi:pi/10:3*pi;

y=sin(t)./t;

tt=t+(t==0)*eps;

yy=sin(tt)./tt;

subplot(1,2,1),plot(t,y),axis([-9,9,-0.5,1.2]),

xlabel('t'),ylabel('y'),title('残缺图形')

subplot(1,2,2),plot(tt,yy),axis([-9,9,-0.5,1.2])

xlabel('tt'),ylabel('yy'),title('正确图形')

Warning: Divide by zero.

图2.4-1 采用近似极限处理前后的图形对照

2.4.2逻辑操作

&(与),|(或),~(非), xor(异或)

【例2.4-3】逻辑操作和关系操作。本例演示:逻辑、关系操作的组合;xor的作用。

(1)逻辑、关系操作的组合

A=[-2,-1,0,0,1,2,3]

L1=~(A>1) %判断A中,哪些元素不大于1

L2=(A>0)&(A<2) %判断A中,哪些元素大于0且小于3

A =

-2 -1 0 0 1 2 3

L1 =

1 1 1 1 1 0 0

L2 =

0 0 0 0 1 0 0

(2)xor的作用

A,B=[0,-1,1,0,1,-2,-3]

C=xor(A,B) %当A, B数组中,两个对应元素中仅一个为0时,给出1。否则为0。

A =

-2 -1 0 0 1 2 3

B =

0 -1 1 0 1 -2 -3

C =

1 0 1 0 0 0 0

【例2.4-4】试绘制如图2.4-2最下那幅子图所示的“正弦波t sin 的削顶半波整流波形”,削顶发生在每个周期的]120 ,60[

之间。

clear,t=linspace(0,3*pi,500);y=sin(t); z1=((t2*pi)).*y;

w=(t>pi/3&t<2*pi/3)+(t>7*pi/3&t<8*pi/3); wn=~w;

z2=w*sin(pi/3)+wn.*z1;

subplot(4,1,1),plot(t,y,':r'),axis([0,10,-1.5,1.5]) ylabel('y'),grid on

subplot(4,1,2),plot(t,z1,':r'),axis([0,10,-0.2,1.5]),ylabel('z1') subplot(4,1,3),plot(t,wn,':r'),axis([0,10,-0.2,1.5]),ylabel('wn') subplot(4,1,4),plot(t,z2,'-b'),axis([0,10,-0.2,1.5]),ylabel('z2') xlabel('t')

图 2.4-2 逐段解析函数的产生

2.4.3常用逻辑函数

含0数组判断:all, any

生成逻辑数组:false, true, logical

数据对象判断:isempty, isprime, isfinite, isreal, isinf, isletter, isnan, isspace 数据类型判断:isa, ischar, isglobal, ishandle, islogical, isnumeric 作业2

1.要求在闭区间]2,0[ 上产生具有10个等距采样点的一维数组。试用两种不同的指令实现。

〖答案〗

2.由指令rand('state',0),A=rand(3,5)生成二维数组A ,试求该数组中所有大于0.5的元素的位置,

分别求出它们的“全下标”和“单下标”。 〖答案〗 3.在时间区间 [0,10]中,绘制t e y t 2cos 15.0--=曲线。要求分别采取“标量循环运算法”和“数组运

算法”编写两段程序绘图。 〖答案〗

(注:本资料素材和资料部分来自网络,仅供参考。请预览后才下载,期待您的好评与关注!)

习题2-数值数组及向量化运算

习题2 1.请读者先运行以下指令 a=0;b=pi; t1=a:pi/9:pi; t2=linspace(a,b,10); T=t1*t2'; F=find(T<0); 然后,请回答变量a、t1、T、F的维度、规模、长度分别是多少t1完全等于t2吗为什么 1)产生数据 a=0;b=pi; t1=a:pi/9:pi; t2=linspace(a,b,10); T=t1*t2'; F=find(T<0); 2)罗列各变量的特征 Na=ndims(a);Nt1=ndims(t1);NT=ndims(T);NF=ndims(F); Sa=size(a);St1=size(t1);ST=size(T);SF=size(F); La=length(a);Lt1=length(t1);LT=length(T);LF=length(F); fprintf('数组%7s%8s%8s%8s\n','a','t1','T','F') fprintf('维度数%5d%8d%8d%8d\n',Na,Nt1,NT,NF) fprintf('规模%5d%3d%5d%3d%5d%3d%5d%3d\n',Sa,St1,ST,SF) fprintf('长度%7d%8d%8d%8d\n',La,Lt1,LT,LF) 数组 a t1 T F 维度数 2 2 2 2 规模 1 1 1 10 1 1 0 0 长度 1 10 1 0 3)判断数组相等 P=t1==t2 %对不同浮点计算方法获得的数进行比较的本指令,不推荐使用 E=max(abs(t1-t2)) P = 1 1 1 1 1 1 0 1 1

1 E = 可见2个数组中的元素不完全相等。应记住:这种现象在数值计算中常常会遇到;并且,若想检验同一个量的不同方法、途 径算得的结果,应尽量不用“==”符判断,而应借助“两个量间 的(相对)误差水平是否小于某个容差”进行判断。比如 pp=abs(t1-t2)<1e-14 pp = 1 1 1 1 1 1 1 1 1 1 2.对于指令A=reshape(1:18,3,6)产生的数组 A = 1 4 7 10 13 16 2 5 8 11 14 17 3 6 9 12 15 18 先请你用一条指令,使A数组中取值为2、4、8、16的元素都被重新赋值为NaN。然后,再请你用一条指令,把A数组的第4、 5两列元素都被重新赋值为Inf。 1)产生数组A A=reshape(1:18,3,6) A = 1 4 7 10 13 16 2 5 8 11 14 17 3 6 9 12 15 18 2)利用单序号实现对2、4、8、16的元素的重新赋值 A([2,4,8,16])=NaN %这些位置元素的重赋值不可能采用 “全下标”一次性实现 A = 1 NaN 7 10 13 NaN NaN 5 NaN 11 14 17 3 6 9 12 15 18 3)利用全下标和冒号对第4、5列元素进行重赋值

matlab2011教程之二数值数组及向量化运算

第 2 章 数值数组及向量化运算本章集中讲述两个数据类型(数值数组和逻辑数组)、两个特有概念变量(非数和空)、 以及MATLAB的数组运算和向量化编程。值得指出:本章内容是读者今后编写各种科学计 算M码的基本构件。 数值数组(Numeric Array)是MATLAB最重要的数据类型数组。在各种维度的数值数 组中,二维数组为最基本、最常用。本章对二维数组创建、标识、寻访、扩充、收缩等方 法进行了详尽细腻的描述,并进而将这些方法推广到高维数组。 本章讲述的逻辑数组主要产生于逻辑运算和关系运算。它是MATLAB 援引寻访数据、 构成数据流控制条件、、编写复杂程序所不可或缺的重要构件。 数组运算是MATLAB区别于其它程序语言的重要特征,是MATLAB绝大多数函数指 令、Simulink许多库模块的本性,是向量化编程的基础。为此,本章专辟第2.2节用于阐述MATLAB的这一重要特征。 在此提醒读者注意:随书光盘mbook目录上保存着本章相应的电子文档“ch02_数值数 组及向量化运算.doc”。该文档中有本章全部算例的可执行指令,以及相应的运算结果。 2.1数值数组的创建和寻访 2.1.1一维数组的创建 1递增/减型一维数组的创建 (1)“冒号”生成法 (2)线性(或对数)定点法 2其他类型一维数组的创建 (1)逐个元素输入法 (2)运用MATLAB函数生成法 【例2.1-1】一维数组的常用创建方法举例。 a1=1:6 a2=0:pi/4:pi a3=1:-0.1:0 a1 = 1 2 3 4 5 6 a2 = 0 0.7854 1.5708 2.3562 3.1416 a3 = Columns 1 through 8 1.0000 0.9000 0.8000 0.7000 0.6000 0.5000 0.4000 0.3000 Columns 9 through 11 0.2000 0.1000 0 b1=linspace(0,pi,4) b2=logspace(0,3,4) b1 = 0 1.0472 2.0944 3.1416 b2 =

MATLAB数组基本操作

1、向量的创建 1)直接输入: 行向量:a=[1,2,3,4,5] 列向量:a=[1;2;3;4;5] 2)用“:”生成向量 a=J:K 生成的行向量是a=*J,J+1,…,K+ a=J:D:K 生成行向量a=*J,J+D,…,J+m*D+,m=fix((K-J)/D) 3)函数linspace 用来生成数据按等差形式排列的行向量 x=linspace(X1,X2):在X1和X2间生成100个线性分布的数据,相邻的两个数据的差保持不变。构成等差数列。 x=linspace(X1,X2,n): 在X1和X2间生成n个线性分布的数据,相邻的两个数据的差保持不变。构成等差数列。 4)函数logspace用来生成等比形式排列的行向量 X=logspace(x1,x2) 在x1和x2之间生成50个对数等分数据的行向量。构成等比数列,数列的第一项x(1)=10x1,x(50)=10x2 X=logspace(x1,x2,n) 在x1和x2之间生成n 个对数等分数据的行向量。构成等比数列,数 列的第一项x(1)=10x1,x(n)=10x2 注:向量的的转置:x=(0,5)’ 2、矩阵的创建 1)直接输入:将数据括在[]中,同一行的元素 用空格或逗号隔开,每一行可以用回车或是 分号结束 如:a=[1,2,3;3,4,5],运行后: a = 1 2 3 3 4 5

2)函数eye,生成单位矩阵 eye(n) :生成n*n阶单位E eye(m,n):生成m*n的矩阵E,对角线元素为1,其他为0 eye(size(A)):生成一个矩阵A大小相同的单位矩阵 eye(m,n,classname):对角线上生成的元素是1,数据类型用classname指定。其数据类型可以是:duoble、single、int8、uint8、int16、uint16、int32、uint32 。 3)函数ones 用ones生成全1的矩阵ones(n) : 生成n*n的全1矩阵 ones(m,n) : 生成m*n的全1矩阵 ones(size(A)) : 生成与矩阵A大小相同的全1矩阵 ones(m,n,p,…)生成m*n*p*….的全1的多维矩阵 ones(m,n,…,classname)制定数据类型为 classname 4)函数zeros 函数zeros生成全0矩阵zeros(n):生成n*n的全0矩阵 zeros(m,n:)生成m*n的全0矩阵 zeros(size(A)): 生成与矩阵A大小相同的全0矩阵 zeros (m,n,p,…)生成m*n*p*….的全0的多维矩阵 zeros (m,n,…,classname)指定数据类型为 classname

matlab数组运算

Matlab中数组元素引用有三种方法: 1.下标法(subscripts) 2.索引法(index) 3.布尔法(Boolean) 在使用这三种方法之前,大家头脑一定要清晰的记住,Matlab中数组元素是按列存储(与Fortran一样),比如说下面的二维数组 A= 8 1 6 3 5 7 4 9 2 Matlab的存储顺序是8,3,4,1,5,9,6,7,2,也就是说先行后列,对于3维数组呢,就是先行后列再页 对应个元素的索引和下标分别为 Element Index Subscripts 8 1 (1,1) 3 2 (2,1) 4 3 (3,1) 1 4 (1,2) 5 5 (2,2) 9 6 (3,2) 6 7 (1,3) 7 8 (2,3) 2 9 (3,3) 从上面的例子中已经很清晰的说明了下标和索引的区别了,也就是说Matlab为没有个元素分配了一个唯一识别的ID(即index) 1.下标法引用 A(ii,jj):其中ii和jj可以是一维向量、标量、“:”号或者“end” 大家对下标估计比较熟悉,由于在C语言中接触过,但是我这里需要强调的是,Matlab的下标是可以多行多列同时引用的,而像C语言等一次只能引用一个,比如 A(2:3,3:-1:1)表示引用数组中的2~3行,3~1列对应的元素 A(:,end)表示引用最后一列元素,“:”表示所有列或行,“end”表示最后一列或列,“end-n”表示倒数第n行或列 A(1,end-1)表示引用第1行倒数第2个元素

A([2 1 3 3],[1 1 2 2 1])表示引用按两个向量引用指定的元素,即A中的第2,1,3,3行和第1,1,2,2,1列对应的元素 >>A=magic(3) A = 8 1 6 3 5 7 4 9 2 >>A(2:3,3:-1:1) ans = 7 5 3 2 9 4 >>A(:,end) ans = 6 7 2 >>A(1,end-1) ans = 1 >>A([2 1 3 3],[1 1 2 2 1]) ans = 3 3 5 5 3 8 8 1 1 8 4 4 9 9 4 4 4 9 9 4 2.索引法引用(说白了索引就是存储顺序) A(index):index可以是任意的数组,index的元素必须是正整数,且不大于numel(A),返回的是一个尺寸与index一样的数组 下标和索引之间可以通过ind2sub和sub2ind函数相互转换,具体可以看帮助,很简单 [I,J] = ind2sub(siz,IND)

Matlab的基本操作及变量、数组及其答案

实验一Matlab的基本操作及变量、数组 一、实验目的: 1. 熟悉Matlab的开发环境,基本类型的Matlab窗口、工作空间和如何获得在线帮助。 2. 熟悉和掌握Matlab变量和数组的基本操作 二、实验内容: 1. Matlab的基本操作 1.3 先自定义一个变量,然后分别用8种不同的数字显示格式显示查看。 >> format compact >> a=3.14159265358979 a = 3.14159265358979 >> format long >> a a = 3.141592653589790 >> format short e >> a a = 3.1416e+000 >> format long e >> a a = 3.141592653589790e+000 >> format hex >> a a = 400921fb54442d11 >> format bank >> a a = 3.14 >> format + >> a a = + >> format rat >> a a = 355/113 >> format short >> a a = 3.1416 1.4 下面的语句用于画出函数()0.2 2x y x e- =在[0,10]区间的值 x = 0:0.1:10; y = 2*exp(-0.2*x); plot(x,y) 用Matlab编辑器创建一个m文件,把上述语句写入这个m文件并命名为“test1.m”,保存在当前路径中,然后在命令窗中键入test1,观察结果和运行程序后工作空间的变化.

如何清空工作区间数据? 键入 clear ; 如何关闭图像窗口? 键入close ; 除了在命令窗输入文件名,还可以怎样运行一个m 文件程序? 点击file ,打开m 文件,点击Run 按钮,运行m 文件程序。 如果希望在命令窗中显示x 和y 的所有取值,应对程序做出怎么样的修改? x = 0:0.1:10; y = 2*exp(-0.2*x); plot(x,y); x,y 1.5 通过以下两种方式得到关于exp 函数的帮助: (1) 在命令窗中输入help exp 命令; (2) 运用帮助空间窗口。思考,用什么指令可以直接打开帮助空间中关于exp 函数的说明? 键入doc exp ;或者点击help ,再点击product help ,键入exp 搜索. 1.6 假设x =3,y = 4,用Matlab 计算下列表达式: (1) () 23 2 x y x y - (2) 43x y (3) 24x x π- (4) 3 3x x x y - >> format compact >> x=3,y=4 x = 3 y = 4 >> x^2*(y^3)/(x-y)^2 ans = 576 >> 4*x/(3*y) ans = 1 >> 4/x*(pi*x^(-2)) ans = 0.4654 >> x^3/(x^3-y^x) ans = -0.7297 1.7 在当前目录下创建一个m 文件, 键入以下程序并保存,先把文件保存为“2.m ”,运行后观察结果,总结m 文件的文件名(包括Matlab 标识符)命名规则。对该文件重新命名后运行,保存运行结果。 t = -2*pi:pi/10:2*pi; y = abs(sin(t)); plot(t,y) >> 2 ans = 2 重新命名m 文件后运行的结果:

matlab数值数组及向量化运算

第2章 数值数组及向量化运算 数值数组(Numeric Array )和数组运算(Array Operations )始终是MATLAB 的核心内容。 本章教学内容:数组浮点算法的特点;一、二维数值数组的创建和寻访;常用标准数组生成函数和数组构作技法;数组运算和向量化编程;实现数组运算的基本函数;关系和逻辑操作。 2.1 数值计算的特点和地位 【例2.1-1】已知t t t f cos )(2 =,求dt t f x s x ? = )()(。 (1)符号计算解法 syms t x %定义符号变量 ft=t^2*cos(t) sx=int(ft,t,0,x) ft = t^2*cos(t) sx = x^2*sin(x)-2*sin(x)+2*x*cos(x) (2)数值计算解法 dt=0.05; t=0:dt:5; %取一些离散点 Ft=t.^2.*cos(t); Sx=dt*cumtrapz(Ft); %梯形法求定积分 t(end-4:end) %end 表示最后一个元素 Sx(end-4:end) %Sx 的最后5个元素 plot(t,Sx,'.k','MarkerSize',12) xlabel('x'),ylabel('Sx'),grid on ans = 4.8000 4.8500 4.9000 4.9500 5.0000 ans = -20.1144 -19.9833 -19.7907 -19.5345 -19.2131

图 2.1-1 在区间[0, 5]采样点上算得的定积分值 【例2.1-2】已知 ) sin( )(t e t f- =,求?=4 )( ) (dt t f x s。 本例演示:被积函数没有“封闭解析表达式”,符号计算无法解题!(1)符号计算解法 syms t x ft=exp(-sin(t)) sx=int(ft,t,0,4) ft = exp(-sin(t)) Warning: Explicit integral could not be found. > In sym.int at 58 sx = int(exp(-sin(t)),t = 0 .. 4) (2)数值计算解法 dt=0.05; t=0:dt:4; Ft=exp(-sin(t)); Sx=dt*cumtrapz(Ft); Sx(end) plot(t,Ft,'*r','MarkerSize',4) hold on plot(t,Sx,'.k','MarkerSize',15) hold off xlabel('x') legend('Ft','Sx') ans = 3.0632

数值数组及向量化运算

第 3 章 数值数组及向量化运算 MATLAB 的核心内容:数值数组和数组运算 ● 二维数值数组的创建和寻访 ● 数组运算和向量化编程 ● 实现数组运算的基本函数 ● 常用标准数组生成函数和数组构作技法 ● 非数NaN 、“空”数组概念和应用 ● 关系和逻辑操作 3.1 数值计算的特点和地位 符号计算的局限性:有很多问题1)无法解,2)求解时间过长 数值计算:适用范围广,能处理各种复杂的函数关系,计算速度快,容量大。 【例3.1-1】已知t t t f cos )(2=,求dt t f x s x ?= 0 )()(。 (1)符号计算解法 syms t x ft=t^2*cos(t) sx=int(ft,t,0,x) ezplot(sx,0,5) hold on dt=0.05; t=0:dt:5; Ft=t.^2.*cos(t); Sx=dt*cumtrapz (Ft); % 小梯形面积的累加求Ft 曲线下的面积,由一个个宽度为dt 的小梯形面积累加得到的 t(end-4:end) % end 指示最后一个元素的位置 %Sx(end-4:end) %plot(t,Sx,'.k','MarkerSize',12) (2)数值计算解法 dt=0.05; t=0:dt:5; Ft=t.^2.*cos(t); Sx=dt*cumtrapz (Ft); % 小梯形面积的累加求Ft 曲线下的面积,由一个个宽度为dt 的小梯形面积累加得到的 t(end-4:end) % end 指示最后一个元素的位置 Sx(end-4:end) plot(t,Sx,'.k','MarkerSize',12) xlabel('x'),ylabel('Sx'),grid on ans = 4.8000 4.8500 4.9000 4.9500 5.0000 ans = -20.1144 -19.9833 -19.7907 -19.5345 -19.2131 图 3.1-1 在区间[0, 5]采样点上算得的定积分值 【例3.1-2】已知)sin()(t e t f -=,求?=4 0 )()(dt t f x s 。 (1)符号计算解法 syms t x ft=exp(-sin(t)) sx=int(ft,t,0,4) (2)数值计算解法 dt=0.05; t=0:dt:4; Ft=exp(-sin(t));

matlab数组操作

1.一个三维数组由行、列和页三维组成,其中每一页包含一个由行和列构成的二维数组。 2.利用标准数组函数创建多维数组 A=zeros(4,3,2) 生成一个4行3列2页的三维全0数组,ones,rand和randn等函数有相似的用法。 3.利用直接索引方式生成多维数组 A=zeros(2,3) A(:,:,2)=ones(2,3) A(:,:,3)=4 上面的代码先生成一个二维数组作为三维数组的第一页,然后通过数组直接索引,添加第二页、第三页。 4.利用函数reshape和repmat生成多维数组 B=reshape(A,2,9) B=[A(:,:,1) A(:,:,2) A(:,:,3)] %结果与上面一样。 reshape(B,2,3,3) reshape(B,[2 3 3]) %结果与上面一样。 提示:reshape函数可以将任何维数的数组转变成其他维数的数组。 5.利用repmat函数生成多维数组 C=ones(2,3) repmat(C,[1 1 3]) % repmat写出类似reshape的repmat(C,1,1,3)将显示出错 提示:repmat是通过数组复制创建多维数组的,上面的代码即是将数组C在行维和列维分别复制一次,然后再页维复制三次得到2×3×3的三维数组。 6.利用cat函数创建多维数组 a=zeros(2); b=ones(2); c=repmat(2,2,2); D=cat(3,a,b,c)%创建三维数组 D=cat(4,a,b,c) %创建4维数组。 D(:,1,:,:) %查看第一列的数据。 size(D) %可以知道数组D的具体维数。 6.数组运算与处理 数组之间的运算要求两个数组在任何一维都必须具有相同的大小。 (1)squeeze函数用于删除多维数组中的单一维(即大小为1的那些维) E=squeeze(D) size(D) E的数据和D一样,但比D少了一维,只有2行、2列和3页。

Matlab使用单元数组和结构数组

Matlab使用字符串数组、单元数组(cell array)和结构数组(struct array) 要在MALTAB中实现比较复杂的编程,就不能不用单元数组(cell array)和结构数组(structarray)。而且在Matlab中实现struct比C中更为方便。 MATLAB字符串数组的创建与运算 字符串数组主要用于可视化编程内容,如界面设计和图形绘制。 1.字符串变量的创建 字符变量的创建方法是:在指令窗口中先把待建的字符放在“单引号对”中,再按回车键。注意,该“单引号对”必须在英文状态下输入。这“单引号对”是MATLAB用来识别字符串变量所必须的。如: >>a='This is an example.' a = This is an example. >>msg = 'You''re right!' %创建带单引号的字符串 msg = You're right! 2.字符串数组的标识 字符串变量的每个字符(英文字母、空格和标点都是平等的)占据一个元素位,在数组中元素所处的位置用自然数标识。如: >>a='This is an example.' >>b=a(1:4) % 提出一个子字符串 b = This ra=a(end:-1:1) % 字符串的倒排 ra = .elpmaxe na si sihT 又如: >>A='这是一个算例。'; >>B=size(A) % 符号数组A 的“大小” B = 1 7 >>C=A([5 6]) % 提出一个子字符串 C = 算例 3.字符串的ASCII码 字符串的存储是用ASCII码实现的。指令abs和double都可以用来获取串数组所对应的ASCII码数值数组。指令char可把ASCII码数组变为串数组。如

matlab数值数组及向量化运算

第 3 章 数值数组及向量化运算 MATLAB 的核心内容:数值数组和数组运算 3.1 数值计算的特点和地位 符号计算的局限性:有很多问题1)无法解,2)求解时间过长 数值计算:适用范围广,能处理各种复杂的函数关系,计算速度快,容量大。 【例3.1-1】已知t t t f cos )(2 =,求dt t f x s x ? = 0 )()(。 (1)符号计算解法 syms t x ft=t^2*cos(t) sx=int(ft,t,0,x) ezplot(sx,0,5) hold on ft = t^2*cos(t) sx = (2)数值计算解法 dt=0.05; t=0:dt:5; Ft=t.^2.*cos(t); Sx=dt*cumtrapz (Ft); % 小梯形面积的累加求Ft 曲线下的面积,由一个个宽度为dt 的小梯形面积累加得到的 t(end-4:end) % end 指示最后一个元素的位置 Sx(end-4:end) plot(t,Sx,'.k','MarkerSize',12) xlabel('x'),ylabel('Sx'),grid on 图 3.1-1 在区间[0, 5]采样点上算得的定积分值

【例3.1-2】已知 ) sin( )(t e t f- =,求?=4 )( ) (dt t f x s。 (1)符号计算解法无解 syms t x ft=exp(-sin(t)) sx=int(ft,t,0,4) (2)数值计算解法 dt=0.05; t=0:dt:4; Ft=exp(-sin(t)); Sx=dt*cumtrapz(Ft); Sx(end) plot(t,Ft,'*r','MarkerSize',4) hold on plot(t,Sx,'.k','MarkerSize',15) hold off xlabel('x') legend('Ft','Sx') 3.2数值数组的创建和寻访 3.2.1一维数组的创建 x=[1,3,5,7,9] 逐个元素输入法 x=a:inc:b 步长生成法,inc缺省时步长为1 x=linspace(a,b,n) 线性采样法,以a,b为左右端点,产生1*n行数组 x=logspace(a,b,n) 对数采样法,以a,b为左右端点,产生1*n行数组运用diag, eye等标准数组生成函数。 【例3.2-1】一维数组的常用创建方法举例。 a1=1:6 a2=0:pi/4:pi a3=1:-0.1:0 b1=linspace(0,pi,4) b2=logspace(0,3,4) %创建数组[100 101 102 103] c1=[2 pi/2 sqrt(3) 3+5i] 3.2.2二维数组的创建 一小规模数组的直接输入法

实验2 数值数组及运算

实验2 数值数组及运算 一、实验目的 (1)掌握一维数组、二维数组、多项式和高维数组的创建 (2)掌握对数组操作的常用函数 二、实验内容 1.使用冒号运算符创建下面各表达式对应的向量。 a) x=linspace(1,10,5); x=1:2.25:10 b) x=linspace(-5,5); x=-5:0.1:5 c) x=logspace(1,3,3); x=10.^[1;3] d) x=logspace(1,3,5); 2.利用MATLAB 内置函数计算下面的值。 a) cosh(5) cosh(5) b) sinh(-2) sinh(-2) c) (e 5+e -5)/2 (exp(5)+exp(-5))/2 d) erf(1.2) ,其中,ηηd e x erf x ?-=02 )((提示:用help 查一下erf 的调用格式) erf(1.2) 3.用linspace 函数创建下面表达式的对应向量 a) x=0:10; x=linspace(0,10,11) b) x=0:0.2:10; x=linspace(0,10,51) c) x=-12:12; x=linspace(-12,12,25) d) x=10:-1:1; x=linspace(10,1,10) 4.给定行向量[]78910=x 和列向量???? ? ???????=4321y ,至少使用两种不同的方法求行向量z 。其中i i i y x z -= x=[10 9 8 7]; y=[1 2 3 4]’; z=x-y ’ 5.在MATLAB 中输入下列矩阵,再求出他们的乘积矩阵C ,并将C 矩阵的右下角的2×3子矩阵赋给D 矩阵。 ??????? ?????????=49819323753175323321A ,????????????++=3498143576255332763441i i B

MATLAB单元数组应用

摘要 单元数组中的每一个元素称为单元(cell). 单元可以包含任何类型的matlab数据, 这些数据类型包括数值数组, 字符, 符号对象, 甚至其他的单元数组和结构体. 不同的单元可以包含不同的数据.同时它也可以和结构数组变换使用。 我们都熟悉阵列或矩阵的构成,比如一个m*n大小的矩阵,那么它有m 行、n列,共有m*n个元素。如果我们只在实数范围内考虑,那么对应的每一个元素就是一个实数,这是一般的实矩阵。单元阵列也可以有m行n列,对应有m*n个元素。所不同的是单元阵列中每个元素是一个cell(元胞),而每个cell 可以由不同数据格式的矩阵构成,构成每个cell的矩阵大小也可以不同,可以是一个元素,也可以是一个向量,也可以是一个多维数组。 单元数组所要解决的问题: 对于一些小规模问题,我们可以通过变量轻易解决。或者一些大规模问题,但是涉及的变量类型只有一种,可以用数组解决。但是对于变量类型很多的,我们要进行大规模复杂的处理,用数组来处理就显得没有那么方便,这种情况下我们一般用单元数组来解决。既解决变量存储问题,又能很方便的提取数据。其中单元数组又可以跟结构数组的变换,以及单元数组可以进行各种复杂的矩阵变换,以解决更多的问题。 MTALAB软件的介绍: MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室),简单来说MATLAB的基本数据单位是矩阵。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 1.单元数组创建与显示: 1.1、直接赋值法:按单元索引法和按内容索引法。(其实也就是将花括号放在等式的右边或是左边的区别)。注意:“按单元索引法”和“按内容索引法”是完全等效的,可以互换使用。通过下面实例,我们看到:花括号{}用于访问单元的值,而括号()用于标识单元(即:不用于访问单元的值)。具体理解{}和()

matlab数值数组及向量化运算解析

第 3 章 数值数组及向量化运算 MATLAB 的核心内容:数值数组和数组运算 3.1 数值计算的特点和地位 符号计算的局限性:有很多问题1)无法解,2)求解时间过长 数值计算:适用范围广,能处理各种复杂的函数关系,计算速度快,容量大。 【例3.1-1】已知t t t f cos )(2 =,求dt t f x s x ? = 0 )()(。 (1)符号计算解法 syms t x ft=t^2*cos(t) sx=int(ft,t,0,x) ezplot(sx,0,5) hold on ft = t^2*cos(t) sx = (2)数值计算解法 dt=0.05; t=0:dt:5; Ft=t.^2.*cos(t); Sx=dt*cumtrapz (Ft); % 小梯形面积的累加求Ft 曲线下的面积,由一个个宽度为dt 的小梯形面积累加得到的 t(end-4:end) % end 指示最后一个元素的位置 Sx(end-4:end) plot(t,Sx,'.k','MarkerSize',12) xlabel('x'),ylabel('Sx'),grid on 图 3.1-1 在区间[0, 5]采样点上算得的定积分值

【例3.1-2】已知 ) sin( )(t e t f- =,求?=4 )( ) (dt t f x s。 (1)符号计算解法无解 syms t x ft=exp(-sin(t)) sx=int(ft,t,0,4) (2)数值计算解法 dt=0.05; t=0:dt:4; Ft=exp(-sin(t)); Sx=dt*cumtrapz(Ft); Sx(end) plot(t,Ft,'*r','MarkerSize',4) hold on plot(t,Sx,'.k','MarkerSize',15) hold off xlabel('x') legend('Ft','Sx') 3.2数值数组的创建和寻访 3.2.1一维数组的创建 x=[1,3,5,7,9] 逐个元素输入法 x=a:inc:b 步长生成法,inc缺省时步长为1 x=linspace(a,b,n) 线性采样法,以a,b为左右端点,产生1*n行数组 x=logspace(a,b,n) 对数采样法,以a,b为左右端点,产生1*n行数组运用diag, eye等标准数组生成函数。 【例3.2-1】一维数组的常用创建方法举例。 a1=1:6 a2=0:pi/4:pi a3=1:-0.1:0 b1=linspace(0,pi,4) b2=logspace(0,3,4) %创建数组[100 101 102 103] c1=[2 pi/2 sqrt(3) 3+5i] 3.2.2二维数组的创建 一小规模数组的直接输入法

第三章 Matlab数值数组及向量化运算

第 3 章 数值数组及向量化运算 数值数组(Numeric Array )和数组运算(Array Operations )始终是MATLAB 的核心内容。本书从第3章起,全部注意力将集中于数值数组及其运算。 本章系统阐述:数组浮点算法的特点;一、二维数值数组的创建和寻访;数组运算和向量化编程;实现数组运算的基本函数;常用标准数组生成函数和数组构作技法;非数NaN 、“空”数组概念和应用;关系和逻辑操作。 3.1 数值计算的特点和地位 【例3.1-1】已知t t t f cos )(2 =,求dt t f x s x ? = 0 )()(。 (1)符号计算解法 syms t x ft=t^2*cos(t) sx=int(ft,t,0,x) ft = t^2*cos(t) sx = x^2*sin(x)-2*sin(x)+2*x*cos(x) (2)数值计算解法 dt=0.05; t=0:dt:5; Ft=t.^2.*cos(t); Sx=dt*cumtrapz(Ft); t(end-4:end) Sx(end-4:end) plot(t,Sx,'.k','MarkerSize',12) xlabel('x'),ylabel('Sx'),grid on ans = 4.8000 4.8500 4.9000 4.9500 5.0000 ans = -20.1144 -19.9833 -19.7907 -19.5345 -19.2131 图 3.1-1 在区间[0, 5]采样点上算得的定积分值 【例3.1-2】已知 )sin()(t e t f -=,求?=4 )()(dt t f x s 。 (1)符号计算解法

matlab 数值数组及其运算

matlab 数值数组及其运算 数值数组(Numeric Array)和数组运算(Array Operation)是Matlab的核心运算内容 一、导言 二、一维数组 (向量) 三、二维数组(矩阵) 四、高维数组 五、MATLAB 的运算符 一、导言 1、数组的定义 数组是指一组实数或复数排成的长方阵列(Array) 一维的行或列 ? 向量 二位数组 ? 矩阵 三维的“若干矩阵的堆叠” ? 体 四维 更高维 2、数组运算 无论在数组上施加什么运算(+, -, * ,/,或函数等),该运算对数组中的每个元素都实施同样的操作。 Matlab的数组运算 使计算程序简短、易读 提高程序的向量化程度、提高计算效率 示例 x=0:0.1:1 %定义自变量的采样点取值数组 y=x.*exp(-x) %利用数组运算计算各自变量采样点上的函数值 plot(x,y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)') %绘图 4 矩阵的索引或下标 矩阵 A 中,位于第 i 横列、第 j 直行的元素可表示为 A(i, j) ,i 与 j 即是此元素的下标(Subscript)或索引(Index) MATLAB 中,所有矩阵的内部表示法都是以直行为主的一维向量 A(i, j) 和 A(i+(j-1)*m) 是完全一样的~m为矩阵A的列数 我们可以使用一维或二维下标来存取矩阵 矩阵的索引或下标 可以使用矩阵下标来进行矩阵的索引(Indexing) A(4:5,2:3) -取出矩阵 A 的第四、五横列与二、三直行所形成的部份矩阵A([9 14; 10 15]) - 用一维下标的方式来达到同样目的 用冒号(:), 取出一整列或一整行 A(:, 5) -取出矩阵 A 的第五个直行 用 end 这个保留字来代表某一维度的最大值 A(:, end) - 矩阵 A 的最后一个直行

matlab实验报告(二)矩阵和数组操作

一、实验目的 1.掌握矩阵和数组的一般操作,包括创建、保存、修改和调用等。 2.学习矩阵和数组的加减运算与乘法。 3.掌握对数组中元素的寻访与赋值,会对数组进行一般的操作。二、预备知识 1.常用的产生特殊矩阵的函数 ?eye(m,n) 单位阵 ?rand(m,n) 随机矩阵 ?randn(m,n) 正态分布的随机矩阵 ?zeros(m,n) 零矩阵 ?ones(m,n) 全部元素都为1的矩阵 ?compan(A) 矩阵A的伴随矩阵 ?bankel(m,n) n维Hankel矩阵 ?invhilb(n) n维逆Hilbert矩阵 ?magic(n) n维Magic矩阵 ?toeplitz(m,n) Toeplitz矩阵 ?wilkinson(n) n维Wilkinson特征值测试矩阵 ?handamard(n) n维Handamard矩阵 ?hilb(n) n维Hilbert矩阵 ?kron(A,B) Kronecker张量积 ?pascal(n) n维Pascal矩阵 ?vander(A) 由矩阵A产生Vandermonde矩阵 2.通过矩阵的结构变换,获得新矩阵 表2 矩阵结构变化产生新矩阵

3.数组(矩阵)操作 对数组或矩阵的基本操作有插入、重新排列、提取、按列拉长、置空(去掉某行或某列)、置零、用单信下标操作一个矩阵,用逻辑数组操作一个矩阵、按指定条件求子数组,求数组的规模等,下面一一举例说明(对数组和矩阵不加区别)。 X=4:6 x=4 5 6 ①插入通过对x进行插入运算创建矩阵A A=[x-3;x;x+3] A=1 2 3 4 5 6 7 8 9 ②重新排列以逆序重排A的各行形成矩阵B B=A(3:-1:1,1:3) B=7 8 9 4 5 6 1 2 3 ③提取提取A的前两行的后两列形成矩阵C C=A(1:2,2:3) C=2 3 5 6 ④按列拉长对C按列拉长形成矩阵D D=C(:) D=2 5 3

数值数组及向量化运算

第 3 章数值数组及向量化运算 本章内容: 一、二维数值数组的创建、寻访、运算和向量化编程; 二、常用标准数组生成函数和数组构作技法; 三、非数NaN、“空”数组概念和应用;关系和逻辑操作。 符号——数值;连续——离散化 3.1数值计算的特点和地位 数值计算以有限精度数字为基本操作元素,所以它只能用有限长度的数据,以有限的精度,表现有限时间和范围内的函数关系。 ●进行数值计算,必须首先确定一组自变量采样点。把连续变量离散化。 ●执行数值计算的表达式都是在已知的数值点上进行,数值计算结果也是离散的。 ●一般说来,直接观察数据,难以抽象出这组数据的内涵;而离散数据的图形曲线可以 形象地体现数据间的函数关系。但要注意:图形展示的函数性状仅在自变量的取值区间有意义,任何对区间外的延伸和猜测都需特别谨慎。 【例3.1-2】已知 ) sin( )(t e t f- =,求?=4 )( ) (dt t f x s。 (1)符号计算解法 syms t x ft=exp(-sin(t)) sx=int(ft,t,0,4) sv=vpa(sx,6) ft = exp(-sin(t)) Warning: Explicit integral could not be found. > In sym.int at 58 sx = int(exp(-sin(t)),t = 0 .. 4) sv = 3.06267 (2)数值计算解法 dt=0.05; t=0:dt:4; Ft=exp(-sin(t)); Sx=dt*cumtrapz(Ft); Sx(end) plot(t,Ft,'*r','MarkerSize',4) hold on plot(t,Sx,'.k','MarkerSize',15) hold off xlabel('x') legend('Ft','Sx') ans = 3.0632

(完整版)Matlab学习心得系列——005.结构数组

005. 结构数组 编程语言要描述日常生活中的某一类事物,就是要赋予这类事物一个公共名称(类名),再把这类事物具有的各种属性分别存放为若干变量(数据元素),这就是“结构体”。结构体里再加上若干操作其数据元素的函数(成员函数),就是“类”。然后,“类”就可以作为新的数据类型定义对象(类的实例化),再操作这些对象,实现编程需要。 以上就是面向对象的编程思想(适合C++或Java。 例如,描述学生,就用一个学生类Stude nt;学生属性:学号、 姓名、专业;实现操作:学生转专业。(粗略C++代码) class Student { private: // 数据元素一般设为该类的私有数据,防止属性被随意修改 int number; string name; string major; public:// string 定义字符串 // 成员函数一般设为可公共访问 Student(int num, string n, string m); // 类构造函数用于生成具体对象,必须与类名相同 void ChangeMajor(String newmajor); } Student:: Student(int num, string n, string m) { number = num; name = n; major = m; } void Student:: ChangeMajor(String newmajor) // Student:: 表示函数是来自Student 类 { major = newmajor; } // 下面是使用Student 类:

Student s1; // 用Student 类定义一个“学生”对象s1 s1. ChangeMajor(“ Math ”// );把学生s1 的专业修改为“ Math ” 可见,借助结构体或类的编程,既能与现实世界中的事物建立自然的对应(符合思维习惯),又能实现模型化的“批量生产”(用“类” 可以整体性地、一遍一遍地建立对象、操作对象)。这也是结构体或类(面向对象编程)的优势所在。 回到Matlab ,元胞数组只是呆板的堆放数据的仓库,结构数组则具有了与实际对象所对应的结构属性,这等同于“ C 语言的结构体”、“C++或Java的类的数据成员部分”。 结构数组是由若干个结构(struct )组成,每个结构都包含多个结构域(fields);数据必须存放在结构域中,可以是任何类型、任意大小的数据。例如,多个图形对象构成一个结构数组,每个图形对象就是一个结构,图形对象的一个属性对应一个结构域。 即,结构数组(矩阵)的元素是结构,每个结构包含若干结构域。 结构数组的创建 1. 用直接赋值语句创建 例1创建学生的结构数组,每个结构包含学号、姓名两个结构域(属性) stude nt(1). nu mber = '001';

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