ch3 数值数组及向量化运算.docx

上传人:b****3 文档编号:2895365 上传时间:2022-11-16 格式:DOCX 页数:20 大小:94.35KB
下载 相关 举报
ch3 数值数组及向量化运算.docx_第1页
第1页 / 共20页
ch3 数值数组及向量化运算.docx_第2页
第2页 / 共20页
ch3 数值数组及向量化运算.docx_第3页
第3页 / 共20页
ch3 数值数组及向量化运算.docx_第4页
第4页 / 共20页
ch3 数值数组及向量化运算.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

ch3 数值数组及向量化运算.docx

《ch3 数值数组及向量化运算.docx》由会员分享,可在线阅读,更多相关《ch3 数值数组及向量化运算.docx(20页珍藏版)》请在冰豆网上搜索。

ch3 数值数组及向量化运算.docx

ch3数值数组及向量化运算

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

MATLAB的核心内容:

数值数组和数组运算

.1数值计算的特点和地位

符号计算的局限性:

有很多问题1)无法解,2)求解时间过长

数值计算:

适用范围广,能处理各种复杂的函数关系,计算速度快,容量大。

【例3.1-1】已知

,求

(1)符号计算解法

symstx

ft=t^2*cos(t)

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

ezplot(sx,0,5)

holdon

(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'),gridon

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

【例3.1-2】已知

,求

(1)符号计算解法无解

symstx

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)

holdon

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

holdoff

xlabel('x')

legend('Ft','Sx')

.2数值数组的创建和寻访

.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)%创建数组[100101102103]

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

.2.2二维数组的创建

10一小规模数组的直接输入法

【例3.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]

三个要素:

整个输入数组“[]”

行与行间“;”或“Enter”

同行中元素间“,”或“空格”

10二中规模数组的数组编辑器创建法

【例3.2-3】根据现有数据创建一个

的数组。

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

 

10三中规模数组的M文件创建法

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

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

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

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

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

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

10四利用MATLAB函数创建数组

【例3.2-5】利用最常用标准数组生成函数产生标准数组的演示。

ones(2,4)%产生(2×4)全1数组

randn('state',0)%把正态随机数发生器置0

randn(2,3)%产生正态随机阵

D=eye(3)%产生3×3的单位阵

diag(D)%取D阵的对角元

diag(diag(D))%外diag利用一维数组生成对角阵

randsrc(3,20,[-3,-1,1,3],1)%在[-3,-1,1,3]上产生3×20均布随机数组,随机发生器的状态设置为1

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

【例3.2-6】本例演示:

数组元素及子数组的各种标识和寻访格式;冒号的使用;end的作用。

A=zeros(2,6)

A(:

)=1:

12%单下标法:

单下标全元素寻访

A(2,4)%全下标法:

指定行、指定列

A(8)%单下标法:

单下标寻访

A(:

[1,3])%全下标法:

全部行、指定列

A([1,2,5,6])%单下标法:

生成指定的一维行(或列)数组

A(:

4:

end)%全下标法:

全部行、指定列,end表示最后一列。

A(2,1:

2:

5)=[-1,-3,-5]%全下标法:

指定行、指定列

 

B=A([1,2,2,2],[1,3,5])%全下标法:

指定行、指定列

.2.4数组操作技法综合

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

a=1:

8

A=reshape(a,4,2)

A=reshape(A,2,4)%改变行数和列数

b=diag(A)%提取对角元素,。

B=diag(b)%生成对角阵

D1=repmat(B,2,4)%排列B模块repmat(A,m,n)createsalargematrixBconsistingofanm-by-ntilingofcopiesofA.

D1([1,3],:

)=[]%删除指定行

【例3.2-8】函数flipud,fliplr,rot90对数组的操作体现着“矩阵变换”。

A=reshape(1:

9,3,3)

B=flipud(A)%上下对称交换

C=fliplr(A)%左右对称交换

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

.3数组运算

MATLAB面向数组/矩阵编程和运算:

Ø用“数组或矩阵运算”模式去处理那些“借助循环而反复执行的标量运算”

●显著提高程序执行速度

●书写简洁、便于阅读

数组运算和向量化编程

尽可能用“数组或矩阵运算”指令

【例3.3-1】欧姆定律:

,其中

分别是电阻(欧姆)、电压(伏特)、电流(安培)。

验证实验:

据电阻两端施加的电压,测量电阻中流过的电流,然后据测得的电压、电流计算平均电阻值。

(测得的电压电流具体数据见下列程序)。

(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);

fork=1:

L

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

end

%---------------------------

sr=0;

fork=1:

L

sr=sr+r(k);

end

rm=sr/L

(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)%MATLAB现成的求平均函数

【例3.3-2】用间距为0.1的水平线和垂直线均匀分割

的矩形域,在所有水平线和垂直线交点上计算函数

的值,并图示。

(1)非向量化编程

clear

x=-5:

0.1:

5;

y=(-2.5:

0.1:

2.5)';

N=length(x);

M=length(y);

forii=1:

M

forjj=1:

N

X0(ii,jj)=x(jj);%所有格点的x坐标

Y0(ii,jj)=y(ii);%所有格点的y坐标

Z0(ii,jj)=sin(abs(x(jj)*y(ii)));%所有格点的函数值

end

end

(2)向量化编程

x=-5:

0.01:

5;

y=(-2.5:

0.01:

2.5)';

[X,Y]=meshgrid(x,y);%指定矩形域内所有格点的(x,y)坐标

Z=sin(abs(X.*Y));%数组运算计算矩形域所有格点坐标(x,y)对应的函数值

%注意:

函数f(·)对数组的逐个元素起作用。

(3)比较二维双精度数是否相等

norm(Z-Z0)%范数接近eps,认为相等。

(4)绘图

surf(X,Y,Z)

xlabel('x')

ylabel('y')

shadinginterp

view([190,70])

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

end

.4“非数”和“空”数组

✧MATLAB中特有的两个概念和“预定义变量”

.4.1非数NaN(或记为nan)

等运算产生。

 

NaN的性质:

●NaN参与运算所得的结果也是NaN,即具有传递性;

●NaN没有“大小”概念,不能比较两个NaN的大小。

 

NaN的功用:

●真实记述

等运算的后果;

●避免可能因

等运算而造成程序执行的中断;

●在测量数据处理中,可以用来标识“野点(非正常点)”;

●在数据可视化中,可以裁剪图形。

【例3.4-1】非数的产生和性质演示。

(1)非数的产生

a=0/0,b=0*log(0),c=inf-inf

a=

NaN

b=

NaN

c=

NaN

(2)非数的传递性

0*a,sin(a)

(3)非数的属性判断

class(a)

isnan(a)%唯一判断非数的指令

ans=

double

ans=

1

【例3.4-2】非数元素的寻访。

rand('state',0)%将随机发生器置0

R=rand(2,5);R(1,5)=NaN;R(2,3)=NaN

R=

Columns1through3

0.95010.60680.8913

0.23110.4860NaN

Columns4through5

0.4565NaN

0.01850.4447

LR=isnan(R)%对数组元素是否非数进行判断

LR=

00001

00100

si=find(LR)%确定非零数的“单下标”标

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1