目录

  • 1 MATLAB入门
    • 1.1 课前任务
    • 1.2 MATLAB简介
    • 1.3 MATLAB使用
      • 1.3.1 MATLAB软件安装
      • 1.3.2 MATLAB系统设置
      • 1.3.3 MATLAB开发环境
    • 1.4 MATLAB基础操作
      • 1.4.1 MATLAB各窗口的调取、位置的更换
      • 1.4.2 数值、变量和表达式
    • 1.5 往届学生作品浏览
  • 2 数组及其运算
    • 2.1 数值数组的生成和寻访
    • 2.2 数值运算
      • 2.2.1 矩阵运算
      • 2.2.2 数组运算
      • 2.2.3 多项式运算
    • 2.3 数组的关系运算和逻辑运算
    • 2.4 字符串数组
      • 2.4.1 案例
      • 2.4.2 案例
    • 2.5 实验一 数组及其运算
  • 3 图形绘制
    • 3.1 二维曲线绘制
    • 3.2 绘制图形的辅助操作
    • 3.3 其他形式的二维图形
    • 3.4 三维曲线、三维曲面
    • 3.5 图形修饰处理
    • 3.6 课后作业
    • 3.7 案例:数据可视化
      • 3.7.1 案例:经济走势图
      • 3.7.2 案例:学生成绩分析
    • 3.8 实验二 图形绘制
    • 3.9 实验二 图形绘制参考
  • 4 程序设计
    • 4.1 课前任务
    • 4.2 顺序结构程序
    • 4.3 程序控制
    • 4.4 函数文件的定义与调用
    • 4.5 案例:五国经济走势图 动图的显示
      • 4.5.1 动态显示1
      • 4.5.2 末端数字动态显示
      • 4.5.3 年份数值动态显示
    • 4.6 实验三排 靶心射击游戏
    • 4.7 项目要求和评分细则
  • 5 数值和符号计算
    • 5.1 数值计算
    • 5.2 符号对象
    • 5.3 符号微积分
    • 5.4 实验四 符号计算
    • 5.5 MATLAB基础知识点总结
  • 6 控制系统建模
    • 6.1 系统模型
    • 6.2 系统时间响应及其仿真
    • 6.3 系统频率响应及其仿真
  • 7 Simulink建模与仿真基础
    • 7.1 Simulink基础
    • 7.2 Simulink建模
    • 7.3 其他资料
      • 7.3.1 启动 Simulink 并创建模型
      • 7.3.2 模块的设置和添加
      • 7.3.3 建立分支连接
      • 7.3.4 封装和模型查看
      • 7.3.5 添加注释
      • 7.3.6 Simulink 建模的键盘和鼠标操作
    • 7.4 子系统的创建与封装
    • 7.5 实验五 Simulink仿真基础
  • 8 综合项目二   建模与数据调用
    • 8.1 考试要求
    • 8.2 评分细则
  • 9 Simulink建模与仿真应用
    • 9.1 太阳能跟踪系统的建模与仿真实例
    • 9.2 上机实验六
    • 9.3 微分方程的求解
  • 10 综合项目三
    • 10.1 项目要求和评分细则
    • 10.2 查阅学生作品提交
实验二 图形绘制参考

上机实验一 图形绘制

一、实验目的:

掌握二维图形的绘制,基本图形的绘制、多个窗口的创建、图形的标注;

掌握特殊二维图形的绘制,柱状图、火柴杆图、饼图的绘制;

掌握三维图形的绘制,三维曲线、三维网格、三维曲面图等;

掌握常用图形对象及其属性。

二、实验平台:

MATLAB R2020a(填写自己软件的版本)。

三、实验要求及步骤:

方法1:数组求解方式

clf

L=[0.2,0.4,0.6,0.8]';

b=sqrt(1-L.^2);

Th=atan((1-L.^2)./2.*L);

t=linspace(0,18,101);

y1=1-1/b*exp(-L*t).*sin(2*b*t+Th);

plot(t,y1)

hold on

text(t(12),y1(1,12),['\leftarrow\lambda=','0.2'])

text(t(12),y1(2,12),['\leftarrow\lambda=','0.4'])

text(t(12),y1(3,12),['\leftarrow\lambda=','0.6'])

text(t(12),y1(4,12),['\leftarrow\lambda=','0.8'])

T=title('$y=1-\frac{1}{\beta}e^{-{\lambda}t}sin(2{\beta}t+{\theta})$');

