《数学应用软件》试验(二)【数值数组及其运算】
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
>> syms a b c ; >> M1 = sym('Classical') ; >> M2 = sym(' Jazz') ; >> M3 = sym('Blues') ; >> A = [a [ A= [Classical, [ 2, Jazz, 3, Blues] 5] b c; M1, M2, M3;sym([2 a, b, c] 3 5] )]
访第 2 行第 1 列的元素,并说明二维数组元素的存储顺序。 (9)在指令窗中输入 B=【1,2,3;6,7,8】 ,并计算 A.*B;和 A*B 并说明矩阵相 乘和数组相乘的区别。 (10)关系操作和逻辑操作 表 2-4 Matlab 常用关系运算符 关系运算符 说 明 < 小于 逻辑运算符 说 明 <= 小于等于 & 与 > 大于 | 或 >= 大于等于 ~ 非 == 等于 Xor 异或 ~= 不等于
上面函数的具体用法,可以用帮助命令 help 得到。如:meshgrid(x,y) 输入 x=[1 2 3 4]; X= 1 1 1 2 2 2 3 3 3 4 4 4 y=[1 0 5]; [X,Y]=meshgrid(x, y),则 Y= 1 0 5 1 0 5 1 0 5 1 0 5
目的是将原始数据 x,y 转化为矩阵数据 X,Y。 (3)符号向量(矩阵)的输入 a.用函数 sym 定义符号矩阵: 函数 sym 实际是在定义一个符号表达式,这时的符号矩阵中的元素可以是任何的 符号或者是表达式,而且长度没有限制。只需将方括号置于单引号中。 例 2:
>> X_Data = [2.32 3.43;4.37
b.系统中提供了多个命令用于输入特殊的矩阵: 函数
compan diag
功
能
函数
toeplitz vander
功
能
伴随阵 对角阵
Toeplitz 矩阵 Vandermonde 矩阵
hadamard hankel invhilb kron magic pascal
cos 2t 曲线。
(12)写出生成如图 2-1 所示波形的 MATLAB 脚本 M 文件。图中虚线为正弦波, 要求它的负半波被置零,且在
3 / 2 处被削顶。
图 2-1 (13)字符串数组 A、创建串数组 例:a=‘This is an example.’ B、 size(a):输出该数组的大小 C、串数组的元素标识 例:a14=a(1:4)即 a14=This D、字符串的存储是用 ASCII 码实现的 Abs 和 double 指令:将串数组转换为 ASCII 码数值数组 例 Name=‘thomas r.lee’;name1=double(name) char 指令:将 ASCII 码数值数组转换为串数组 例 name2=char(name1) E、 A=‘这是一个算例.’:中文字符串数组 F、 b=‘example’’3.1.2-1’’’:连续两个单引号可创建带单引号的字符串 G、 可由小串构成大串.
值
1
(2) 数值型向量(矩阵)的输入 a.任何矩阵(向量) ,可以直接按行方式 输入每个元素:同一行中的元素用逗号 ... (, )或者用空格符来分隔;行与行之间用分号(; )分隔。所有元素处于一方 括号([ ])内; 例 1: >> Time = [11 12 1 2 3 4 5 6 7 5.98] 8 9 10]
函 数 名
数 学 计 算 功 能
实数的绝对值或复数的幅值 反余弦 arcsin x 反双曲余弦 arccosh x 在四象限内求复数 x 的相角 反正弦 arcsin x 反双曲正弦 arcsinh x 反正切 arctan x 在四象限内求反正切 反双曲正切 arctanh x 对 x 朝+∞方向取整 求复数 x 的共轭复数 余弦 cos x 双曲余弦 cosh x 指数函数
Hadamard 矩阵 Hankel 矩阵 Hilbert 矩阵的逆阵 Kronercker 张量积 魔方矩阵 Pascal 矩阵
zeros ones rand randn eye meshgrid
元素全为 0 的矩阵 元素全为 1 的矩阵 元素服从均匀分布的随机矩阵 元素服从正态分布的随机矩阵 对角线上元素为 1 的矩阵 由两个向量生成的矩阵
数 学 计 算 功 能
对 x 朝-∞方向取整 求正整数 m 和 n 的最大公约数 求复数 x 的虚部 求正整数 m 和 n 的最小公倍数 自然对数(以 e 为底数) 常用对数(以 10 为底数) 求复数 x 的实部 求正整数 m 和 n 的 m/n 之余数 对 x 四舍五入到最接近的整数 符号函数:求出 x 的符号 正弦 sin x 反双曲正弦 sinh x 求实数 x 的平方根: 正切 tan x 双曲正切 tanh x
H、 利用串操作函数 char 组。 例:
•Name=[‘Thomas R.Lee
str2mat
strvcat
int2str
num2str
mat2str 等创建数
‘;’Senior Developer’];须输入同一长度的字符串;
•Name=char(‘Thomas R.Lee’,’Senior Developer’,’Kaiyi.wang’,’threema 月
实验二
一、实验目的
数值数组及其运算
1、掌握一维数组的创建和寻访; 2、掌握二维数组的创建和寻访; 3、掌握 MATLAB 的矩阵和数组的运算; 4、熟悉 MATLAB 关系操作和逻辑操作。
二、实验内容和步骤
(1) 常量与变量 系统的变量命名规则:变量名区分字母大小写;变量名必须以字母打头,其后可 以是任意字母,数字,或下划线的组合。此外,系统内部预先定义了几个有特殊意义 和用途的变量,见下表: 特殊的变量、常量 ans pi eps inf NaN i,j 取
>> sym_matrix = sym('[a sym_matrix = [ [Jack, Help_Me, a, b, NO_WAY] c] b c;Jack Help_Me NO_WAY]')
b.用函数 syms 定义符号矩阵 先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩 阵。 例 3:
串. 在编辑窗中输入下列程序,观察结果并逐行分析程序的功能。 clear a=2; w=3; t=0:0.01:10; y=exp(-a*t).*sin(w*t); [y_max,i_max]=max(y); t_text=['t=',num2str(t(i_max))]; y_text=['y=',num2str(y_max)]; max_text=char('maximum',t_text,y_text); tit=['y=exp(-',num2str(a),'t)*sin(',num2str(w),'t)'];
表 2-4 Matlab 常用逻辑运算符
在指令窗中输入下列程序,观察结果并逐行分析程序的功能。 rand('state',0); A=rand(3,5); [ii,jj]=find(A>0.5); disp(‘ii disp([ii jj’) jj])
0.5t
(11)在时间区间 [0,10] 中,绘出 y 1 e
(4) 数组(矩阵)的点运算 运算符:+(加) 、-(减) 、./(右除) 、.\(左除) 、.^(乘方) ,数组元素之间直接 进行数值运算。 例 4: >> g = [1 2 3 4];h = [4 3 2 1]; >> s1 = g + h, s2 = g.*h, s3 = g.^h, s4 = g.^2, s5 = 2.^h (5) 矩阵的运算 运算符:+(加) 、-(减) 、*(乘) 、/(右除) 、\(左除) 、^(乘方) 、’(转置)等; 常用函数:det(行列式) 、inv(逆矩阵) 、rank(秩) 、eig(特征值、特征向量) 、 rref(化矩阵为行最简形) 例 5:
>> A=[2 0 –1;1 3 2]; >> M = A*B >> det_B = det(B) >> rank_A = rank(A) >> inv_B = inv(B) >> [V,D] = eig(B) >> X = A/B B=[1 7 –1;4 2 3;2 0 1]; % % % % 矩阵 A 与 B 按矩阵运算相乘 矩阵 A 的秩 矩阵 B 的逆矩阵 A/B = A*B-1,即 XB=A,求 X % 矩阵 A 的行列式
% 矩阵 B 的特征值矩阵 V 与特征向量构成的矩阵 D
>> Y = B\A 常见数学函数
abs(x) acos(x)
%
B\A = B-1*A,即 BY=A,求 Y 函 数 名
floor(x) gcd(m,n) imag(x) lcm(m,n) log(x) log10(x) real(x) rem(m,n) round(x) sign(x) sin(x) sinh(x) sqrt(x) tan(x) tanh(x)
x
acosh(x) angle(x) asin(x) asinh(x) atan(x) atan2(x,y) atanh(x) ceil(x) conj(x) cos(x) cosh(x) exp(x) fix(x)
ex
对 x 朝原点方向取整
如:输入 x=[-4.85 -2.3 -0.2 1.3 4.56 6.75],则: ceil(x)= -4 -2 0 2 5 7 fix(x) = -4 -2 0 1 4 6 floor(x) = -5 -3 -1 1 4 6 round(x) = -5 -2 0 1 5 7 (6)在指令窗中输入 x=[2 3 pi/2 9] ;x=[2,3,pi/2,9] 观察结果是否一样? (7) 要求在闭区间 [0,2 ] 上产生 50 个 等距采样的一维数组 A ,试用两种不同的 指令实现。要寻访 1 到 5 个元素如何实现;寻访 7 到最后一个元素如何实现;寻访第 2,6,8 个元素如何实现;寻访大于 2 的元素如何实现。给第 3,5,9 个元素赋值 100 如何实现; (8)在指令窗中输入 A=[1 2 3;4 5 6] 观察结果;分别用“全下标”和“单下标”来寻
plot(t,zeros(size(t)),'k') hold on plot(t,y,'b') plot(t(i_max),y_max,'r.','MarkerSize',20) text(t(i_max)+0.3,y_max+.05,max_text) title('tit'),xlabel('t'),ylabel('y'),hold off
用于结果的缺省变量名 圆周率 π 的近似值(3.1416) 数学中无穷小(epsilon)的近似值(2.2204e - 016) 无穷大,如 1/0 = inf (infinity) 非数, 如 0/0 = NaN (Not a Number) , inf / inf = NaN 虚数单位:i = j =
可输入不同长度的字符串;
•Fname=deblank(name(5,:))删除尾部空格; •可通过 Size(fname)来检验; •Strcmp(str1,str2)可判断两个字符串是否相等; •Strncmp(str1,str2,3)用于判断两个字符的前 3 个字符是否相等; •Strcmp(a,b)用于判断元胞数组 a 和 b 的对应字符串是否相等; •Strncmp(a,b,3)用于判断元胞数组 a 和 b 的对应字符串的前 3 个字符是否相等; •A==b 用于比较两个字符串中对应字符是否相等; •A~=b 用于比较两个字符串中对应字符是否不等; •Isletter(mystring)用于判断 mystring 中字符是否为字母; •Isspace(mystring)用于判断 mystring 中字符是否为空格或制表符; •Strrep(label,’s1’,’s2’)可以将 label 中字符串 s1 用 s2 替换; •Findstr(‘s1’,label)在 label 中找 s1,找到返回位置;否则返回空矩阵符号“[ ]”; •Strtok(label)在 label 中找分隔字符(空格,/,制表符),返回第一个分隔字符前的子
访第 2 行第 1 列的元素,并说明二维数组元素的存储顺序。 (9)在指令窗中输入 B=【1,2,3;6,7,8】 ,并计算 A.*B;和 A*B 并说明矩阵相 乘和数组相乘的区别。 (10)关系操作和逻辑操作 表 2-4 Matlab 常用关系运算符 关系运算符 说 明 < 小于 逻辑运算符 说 明 <= 小于等于 & 与 > 大于 | 或 >= 大于等于 ~ 非 == 等于 Xor 异或 ~= 不等于
上面函数的具体用法,可以用帮助命令 help 得到。如:meshgrid(x,y) 输入 x=[1 2 3 4]; X= 1 1 1 2 2 2 3 3 3 4 4 4 y=[1 0 5]; [X,Y]=meshgrid(x, y),则 Y= 1 0 5 1 0 5 1 0 5 1 0 5
目的是将原始数据 x,y 转化为矩阵数据 X,Y。 (3)符号向量(矩阵)的输入 a.用函数 sym 定义符号矩阵: 函数 sym 实际是在定义一个符号表达式,这时的符号矩阵中的元素可以是任何的 符号或者是表达式,而且长度没有限制。只需将方括号置于单引号中。 例 2:
>> X_Data = [2.32 3.43;4.37
b.系统中提供了多个命令用于输入特殊的矩阵: 函数
compan diag
功
能
函数
toeplitz vander
功
能
伴随阵 对角阵
Toeplitz 矩阵 Vandermonde 矩阵
hadamard hankel invhilb kron magic pascal
cos 2t 曲线。
(12)写出生成如图 2-1 所示波形的 MATLAB 脚本 M 文件。图中虚线为正弦波, 要求它的负半波被置零,且在
3 / 2 处被削顶。
图 2-1 (13)字符串数组 A、创建串数组 例:a=‘This is an example.’ B、 size(a):输出该数组的大小 C、串数组的元素标识 例:a14=a(1:4)即 a14=This D、字符串的存储是用 ASCII 码实现的 Abs 和 double 指令:将串数组转换为 ASCII 码数值数组 例 Name=‘thomas r.lee’;name1=double(name) char 指令:将 ASCII 码数值数组转换为串数组 例 name2=char(name1) E、 A=‘这是一个算例.’:中文字符串数组 F、 b=‘example’’3.1.2-1’’’:连续两个单引号可创建带单引号的字符串 G、 可由小串构成大串.
值
1
(2) 数值型向量(矩阵)的输入 a.任何矩阵(向量) ,可以直接按行方式 输入每个元素:同一行中的元素用逗号 ... (, )或者用空格符来分隔;行与行之间用分号(; )分隔。所有元素处于一方 括号([ ])内; 例 1: >> Time = [11 12 1 2 3 4 5 6 7 5.98] 8 9 10]
函 数 名
数 学 计 算 功 能
实数的绝对值或复数的幅值 反余弦 arcsin x 反双曲余弦 arccosh x 在四象限内求复数 x 的相角 反正弦 arcsin x 反双曲正弦 arcsinh x 反正切 arctan x 在四象限内求反正切 反双曲正切 arctanh x 对 x 朝+∞方向取整 求复数 x 的共轭复数 余弦 cos x 双曲余弦 cosh x 指数函数
Hadamard 矩阵 Hankel 矩阵 Hilbert 矩阵的逆阵 Kronercker 张量积 魔方矩阵 Pascal 矩阵
zeros ones rand randn eye meshgrid
元素全为 0 的矩阵 元素全为 1 的矩阵 元素服从均匀分布的随机矩阵 元素服从正态分布的随机矩阵 对角线上元素为 1 的矩阵 由两个向量生成的矩阵
数 学 计 算 功 能
对 x 朝-∞方向取整 求正整数 m 和 n 的最大公约数 求复数 x 的虚部 求正整数 m 和 n 的最小公倍数 自然对数(以 e 为底数) 常用对数(以 10 为底数) 求复数 x 的实部 求正整数 m 和 n 的 m/n 之余数 对 x 四舍五入到最接近的整数 符号函数:求出 x 的符号 正弦 sin x 反双曲正弦 sinh x 求实数 x 的平方根: 正切 tan x 双曲正切 tanh x
H、 利用串操作函数 char 组。 例:
•Name=[‘Thomas R.Lee
str2mat
strvcat
int2str
num2str
mat2str 等创建数
‘;’Senior Developer’];须输入同一长度的字符串;
•Name=char(‘Thomas R.Lee’,’Senior Developer’,’Kaiyi.wang’,’threema 月
实验二
一、实验目的
数值数组及其运算
1、掌握一维数组的创建和寻访; 2、掌握二维数组的创建和寻访; 3、掌握 MATLAB 的矩阵和数组的运算; 4、熟悉 MATLAB 关系操作和逻辑操作。
二、实验内容和步骤
(1) 常量与变量 系统的变量命名规则:变量名区分字母大小写;变量名必须以字母打头,其后可 以是任意字母,数字,或下划线的组合。此外,系统内部预先定义了几个有特殊意义 和用途的变量,见下表: 特殊的变量、常量 ans pi eps inf NaN i,j 取
>> sym_matrix = sym('[a sym_matrix = [ [Jack, Help_Me, a, b, NO_WAY] c] b c;Jack Help_Me NO_WAY]')
b.用函数 syms 定义符号矩阵 先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩 阵。 例 3:
串. 在编辑窗中输入下列程序,观察结果并逐行分析程序的功能。 clear a=2; w=3; t=0:0.01:10; y=exp(-a*t).*sin(w*t); [y_max,i_max]=max(y); t_text=['t=',num2str(t(i_max))]; y_text=['y=',num2str(y_max)]; max_text=char('maximum',t_text,y_text); tit=['y=exp(-',num2str(a),'t)*sin(',num2str(w),'t)'];
表 2-4 Matlab 常用逻辑运算符
在指令窗中输入下列程序,观察结果并逐行分析程序的功能。 rand('state',0); A=rand(3,5); [ii,jj]=find(A>0.5); disp(‘ii disp([ii jj’) jj])
0.5t
(11)在时间区间 [0,10] 中,绘出 y 1 e
(4) 数组(矩阵)的点运算 运算符:+(加) 、-(减) 、./(右除) 、.\(左除) 、.^(乘方) ,数组元素之间直接 进行数值运算。 例 4: >> g = [1 2 3 4];h = [4 3 2 1]; >> s1 = g + h, s2 = g.*h, s3 = g.^h, s4 = g.^2, s5 = 2.^h (5) 矩阵的运算 运算符:+(加) 、-(减) 、*(乘) 、/(右除) 、\(左除) 、^(乘方) 、’(转置)等; 常用函数:det(行列式) 、inv(逆矩阵) 、rank(秩) 、eig(特征值、特征向量) 、 rref(化矩阵为行最简形) 例 5:
>> A=[2 0 –1;1 3 2]; >> M = A*B >> det_B = det(B) >> rank_A = rank(A) >> inv_B = inv(B) >> [V,D] = eig(B) >> X = A/B B=[1 7 –1;4 2 3;2 0 1]; % % % % 矩阵 A 与 B 按矩阵运算相乘 矩阵 A 的秩 矩阵 B 的逆矩阵 A/B = A*B-1,即 XB=A,求 X % 矩阵 A 的行列式
% 矩阵 B 的特征值矩阵 V 与特征向量构成的矩阵 D
>> Y = B\A 常见数学函数
abs(x) acos(x)
%
B\A = B-1*A,即 BY=A,求 Y 函 数 名
floor(x) gcd(m,n) imag(x) lcm(m,n) log(x) log10(x) real(x) rem(m,n) round(x) sign(x) sin(x) sinh(x) sqrt(x) tan(x) tanh(x)
x
acosh(x) angle(x) asin(x) asinh(x) atan(x) atan2(x,y) atanh(x) ceil(x) conj(x) cos(x) cosh(x) exp(x) fix(x)
ex
对 x 朝原点方向取整
如:输入 x=[-4.85 -2.3 -0.2 1.3 4.56 6.75],则: ceil(x)= -4 -2 0 2 5 7 fix(x) = -4 -2 0 1 4 6 floor(x) = -5 -3 -1 1 4 6 round(x) = -5 -2 0 1 5 7 (6)在指令窗中输入 x=[2 3 pi/2 9] ;x=[2,3,pi/2,9] 观察结果是否一样? (7) 要求在闭区间 [0,2 ] 上产生 50 个 等距采样的一维数组 A ,试用两种不同的 指令实现。要寻访 1 到 5 个元素如何实现;寻访 7 到最后一个元素如何实现;寻访第 2,6,8 个元素如何实现;寻访大于 2 的元素如何实现。给第 3,5,9 个元素赋值 100 如何实现; (8)在指令窗中输入 A=[1 2 3;4 5 6] 观察结果;分别用“全下标”和“单下标”来寻
plot(t,zeros(size(t)),'k') hold on plot(t,y,'b') plot(t(i_max),y_max,'r.','MarkerSize',20) text(t(i_max)+0.3,y_max+.05,max_text) title('tit'),xlabel('t'),ylabel('y'),hold off
用于结果的缺省变量名 圆周率 π 的近似值(3.1416) 数学中无穷小(epsilon)的近似值(2.2204e - 016) 无穷大,如 1/0 = inf (infinity) 非数, 如 0/0 = NaN (Not a Number) , inf / inf = NaN 虚数单位:i = j =
可输入不同长度的字符串;
•Fname=deblank(name(5,:))删除尾部空格; •可通过 Size(fname)来检验; •Strcmp(str1,str2)可判断两个字符串是否相等; •Strncmp(str1,str2,3)用于判断两个字符的前 3 个字符是否相等; •Strcmp(a,b)用于判断元胞数组 a 和 b 的对应字符串是否相等; •Strncmp(a,b,3)用于判断元胞数组 a 和 b 的对应字符串的前 3 个字符是否相等; •A==b 用于比较两个字符串中对应字符是否相等; •A~=b 用于比较两个字符串中对应字符是否不等; •Isletter(mystring)用于判断 mystring 中字符是否为字母; •Isspace(mystring)用于判断 mystring 中字符是否为空格或制表符; •Strrep(label,’s1’,’s2’)可以将 label 中字符串 s1 用 s2 替换; •Findstr(‘s1’,label)在 label 中找 s1,找到返回位置;否则返回空矩阵符号“[ ]”; •Strtok(label)在 label 中找分隔字符(空格,/,制表符),返回第一个分隔字符前的子