第3章__Matlab数值数组及向量化运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
findsym(z,3) ans = x,y,w
review
3.2.1 一维数组的创建和寻访
1. 递增/递减一维数组的创建: (1) 冒号生成法:
array=a: inc: b
(2) 线性(或对数)定点采样法
<向量>
在设定的总点数下, 均匀采样生成一维行数组.格式为:
x=linspace (a, b, n) 2.其他类型一维数组的创建:
A(:)=[1,4,7,2,5,8,3,6,9]'
3) 逻辑1标识法
【例3.2-6】数组标识与寻访
A=zeros(2,6) A(2,1:2:5)=[-1,-3,-5] A =0 0 0 0 0 0 A =1 3 5 7 9 11 0 0 0 0 0 0 -1 4 -3 8 -5 12 A(:)=1:12 B=A([1,2,2,2],[1,3,5] ) A =1 3 5 7 9 11 B =1 5 9 2 4 6 8 10 12 -1 -3 -5 A(2,4) -1 -3 -5 ans = 8 -1 -3 -5 A(8) L=A<3 ans = 8 A([1,2,5,6]') L = A(:,[1,3]) 1 0 0 0 0 0 ans = ans =1 5 1 0 1 0 1 0 1 2 6 A(L)=NaN 2 A(:,4:end) A= 5 ans =7 9 11 NaN 3 5 7 9 11 6 8 10 12 NaN 4 NaN 8 NaN 12
0 0 1
1 1
3.2.3 二维数组元素的标识和寻访
1) 全下标标识 数组名(行下标m, 列下标n)---数组的第m行n列的元素. A=[1,2,3; 4,5,6] A=
A(2,3)=6
1
来自百度文库
2
3
2) 单下标标识 4 5 6 只用一个下标来指定元素在数组中的位置-将数组中所 有的元素按照从上到下(列), 从左到右的方法从1开始 编号, 其编号就是单下标. A(4)=2 | 1 ① 2 ④ 3 ⑦ | A(:)—按单下标方式列出 A= | 4 ② 5 ⑤ 6 ⑧ | 全部元素,组成列向量。 |7 ③ 8 ⑥ 9 ⑨ |
x(3:end)
x(3:-1:1) x( find (x>2) )
% end表示最后一个下标
注意: 数组的第一个元素为x(1), 与C语言中第一个元 素为x[0]不同
上机问题
S= %23题 解为一个求解变量 [ 1/2*(-5*x^2+4*C1)^(1/2)] clear, syms x y S [ -1/2*(-5*x^2+4*C1)^(1/2)] S = dsolve('Dy*y/5+x/4=0','x') ezplot(subs(S(1),'C3',1),[-2,2 -2,2],1), hold on ezplot(subs(S(2),'C3',1),[-2,2 -2,2],1) %25题 解为两个求解变量 S=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','f(0)=0','g(0)=1','x') S= f: [1x1 sym] g: [1x1 sym]
【例3.2-8】函数flipud, fliplr, rot90对数组的操作体现着“矩阵变换”
3.3 数组运算
3.3.1数组运算的由来和规则
1. 函数关系数值计算模型的分类
• 个别的,无规律的数据集所执行的函数关系运算;
• 一组有规律数据需要反复所执行的函数关系运算; • 一组有规律数据按矩阵运算法则执行的函数关系运算。 对一般编程,后两种运算程序包含一重或多重循环体。
3.中规模数组的M文件创建法 例3.2.4 利用M文件创建和保存数组
1. 编写M文件并运行 AM=[100,101,102;103,104,105;106,107,108], 保存为文件名MyMatrix .m 2. 在命令窗中输入MyMatrix
3.2.2 二维数组的创建
4.利用MATLAB函数创建数组 指令 diag eye 含 义 指令 含 义 产生对角形数组(二维以下) rand 产生均匀分布随机数组 产生单位数组(二维以下) randn 产生正态分布随机数组 zeros 产生全0数组 D=eye(3) D= 1 0 0 1 0 0 diag(D) ans = 1 1 1
2.其他类型一维数组的创建:
(2) 运用MATLAB函数生成法: MATLAB特殊形式数组生成函数见表3.2-1: 均匀分布随机数组rand(1,n), 全1数组ones(1,n)
指令 含 义 指令 含 义
diag 产生对角形数组(二维以 下)
rand 产生均匀分布随机数 组
eye
产生单位数组(二维以下)
第3章 数值数组及向量化运算 教学目标
教学重点
教学内容
教学目标
• • • • •
掌握数组的创建方法 掌握数组的标识与寻访 掌握数组的运算 了解“非数”NaN和“空”数组 掌握关系操作和逻辑操作
教学重点
• 数组的创建方法 • 数组的标识与寻访 • 关系操作和逻辑操作
教学内容 3.1 数值计算的特点和地位 3.2 一、二维数值数组的创建和寻访 3.3 数组运算和向量化编程 3.4 “非数”NaN和“空”数组 3.5 关系操作和逻辑操作
ezplot(sx,[0,15])
例 3.1-2 已知
f (t ) e
sin(t )
求
s( x) f (t )dt
0
4
(1) 符号计算解法 syms t; ft=exp(-sin(t)); sx=int(ft, t, 0, 4)
(2) 数值计算解法
Warning: Explicit integral could not be found. sx = int(1/exp(sin(t)), t = 0..4)
3.1 数值计算的特点和地位
符号计算可以对包含变量字符,参数字符和数字的表达式进 行推理,运算,并给出符号结果。 缺点:有很多问题无法解,有很多问题求解时间过长 。
符号计算解法:
数值计算解法: dt=0.05; t=0:dt:15; Ft=t.^2.*cos(t); Sx=dt*cumtrapz(Ft);
inc---采样点之间的间隔, 即步长. 最后一个元素不一定等于b, 其大小为b’=a +inc*fix((b-a)/inc); 步长可以省略, 默认 为1; inc可以取正数或负数, 但要注意当取正时,要保证b>a, 数组最后一个元素不超过b, 取负时b<a, 最后一个元素不小于 b.
a
inc>0
0 4 0 4
4 4
3.2.4 数组构作技法综合
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) %逆时针旋转 D= 9 6 3 8 5 2 7 4 1
plot(t,Sx,'.k','MarkerSize',12) xlabel('x'),ylabel('Sx'),grid on
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)
3.2 数值数组的创建和寻访
3.2.1 一维数组的创建 3.2.2 二维数组的创建 3.2.3 二维数组元素的标识和寻访 3.2.4 数组操作技法综合
3.2.1 一维数组的创建和寻访
1. 递增/递减一维数组的创建: (1) 冒号生成法:
array=a: inc: b
a---数组的第一个元素
<向量>
delt=0.01; x=0:delt:4; y=exp(-sin(x)); sx=delt*cumtrapz(y); plot(x,y, 'r', 'LineWidth', 6); hold on; plot(x, sx, '.b', 'MarkerSize', 15); plot(x, ones(size(x)), 'k');
B=diag(b) B= 1 0 0 4
D1=repmat(B,2,4) % D1 = 1 0 1 0 1 0 1 0 4 0 4 0 4 0 1 0 1 0 1 0 1 0 4 0 4 0 4 0 D1([1,3],: )=[ ] % 删除1,3行 D1 = 0 4 0 4 0 4 0 0 4 0 4 0 4 0
A=[1, 2, 3, 4, 5]; L=logical([1, 0, 1, 0, 1]) A(L) ans=[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) 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= 1 4
2. 提高程序执行性能的三大措施
JIT(just in time)-Accelerator; 数组运算;向量或矩阵 运算。
第3题Matlab6.5 版符号限定假设对解方程根不起作用。
disp([blanks(6), 'S.f', blanks(18),'S.g']) disp([S.f,S.g])
S.f S.g [ exp(3*x)*sin(4*x), exp(3*x)*cos(4*x)]
上机问题
findsym(expression,n) %当n大于实际的基本变量数 目时,按字母表顺序列出所有本符号变量;当n小于等于 时实际的基本变量数目时,按与x距离最近的顺序列出。 symvar(expression,n) 能用。 syms x y w t u z=x^2+y+3*t+w^3+u; findsym(z,8) ans = t, u, w, x, y 多一个参数n在Matlab6.5中不 findsym(z,5) ans = x,y,w,u,t
等效于: x=a: (b-a)/(n-1) :b
x=logspace (a, b, n)
3.2.1 一维数组的创建和寻访 2.其他类型一维数组的创建:
(1) 逐个元素输入法:
行向量
如:array=[2, pi/2, sqrt(3), 3+5i] x=[1,2,3,4,5]' 列向量
使用场合及特点 使用场合: 数据元素比较少并都已知.如对少量 实验数据的处理可用此种方法.
rand 产生正态分布随机数 n 组
zeros 产生全0数组
magi 产生魔方数组(二维以下) c
ones 产生全1数组
3. 一维数组的子数组寻访和赋值
x=[0 1 2 3 4 5]; x(3) x([1 2 3]), x([1 2 3]') x(4:6)=x([1,2,3]) % x(4:6)=[0,1,2]
magic 产生魔方数组(二维以下) ones 产生全1数组
【例3.2-5】标准数组产生的演示。
ones(2,4) ans = 1 1 1 1 1 1 randn('state',0) randn(2,3) ans = -0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909
(1) 逐个元素输入法:
x=[1,2,3,4,5]'
(2) 运用MATLAB函数生成法:
均匀分布随机数组rand(1,n), 全1数组ones(1,n)
3.2.2 二维数组的创建
1.小规模数组的直接输入法 • 创建二维数组与创建一维数组的方式类似。在创建二 维数组时,整个输入数组以方括号[ ]为其首尾。用逗 号或者空格区分同一行的不同元素,用分号或者回车 (Enter)区分不同行。 2.中规模数组的数组编辑器创建法
b b’
b b’ Inc<0
a
特点: 等差数列
1. 递增/递减一维数组的创建:
(2) 线性(或对数)定点采样法
在设定的总点数下, 均匀采样生成一维行数组.格式为:
x=linspace (a, b, n)
a---数组初始值 b---数组最后值 n---数组总个数 增量的计算---inc=(b-a)/(n-1) 特点:方便对数组的元素的总个数进行控制,最后一个元素肯 定是设定之值.