set(T,'interpreter','latex','FontName','黑体','FontSize',20)

xlabel('t')

ylabel('y')


方法2:for循环方式

clf

for L=[0.2,0.4,0.6,0.8];

b=sqrt(1-L^2);

Th=atan((1-L^2)/2*L);

t=linspace(0,18,101);

y2=1-1/b*exp(-L*t).*sin(2*b*t+Th);

plot(t,y2)

hold on

text(t(12),y2(12),['\leftarrow\lambda=',num2str(L)])

end

T=title('$y=1-\frac{1}{\beta}e^{-{\lambda}t}sin(2{\beta}t+{\theta})$');

set(T,'interpreter','latex','FontName','黑体','FontSize',20)

xlabel('t')

ylabel('y')


方法3:直接编程方式,这种最直观,但是代码最冗长

L=0.2;

b=sqrt(1-L^2);

Th=atan((1-L^2)/2*L);

t=linspace(0,18,101);

y2=1-1/b*exp(-L*t).*sin(2*b*t+Th);

plot(t,y2)

hold on

text(t(12),y2(12),['\leftarrow\lambda=',num2str(L)])


L=0.4;

b=sqrt(1-L^2);

Th=atan((1-L^2)/2*L);

t=linspace(0,18,101);

y2=1-1/b*exp(-L*t).*sin(2*b*t+Th);

plot(t,y2)

hold on

text(t(12),y2(12),['\leftarrow\lambda=',num2str(L)])


L=0.6;

b=sqrt(1-L^2);

Th=atan((1-L^2)/2*L);

t=linspace(0,18,101);

y2=1-1/b*exp(-L*t).*sin(2*b*t+Th);

plot(t,y2)

hold on

text(t(12),y2(12),['\leftarrow\lambda=',num2str(L)])


L=0.8;

b=sqrt(1-L^2);

Th=atan((1-L^2)/2*L);

t=linspace(0,18,101);

y2=1-1/b*exp(-L*t).*sin(2*b*t+Th);

plot(t,y2)

hold on

text(t(12),y2(12),['\leftarrow\lambda=',num2str(L)])


T=title('$y=1-\frac{1}{\beta}e^{-{\lambda}t}sin(2{\beta}t+{\theta})$');

set(T,'interpreter','latex','FontName','黑体','FontSize',20)

xlabel('t')

ylabel('y')




x=-4:0.25:4;

y=x;

[X,Y]=meshgrid(x,y);

Z=-X.^4+Y.^4-X.^2-Y.^2-2*X.*Y;

subplot(221),plot3(X,Y,Z),title('plot3')

subplot(222),mesh(X,Y,Z),title('mesh')

subplot(223),surf(X,Y,Z),title('surf')

subplot(224),meshc(X,Y,Z),title('meshc')


三维曲线meshgrid的讲解


任务3:绘制班级成绩分布图

已知学生成绩表格“student_inf.xls”,请读取表格中信息,并显示大班总成绩优秀、良好、中等、及格和不及格区间分布图、学生成绩区间分布详细图、小班成绩区间分布图。

(一)绘制柱状图、饼状图


1、清除工作空间和图形

clc;clear;clf

2、用"readtable"读取表格数据给变量“dataTabel”,并用“disp”显示数据内容

filename='G:\matlabcode\student_inf.xls';  %根据实际位置修改

dataTabel=readtable(filename);

disp(dataTabel)

3、用CLASS、STU_NO、NAME和CODE分别存储Datatable数据中的班级、学号、姓名和分数数据。

CODE=dataTabel.Code;

NAME=dataTabel.Name;

STU_NO=dataTabel.Student_number;

CLASS=dataTabel.Class;

4、找到成绩优秀、良好、中等、及格和不及格的同学序号(在表格中的位置),分别存在“A_Code_xuhao”、“B_Code_xuhao”、“C_Code_xuhao”、“D_Code_xuhao”、“E_Code_xuhao”中。

A_Code_xuhao=find(CODE>=90);   

B_Code_xuhao=find((CODE>=80)&(CODE<90));

C_Code_xuhao=find((CODE>=70)&(CODE<80));

D_Code_xuhao=find((CODE>=60)&(CODE<70));

E_Code_xuhao=find(CODE<60);

5、将成绩优秀、良好、中等、及格和不及格的总人数按顺序存放在变量“Zongshu"中

