MATLAB入门(北航 张志涌版)-ch3 数值数组及向量化运算

更新时间:2023-12-05 18:40:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

MATLAB的核心内容:数值数组和数组运算

3.1 数值计算的特点和地位

符号计算的局限性:有很多问题1)无法解,2)求解时间过长

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

【例3.1-1】已知f(t)?tcost,求s(x)?(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 =

sin(x)*(x^2 - 2) + 2*x*cos(x) sin(x) (x2 - 2) + 2 x cos(x)2? x 0f(t) dt。

0-5-10-15-2000.511.522.5x33.544.55

(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]采样点上算得的定积分值

1

【例3.1-2】已知

f(t)?e?sin(t),求s(x)??f(t) dt。

0 4(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

【例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” 同行中元素间 “,”或“空格”

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

【例3.2-3】根据现有数据创建一个(3?8)的数组。

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

三 中规模数组的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文件创建数组

四 利用MATLAB函数创建数组

%产生(2×4)全1数组 %把正态随机数发生器置0 %产生正态随机阵

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

ones(2,4)

randn('state',0) randn(2,3)

3

ans =

0.8644 -0.8519 -0.4380 0.0942 0.8735 -0.4297

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

3.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] ) % 全下标法:指定行、指定列

3.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) creates a large matrix B

4

consisting of an m-by-n tiling of copies of A.

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.3 数组运算

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

量运算”

? 显著提高程序执行速度 ? 书写简洁、便于阅读

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

服从数组运算规则的函数及其它算符

服从数组运算规则的函数 三角、反三角 双曲、反双曲 指数、对数 圆整、求余 模、角、虚实部 符号函数 关系运算符 逻辑运算符 举例 sin, cos, tan, cot, sec, csc, asin, acos, atan, acot, asec, acsc sinh, cosh, …, asinh, acosh,… exp, sqrt, pow2, log, log10, log2 ceil, floor, fix, round, mod, rem abs, angle, real, imag, conj sign = =, ~ =, >, <, >=, <= &, |, ~

数组运算和向量化编程

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

5

本文来源:https://www.bwwdw.com/article/858t.html

Top