学习笔记matlab
matlab 基本变量
变量 | 说明 |
---|---|
ans | 预设变量名 |
eps | 正极小值 |
pi | Π值 |
inf | 无限大值 |
NaN | 无法定义的值,例如1/0 |
i或j | 虚数单位 |
nargin | 函数输入参数个数 |
nargout | 函数输出参数个数 |
realmax | 最大正实数 |
realmin | 最小正实数 |
flops | 浮点运算次数 |
matlab 常识
- 指令过长可用‘…’分格
- ‘;’不显示运算结果
- %后面的语句均为注释
- 基本运算符:’+’、’—’、’*’、‘’/’、’^’
- clc擦去历史命令
- clear删除工作区变量
- clear all删去工作区所有变量和函数
- delete<文件名>删去文件
- help<命令/函数名/目录名>查询命令的帮助信息
- which<文件名>查询指定文件路径
- who显示工作区所有变量
- whos列出变量的详细信息
- size显示变量的尺寸
- length显示变量的长度
- Ctrl+C中断程序运行
- lookfor<命令/函数>它通过完整或部分关键字来搜索相关内容,注意只能搜索文本第一行
- which fun -all显示所命名为fun的函数路径
- which file。ext显示指定文件路径
- s=which(…)将查询结果返回给s
matlab 变量
- 变量为数组或向量形式
- 命名规则:只能由字母开头,不能包含空格符,区分大小写,不能是保留的关键字
- 变量不需要定义可直接使用
matlab 基本数据类型
整数类型 | 类型或声明函数 |
---|---|
整数uint | 无符号整数,没有负数 |
整数int | 有符号整数 |
单精度浮点型 | single,64位,默认 |
双精度浮点型 | double,32位 |
逻辑型 | logical函数把数据值变为逻辑值,其中将不为零的数变为1 |
字符型 | char,也就是字符串型 |
日期和时间型 | date函数可在命令行显示当前时间 |
结构型 | struct |
元胞型 | cell(细胞),{}创建,相当于表格,每一格的内容任意 |
符号型 | sym单个符号,syms多个符号 |
数据显示格式(format命令)
命令 | 类型或声明函数 |
---|---|
format / format short | 5位定点表示 |
format long | 15位定点表示 |
format short e | 5位浮点表示 |
format long e | 15位浮点表示 |
format short g | 系统选择5位定点和5位浮点中更好的表示 |
format long g | 系统选择15位定点和15位浮点中更好的表示 |
format rat | 近似的有理数的表示 |
format hex | 十六进制的表示 |
format bank | 用元角分(美制)定点表示 |
format compact | 变量之间没有空行 |
format loose | 变量之间有空行 |
变量显示
- magic():魔方阵,每行每列和都为固定值
- disp():以紧凑结构显示结果显示而不输出变量名
变量的存取函数及格式
- save实现存储,将该变量存储到该文件中
- load载入,从文件中将该变量导入内存
格式1:load 文件名 变量名;
save 文件名 变量名;
格式2:S=load(‘文件名’,‘格式’,‘变量名’);
save(‘文件名’,‘格式’, ‘变量名’); - 使用工作区的按键也可实现变量的新建、编辑、载入、保存、删除、绘图
数组与矩阵
一维数组和矩阵
- 直接输入法:数据之间使用逗号和空格代表列与列的分隔符,分号代表行与行之间的分隔符
- 冒号:初始值:步长:终止值 默认为1
- 定数线性采样法
x=linspace(a,b,n)产生a,b两点之间n个采样点数,包括两点
y=logspace(a,b,n)定点对数采样,首点是10^a,尾点亦是、 - 一维数组的访问使用圆括号,从1开始索引
- end代表最后一个
- 也可从末尾开始向前索引(实现倒序)
二维数组和矩阵
创建
- 直接输入:矩阵的元素必须位于方括号内,矩阵的元素可以是数值,变量,表达式或函数
函数(matlab)提供了大量的函数
- ones():产生全为1的矩阵
- ones(m,n):产生m*n维矩阵
- zeros():产生全为零的矩阵
- rand():产生在(0,1)范围内的均匀分布的随机阵
- eye():产生单位阵
- randn():产生均值为1,方差为1的标准正态分布随机矩阵
利用Excel创建矩阵
原理1:用户系统安装有Excel,matlab创建Excel服务器,通过服务器接口读取数据
原理2:未安装Excel或不能访问COM服务器时,matlab即可利用基本模式读取数据,即把Excel文件作为二进制映像文件读取进来,然后读取其中的数据
- 调用格式:num=xlsread(filename,sheet,range)
sheet可以是单引号括起来的字符串,也可以是正整数。
range是指定的读取的单元格区域,为了区分range必须是包含冒号的字符串
访问
- 单下标,矩阵按照列来排序
- 双下标,行列坐标索引A(i,j)=A((j-1)*m+i)
- 冒号,表示全部,表示到
字符数组
创建
英文输入状态下的单引号对里面,字符带有单引号则在该位置需要两个单引号
标识
每个字符对应一个元素位,对应从1开始
ASCII
- abs:可求绝对值和字符对应的ASCII码值
- double:求ASCII码值
- char:可把码数组变为串数组
拼接
- 方括号用逗号分割可直接拼接
- strcat函数拼接在同一行
- strvcat函数拼接在不同行
常用字符操作函数
- lower():将字符数组里面的字母转为小写
- upper():将字符数组里面的字母转为大写
- strfind(s1,s2):查找S1中S2的位置,没有将返回空数组
- finder(S1,S2):查找S1和S2中,较短字符数组在较长字符数组里面出现的位置
- 函数很多,使用时可具体查询
结构数组
结构数组的创建(可以表达具有不同属性的对象)
-
结构数组变量名.属性名=属性值
例子
student.ID=2019303285; student.name='叶'; student.sex='男'; student.gread='A'; % 采用动态扩充的方法添加第二个信息,将其扩充为1*2的数组 student(2).ID=2019303286; student(2).name='冰冰'; ...
-
使用struct函数创建结构数组
语法:S=struct(‘field1’,values1,‘field2’,valuse2,…);
values1,values2,必须是相同维数的数据,可以是单元数组、数据数组或单个数值
例子
student=struct('ID',{2019303285,2019303286},'name',{'叶成基','王冰冰'},'sex',{'男','女'},'grade',{'A','A+'}) student(1) student(2)
结构数组的操作函数
函数名 | 功能描述 | |
---|---|---|
deal | 将其参数值的内容分别输出到一个个独立的变量 | |
fieldnames | 获取结构的字段名 | |
getfield | 获得结构中指定字段的值 | |
rmfield | 删除结构的字段(不是字段的内容) | |
元胞数组cell
元胞可以包含可以包含任何类型的MATLAB数据
直接赋值法
-
元胞索引法
圆括号在左,花括号内容在右,将一个元胞赋值给某个单元
A(1,1)={[1,2,3;4,5,6;7,8,9]} A(1,2)={2+3*i} A(2,1)={12:-2:0} A(2,2)={'Chinese'}
-
内容索引法
花括号在左,将数值直接赋给某个单元
B{1,1}=[1,2,3;4,5,6;7,8,9]
-
cell函数法
A=cell(m,n)
访问
分为两种情况,访问元胞的概况,访问元胞的值。圆括号访问元胞的概况,花括号访问元胞的值
celldisp函数,将元胞里面的数据单元挨个输出
cellplot函数将其图形化表示[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERm6OI8u-1646300032312)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220127145447513.png)]
矩阵的运算和操作
算术运算
基本运算 | 符号及解释 |
---|---|
加减运算 | ‘‘+,-’’ |
乘运算 | ‘‘*’’ |
除运算 | 右除‘‘/’’,左除‘‘\’’,左右要分清 |
乘方运算 | “^” |
点运算
点运算是指他们对应的元素进行相关运算,要求矩阵同维
- 点乘运算“.*”
- 点除运算“.\”“./”
- 点次幂“.^”
关系运算
<小于,>大于,<=小于等于,>=大于等于,==等于,~=不等于
运算规则
- 成立返回1,否则为0
- 当两个同维矩阵进行关系运算时返回一个0、1组成的同维矩阵
- 一个是标量一个是矩阵时逐个比较
逻辑运算
与&、|或、~非
运算规则
- 算术运算优先级最高,逻辑运算优先级最低
- 同维逐个比较,标量也是
元素取整、取模、取余
- floor():向下取整
- ceil():向上取整
- round():四舍五入取整
- fix():向零取整
- abs():取模
- mod(x,y)、rem(x,y):前者结果的符号和x相同,后者则相反
矩阵的分析处理
处理 | 函数 |
---|---|
行列式 | det(A) |
秩 | rank(A) |
迹 | trace(A) |
逆 | inv(A) |
特征值 | eig(A) |
1/28
数据可视化
t=0:0.01:2*pi;
y=exp(-t/3).*sin(2*t);
plot(t,y,'-r*','linewidth',2)
axis([0,4*pi,-1,1])
xlable('时间/t')
ylable('振幅衰减/y')
title('衰减振动')
基本二维曲线
plot(y):y可以是向量、实数矩阵或者复数向量
real(y):求实部
imag(y):求虚部
x=[1:1:99 100:-1:2 1:-1:-98 -97:2:55];
y=[100:-1:2 1:-1:-97 -98:1:1 0:1:76];
z=x+y.*i;
plot(z)
plot(x,y):x,y均为向量和矩阵,其中有3种组合用于绘制连线图。x,y均为n维向量时,绘制向量y对于向量x的图形。x为n维向量,y为mn或者nm矩阵时,该命令将同一图内绘制m条颜色不同的连线。
x=0:1:10;
y=[0,1,2,3,4,5,6,7,8,9,10;10,9,8,7,6,5,4,3,2,1,0];
plot(x,y)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YYltwrOU-1646300032314)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220128141435008.png)]
绘图辅助操作
plot命令可设置的属性
命令属性 | 意义 |
---|---|
Color | 颜色 |
LineStyle | 线型 |
LineWidth | 线宽 |
MarkerType | 标记点的形状 |
MarkerSize | 标记点的大小 |
MarkerFaceColor | 标记点内部填充的颜色 |
MarkerEdgeColor | 标记点边缘的颜色 |
线型、标记和颜色属性可百度
例子
plot(x,y,'-r*',...,'LineWidth','2','MarkerEdgeColor','k')
坐标轴标注和范围设置
xlabel('str')%设置坐标名称
ylabel('str')
zlabel('str')
axis([xmin,xmax,ymin,ymax])%设置坐标范围
xlim([xmin,xmax])%设置x坐标范围
axis off%关闭所有坐标轴标签、刻度和背景
axis on %打开所有坐标轴标签、刻度和背景
多图叠绘
格式 | 说明 |
---|---|
hold on | 保持现有的图形,添加新的曲线 |
hold off | 将现有的图形释放,绘制新的图形 |
hold | 实现hold命令之间的切换 |
图例标注
legend('str1','str2'...'location','English')%位置为因为单词,首字母大写
多子图绘制
格式 | 说明 |
---|---|
subplot(m,n,p) | 将图形窗口分为m*n,在第p个子窗口绘制窗口 |
subplot(m,n,p,‘replace’) | 绘制图形时,将删除原来的坐标系,绘制新的 |
subplot(m,n,p,‘align’) | 对齐坐标系 |
特殊图形的绘制
函数 | 位置 |
---|---|
area | 填充图形 |
bar | 条形图 |
barh | 水平条形图 |
comet | 彗星图 |
fplot | 函数绘制 |
hist | 柱状图 |
pie | 饼状图 |
y=round(rand(5,4)*10);
bar(y,'group','r');
title('bar exam')
#其他画法可百度#
1/29
三维数据可视化
与二维图形的绘制很是类似,其中曲线的属性设置完全相同,最常用的是绘制三维曲线、三维网格和三维曲面,相应的命令为plot3,mesh,surf
三维曲线的绘制
plot3(x,y,z,……)
plot3(x,y,z,LineSpec,……)
plot3(……,'PropertyName',PropertyValue,……)
%x,y,z为相同维数的向量或矩阵,曲线的个数等于数组的列数
x=0:1:10;
y=10:-1:0;
z=0:10:100;
plot3(x,y,z)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AWPzcj7P-1646300032315)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220129123710492.png)]
t=0:pi/50:10*pi;
x=cos(t);
y=sin(t);
z=t;
plot3(x,y,z,'LineWidth',2);
title('螺旋线');
xlabel('x','fortsize',14);
ylabel('y','fortsize',14);
zlabel('z','fortsize',14); %字体大小14
grid on %打开网格线
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bORzskBc-1646300032315)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220129124345063.png)]
三维网格的绘制
格式 | 说明 |
---|---|
mesh(z) | 以z矩阵的列和行的下标为x轴和y轴的自变量绘制网格网 |
mesh(x,y,z) | 其中,x,y为自变量矩阵,z为建立在x,y之上的函数矩阵 |
mesh(x,y,z,c) | c用于指定矩阵z在各点的颜色 |
[x,y,z]=peaks(30);%返回高斯分布的数值范围
mesh(x,y,z);%绘制三维网格
title('mesh exam1');
xlabel('X');
ylabel('Y');
zlabel('Z');
grid on
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sSTvkw9O-1646300032315)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220207132328281.png)]
%meshc(),在图像下面绘制等值线图
[x,y,z]=peaks(30);%返回高斯分布的数值范围
meshc(x,y,z);%绘制三维网格,和等值线
title('mesh exam1');
xlabel('X');
ylabel('Y');
zlabel('Z');
grid on
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nSIIkFsT-1646300032316)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220207133005904.png)]
%meshz()用于增加边界绘图功能
[x,y,z]=peaks(30);%返回高斯分布的数值范围
meshz(x,y,z);%绘制三维网格和边界
title('mesh exam1');
xlabel('X');
ylabel('Y');
zlabel('Z');
grid on
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N5Iwd1ev-1646300032316)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220207133333975.png)]
三维曲面的绘制
格式 | 说明 |
---|---|
surf(z) | 以z矩阵的行列下标为x,y自变量绘制曲面图 |
surf(x,y,z) | 其中,x和y为自变量矩阵,z为建立在x,y之上的函数 |
surf(x,y,z,c) | 此命令和上面的命令相比,c用于指定矩阵z在各点的颜色 |
surf(…,‘PropertyName’,PropertyValue) | 用于设置曲面颜色、线型等属性 |
x和y必须均为向量,x和y的长度分别为m和n,则z必须为m*n矩阵,[m,n]=size(Z)
[x,y,z]=peaks(30);
surf(x,y,z);
title('surf exam');
xlabel('X');
ylabel('Y');
zlabel('Z');
grid on
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qJWNcRNS-1646300032316)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220207134938136.png)]
[x,y,z]=peaks(30);
surfc(x,y,z);%绘制曲面图,在底层绘制等值线
title('surfc exam');
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HAhJeclQ-1646300032317)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220207135149860.png)]
[x,y,z]=peaks(30);
surfl(x,y,z);%绘制曲面图时,则考虑光照效果
title('surf1 exam');
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UgLa66Cc-1646300032317)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220207135613604.png)]
[x,y,z]=peaks(30);
surfnorm(x,y,z);%定义各个曲面的法线,同时在数据点处绘制曲面法线
title('surfl exam');
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YRsUGh66-1646300032318)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220207140008898.png)]
2/7
控制程序流
if语句
x=input('请输入x的值:');
if x<=0
y=log(x);
else
y=sqrt(x);
end
disp(y);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pIOUZLaf-1646300032318)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220207143157185.png)]
if 表达式1
语句组1
elseif 表达式2
语句组2
elseif 表达式3
语句组3
……
end
c=input('请输入一个字符:','s');%匹配字符串
if c>='A' & c<='Z'
disp(setstr(abs(c)+abs('a')-abs('A')));
elseif c>='a' & C<='z'
disp(setstr(abs(c)-abs('a')+abs('A')));
else
disp(c);
end
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ydpbu26e-1646300032318)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220207180948623.png)]
switch-case条件控制语句
switch-case-end又称开关语句,语法格式如下
switch 表达式
case 常量表达式1
语句1
case 常量表达式2
语句2
case 常量表达式3
语句3
……
case 常量表达式n
语句n
otherwise
语句组n+1
end
% 表达式为开关条件,可为数字或字符串。当表达式的值与某个case的常量表达式相同时,就执行相应的语句组。完成一个case后就会立马跳出switch,与c语言不同。
price=input('请输入商品价格:');
switch fix(price/10)
case 0:4
rate=0;
case 5:7
rate=3/100;
case 8:10
rate=5/100;
case 11:20
rate=10/100;
otherwise
rate=14/100;
end
price=price*(1-rate)
循环控制结构
for循环主要用于以固定取值或循环次数的重复执行过程,语法格式如下
%for 循环变量=表达式
% 语句组
%end
% 程序首先计算表达式,若结果为标量或行数组,则将表达式的第一个值赋给循环变量,并执行语句,然后将表达式的第二个值赋给循环变量,并执行语句组,以此类推,直到所有值被取尽
%计算1到999之间所有偶数之和
s1=0;
for m=2:2:999
s1=s1+m;
end
s1
s2=sum(2:2:999)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AFZw7xBy-1646300032319)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220208213257682.png)]
%计算矩阵各行之和
A=magic(5);
s1=0;
for m=A
s1=s1+m;
end
disp(s1);
s2=sum(A,2)
%sum(A,2);求各行之和
%sum(A,1);求各列之和
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T9wM9B2b-1646300032319)(…/…/…/…/…/home/yecj/.config/Typora/typora-user-images/image-20220208214907544.png)]
%for循环可嵌套使用,但不宜超过四层,嵌套越多,执行效率就越低
continue,break和pause
语句 | 功能 |
---|---|
pause | 实现暂停功能 |
continue | 表示当前循环不再向下执行,执行下次循环 |
break | 跳出整个循环 |
%找到一个100到200之间的第一个被23整除的整数
for n=100:200
if rem(n,23)==0
break
end
end
n
% pause
% pause(time)
x=0:pi/20:6*pi;
y=2*sin(x)+sin(2*x);
for n=1:100
y2=y+rand(size(y));
plot(x,y2);
pause(0.05)
end
input和keyboard
常用键盘控制函数有input和keyboard
input函数执行时,“控制权”交给键盘;待输入结束,按下回车键,‘‘控制权’’交还MATLAB,其调用格式如下:
v=input('message') %输入数据,不能输入字符
v=input('message','s') %不管输入什么,总以字符串形式赋给变量v
x=input('enter the value of''x'':');
y=input('enter the value of''y'':');
if y==0
keyboard
n=x/y;
else
n=x/y;
end
disp(n);
error和warning
常用的错误和警告对话框提示函数有error和warning函数,warning会让程序继续执行,error则终止程序
%测试warning和error的不同之处
a=input('请输入你的代号007:');
if a==7
warning('你输入了007,但是你不是007!');
end
b=input('请输入你的真实代号!');
if b~=1
error('你的真实代号错误!');
else
disp(['你的真实代号00',b]);
end
% error会让终止程序,warning会继续下一步
%测试warning和error的不同之处
a=input('请输入你的代号007:');
if a==7
warning('你输入了007,但是你不是007!');
end
b=input('请输入你的真实代号!');
if b~=1
%error('你的真实代号错误!');
errordlg('你的真实代号错误','错误提示');% 显示出错误对话框
else
disp(['你的真实代号00',b]);
end
% error会让终止程序,warning会继续下一步
try和catch
try的作用是让MATLAB尝试执行一些语句,如果出错,则执行catch部分的语句,其语法格式如下:
try
尝试执行的语句块
catch
出错后执行的语句块
end
%利用try和catch尝试执行两个矩阵相乘
a=magic(4);
b=eye(3);
try
c=a*b
catch
c=a(1:3,1:3)*b
end
lasterr
2/10
函数
创建方式
第一种 | 利用function建立函数文件 |
第二种 | 利用inline建立内联函数 |
第三种 | 利用@建立无名函数 |
function
% function建立的函数文件,按照文件名调用,一般使用函数名命名文件名
% 在M文件中,函数声明由function开始,其后必须有函数名,输入变量和输出变量根据需要确定有无
function 输出形参=函数名(输入形参)
注释说明部分
函数体语句
%实现两个矩阵的相加减运算
function [c,d]=file12(a,b)
if size(a)~=size(b)
warning('矩阵维数不同,不能执行运算');
c=NaN
d=NaN
else
c=a+b;
d=a-b;
disp([c,d])
end
inline
% 在MATALB命令窗口、程序或者函数中创建局部函数时,可使用inline
% 优点:不必存储为一个单独的m文件
% 限制:1不能调用另一个inline函数,只能由表达式组成。2只能返变量
创建匿名函数
%函数名=@(输入参数)函数表达式
handle=@(arglist)anonymous_function
f=@(x,y)x^y+2*y;
f(1,2)
函数的调用与可调性
% 例子,统计平均分和最高分
function main
stu(1).c=80;stu(1).m=78;stu(1).e=91;
stu(2).c=84;stu(2).m=74;stu(2).e=88;
stu(3).c=85;stu(1).m=76;stu(1).e=98;
%调用子函数
stu1=stat(stu);
disp(['中文平均分:'num2str(stu1(1).mean)])
disp(['中文最高分:'num2str(stu1(1).max)])
disp(['数学平均分:'mum2str(stu1(2).mean)])
disp(['数学最高分:'num2str(stu1(2).max)])
disp
on开始,其后必须有函数名,输入变量和输出变量根据需要确定有无
function 输出形参=函数名(输入形参)
注释说明部分
函数体语句
```matlab
%实现两个矩阵的相加减运算
function [c,d]=file12(a,b)
if size(a)~=size(b)
warning('矩阵维数不同,不能执行运算');
c=NaN
d=NaN
else
c=a+b;
d=a-b;
disp([c,d])
end
inline
% 在MATALB命令窗口、程序或者函数中创建局部函数时,可使用inline
% 优点:不必存储为一个单独的m文件
% 限制:1不能调用另一个inline函数,只能由表达式组成。2只能返变量
创建匿名函数
%函数名=@(输入参数)函数表达式
handle=@(arglist)anonymous_function
f=@(x,y)x^y+2*y;
f(1,2)
函数的调用与可调性
% 例子,统计平均分和最高分
function main
stu(1).c=80;stu(1).m=78;stu(1).e=91;
stu(2).c=84;stu(2).m=74;stu(2).e=88;
stu(3).c=85;stu(1).m=76;stu(1).e=98;
%调用子函数
stu1=stat(stu);
disp(['中文平均分:'num2str(stu1(1).mean)])
disp(['中文最高分:'num2str(stu1(1).max)])
disp(['数学平均分:'mum2str(stu1(2).mean)])
disp(['数学最高分:'num2str(stu1(2).max)])
disp