Zongshu=[length(A_Code_xuhao);length(B_Code_xuhao);length(C_Code_xuhao);length(D_Code_xuhao);length(E_Code_xuhao)];

6、用bar显示柱状分布图,并添加图名“2023年MATLAB课程学生成绩区间分布图”,

subplot(1,2,1)

bar(Zongshu,'grouped','g');

title('2023年MATLAB课程学生成绩区间分布图')

7、用“xticklabels”设置X轴刻度标签,将对应的位置设置为优秀、良好、中等、及格和不及格。

xticklabels({'优秀','良好','中等','及格','不及格'})

8、在柱状图上显示区间总人数

text(1,Zongshu(1)+1,num2str(Zongshu(1)))

text(2,Zongshu(2)+1,num2str(Zongshu(2)))

text(3,Zongshu(3)+1,num2str(Zongshu(3)))

text(4,Zongshu(4)+1,num2str(Zongshu(4)))

text(5,Zongshu(5)+1,num2str(Zongshu(5)))

axis([0,6,0,46])

box off

9、绘制饼状图,并添加图例

subplot(1,2,2)

pie(Zongshu);

legend({'优秀','良好','中等','及格','不及格'})

(二)绘制火柴杆图,显示每个区间学生成绩信息

1、用“sort”对学生成绩排序,用火柴杆图画出学生成绩分布图,成绩从高到低显示,并添加90、80、70、60分的分割线

[~,Shengxu]=sort(CODE);

Jiangxu=Shengxu(end:-1:1);

figure

stem(CODE(Jiangxu),'*')

hold on

plot([0,120],[90,90],'r--')

plot([0,120],[80,80],'r--')

plot([0,120],[70,70],'r--')

plot([0,120],[60,60],'r--')

text(110,95,'优秀','color','r')

text(110,85,'良好','color','b')

text(110,75,'中等','color','b')

text(110,65,'及格','color','b')

text(110,55,'不及格','color','k')

title('2023年MATLAB课程学生成绩区间分布图')

xlabel('学生人数')

ylabel('学生成绩')

box off

grid on

2、用axis([xmin,xmax,ymin,ymax])分区间显示学生成绩,并将学生名字,分数,班级信息标注在曲线上。用xtick是坐标轴刻度,xticklabel设置刻度标签。

(1)显示优秀学生成绩分布


subplot(5,1,1),stem(CODE(Jiangxu),'rp')

axis([0,length(A_Code_xuhao),85,100])

title('学生优秀成绩分布')

set(gca,'XTick',1:length(A_Code_xuhao))  %设置坐标轴刻度为1,2,3,...

set(gca,'XTicklabel',Jiangxu(1:length(A_Code_xuhao)))  %将对应的坐标轴刻度改为字符标签

box off

hold on

for n=1:length(A_Code_xuhao)

    str=[CLASS{Jiangxu(n)}(3:end),NAME{Jiangxu(n)},num2str(CODE(Jiangxu(n)))];

    text(n+0.3,87,str,'fontsize',8,'Rotation',90)

end

(2)显示良好学生成绩分布

subplot(5,1,2),

a=length(A_Code_xuhao)+1;

b=length(A_Code_xuhao)+length(B_Code_xuhao);

stem(CODE(Jiangxu(a:b)),'rp')

hold on

for n=a:b

str=[CLASS{Jiangxu(n)}(3:end),NAME{Jiangxu(n)},num2str(CODE(Jiangxu(n)))];

text(n-a+0.3,CODE(Jiangxu(n))-2,str,'fontsize',8,'Rotation',90)

end

axis([0,b-a+2,80-5,80+10])

title('学生良好成绩分布')

set(gca,'XTick',1:b-a+1)  %设置坐标轴刻度为1,2,3,...

set(gca,'XTicklabel',Jiangxu(a:b))  %将对应的坐标轴刻度改为字符标签

box off

hold off


(3)显示中等学生成绩分布

subplot(5,1,3),

a=length(A_Code_xuhao)+length(B_Code_xuhao)+1;

b=length(A_Code_xuhao)+length(B_Code_xuhao)+length(C_Code_xuhao);

stem(CODE(Jiangxu(a:b)),'rp')

hold on

for n=a:b

str=[CLASS{Jiangxu(n)}(3:end),NAME{Jiangxu(n)},num2str(CODE(Jiangxu(n)))];

text(n-a+0.3,CODE(Jiangxu(n))-2,str,'fontsize',8,'Rotation',90)

end

