数值数组及向量化运算

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

第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 12

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)标量和数组运算

,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 L

2 =

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--=曲线。要求分别采取“标量循环运算法”和“数组运

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

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 =

数据结构练习题第三章栈、队列和数组习题与答案

第三章栈、队列和数组 一、名词解释: 1.栈、栈顶、栈底、栈顶元素、空栈 2.顺序栈 3.链栈 4.递归 5.队列、队尾、队头 6.顺序队 7.循环队 8.队满 9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵 二、填空题: 1.栈修改的原则是_________或称________,因此,栈又称为________线性表。在栈顶 进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________ 或________。 2.栈的基本运算至少应包括________、________、________、________、________五 种。 3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。 4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。 5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。 6.top=0表示________,此时作退栈运算,则产生“________”; top=sqstack_maxsize-1表示________,此时作进栈运算,则产生“________”。 7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。 int InitStack(SqStackTp *sq) { ________; return(1);} 8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。 Int Push(SqStackTp *sq,DataType x) { if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);} else{________________: ________________=x; return(1);} } 9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。 Int Pop(SqStackTp *sq,DataType *x) {if(sp->top==0){error(“下溢”);return(0);} else{*x=________________; ________________; return(1);} } 10. 以下运算实现在顺序栈上判栈空,请在________________处用适当句子予以填充。 Int EmptyStack(SqStackTp *sq) {if(________________) return(1); else return(0); } 11.以下运算实现在顺序栈上取栈顶元素,请在________________处用适当句子予以填充。 Int GetTop(SqStackTp *sq,DataType *x)

