阅读前请注意:
1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳、拓展阅读。博客内容由 @K2SO4钾 撰写、编辑,发布于 @K2SO4钾 的个人投稿与华中师范大学HelloWorld程序设计协会CSDN官方账号 @CCNU_HelloWorld 。
2. 学习笔记基于 《MATLAB R2018a完全自学一本通》(刘浩, 韩晶) 1 ,笔记中增加了很多程序示例和笔者个人的思考。学习笔记面向刚接触MATLAB的新手,内容偏基础。若欲跟随此笔记学习,推荐入手《MATLAB Rxxxxx完全自学一本通》(书籍名称中MATLAB版本号按照个人的MATLAB版本而定),并在学习之前下载安装MATLAB。笔记中示例用MATLAB版本为MATLAB R2019a。
3. 请谅解笔记可能会出现的错误,欢迎指正讨论;由于MATLAB更新导致的旧代码无法使用的情况,也欢迎讨论交流。
MATLAB学习笔记0:学习须知
正在努力更新中,待补全~
MATLAB,全称Matrix Labratory,即“矩阵实验室”,是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境的商业数学软件。
MATLAB由美国公司MathWorks开发。20世纪70年代,美国新墨西哥大学计算机科学系主任Cleve Moler为了减轻学生编程的负担,用FORTRAN编写了最早的MATLAB。1984年,MathWorks公司成立,开发了早期版本的MATLAB并将其推广至市场。20世纪90年代,MATLAB已成为国际控制界的标准计算软件;目前,MATLAB已经成为最广泛使用的数学软件之一。
MATLAB的应用相当广泛。其在数学分析,图像处理、信号处理,通信领域,控制系统设计,测绘测量,财务建模与分析,计算机生物学,大数据分析及处理等多应用领域发挥重要作用。功能强大的工具包帮助其更好地在专业领域发挥作用。目前,高校中很多工科或理科开设了MATLAB课程,MATLAB对应用数学、电通信、自动化、计算机科学、经济金融、物理学、生物学等专业的学习和研究有很大的帮助。 MATLAB课程一般安排在计算机高级语言和高等数学课程、线性代数课程之后,是以C语言、基础数学课程为基础的拓展学习课程,多数高校都将其置于个性发展课程(专业选修课或通识选修课)中,也有部分高校的部分专业将其纳入专业主干课程中。
MathWorks公司旗下产品除了MATLAB产品家族,还有Simulink产品家族、PolySpace产品家族。
Simulink是一个用于动态系统进行多域建模和模型设计的平台。它提供一个交互式图形环境以及一个自定义模块库,可针对特定模块加以拓展,在控制系统设计、信号处理、通信及图像处理中发挥着重要作用。MATLAB中融合了Simulink模块,从上方工具栏“Simulink”直接点击打开即可。在学习完MATLAB基础知识之后,可以继续深入学习Simulink模块。
很多公司进行产品设计时,正式投入使用之前都会进行仿真实验,Simulink模块在其中便发挥重要作用。结合MATLAB强大的矩阵计算功能以及对C++和Fortran的兼容,MATLAB+Simulink成为很多产品研发公司、科研机构和工作者的首选。
PolySpace提供代码验证,对于代码运行中所产生的溢出、清零等运行错误进行提示、消除,以确保源代码不存在一些运行上的错误,帮助软件工程师快速选择跟踪嵌入式软件质量的指标和阈值。该软件在汽车、航空、国防、自动化、机械等行业中应用广泛。PolySpace是单独于MATLAB的软件,如需用到应单独下载。
MATLAB基于矩阵进行运算,包含数值计算及符号计算功能,计算功能强大。
绘图非常便捷,具有图形界面的编辑功能,便于对计算结果和编程的可视化;自带图像处理、视频处理函数,图形处理功能强大。
*注:安装MATLAB的时候可以选择自己想安装的工具包哦。
MATLAB与Mathematica、Maple并列为三大数学软件。
Mathematica是一款综合的科学计算软件,结合了数值和符号计算引擎、图形系统、编程语言、文本系统、和与其他应用程序的高级连接。
Mathematica 分为两部分,内核和前端。内核对代码进行解释,并且返回结果表达式;前端类似于MATLAB,为用户提供GUI,使得用户可以在Script中编辑程序代码及文本。2
Mathematica也可分为Kemel和FrontEnd两个独立的模块。与内核和前端类似,Kemel是软件的计算中心,FrontEnd用于与用户的交互。
Maple是目前世界上最为通用的数学和工程计算软件之一,在数学和科学领域享有盛誉,有“数学家的软件”之称。
Maple系统内置高级技术解决建模和仿真中的数学问题,包括强大的符号计算、无限精度数值计算、创新的互联网连接、强大的4GL语言、友善的使用环境等,内置超过5000个计算命令,数学和分析功能覆盖几乎所有的数学分支,如微积分、微分方程、特殊函数、线性代数、图像声音处理、统计、动力系统等。
Maple不仅仅提供编程工具,更重要的是提供数学知识。Maple是教授、研究员、科学家、工程师、学生们必备的科学计算工具。3
Maple是专门为符号计算而设计,因此在数值计算、绘图方面,Maple的运算速度要比MATLAB慢。
三大数学软件特点归纳后如下图。
SPSS
统计分析软件。数据统计分析功能强大,操作便捷,结果直观。
R(R语言)
R是一种由统计计算基金会支持的用于统计计算和图形的编程语言和自由软件环境。统计学家和数据挖掘者广泛使用R语言来开发统计软件和数据分析。R及其库实现了各种各样的统计和图形技术,包括线性和非线性建模、经典统计测试、时间序列分析、分类、聚类等。4
Lingo
LINGO是Linear Interactive and General Optimizer的缩写,中文名称为“交互式的线性和通用优化求解器”,是由美国LINDO系统公司开发的一套专门用于求解最优化问题的软件包,用于求解线性规划和二次规划问题,LINGO可以求解非线性规划问题,也可以用于一些线性和非线性方程(组)的求解等。此外,LINGO还允许优化模型中的决策变量为整数(即整数规划),其执行速度很快 ,是求解优化模型的最佳选择。5
R、Lingo在数模竞赛中也会发挥重要作用。如果有时间可以考虑学习。
对于MATLAB初学者来说,你需要制订一个你自己的MATLAB学习计划,以高效地学习MATLAB的基础知识。掌握这些基础知识之后,再去花大量时间进行训练、学习更多MATLAB的拓展内容。笔者并不建议在对MATLAB基础知识掌握不牢的情况下学习拓展知识。
为了让大家直观地看到我们将要学习的MATLAB基础知识,以下为推荐的MATLAB基础知识以及对应的学习顺序、学习时间(需要强调,学习计划应根据个人情况不同进行调整,例如是否学过一些先行课、是否有编程学习经历等):
【sec1】 MATLAB概述:简介、工作环境、通用命令、帮助系统等
【sec2】 MATLAB基础知识:数据类型、运算符、数组与矩阵基础、字符串
【sec3】 MATLAB编程基础: 变量及关键字、6种程序控制流、控制流指令
【sec4】 数组与矩阵:矩阵基本操作、矩阵及矩阵元素的运算、矩阵结构的改变、矩阵信息提取等
【sec5】 MATLAB绘图:绘图基本流程、二维图形绘制及属性设置、三维图形绘制、数据可视化
【sec6】 数值运算及数据分析:多项式、各种数值运算方法、数值微积分、插值与拟合(cftool工具包)等
【sec7】 符号数学计算: 符号对象及符号表达式、符号表达式操作、各种符号运算方法、符号微积分、符号积分变换等
【sec8】 按需求学习:[概率统计] [建模与仿真] [Simulink] [数学建模模型] 等
【训练1】 针对sec1-3的练习
【训练2】 针对sec4-5的练习
【训练3】 针对sec6-7的练习
【训练4】 学习程序控制流的例子,练习简单的程序控制流的题目,同时针对sec1-3进行训练
【训练5】 结合矩阵的程序控制流练习
【adv1】 学习线性代数基础内容:行列式及矩阵、矩阵及其运算、数组和矩阵的基本运算、向量组及方程组的解等内容,不需要学得面面俱到,了解清楚有哪些、是干什么用的就行
【adv2】 学习高等数学基础内容:极限、微积分运算(包含多元微积分)、积分变换、级数、数值分析方法等,同理,不需要面面俱到
上述重点学习加粗内容,下图中蓝色为重点学习内容。推荐一周期的学习时长为15d-25d,下图时间轴仅供参考。
学习笔记将覆盖sec1-sec7的全部内容、sec8的部分内容、5项训练内容,但不包括前置学习内容adv1、adv2。建议修完高等程序语言设计C语言、高等数学后再进行学习,如果能有线性代数基础学习起来更轻松。不过没有这些前置知识,即使你是不学这些课程的专业,跟着这份笔记一起学习,你也会收获很多,只是可能比其他同学稍微多付出一些罢了。
制订计划虽然重要,但是更重要的还是坚持不懈的学习与对MATLAB的热爱。MATLAB不同于你学的其它课程,笔者保证它学起来会非常有意思。因此不论你的基础怎样,不要对它有害怕的想法。
另外一件重要的事需要说明。很多同学在学习专业课的时候,大都是“学完就丢”,不去深入探索研究。如果你学习MATLAB只是把基础知识(也就是这份笔记里的东西)学完了而不去拓展学习,那么这些知识将很难发挥其作用。如果你打过数模比赛或者大数据竞赛就知道,比赛或者科研用到的MATLAB与我们现在学的MATLAB根本不是一个层次。
鼓励大家用MATLAB多参加一些比赛以提升自己的编程水平。同时,希望MATLAB对于大家不仅仅只是一个数学分析软件。
ENJOY YOURSELF IN YOUR MATLAB!
clc,clear all,close all
[x,y,z]=meshgrid(linspace(-1.5,1.5));
f=@(x,y,z)(x.^2 + (9/4)*y.^2 + z.^2 - 1).^3 - x.^2.*z.^3 - (9/80)*y.^2.*z.^3;
p=patch(isosurface(x,y,z,f(x,y,z),0)); view(3);axis equal
set(p,'FaceVertexCData',jet(size(get(p,'faces'),1)) ,'FaceColor', 'flat', 'EdgeColor', 'none');
title('三维比心')
撰写:K2SO4钾(华中师范大学)
审核:华中师范大学HelloWorld程序设计协会工作人员
刘浩, 韩晶. MATLAB R2018a 完全自学一本通[M]. 北京:电子工业出版社. 2019. ↩︎
Mathematica - 搜狗百科[EB/OL]. doi: https://baike.sogou.com/v633875.htm?fromTitle=Mathematica ↩︎
Maple - 搜狗百科[EB/OL]. doi: https://baike.sogou.com/v671372.htm?fromTitle=Maple ↩︎
R(编程语言) - 搜狗科学百科[EB/OL]. doi: https://baike.sogou.com/kexue/d11127.htm?ch=fromsearch ↩︎
lingo - 搜狗百科[EB/OL]. doi: https://baike.sogou.com/v10491972.htm?fromTitle=lingo ↩︎