实验一 MATLAB环境与运算基础
一、实验目的
掌握 MATLAB环境与基本操作;
掌握MATLAB常见数据类型的创建、表示和引用;
熟悉MATLAB数据类型的各种运算与常用函数;
熟悉导入外部数据文件创建变量。
二、实验原理
MATLAB环境与基本操作:命令窗口、WorkSpace、当前文件夹和帮助命令与窗口;
MATLAB数据类型及其对应的常用操作函数:数值型、字符与字符串、日期和时间、分类数组、表、结构体和元胞数组;
MATLAB运算:线性代数计算,+(加),-(减),(乘),/(除),^(乘幂);点运算,.(点乘),./(点除),.^(点乘幂);逻辑运算;
MATLAB常用函数:初等数学函数,取整函数和矩阵操作运算的常用函数reshape、diag、sum、mean等;
读取外部文件数据的函数:readmatrix,readtable,readvars,readcell,及其选项设置。
三、实验内容
1.利用MATLAB的帮助系统分别查询inv、plot、max、round等函数的功能和用法。
help inv
help plot
help max
help round
2.求下列表达式的值:
(1) (2),其中
z1=2sind(85)/(1+exp(2))
x=[2,1+2i;-0.45,5]
z2=(1/2)log(x+sqrt(1+power(x,2)))
3.写出完成下列操作的命令:
(1)建立3阶单位矩阵;
(2)建立5*5随机矩阵A,其元素为[100,200]范围内的随机整数;
(3)产生均值为1,方差为0.2的50个正态分布的随机数;
(4)产生和A同样大小的全1矩阵;
(5)将矩阵A的对角线元素加30;
(6)从矩阵A提取对角线元素,并以这些元素构成对角阵B。
eye(3)
A=int32(100+(200-100)*rand(5,5))
Y=1+sqrt(0.2)*randn(5,10)
ones(size(A))
int32(diag([30,30,30,30,50]))+A
B=diag(diag(A))
4.已知:
求下列表达式的值:
(1),
(2),的元素与的对应元素相乘
(3),的每个元素立方
(4),
(5)与分别为与按列和按行合并后的矩阵
(6)为的第2、3行,第2、3列,与的第1,2行,第1,2列,按列合并后的
A=[12,34,-4;34,7,87;3,65,7]
B=[1,3,-1;2,0,3;3,-2,7]
C11=A+6*B
I=eye(3)
C12=A-B+I
C21=A*B
C22=A.*B
C31=A^3
C32=A.^3
C41=A*inv(B)
C42=inv(A)*B
C51=[A B]
C52=[A;B]
C6=[A(2:3,2:3) B(1:2,1:2)]
5.金庸的武侠小说引人入胜,本题第一行代码可以提取《天龙八部》的文本,请回答以下问题:
(1)小说《天龙八部》一共有多少个自然段(提示:段落之间通常用回车符'\r'分隔)?
(2)《天龙八部》男主角有段誉与乔峰之争,请问该小说分别包含段誉和乔峰的段落有多少个?
(3)段誉与乔峰同时出现的段落有多少个?str = extractFileText("tianlongbabu.txt",'Encoding','UTF-8');
str = extractFileText("tianlongbabu.txt",'Encoding','UTF-8');
str=strsplit(str,"\r")
sum(contains(str,'段誉'))
sum(contains(str,'乔峰'))
sum(contains(str,'段誉')&contains(str,'乔峰'))
6.创建以下变量并计算:
(1)创建分类数组存储被观测者的国籍:uk,us,no,au,uk,us,us;
(2)创建结构体student,存储以下数据:
Name Sex Age Score
Liming F 30 80,78,92,84
(3)在student中添加学生:Yangle, M, 30, [85,68,87,92]
(4)计算学生Liming与Yangle的平均成绩
state=["uk","us","no","au","uk","us","us"];
state=categorical(state)
student(1).Name='Liming'; student(1).Sex='F'; student(1).Age=30; student(1).Score='80,78,92,84'
student(2).Name='Yangle';student(2).Sex='M';student(2).Age='30';student(2).Score=['85,68,87,92']
(student(1).Score+student(2).Score)/2
7.文件e17.txt存储了一个矩阵的数据,请做以下操作:
(1)读取文件e17.txt的数据到MATLAB中,并存入矩阵A中;
(2)提取A矩阵,生成以下子矩阵:
为A的第1,2行,第1,2,3列;为A的第1,2行,第4,5列;
为A的第1,2行,第6列;为A的第3行,第1,2,3列;
为A的第3行,第4,5列;为A的第3行,第6列;
(3)将A矩阵转换成的元胞数组,对应元素与(2)题中提取的子矩阵相同。
A=readmatrix('e17.txt')
A11=A(1:2,1:3),A12=A(1:2,4:5),A13=A(1:2,6),A21=A(3,1:3),A22=A(3,4:5),A23=A(3,6)
C=mat2cell(A,[2,1],[3,2,1])
8.文件Animals2.csv记录了65个物种的躯干(body,kg)和脑(brain,g)的重量,请做以下操作:
(1)以MATLAB表的类型导入Animals2.csv中的数据,指定行名为动物名称,指定变量名为body和brain,并指定它们的单位,展示前三行数据;
(2)在表中添加变量ratio,其值等于脑与躯干的重量比并取自然对数后的值;
(3)提取Human、Cow和African elephant的数据记录;
(4)提取ratio超过3的数据记录?
T=readtable('Animals2.csv','Delimiter',',',"ReadRowNames",true,"ReadVariableNames",true,'Format','%s%f%f','TextType',"string");
T(1:3,:)
T.ratio=[log(T.brain./T.body)]
T3=T({'"Human"','"Cow"','"African elephant"'},:)
k=find(T.ratio>3.0);
T.ratio(k)
9.文件detail.csv记录了某餐厅8月份的点餐情况,请做以下操作:
(1)以MATLAB表的类型导入detail.csv中的detail_id(流水号),order_id(订单号),dishes_name(菜名),counts(数量),amounts(单价),place_order_time(下单时间)等变量,其中文本数据用string类型;
(2)将place_order_time变量转换成datetime类型,格式为yyyy-MM-dd HH:mm:ss,并展示前三行数据记录;
(3)计算周一、周二、...周日的平均消费额。
T=readtable('detail.csv','Delimiter',',',"ReadRowNames",false,"ReadVariableNames",true,'TextType',"string")
T.place_order_time(1:2557)=datetime(T.place_order_time(1:2557),"InputFormat","yyyy/MM/dHH:mm:ss");
T.place_order_time(2558:10037)=datetime(T.place_order_time(2558:10037),"InputFormat","yyyy/MM/ddHH:mm:ss");
T.place_order_time(1:3,:)
T.money = T.counts.*T.amounts;
%ave = sum(T.money)/height(T);
T.weekday = weekday(T.place_order_time);
for i=1:7
m = find(T.weekday==i);
average = sum(T.money(m))/size(T.money(m),1);
fprintf("周%d的平均消费额是%.2f元\n",i,average);
end