习题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=lengt h(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 = 4.4409e-16 可见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列元素进行重赋值 A(:,[4,5])=Inf A = 1 NaN 7 InfInfNaN

实验二 数组及其运算

实验二 数组及其运算 一、实验目的 1.熟练矩阵、数组的创建; 2. 熟悉Matlab 的基本矩阵操作,运算符和字符串处理; 3. 熟悉矩阵的逻辑运算和关系运算; 二、实验设备 1.方正电脑 2.MATLAB 软件 三、实验内容 1.在指令窗中输入:x=1:0.2:2和y=2:-0.2:1,观察所生成的数组。 x = 1.0000 1.2000 1.4000 1.6000 1.8000 2.0000 y = 2.0000 1.8000 1.6000 1.4000 1.2000 1.0000 2.要求在[]π20上产生50个等距采样数据的一维数组,试用两种不同的指令实现。 X=linspace(0,2*pi,50) X=0:(2*pi)/49:(2*pi) 2.设x=-74o ,y=27 o ,22 的值。 x=-74/180*pi; y=27/180*pi; d=sin(x^2+y^2)/(sqrt(tan(abs(x+y)))+pi) d = 0.2273 3. 当a 取-3.0,-2.9,-2.8,…,2.8,2.9,3.0时,求0.3sin(0.3)a e a -+在各点的函 数值。 a=-3.0:0.1:3.0; y=exp(-0.3*a).*sin(a+0.3) Columns 1 through 10

-1.0512 -1.2305 -1.3863 -1.5184 -1.6267 -1.7116 -1.7734 -1.8129 -1.8309 -1.8285 Columns 11 through 20 -1.8069 -1.7675 -1.7117 -1.6411 -1.5572 -1.4617 -1.3564 -1.2428 -1.1228 -0.9978 Columns 21 through 30 -0.8696 -0.7397 -0.6095 -0.4804 -0.3538 -0.2308 -0.1126 0.0000 0.1060 0.2047 Columns 31 through 40 0.2955 0.3779 0.4515 0.5160 0.5714 0.6174 0.6543 0.6821 0.7010 0.7115 Columns 41 through 50 0.7138 0.7085 0.6959 0.6768 0.6516 0.6210 0.5856 0.5460 0.5030 0.4572 Columns 51 through 60 0.4093 0.3597 0.3093 0.2586 0.2080 0.1582 0.1097 0.0628 0.0180 -0.0245 Column 61 -0.0641 4. 已知 ??????=??????=5051 3501 ,05314320B A 求下列表达式的值: (1) A&B ans = 0 0 1 1 1 1 0 0 (2) A|B ans = 1 1 1 1 1 1 1 1 (3) ~A ans = 1 0 0 0 0 0 0 1 (4) A==B

第三章栈和队列习题_数据结构电子教案

习题三栈和队列 一单项选择题 1. 在作进栈运算时,应先判别栈是否(① ),在作退栈运算时应先判别栈是否(② )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③ )。 ①, ②: A. 空 B. 满 C. 上溢 D. 下溢 ③: A. n-1 B. n C. n+1 D. n/2 2.若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,...,pn,若p1=3,则p2为( )。 A 可能是2 B 一定是2 C 可能是1 D 一定是1 3. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?() A. 5 4 3 6 1 2 B. 4 5 3 1 2 6 C. 3 4 6 5 2 1 D. 2 3 4 1 5 6 4.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6, s5,s1,则栈的容量至少应该是() A.2 B. 3 C. 5 D.6 5. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。 A. |top[2]-top[1]|=0 B. top[1]+1=top[2] C. top[1]+top[2]=m D. top[1]=top[2] 6. 执行完下列语句段后,i值为:() int f(int x) { return ((x>0) ? x* f(x-1):2);} int i ; i =f(f(1)); A.2 B. 4 C. 8 D. 无限递归 7. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。 A. 3,2,4,1,1;(*^(+*- B. 3,2,8;(*^- C. 3,2,4,2,2;(*^(- D. 3,2,8;(*^(- 8. 用链接方式存储的队列,在进行删除运算时()。 A. 仅修改头指针 B. 仅修改尾指针 C. 头、尾指针都要修改 D. 头、尾指针可能都要修改 9. 递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。 A.队列 B.多维数组 C.栈 D. 线性表 10.设C语言数组Data[m+1]作为循环队列SQ的存储空间, front为队头指针,rear为队尾指针,则执行出队操作的语句为() A.front=front+1 B. front=(front+1)% m C.rear=(rear+1)%(m+1) D. front=(front+1)%(m+1) 11.循环队列的队满条件为 ( ) A. (sq.rear+1) % maxsize ==(sq.front+1) % maxsize; B. (sq.front+1) % maxsize ==sq.rear C. (sq.rear+1) % maxsize ==sq.front D.sq.rear ==sq.front

(完整版)实验2基本数据类型与数组

民族学院实验报告 计算机科学系级班指导教师 报告人20 年月日成绩 课程 名称JAVA语言程序设计 实验名称实验二基本数据类型与数组实验 目的 1.掌握基本数据类型及其相互之间的转换 2.掌握JAVA中数组的使用 实验仪器 和器材 具有JDK环境的计算机一台 实验内容 和要求 一、输出希腊字母表 1.请按模板要求,将【代码】替换为Java程序代码,运行该程序时在命令窗 口中输出希腊字母表。其运行效果如图2.1所示。 图2.1 输出希腊字母表 GreekAlphabet.java public class GreekAlphabet { public static void main(String[] args) { int startPosition=0,endPosition=0; char cStart='α',cEnd='ω'; startPosition=(int)cStart; //cStart做int型数据转换,并将结果赋值给startPosition endPosition=(int)cEnd; //cEnd做int型数据转换,并将结果赋值给EndPosition System.out.println("希腊字母\'α\'在Unicode表中的顺序位置:"+(int)cStart); System.out.println("希腊字母表:"); for (int i=startPosition;i<=endPosition;i++){ char c='\0'; cStart=(char)i; //i做char型转换运算,并将结果赋值给c System.out.print(" "+c); if ((i-startPosition+1)%10==0) System.out.println(); } } } 2.实验后练习 (1)将一个double型数据直接赋值给float型变量,程序编译时提示怎样的 错误? 答:程序提示的内容为:“可能损失精度”。 (2)在应用程序的main方法中增加语句:

数据结构练习题 第三章 栈、队列和数组 习题及答案备课讲稿

数据结构练习题第三章栈、队列和数组 习题及答案

第三章栈、队列和数组 一、名词解释: 1.栈、栈顶、栈底、栈顶元素、空栈 2.顺序栈 3.链栈 4.递归 5.队列、队尾、队头 6.顺序队 7.循环队 8.队满 9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵 二、填空题: 1.栈修改的原则是_________或称________,因此,栈又称为________线性 表。在栈顶进行插入运算,被称为________或________,在栈顶进行删 除运算,被称为________或________。 2.栈的基本运算至少应包括________、________、________、________、 ________五种。 3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生 “________”。 4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生 “________”。 5.一般地,栈和线性表类似有两种实现方法,即________实现和________ 实现。 6.top=0表示________,此时作退栈运算,则产生“________”; top=sqstack_maxsize-1表示________,此时作进栈运算,则产生 “________”。 7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以 填充。

int InitStack(SqStackTp *sq) { ________; return(1);} 8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填 充。 Int Push(SqStackTp *sq,DataType x) { if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);} else{________________: ________________=x; return(1);} } 9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予 以填充。 Int Pop(SqStackTp *sq,DataType *x) {if(sp->top==0){error(“下溢”);return(0);} else{*x=________________; ________________; return(1);} } 10. 以下运算实现在顺序栈上判栈空,请在________________处用适当句子予以填充。 Int EmptyStack(SqStackTp *sq) {if(________________) return(1); else return(0); } 11.以下运算实现在顺序栈上取栈顶元素,请在________________处用适当句子予以填充。 Int GetTop(SqStackTp *sq,DataType *x) {if(________________) return(0); else{*x=________________; return(1);} }

数值数组及向量化运算

第 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数值数组及向量化运算

第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章数组及矩阵运算

第三章 数组与矩阵及其基本运算 3.1 数组 3.1.1数组与矩阵的输入 1. 直接输入法 对于规模较小的矩阵,可直接在MATLAB 命令窗输入,也可在程序编辑器中写入程序,矩阵元素值还可在变量浏览器修改。 矩阵所有元素包含在“[]”内,同行元素之间用“,”隔开,也可用空格,两行元素用“;”分开,矩阵元素可以是数值,也可以是表达式。 【例3-1】输入矩阵???? ? ?????=987654321A 。 解:(1)在键盘上输入下列内容 A = [1,2,3; 4,5,6; 7,8,9] (2)按【Enter 】键,指令被执行,工作窗将显示以下结果: A = 1 2 3 4 5 6 7 8 9 也可输入:A = [1 2 3; 4 5 6; 7 8 9] %同行元素之间用空格 或 A=[1 2 3; 4 5 6; 7 8 9] 【例3-2】已知B=2+3i ,输入矩阵?? ?? ??????+=9872*6)5(4323 /1B sqrt A 。 解:(1)在键盘上输入下列内容 A = [1/3,2,3; 4,sqrt(5),6*B+2; 7,8,9] (2)按【Enter 】键,指令被执行,工作窗将显示以下结果: A = 0.3333 2.0000 3.0000 4.0000 2.2361 14.0000 +18.0000i 7.0000 8.0000 9.0000 【例3-3】用下面三条指令创建二维数组C 。 解:(1)在键盘上输入下列内容 a=sqrt(2); b=33^0.5; C=[1,1/a+i*b,b*sqrt(a);sin(pi/6),a+b,3+2i] (2)按回车后得: C = 1.0000 0.7071 + 5.7446i 6.8315 0.5000 7.1588 3.0000 + 2.0000i 复数矩阵的输入见例2-2、例2-3。 【例3-4】输入矩阵?? ? ? ??++++++=i i i i i i CN 166155144133122111。 解:在键盘上输入下列内容后,按回车后得CN 矩阵。 M_1=[1,2,3;4,5,6],M_2=[11,12,13;14,15,16]; CN=M_1+i*M_2 【例3-5】将时间轴t 在[-1,6]之间等分,间距为0.2,求等分后的t 数组。

实验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数值数组及向量化运算

第 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 数值数组及其运算

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数值数组及向量化运算解析

第 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数值数组及其运算实验报告

实验二MATLAB数值数组及其运算 班级:电子信息工程2班学号:1004101049 姓名:王率率 实验目的 1.掌握数值数组的创建和寻访方法; 2.理解数组运算和矩阵运算的含义; 3.熟悉标准数组生成函数和数组操作函数的运用; 4.熟悉两类特殊数组的应用; 5.了解关系运算和逻辑运算及应用。 内容步骤 在计算机上完成以下各题并进行结果验证,并按各题要求完成实验报告。 1.用2种方法生成行向量[3 5 7 9 11 13 15 17 19],并将其赋值给变量C。写出其命令。 c=[3 5 7 9 11 13 15 17 19] %方法1 c=linspace(3,19,9) %方法2 c=[3:2:19] %方法3 2.输入A= [2 5 6; 7 1 5; 3 1 5],分别使用全下标和单下标取出元素“7”。写出其命令。 A=[2 5 6;7 1 5;3 1 5] A(2,1) %全下标 A(2) %单下标 3.求矩阵[1 3;2 4]的转置矩阵、逆矩阵、矩阵的秩、矩阵的行列式值、矩阵的特征值和特征向量。分别写出其命令和结果。 A=[1 3;2 4] B=A' %转置矩阵 B1=inv(A) %逆矩阵 C=rank(A) %矩阵的秩 C1=det(A) %矩阵的行列式值 [V,D]=eig(A) %特征值和特征向量 运行结果: A = 1 3 2 4 B = 1 2 3 4 B1 =-2.0000 1.5000 1.0000 -0.5000 C =2 C1=-2 V =-0.9094 -0.5658 0.4160 -0.8246 D =-0.3723 0 0 5.3723

第三章 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)符号计算解法

数值数组及向量化运算

第 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 R2012a课后习题答案第三章

第3章数值数组及其运算 习题3及解答 1 要求在闭区间]2,0[ 上产生具有10个等距采样点的一维数组。试 用两种不同的指令实现。 〖目的〗 ●数值计算中产生自变量采样点的两个常用指令的异同。 〖解答〗 %方法一 t1=linspace(0,2*pi,10) %方法二 t2=0:2*pi/9:2*pi %要注意采样间距的选择,如这里的2*pi/9. t1 = Columns 1 through 7 0 0.6981 1.3963 2.0944 2.7925 3.4907 4.1888 Columns 8 through 10 4.8869 5.5851 6.2832 t2 = Columns 1 through 7 0 0.6981 1.3963 2.0944 2.7925 3.4907 4.1888 Columns 8 through 10 4.8869 5.5851 6.2832 2 由指令rng('default'),A=rand(3,5)生成二维数组A,试求该数组中 所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。 〖目的〗 ●数组下标的不同描述:全下标和单下标。 ●sub2ind, int2str, disp的使用。 ●随机发生器的状态控制:保证随机数的可复现性。 〖解答〗 rng('default') A=rand(3,5) [ri,cj]=find(A>0.5); id=sub2ind(size(A),ri,cj); ri=ri';cj=cj'; disp(' ') disp('大于0.5的元素的全下标') disp(['行号 ',int2str(ri)]) disp(['列号 ',int2str(cj)]) disp(' ') disp('大于0.5的元素的单下标') disp(id')

相关文档
最新文档