axis([0,b-a+2,70-5,70+10])

title('学生中等成绩分布')

set(gca,'XTick',1:b-a+1)  %设置坐标轴刻度为1,2,3,...

set(gca,'XTicklabel',Jiangxu(a:b))  %将对应的坐标轴刻度改为字符标签

box off

hold off

(4)显示学生及格成绩分

subplot(5,1,4),

a=length(A_Code_xuhao)+length(B_Code_xuhao)+length(C_Code_xuhao)+1;

b=length(A_Code_xuhao)+length(B_Code_xuhao)+length(C_Code_xuhao)+length(D_Code_xuhao);

stem(CODE(Jiangxu(a:b)),'rp')

hold on

for n=a:b

str=[CLASS{Jiangxu(n)}(3:end),NAME{Jiangxu(n)},num2str(CODE(Jiangxu(n)))];

text(n-a+0.3,CODE(Jiangxu(n))-2,str,'fontsize',8,'Rotation',90)

end

axis([0,b-a+2,60-5,60+10])

title('学生及格成绩分布')

set(gca,'XTick',1:b-a+1)  %设置坐标轴刻度为1,2,3,...

set(gca,'XTicklabel',Jiangxu(a:b))  %将对应的坐标轴刻度改为字符标签

box off

hold off

(5)显示学生不及格成绩分布

subplot(5,1,5),

a=length(A_Code_xuhao)+length(B_Code_xuhao)+length(C_Code_xuhao)+length(D_Code_xuhao)+1;

b=length(A_Code_xuhao)+length(B_Code_xuhao)+length(C_Code_xuhao)+length(D_Code_xuhao)+length(E_Code_xuhao);

stem(CODE(Jiangxu(a:b)),'rp')

hold on

for n=a:b

str=[CLASS{Jiangxu(n)}(3:end),NAME{Jiangxu(n)},num2str(CODE(Jiangxu(n)))];

text(n-a+0.3,CODE(Jiangxu(n))-2,str,'fontsize',8,'Rotation',90)

end

axis([0,b-a+2,0,50+10])

title('学生不及格成绩分布')

set(gca,'XTick',1:b-a+1)  %设置坐标轴刻度为1,2,3,...

set(gca,'XTicklabel',Jiangxu(a:b))  %将对应的坐标轴刻度改为字符标签

box off

hold off


(三)用plot和bar绘制三个班级成绩优秀、良好、中等、及格和不及格的分布。

(1)计算三个班级的分数区间人数

Class1=find(ismember(CLASS,{'电气2101'})); %ismember(a,b) 查看b是不是a中的数,是的话,相应位置上返回1

Class2=find(ismember(CLASS,{'电气2102'})); %存储同一个班的学生序号

Class3=find(ismember(CLASS,{'电气2103'}));

Class=Class1;

Class_Code(1,:)=[length(find(CODE(Class)>=90)),length(find((CODE(Class)>=80)&(CODE(Class)<90))),length(find((CODE(Class)>=70)&(CODE(Class)<80))),length(find((CODE(Class)>=60)&(CODE(Class)<70))),length(find(CODE(Class)<60))];

Class=Class2;

Class_Code(2,:)=[length(find(CODE(Class)>=90)),length(find((CODE(Class)>=80)&(CODE(Class)<90))),length(find((CODE(Class)>=70)&(CODE(Class)<80))),length(find((CODE(Class)>=60)&(CODE(Class)<70))),length(find(CODE(Class)<60))];

Class=Class3;

Class_Code(3,:)=[length(find(CODE(Class)>=90)),length(find((CODE(Class)>=80)&(CODE(Class)<90))),length(find((CODE(Class)>=70)&(CODE(Class)<80))),length(find((CODE(Class)>=60)&(CODE(Class)<70))),length(find(CODE(Class)<60))];

Class_Code(4,:)=Zongshu/3;

(2)用plot绘制三个班级的分数分布曲线

subplot(1,2,1),plot(1:5,Class_Code(1:3,:),'*-','LineWidth',2)

hold on

plot(1:5,Class_Code(4,:),'o:')

legend('电气2101','电气2102','电气2103','班级平均数')

xticklabels({'优秀','良好','中等','及格','不及格'})

hold off

(3)用bar绘制三个班级的分数分布

subplot(1,2,2),bar(Class_Code')

xticklabels({'优秀','良好','中等','及格','不及格'})

legend('电气2101','电气2102','电气2103','班级平均数')