参考书:《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。
1.MATLAB基础回顾
1.1 MATLAB语言特点
- M A T L A B {\rm MATLAB} MATLAB是一种解释型语言,允许用户逐步执行命令并立即查看结果;
- M A T L A B {\rm MATLAB} MATLAB拥有大量内置的数学、统计、工程等方面的函数和工具箱,极大地简化了技术计算任务,支持自定义函数的开发;
- M A T L A B {\rm MATLAB} MATLAB支持多种数值计算的数据类型,包括多维数组、稀疏矩阵等,并提供多种矩阵运算函数;
- M A T L A B {\rm MATLAB} MATLAB提供丰富的 2 D 2{\rm D} 2D和 3 D {\rm 3D} 3D可视化功能,可以方便地绘制各种图形并进行图像处理;
- M A T L A B {\rm MATLAB} MATLAB可以调用外部的 C / C {\rm C/C} C/C++和 F o r t r a n {\rm Fortran} Fortran代码,扩展其功能;
- M A T L A B {\rm MATLAB} MATLAB可以生成可移植的 C / C {\rm C/C} C/C++和 . N E T {\rm .NET} .NET代码,将开发的算法及应用部署到其他环境;
- M A T L A B {\rm MATLAB} MATLAB支持面向对象编程,可以使用类、封装、继承等概念进行模块化编程;
- M A T L A B {\rm MATLAB} MATLAB具有丰富的工具包,可用于信号处理、控制系统、优化、机器学习等领域;
- M A T L A B {\rm MATLAB} MATLAB可以进行并行计算,利用多核 C P U {\rm CPU} CPU提高计算速度;
1.2 MATLAB界面介绍
- 命令行窗口 ( C o m m a n d W i n d o w ) ({\rm Command\ Window}) (Command Window):用户可以在命令行窗口输入 M A T L A B {\rm MATLAB} MATLAB命令并查看其输出,如: c l e a r 、 c l c {\rm clear、clc} clear、clc;
- 编辑器 ( E d i t o r ) ({\rm Editor}) (Editor): M A T L A B {\rm MATLAB} MATLAB编辑器用于创建、编辑和保存 M A T L A B {\rm MATLAB} MATLAB脚本和函数文件,用户可以在编辑器中编写代码,执行脚本,并进行代码调试;
- 当前文件夹 ( C u r r e n t F o l d e r ) ({\rm Current\ Folder}) (Current Folder):当前文件夹窗口显示 M A T L A B {\rm MATLAB} MATLAB当前工作目录中的文件和文件夹,用户可在其中浏览、打开、保存和管理 M A T L A B {\rm MATLAB} MATLAB文件;
- 工作区 ( W o r k s p a c e ) ({\rm Workspace}) (Workspace):工作区窗口用于管理 M A T L A B {\rm MATLAB} MATLAB工作区中的变量和数据,用户可在其中查看、清除和操作工作区中的变量;
- 命令历史 ( C o m m a n d H i s t o r y ) ({\rm Command\ History}) (Command History):命令历史窗口显示用户在命令窗口中输入的历史命令,用户可以使用命令历史查找以前执行的命令并重新运行它们;
- P l o t {\rm Plot} Plot工具 ( P l o t t i n g T o o l s ) ({\rm Plotting\ Tools}) (Plotting Tools): M A T L A B {\rm MATLAB} MATLAB提供丰富的绘图工具,用户可以使用它们创建各种类型图表和图形,进行可视化数据;
- A p p s {\rm Apps} Apps和工具箱 ( A p p s a n d T o o l b o x e s ) ({\rm Apps\ and\ Toolboxes}) (Apps and Toolboxes): M A T L A B {\rm MATLAB} MATLAB具有各种应用程序和工具箱,用于不同领域和任务,如:统计分析、机器学习、图像处理等;
- 帮助和文档 ( H e l p a n d D o c u m e n t a t i o n ) ({\rm Help\ and\ Documentation}) (Help and Documentation): M A T L A B {\rm MATLAB} MATLAB提供广泛的在线文档和帮助资源,包括:函数文档、示例代码和教程;
1.3 MATLAB语法基础
-
标识符:标识符是用来表示变量、函数、文件和其他命名实体的名称,标识符必须遵循的命名规则和约定如下:
- 标识符必须以字母开头;
- 标识符可以包含字母、数字和下划线;
- 标识符区分大小写;
- 标识符不能与 M A T L A B {\rm MATLAB} MATLAB的保留关键字相同;
-
关键字:关键字具有特殊含义,不能用作标识符,常见的关键字如下:
- i f {\rm if} if:用于条件语句,条件成立时执行某些代码块;
- e l s e {\rm else} else:用于条件语句,指定条件不成立时执行某些代码块;
- e l s e i f {\rm elseif} elseif:在多条件 i f {\rm if} if语句中用于指定额外的条件;
- w h i l e {\rm while} while:用于创建循环,当指定条件为真时执行一段代码块;
- f o r {\rm for} for:用于创建循环,用于遍历数组或执行一定次数的操作;
- e n d {\rm end} end:用于结束循环、函数或条件语句的代码块;
- f u n c t i o n {\rm function} function:用于定义 M A T L A B {\rm MATLAB} MATLAB函数;
- r e t u r n {\rm return} return:用于从函数中返回值;
- b r e a k {\rm break} break:用于退出循环;
- c o n t i n u e {\rm continue} continue:用于跳过当前循环迭代,继续下一次迭代;
-
注释:使用注释来添加说明性文字或注释性信息,以使代码更易于理解和维护,包括单行注释和多行注释:
-
单行注释:使用百分号 % \% %开始的一行文字,单行注释通常用于在代码中添加短期注释或说明;
-
多行注释:由 % { \%\{ %{和 % } \%\} %}包围的文本块组成,多行注释通常用于添加更长或多段文字的注释;
-
单行注释和多行注释示例:
% 单行注释示例 number1 = 100; % 给number1赋值100;%{ 多行注释示例: 多行注释通常用于添加更长或多段文字的注释; 下面代码给number2赋值200; %} number2 = 200;
-
-
分节符:" % % {\rm \%\%} %%"符号用作分节符,分节符用于将脚本或函数分成不同的部分,以提高代码的可读性和组织性;
% 说明:下面代码分为两节,将光标放在想要运行的节的任何位置,单击"运行节"按钮; % 每个节可以单独运行进行测试或调试,无须运行整个脚本或函数;%% 加法运算符 number1 = 10; number2 = 20; result1 = number1 + number2; result1%% 减法运算符 number3 = 20; number4 = 10; result2 = number4 - number3; result2
-
变量:用于存储和操作各种数据类型,包括:标量、矩阵、字符串、结构等, M A T L A B {\rm MATLAB} MATLAB中定义变量直接使用变量名,不需要声明类型,示例如下:
% 定义两个变量; number1 = 100; number2 = 200; PI = 3.1415926;% 算术运算; result = number1 + number2;
-
续行符:使用省略号 . . . {\rm ...} ...表示续行符,可将一行代码分成多行,提高长表达式的代码可读性,示例如下:
% 续行符示例1: result=1+2+...4+5+6; result% 续行符示例2: matrix1=[1,2,3;...4,5,6;...7,8,9]; matrix1
1.4 MATLAB数据类型
-
双精度浮点数 ( D o u b l e ) ({\rm Double}) (Double):双精度浮点数用于存储小数或浮点数值,双精度浮点数使用 64 64 64位表示数字,示例如下:
% 双精度浮点数示例: dNumber1 = 3.14; dNumber2 = 2.71828;result = dNumber1 + dNumber2;
-
整数 ( I n t e g e r ) ({\rm Integer}) (Integer):整数用于存储整数值,分为有符号整数和无符号整数,有符号整数可以表示正数、负数和零,无符号整数表示非负整数, M A T L A B {\rm MATLAB} MATLAB中的整数分为 8 8 8位、 16 16 16位、 32 32 32位和 64 64 64位整数,整数类型如下:
数据类型 数据类型 数据类型 类型描述 类型描述 类型描述 数据类型 数据类型 数据类型 类型描述 类型描述 类型描述 i n t 8 {\rm int8} int8 8 位有符号整数 8位有符号整数 8位有符号整数 i n t 32 {\rm int32} int32 32 位有符号整数 32位有符号整数 32位有符号整数 u i n t 8 {\rm uint8} uint8 8 位无符号整数 8位无符号整数 8位无符号整数 u i n t 32 {\rm uint32} uint32 32 位无符号整数 32位无符号整数 32位无符号整数 i n t 16 {\rm int16} int16 16 位有符号整数 16位有符号整数 16位有符号整数 i n t 64 {\rm int64} int64 64 位有符号整数 64位有符号整数 64位有符号整数 u i n t 16 {\rm uint16} uint16 16 位无符号整数 16位无符号整数 16位无符号整数 u i n t 64 {\rm uint64} uint64 64 位无符号整数 64位无符号整数 64位无符号整数 % 整数示例: iNumber1 = 100; % 声明一个有符号整数变量iNumber1并赋值100; iNumber2 = -200; % 声明一个有符号整数变量iNumber2并赋值-200;uInt16Number1 = uint16(300); % 声明一个16位无符号整数变量uInt16Number1并赋值300;
-
字符 ( C h a r ) ({\rm Char}) (Char):字符数据类型用于存储单个字符,字符串数据类型用于存储文本或字符序列,示例如下:
c1 = 'F'; % 声明一个字符变量c1,存储字母F; c2 = 'X'; % 声明一个字符变量c2,存储字母X; c3 = '@'; % 声明一个字符变量c3,存储特殊字符@; c4 = ' '; % 声明一个字符变量c4,存储空格字符;
-
逻辑 ( L o g i c a l ) ({\rm Logical}) (Logical):逻辑数据类型用于条件测试、逻辑运算和控制流程,逻辑数据类型有两个值: t r u e {\rm true} true和 f l a s e {\rm flase} flase, t r u e {\rm true} true表示逻辑真,用 1 1 1表示, f a l s e {\rm false} false表示逻辑假,用 0 0 0表示,示例如下:
% 逻辑数据类型示例: is_true = true; is_false = false;if is_truedisp("条件成立,输出真!"); elsedisp("条件不成立,输出假!"); end
-
复数 ( C o m p l e x ) ({\rm Complex}) (Complex):复数是具有实部和虚部的数值,常以 a + b i {\rm a+bi} a+bi形式表示, a {\rm a} a为实部, b {\rm b} b为虚部, i {\rm i} i为虚数单位,示例如下:
% 定义复数; cpxNumber1 = 1 + 2i; cpxNumber2 = 3 + 4i;% 复数加减法; cpxAdd = cpxNumber1 + cpxNumber2; cpxSub = cpxNumber2 - cpxNumber1;% 获取复数的实部和虚部; realGet = real(cpxNumber1); % 获取复数实部; imagGet = imag(cpxNumber1); % 获取复数虚部;
1.5 MATLAB常见运算符
-
算术运算符
运算符 运算符 运算符 运算符名称 运算符名称 运算符名称 示例 示例 示例 运算符 运算符 运算符 运算符名称 运算符名称 运算符名称 示例 示例 示例 + + + 加法 加法 加法 n u m 1 + n u m 2 {\rm num1+num2} num1+num2 / 矩阵右除 矩阵右除 矩阵右除 m a t 1 / m a t 2 {\rm mat1/mat2} mat1/mat2 + + + 一元加法 一元加法 一元加法 + x {\rm +x} +x . . .\ 按元素左除 按元素左除 按元素左除 a r r 1. {\rm arr1.} arr1.\ a r r 2 {\rm arr2} arr2 − - − 减法 减法 减法 n u m 1 − n u m 2 {\rm num1-num2} num1−num2 \ 矩阵左除 矩阵左除 矩阵左除 m a t 1 {\rm mat1} mat1\ m a t 2 {\rm mat2} mat2 − - − 一元减法 一元减法 一元减法 − x {\rm -x} −x . . .^ 按元素求幂 按元素求幂 按元素求幂 a r r 1 {\rm arr1} arr1.^ e x p {\rm exp} exp . ∗ .* .∗ 按元素乘法 按元素乘法 按元素乘法 a r r 1. ∗ a r r 2 {\rm arr1.*arr2} arr1.∗arr2 ^ 矩阵幂 矩阵幂 矩阵幂 m a t 1 {\rm mat1} mat1^ p {\rm p} p ∗ * ∗ 矩阵乘法 矩阵乘法 矩阵乘法 m a t 1 ∗ m a t 2 {\rm mat1*mat2} mat1∗mat2 . ′ .' .′ 转置 转置 转置 m a t . ′ {\rm mat.'} mat.′ . . ./ 按元素右除 按元素右除 按元素右除 n u m . / d e n {\rm num./den} num./den ′ ' ′ 复共轭转置 复共轭转置 复共轭转置 m a t ′ {\rm mat'} mat′ % ch01_01.m % MATLAB常见的算术运算符示例:%% 加法运算符和减法运算符示例 iNumber1 = 100; iNumber2 = 200; result1 = iNumber1 + iNumber2 result2 = iNumber2 - iNumber1%% 一元加法和一元减法示例 iNumber3 = 520; result3 = + iNumber3 result4 = - iNumber3%% 按元素乘法示例 arr1 = [1, 2, 3]; arr2 = [4, 5, 6]; result5 = arr1 .* arr2%% 矩阵乘法示例 matrix1 = [1, 2;3, 4]; matrix2 = [5, 6;7, 8]; result6 = matrix1 * matrix2%% 按元素右除示例 num = [10, 20, 30]; den = [2, 4, 6]; result7 = num ./ den%% 矩阵右除示例 matrix3 = [10, 20;30, 40]; matrix4 = [2, 4;6, 8]; result8 = matrix3 / matrix4%% 按元素左除示例 arr3 = [10, 20, 30]; arr4 = [2, 4, 6]; result9 = arr3 .\ arr4%% 矩阵左除示例 matrix5 = [1, 2;3, 4]; matrix6 = [5, 6;7, 8]; result10 = matrix5 \ matrix6%% 按元素求幂示例 arr5 = [2, 3, 4]; exp = [2, 3, 2]; result11 = arr5 .^ exp%% 矩阵幂示例 matrix7 = [1, 2;3, 4]; p = 2; result12 = matrix7^p%% 转置示例 matrix8 = [1, 2;3, 4]; result13 = matrix8.'%% 复共轭转置示例 cpxMatrix9 = [1 + 2i, 3 - 4i;5 + 6i,7 - 8i]; result14 = cpxMatrix9'
% ch01_01.m运算结果: result1 =300result2 =100result3 =520result4 =-520result5 =4 10 18result6 =19 2243 50result7 =5 5 5result8 =5.0000 -0.00000 5.0000result9 =0.2000 0.2000 0.2000result10 =-3.0000 -4.00004.0000 5.0000result11 =4 27 16result12 =7 1015 22result13 =1 32 4result14 =1.0000 - 2.0000i 5.0000 - 6.0000i3.0000 + 4.0000i 7.0000 + 8.0000i
-
关系运算符
运算符 运算符 运算符 运算符名称 运算符名称 运算符名称 示例 示例 示例 = = == == 等于 等于 等于 n u m 1 = = n u m 2 检查 n u m 1 是否等于 n u m 2 {\rm num1==num2检查num1是否等于num2} num1==num2检查num1是否等于num2 ~ = ~= ~= 不等于 不等于 不等于 n u m 1 ~ = n u m 2 检查 n u m 1 是否不等于 n u m 2 {\rm num1~=num2检查num1是否不等于num2} num1~=num2检查num1是否不等于num2 > > > 大于 大于 大于 n u m 1 > n u m 2 检查 n u m 1 是否大于 n u m 2 {\rm num1>num2检查num1是否大于num2} num1>num2检查num1是否大于num2 > = >= >= 大于或等于 大于或等于 大于或等于 n u m 1 > = n u m 2 检查 n u m 1 是否大于或等于 n u m 2 {\rm num1>=num2检查num1是否大于或等于num2} num1>=num2检查num1是否大于或等于num2 < < < 小于 小于 小于 n u m 1 < n u m 2 检查 n u m 1 是否小于 n u m 2 {\rm num1<num2检查num1是否小于num2} num1<num2检查num1是否小于num2 < = <= <= 小于或等于 小于或等于 小于或等于 n u m 1 < = n u m 2 检查 n u m 1 是否小于或等于 n u m 2 {\rm num1<=num2检查num1是否小于或等于num2} num1<=num2检查num1是否小于或等于num2 % ch01_02.m % MATLAB常见的关系运算符示例:%% 关系运算符==示例: num1 = 100; num2 = 100;result1 = (num1 == num2)%% 关系运算符~=示例: num3 = 100; num4 = 200; result2 = (num3 ~= num4)%% 关系运算符>示例: num5 = 10; num6 = 20; result3 = (num5 > num6)%% 关系运算符>=示例: num7 = 100; num8 = 100; result4 = (num7 >= num8)%% 关系运算符<示例: num9 = 100; num10 = 200; result5 = (num9 < num10)%% 关系运算符<=示例: num11 = 100; num12 = 200; result6 = (num11 <= num12)
% ch01_02.m结果: result1 =logical1result2 =logical1result3 =logical0result4 =logical1result5 =logical1result6 =logical1
-
逻辑运算符
运算符 运算符 运算符 运算符名称 运算符名称 运算符名称 运算符示例 运算符示例 运算符示例 & \& & 计算逻辑 A N D {\rm 计算逻辑AND} 计算逻辑AND n u m 1 & n u m 2 执行逻辑 A N D 操作 {\rm num1\&num2执行逻辑AND操作} num1&num2执行逻辑AND操作 | 计算逻辑 O R {\rm 计算逻辑OR} 计算逻辑OR n u m 1 ∣ n u m 2 计算逻辑 O R {\rm num1|num2计算逻辑OR} num1∣num2计算逻辑OR || 计算逻辑 O R ( 具有短路功能 ) {\rm 计算逻辑OR(具有短路功能)} 计算逻辑OR(具有短路功能) n u m 1 ∣ ∣ n u m 2 执行逻辑 O R 操作 ( 具有短路功能 ) {\rm num1||num2执行逻辑OR操作(具有短路功能)} num1∣∣num2执行逻辑OR操作(具有短路功能) & & \&\& && 计算逻辑 A N D ( 具有短路功能 ) {\rm 计算逻辑AND(具有短路功能)} 计算逻辑AND(具有短路功能) n u m 1 & & n u m 2 执行逻辑 A N D 操作 ( 具有短路功能 ) {\rm num1\&\&num2执行逻辑AND操作(具有短路功能)} num1&&num2执行逻辑AND操作(具有短路功能) ~ ~ ~ 计算逻辑 N O T {\rm 计算逻辑NOT} 计算逻辑NOT ~ n u m 1 执行逻辑 N O T 操作 {\rm ~num1执行逻辑NOT操作} ~num1执行逻辑NOT操作 % ch01_03.m % MATLAB常见的逻辑运算符示例:%% 逻辑运算符示例: bool1 = true; bool2 = false; result1 = (bool1 & bool2) result2 = (bool1 | bool2) result3 = (bool1 || bool2) result4 = (bool1 && bool2) result5 = (~bool1)
% ch01_03.m结果: result1 =logical0result2 =logical1result3 =logical1result4 =logical0result5 =logical0