写在前面的话
文章内容较多,是本人的课程笔记
原课链接:
https://www.bilibili.com/vide...
内容以课堂ppt上内容为主,并没有记录课堂例子
大家可以当作字典来用
提示:ctrl+F可以进行浏览器页面的查找
专题一 课程导入
1.1.1课程导入
专题二 MATLAB基础知识
2.1.1MATLAB系统环境
支持这个操作
cd 文件目录 %进入指定文件路径
命令行窗口创建的变量可以在工作区窗口查看其值
也可以在工作区对变量进行操作和处理
matlab的搜索路径
先变量名,再内部函数名,最后程序文件(先当前,后指定)
申请的变量可能会覆盖掉某些函数名或程序文件
设置文件搜索路径
- 用path命令设置文件的搜索路径
path(path,'路径') %设置文件的搜索路径
用对话框设置文件的搜索路径
主页\(\rightarrow\)设置路径
2.2.1MATLAB数值数据
数据类型(和C相通)
整型
分类:
无符号整数:无符号8位整型(int8)、无符号16位整型、无符号32位整型、无符号64位整型
有符号整数:有符号8位整型(uint8)、有符号16位整型、有符号32位整型、有符号64位整型
数据类型 变量名 = 数值 %规定数据类型的赋值
- 超栈时返回该类型最大值
浮点型
- 分类:双精度浮点型(double)、单精度浮点型(single)
使用:
single(变量名) %转化为单精度浮点型 double(变量名) %转化为双精度浮点型
复型(复数型)
- 实部和虚部默认为双精度型
- 虚数单位i或者j
real(复型变量) %求复数的实部 imag(复型变量) %求复数的虚部
format命令改变输出格式
format 输出格式 %改变输出格式
函数
函数的调用格式:
函数名(函数自变量的值)%函数的调用格式
常用函数
- 三角函数分角度制和弧度制,使用角度值时须在函数名末尾加d
绝对值函数
abs(变量名) %求实数的绝对值、复数的模、字符串的ASCLL值
取整函数fix、floor、ceil、round
round(变量名) %表示四舍五入的规则取整 ceil(变量名) %指向上取整 floor(变量名) %指向下取整 fix(变量名) %指舍去小数取整
判断是否是素数的函数
isprime(变量名) %当变量为素数时返回1,反之返回0
2.3.1变量及其操作
命名规则
C语言的命名规则,但matlab最多识别63个字符
matlab标准函数名和命令名都是小写
赋值语句后加分号,只执行操作,不显示结果
NaN %表示非数 ans %默认赋值变量 pi %圆周率
变量的管理
内存变量的删除和修改
who %输出已有的变量名 whos %输出一张关于变量信息的表
内存变量文件(.mat)
save 文件名 变量名1 变量名2 ··· %创建内存变量文件 load 文件名 %加载内存变量文件
2.4.1MATLAB矩阵的表示
矩阵的建立
直接输入:
矩阵元素用中括号括起来,同行元素以逗号分隔,异行元素通过分号分隔
利用其他矩阵建立大矩阵:
将其他矩阵当作元素
- 利用实部矩阵和虚部矩阵建立复数矩阵
向量的产生
冒号表达式
初始值:步长:终止值
linspace函数:
linspace(初始值,终止值,元素总数)
结构矩阵和单元矩阵
结构矩阵:
结构矩阵元素.成员名 = 表达式 %结构矩阵的赋值
单元矩阵:
矩阵的每个元素类型不一定相同,和一般矩阵的建立相似,但单元矩阵是由大括号括起来的
2.5.1矩阵元素的引用
引用方式
- 通过下标引用矩阵元素
通过序号来引用
matlab中矩阵元素按列存储,矩阵的绝对序号即矩阵在内存中的排列顺序
元素的存储序号 = sub2ind(矩阵的大小,元素的行下标,元素的列下标) %将矩阵指定元素的行、列下标转换成存储的序号 (元素的行下标,元素的列下标) = ind2sub(矩阵大小,元素的存储序号) %将矩阵指定元素的存储序号转换成其行、列下标
利用冒号表达式引用子矩阵
A(i,:) %第i行的所有元素 A(:,j) %第j列的所有元素 A(i:i+m,k:k+m) %第i~i+m行内且在k~k+m列中的所有元素 A(i:i+m,:) %第i~i+m行的所有元素 end %表示到末尾
利用空矩阵删除矩阵中的元素
空矩阵指没有任何元素的矩阵
改变矩阵的形状
reshape(原矩阵,改变后矩阵的行数,改变后矩阵的列数) %在矩阵元素不改变的情况下,将矩阵的元素重排,但元素的存储顺序不改变
转化为列向量
A(:) %将矩阵的元素堆叠,形成一列列向量
2.6.1MATLAB基本运算
算数运算
基本算数运算
+ %加 - %减 * %乘 / %右除 \ %左除 ^ %乘方
MATLAB的算数运算是在矩阵意义下进行的
单个数据的运算算是矩阵运算的特例
点运算
两个矩阵的点运算指两个矩阵的对应元素进行相关运算
关系运算
- 关系运算符:
< %小于 <= %小于或等于 > %大于 >= %大于或等于 == %等于 ~= %不等于
规则:
- 两个标量的比较直接比较大小
- 矩阵的比较是同下标元素间的比较,并返回一个矩阵
- 标量与矩阵比较是标量与矩阵每个元素间的比较,结果为矩阵
逻辑运算
逻辑运算符:
& %与 | %或 ~ %非
规则:
- 标量间的运算(非0即为真)
- 矩阵之间的运算是逐元素的标量运算
- 矩阵与标量间的运算是矩阵的每个元素与标量间的标量运算
2.7.1字符串处理
数据的分类
数值型数据
字符型数据
字符串的表示
matlab中,字符串是由单引号括起来的字符序列。
字符串中的单引号字符要由两个单引号字符表示。
也可以建立字符串矩阵。
char(数值) %将ascll码矩阵转化为对应的字符串矩阵
字符串的比较
关系运算符比较
两个字符串里的每个字符依次按照ASCLL值大小逐个进行比较,比较的结果是个非0即1的数值向量
字符串比较函数
strcmp(s1,s2) %比较s1与s2是否相等 strncmp(s1,s2) %用于比较两个字符串前n个字符是否相等 strcmpi(s1,s2) %在忽略大小写的前提下,比较两个字符串是否相等 strncmpi(s1,s2) %在忽略大小写的前提下,比较两个字符串前n个字符是否相等
字符串查找与替换
finder(s1,s2) %返回短字符串在长字符串中的开始位置 strrep(s1,s2,s3) %将字符串中的所有子串s2替换成字符串s3
专题三 矩阵处理
3.1.1特殊矩阵
- 矩阵函数
zeros() %产生全0矩阵
ones() %产生全1矩阵
eye() %产生对角线为1的矩阵,当矩阵为方阵时,得到单位阵
rand() %产生(0,1)区间均匀分布的随机矩阵
randn() %产生均值为0,方差为1的标准正太分布矩阵
%单个数值n参数为产生你阶方阵
%双参数m,n时表示产生m * n大小的矩阵
%参数为size(A)表示产生与A同样大小的矩阵
专门学科的特殊矩阵
魔方阵
n阶魔方阵由[1,\(n^2\)]共\(n^2\)个元素组成,且每行、每列以及主、副对角线上的各n个元素之和都相等
范德蒙矩阵
对于向量\(v~=~[v_1,v_2,\dots,v_n]\),范德蒙矩阵的一般形式
- 希尔伯特矩阵
- 伴随矩阵
- 帕斯卡矩阵
3.2.1矩阵的变换
对角阵
对角矩阵:只有对角矩阵上有非零元素的矩阵
数量矩阵:对角线上的元素相等的对角矩阵
提取对角阵的对角阵元素
diag(矩阵) %提取矩阵A主对角线元素,并产生一个列向量 diag(A,k) %提取矩阵A第k条对角线元素,并产生一个列向量 %主对角线为第零条对角线向上为正,向下为负
构建对角矩阵
diag(V) %产生以向量V为主对角线的对角阵 diag(V,k) %产生以向量V为第k条对角线的对角阵
三角阵
上三角阵:矩阵的对角线以下的元素全是0的矩阵
下三角阵:矩阵的对角线以上的元素全是0的矩阵
函数
triu(A) %提取A的主对角线及以上元素 triu(A,k) %提取A的第k条对角线及以上元素 tril(A) %提取A的主对角线及以下元素 tril(A,k) %提取A的第k条对角线及以下元素
矩阵的转置
转置运算符
.' %对矩阵转置 ' %对矩阵转置后,对矩阵的每个元素取其复共轭
矩阵的旋转
rot90(A,k) %将矩阵A逆时针旋转90°的k倍,k为1时省略
矩阵的翻转
fliplr(A) %对矩阵A实施左右翻转 flipud(A) %对矩阵A实施上下翻转
矩阵的求逆
- 对于一个方阵A,如果存在一个与其同阶的方阵B,使得\(AB=BA=I\)(I为单位矩阵),则称B为A的逆矩阵,当然,A也是B的逆矩阵
函数
inv(A) %求方阵A的逆矩阵
3.3.1矩阵求值
矩阵的行列式值
- 把方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为方阵所对应行列式的值
函数
det(A) %求方阵A所得对应的行列式的值
矩阵的秩
- 矩阵线性无关的行数或列数称为矩阵的秩
函数
rank(A) %求矩阵A的秩
奇数阶魔方阵秩为n,即奇数阶魔方阵为满秩矩阵
一重偶数阶魔方阵秩为\(n/2+2 \)(n是2的倍数,但非4的倍数)
二重偶数阶魔方矩阵的秩为3(n为4的倍数)
矩阵的迹
- 矩阵的迹等于矩阵的对角线元素之和,与等于矩阵的特征值之和
函数
trace(A) %求矩阵A的迹
矩阵的范数
- 矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度
常用范数
向量
向量V的1—范数:向量元素绝对值之和
公式:\(||V||_1~ =~\sum\limits^n_{i=1}|v_i|\)
norm(V,1) %计算向量V的1—范数
向量V的2—范数:向量元素平方和的平方根
公式:\(||V||_2~ =~\sqrt{\sum\limits^n_{i=1}v_i^2}\)
norm(V) %计算向量V的2—范数 norm(V,2) %计算向量V的2—范数
向量V的\(\infty\)—范数:所有向量元素绝对值中的最大值
公式:\(||V||_{\infty}~ =~\max\limits_{1 \le i \le n}{|v_i|}\)
norm(V,inf) %计算向量V的∞—范数
矩阵
矩阵A的1—范数:矩阵列元素绝对值之和的最大值
公式:\(||A||_1~ =~\max\limits_{1 \le j \le n} {\sum\limits^m_{i=1}|a_{ij}|}\)
norm(A,1) %计算矩阵A的1—范数
矩阵A的2—范数:\(AA'\)矩阵的最大特征值平方根
公式:\(||A||_2~ =~\sqrt{\lambda _1}\)(\(\lambda_1\)为\(AA'\)的最大特征值)
norm(A) %计算矩阵A的2—范数 norm(A,2) %计算矩阵A的2—范数
矩阵A的\(\infty\)—范数:所有向量元素绝对值中的最大值
公式:\(||A||_{\infty} ~ =~\max\limits_{1 \le i \le m} {\sum\limits^n_{j=1}|a_{ij}|}\)
norm(A,inf) %计算矩阵A的∞—范数
矩阵的条件数
- 矩阵A的条件数等于A的范数与A的逆矩阵的范数的乘积
- 条件数越接近于1,矩阵的性能越好,反之,矩阵的性能越差
条件数
矩阵A的1—范数下的条件数:
cond(A,1) %计算矩阵A的1—范数下的条件数
矩阵A的2—范数下的条件数:
cond(A) %计算矩阵A的2—范数下的条件数 cond(A,2) %计算矩阵A的2—范数下的条件数
矩阵A的\(\infty\)—范数下的条件数:
cond(A,inf) %计算矩阵A的∞—范数下的条件数
3.4.1矩阵的特征值与特征向量
矩阵的特征值的数学定义
设A为n阶方阵,如果存在常数\(\lambda\)和n维非0向量x,使得等式Ax=\(\lambda\)x成立,则称\(\lambda\)为A的特征值,x为对应特征值\(\lambda\)的特征向量
函数
E = eig(A) %求矩阵A的全部特征值,构成向量E [X,D] = eig(A) %求矩阵A的全部特征值,构成对角阵D,并产生矩阵X,X各列是相应的特征向量
3.5.1稀疏矩阵
矩阵的存储方式
分类
完全存储方式
稀疏存储方式:只存储矩阵非零元素的值及其位置
稀疏矩阵存储方式的产生
两种存储方式的转化
A = sparse(S) %将矩阵S转化为稀疏存储方式的矩阵A S = full(A) %将矩阵A转化为完全存储方式的矩阵S
建立稀疏存储矩阵
sparse(m,n) %生成一个m*n的所有元素都是0的稀疏矩阵 sparse(u,v,S) %(其中u,v,S是3个等长的向量,S为要建立稀疏矩阵的非零元素,u(i),v(i)分别是S(i)的行和列下标) spconvert(A) %A为一个m*3,m*4的矩阵,其每一行表示一个非零元素,m是非零元素的个数 %A(i,1)表示第i个非零元素所在的行 %A(i,2)表示第i个非零元素所在的列 %A(i,3)表示第i个非零元素值的实部 %A(i,4)表示第i个非零元素值得虚部 %若矩阵全为实数,则无需第4行
带状稀疏矩阵的稀疏存储
稀疏矩阵类型
无规则结构的稀疏矩阵、有规则结构的稀疏矩阵
专题四 程序流程控制
4.1.1顺序结构程序
程序设计
- 分析问题,确定求解问题的数学模型或方法
- 设计算法,并画出流程图
- 选择编程工具,根据算法编写程序
- 调试程序,分析程序输出结果
程序的基本结构
- 顺序结构
- 选择结构
- 循环结构
程序文件(m文件)
- 脚本文件:可以直接在命令行窗口执行的文件,也叫命令文件
- 函数文件:不能直接执行,必须以函数调用的方式来调用它
文件的建立
- 用命令按钮创建文件
- 用edit命令创建文件
顺序结构
数据的输入
A = input(提示信息,选项)
数据的输出
disp(输出项)
程序的暂停
pause(延迟的秒数) %省略秒数,程序等待至键盘有输入后继续运行 %Ctrl+C 强行终止命令
4.2.1用if语句实现选择语句
- 选择结构又称为分支结构,是根据给定条件是否成立来决定程序的执行流程
单分支if语句
if 条件 语句 end %条件: % 1. 条件为标量时,非零表示条件成立,零表示条件不成立 % 2. 条件为矩阵时,如果矩阵为非空,且不包括零元素,则条件成立,否则不成立 %eg:[1,2;0,4]表示条件时,条件不成立;[1,2;3,4]表示条件时,条件成立
双分支if语句
if 条件 语句组1 else 语句组2 end
多分支if语句
if 条件1 语句组1 elseif 条件2 语句组2 ··· elseif 条件n-1 语句组n-1 else 语句组n end %多分支if语句中不管有几个分支,程序执行完一个分支后,其余分支将不会再执行,这时整个if语句结束
4.3.1用switch语句实现选择结构
switch 表达式
case 结果表1
语句组1
case 结果表2
语句组2
···
case 结果表n-1
语句组n-1
otherwise
语句组n
end
%仅执行一条语句
%switch表达式应该是一个可以列举其值的表达式
%case结果表为switch表达式的取值,当取值有多个时,应用单元数据表示(用大括号括起来,类似列表的列举)
4.4.1用for语句实现循环结构
- 循环结构又称为重复结构,是利用计算机预算速度快以及能进行逻辑控制的特点来重复执行某些操作
格式1:
for 循环变量=表达式1(初值):表达式2(步长):表达式3(终值) 循环体语句 end %for循环的次数取决于循环变量后的向量中的元素个数 %推出循环后,循环变量的值就是向量中最后的元素值 %向量为空时,循环体一次也不执行
格式2:
%for语句的循环变量也可以是一个列向量 for 循环变量=矩阵表达式 循环体语句 end
4.5.1用while语句实现循环结构
格式:
while 条件 循环结构 end %多用于循环次数不确定的情况,循环次数确定时for语句更方便
循环控制语句
break %用来跳出循环体,结束整个循环 continue %用来结束本次循环,去执行下次循环
循环的嵌套
- 如果一个循环结构的循体又包含一个循环结构,就称为循环的嵌套,或称为多重循环结构
4.6.1函数文件的定义与调用
定义的基本结构:
function 输出形参表=函数名(输入形参表) 注释说明部分 函数体语句 %当有多个形参时,形参之间用逗号分隔,组成形参表 %当输出形参多于一个时,应当用方括号括起来构成输出矩阵 %函数文件名通常由函数名加上扩展名.m组成 %return语句表示函数的返回值,但函数也会自动返回
调用的格式
[输出实参表] = 函数名(输入实参表) %在调用函数时,函数输入输出参数称为实际参数,简称实参
匿名函数
函数句柄变量 = @(匿名函数输入参数)匿名函数表达式 eg:f = @(x,y)x^2+y^2
给函数起别名
函数句柄名 = @函数名
4.7.1函数的递归调用
函数的嵌套调用
在一个函数内部调用了其他函数
函数的递归调用
一个函数调用它自身称为函数的递归调用
递归是将一个大型的复杂问题层层转化为一个与原问题相似的规模较小的问题来求解
递归形式
直接递归调用
直接调用自身
间接递归调用
先调用另一个函数,再由这个函数调用自身
4.8.1函数参数与变量曲线
函数参数的可调性
nargin %记录函数的输入实参个数 nargout %记录函数的输出实参个数
-
定义:
==局部变量==是指在程序中只在特定过程或函数中可以访问的变量
==全局变量==的作用域是整个MATLAB工作空间,即全程有效,所有的函数都可以对它进行存取和修改
定义格式:
%全局变量 global 变量名
专题五 MATLAB绘图
5.1.1二维曲线
plot函数
基本用法
plot(x,y) %x,y分别用来存储x坐标和y坐标数据 plot(x) %若x为实数向量时,x的下标为x坐标,向量值为y坐标 %若x为复数向量时,则实部为x坐标,虚部为y坐标
plot(x,y) %如果矩阵y的列数等于向量x的长度,则以x为横坐标,以y的每个行向量为纵坐标绘制曲线,曲线的条数等于y的行数 %如果矩阵y的行数等于向量x的长度,则以x为横坐标,以y的每个列向量为纵坐标绘制曲线,曲线的条数等于y的列数
plot(x,y) %x,y为同行矩阵时,以x,y对应元素为横、纵坐标绘制曲线,曲线的条数等于矩阵的列数
绘图的外观修改
plot(x,y,外观参数)
可选参数
线型
"-" :实线 ":" :虚线 "-.":点画线 "--":双画线
颜色
"r" : 红色 "g" : 绿色 "b" : 蓝色 "w" : 白色 "k" : 黑色 ······
数据点标记
"*" : 星号 "o" : 圆圈 "s" : 方块 "p" : 五角星 "^" : 朝上三角符号 ······
fplot函数
基本用法
fplot(f,lims,外观参数) %f代表一个函数,通常采用函数句柄的形式。lims为x轴的取值范围,要用二元向量[xmin,xmax]描述,默认值为[-5,5]。可选的外观参数与plot相同 %f的位置可以传入两个参数方程,用以绘制参数方程对应的曲线
5.2.1 绘制图形的辅助操作
图形标注
title函数
title(图形标题,属性名,属性值) %图形标题的参数为字符串(支持LaTeX格式控制符) %color属性:用于设置图形标题文本的颜色,默认为黑 %FontSize属性:用于设置标题文字的字号,默认为11
xlabel函数与ylabel函数
xlabel(x轴说明) ylabel(y轴说明) %说明的参数为字符串(支持LaTeX格式控制符)
text函数与gtext函数
text(x,y,说明) gtext(说明)
legend函数
legand(图例1,图例2,···) %图形右上角对各个曲线的说明
坐标控制
axis函数(坐标轴控制)
axis([xmin,xmax,ymin,ymax,zmin,zmax]) %系统根据6个值确定图形的坐标轴范围 axis equal %纵横坐标轴采用等长刻度 axis square %产生正方形坐标系 axis auto %使用坐标轴的默认设置 axis off %取消坐标轴 axis on %显示坐标轴
grid函数(网格控制)
grid on %显示网格线 grid off %隐藏网格线 grid %在显示与隐藏之间切换
box函数(边框控制)
box on %显示边框 box off %隐藏边框 box %在显示与隐藏之间切换
图形保持
hold函数(图形窗口刷新控制)
hold on %保留绘制的图形 hold off %下次绘制图形时,清空之前的图形 hold %在两个状态之间切换
图形窗口的分割
- 子图:同一图形窗口中的不同坐标系下的图形
subplot函数
subplot(m,n,p) %将图形窗口分成m*n个绘图区,p指定当前活动区序号(区号按行优先编号) %在窗口不冲突的情况下,理论上可以分割成任意大小的图形
5.3.1其他形式的二维图形
其他坐标系下的二维图形
对数坐标图
semilogx(x1,y1,图形参数1,x2,y2,图形参数2,···) %将x换为对数刻度,而y为线性刻度 semilogy(x1,y1,图形参数1,x2,y2,图形参数2,···) %将y换为对数刻度,而x为线性刻度 loglog(x1,y1,图形参数1,x2,y2,图形参数2,···) %x,y全换成对数刻度
极坐标图
polar(theta,rho,图形参数) %thera为极角,rho为极半径,图形参数与plot函数相同
统计图
条形类图形
条形图
bar(x,y,style) %参数y是数据,选项style用于指定分组排列模式,参数x用以存储横坐标 %"grouped" : 簇状分组 %"stacked" : 堆积分组
直方图
hist(y,x) %参数y是数据,x用于指定区间的划分方式 %x为标量时,均分为x块,若x为向量时,x中的每个数为指定分组的中心值,x的个数为分组数 rose(theta,x) %绘制极坐标系下的直方图
面积类图形
扇形统计图
pie(x,explode) %x存储带统计数据,explode控制图块的显示模式
面积统计图
area(x,y,外观参数) %与plot相似,不过将下方数据填充颜色
散点类图形
散点图
scatter(x,y,图形参数,'filled') %参数x,y用于定位数据点,图形参数可以控制图形的线型、颜色、数据点标记 %"filled" 表示填充数据点标记,缺省时,数据点标记为空心
阶梯图
stairs(x,y,图形参数,'filled') %参数x,y用于定位数据点,图形参数可以控制图形的线型、颜色、数据点标记 %"filled" 表示填充数据点标记,缺省时,数据点标记为空心
杆图
stem(x,y,图形参数,'filled') %参数x,y用于定位数据点,图形参数可以控制图形的线型、颜色、数据点标记 %"filled" 表示填充数据点标记,缺省时,数据点标记为空心
矢量图
罗盘图
compass(x,y,u,v) %(x,y)指定矢量起点,(u,v)指定矢量终点
羽毛图
feather(x,y,u,v) %(x,y)指定矢量起点,(u,v)指定矢量终点
箭头图
quiver(x,y,u,v) %(x,y)指定矢量起点,(u,v)指定矢量终点
5.4.1三维曲线
plot3函数
plot3(x1,y1,z1,图形参数1,x2,y2,z2,图形参数2,··· ,xn,yn,zn,图形参数3) %x,y,z为向量时,对应绘制曲线 %x,y,z为矩阵时,先以列向量绘制曲线 %每组x,y,z向量都构成一组数据点的坐标
fplot3函数
fplot3(funx,funy,funz,tlims) %其中,funx、funy、funz代表定义曲线x,y,z坐标的函数,通常采用函数句柄的形式。tlims为参数函数自变量的取值范围,用二元向量[tmin,tmax]描述,默认为[-5,5]
5.5.1三维曲面
平面网格数据的生成
- 利用矩阵运算生成
利用meshgrid函数生成
[X,Y] = meshgrid(x,y); %参数x,y为向量,存储网格点坐标的X,Y为矩阵
绘制三维曲面的函数
mesh函数(绘制网格图)
mesh(x,y,z,c) %其中,x,y为网格坐标矩阵,z为网格点上的高度矩阵,c用于指定在不同高度下的曲面颜色 mesh(z,c) %x,y省略时,z矩阵的第2维下标当作x轴坐标,z矩阵的第1维下标当作y轴坐标 meshc(x,y,z,c) %带等高线的三维网格曲面函数 meshz(x,y,z,c) %带底座的三维网格曲线函数
surf函数(绘制平面图)
surf(x,y,z,c) %其中,x,y为网格坐标矩阵,z为网格点上的高度矩阵,c用于指定在不同高度下的曲面颜色 surf(z,c) %x,y省略时,z矩阵的第2维下标当作x轴坐标,z矩阵的第1维下标当作y轴坐标 surfc(x,y,z,c) %具有等高线的曲面函数 surfl(x,y,z,c) %具有光照效果的曲面函数
标准三维曲面
sphere函数(绘制球面)
[x,y,z] = sphere(n) %n用于指定球面的圆滑程度
cylinder函数
[x,y,z] = cylinder(R,n) %n用于指定曲面的圆滑程度 %R为向量,用于存放等间隔高度上的半径 %R为标量时,生成圆柱面
peaks函数
\(f(x,y)~=~3(1-x^2)e^{-x^2-(y+1)^2}-10(\dfrac x5-x^3-y^5)e^{(-x^2-y^2)}-\dfrac 13 e^{(x+1)^2-y^2}\)
peaks(n) %生成n阶的方阵 peaks(V) %带入到向量或坐标的表达式 peaks(x,y) %带入到向量或坐标的表达式 peaks %默认生成49阶方阵
5.6.1图形的修饰处理
视点处理
方位角:视点与原点连线在xoy上的投影与y轴负方向形成的角度
仰角:视点与原点连线与xoy平面形成的角度
设置视点函数
view(az,el) %az为方位角,le为仰角(以度(°)为单位) view(x,y,z) %x,y,z表示视点在笛卡尔坐标中的位置 view(2) %从2维平面观察图形 view(3) %从3维空间观察图形
色彩处理
颜色的向量表示
[R,G,B] %R 红,G 绿,B 蓝
色图
- 色图矩阵
内建色图
parula %默认色图 jet % hsv % hot %暖色图 cool %冷色图 spring %春季色图 summer %夏季色图 autumn %秋季色图 winter %冬季色图 gray %灰色图 bone % copper %
colormap(cmap) %指定当前图形使用的色图 %可以自定义色图矩阵,也可以调用MATLAB提供的函数来定义色图矩阵
三维图形表面的着色
shading facted %将每个网格片用其高度对应的颜色进行着色,网格线是黑色 shading falt %将每个网格片用其高度对应的颜色进行着色,网格线也用相应的颜色着色 shading interp %在网格片内用颜色插值进行处理
剪裁处理
- 将图形中需要裁剪的部分设置为NaN,在绘制图形时函数值为NaN的部分将不显示出来,从而达到对图形进行裁剪的目的
5.7.1交互式绘图工具
- “绘图”选项卡
图形窗口绘图工具
- “显示绘图工具和停靠图形”
plottools %显示绘图工具和停靠图形 按钮
绘图工具的组成
图形选项板
- 新子图面板
- 变量面板
- 注释面板
- 绘图浏览器
属性编辑器
- 曲线属性编辑器
- 坐标系属性编辑器
- 图形窗口属性编辑器
- 图形窗口菜单和工具栏
专题六 数据分析与多项式计算
6.1.1数据统计分析
求极值元素
max函数
当函数参数为向量时
y = max(X) %返回向量X的最大值,若X中含有复数,则返回模最大值 [y,k] = max(X) %返回向量X的最大值存入y,最大元素的序号存入k,若X中含有复数,则返回模最大值
当函数参数为矩阵时
max(A) %返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值(即返回每列的最大值,并生成一个向量) [Y,U] = max(A) %返回行向量Y和U,Y向量记录每列的最大值,U向量记录每列最大值元素的行号 max(A,[],dim) %dim取1时,函数功能与max(A)一致;dim取2,函数返回列向量(即返回每行的最大值,并生成一个列向量)
min函数
当函数参数为向量时
y = min(X) %返回向量X的最小值,若X中含有复数,则返回模最小值 [y,k] = min(X) %返回向量X的最小值存入y,最小元素的序号存入k,若X中含有复数,则返回模最小值
当函数参数为矩阵时
min(A) %返回一个行向量,向量的第i个元素是矩阵A的第i列上的最小值(即返回每列的最小值,并生成一个向量) [Y,U] = min(A) %返回行向量Y和U,Y向量记录每列的最小值,U向量记录每列最小值元素的行号 min(A,[],dim) %dim取1时,函数功能与min(A)一致;dim取2,函数返回列向量(即返回每行的最小值,并生成一个列向量)
求均值与中值
均值:指算数平均值,即每项数据之和除以数据项数
mean() %求算数平均值
中值:指在数据按递增或递减的顺序排列后,位于中间的一个数或是位于中间的两个数的平均值
median() %求中值
求和与求积
sum() %求和 prod() %求积
累加与累乘积
设\(U = (u_1,u_2,u_3,···,u_n)\)是一个向量,V、W是与U等长的另外两个向量,并且 \(V = ( \sum\limits^1_{i=1}u_i,\sum\limits^2_{i=1}u_i,\sum\limits^3_{i=1}u_i,···,\sum\limits^n_{i=1}u_i)\), \(W = ( \prod\limits^1_{i=1}u_i,\prod\limits^2_{i=1}u_i,\prod\limits^3_{i=1}u_i,···,\prod\limits^n_{i=1}u_i)\),
则分别称V、W为U的累加和向量和累加积向量
cumsum() %累加和向量 cumprod() %累加积向量
求标准差与相关系数
- 标准差
\(S_1 = \sqrt{\dfrac1{N-1}\sum\limits^N_{i=1}(x_i-\bar x)^2}\) 或 \(S_2 = \sqrt{\dfrac1{N}\sum\limits^N_{i=1}(x_i-\bar x)^2}\)
\(S_1\)样本标准差 \(S_2\)总体标准差
std(X) %计算向量X的标准差 std(A) %计算矩阵A的各列的标准差 std(A,flag,dim) %flag取0时,计算样本标准差;flag取1时,计算总体标准差
相关系数
- 相关系数:反应两组数据序列之间的相互关系
- 计算公式: \(r =\dfrac{\sum(x_i-\bar x)(y_i-\bar y)}{\sqrt{\sum(x_i-\bar x)^2\sum(y_i-\bar y)^2}}\)
调用格式
corrcoef(A) %返回由矩阵A所形成的一个相关系数矩阵,其中,第i行第j列的元素表示原矩阵中第i列和第j列的相关系数
排序
sort(X) %对向量X进行升序排列 [Y,I] = sort(A,dim,mode) %dim指明排序对象(对列还是对行)mode取“ascend”,则为升序;取“descend”,则为降序 %输出参数Y是排序后的矩阵,I记录Y元素在A中的位置
6.2.1多项式计算
多项式的表示
在MATLAB中 n 次多项式用一个长度为n+1的行向量来表示
如有n次多项
\(p(x) = a_nx^n+a_{n-1}x^{n-1}+a_{n-2}x^{n-2}+···+a_1x+a_0\)
表示为 \([a_n,a_{n-1},a_{n-2},···,a_1,a_0]\)
注意事项
- 多项式系数向量的顺序为从高到低
- 多项式系数向量包含0次项系数
- 没有的项,其多项式系数向量对应位置应用0补足
多项式的四则运算
- 加减运算:对应向量的加减
乘除运算:
conv(P1,P2) %多项式相乘函数 [Q,r] = deconv(P1,P2) %多项式相除函数,Q返回P1除P2的商式,r返回余式
多项式的求导
p = polyder(P) %求多项式P的导函数向量 p = polyder(P,Q) %求P·Q的导函数 [p,q] = polyder(P,Q) %求P/Q的导函数,导函数的分子存入p,分母存入q
多项式的求值
polyval(p,x) %代数多项式求值 %p为多项式系数向量;x可以是标量、向量或矩阵。若x为标量则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵的每一个元素求多项式的值 polyvalm(p,x) %矩阵多项式求值 %要求x必须为方阵,以方阵为自变量求值
多项式的求根
root(p) %多项式求根函数 ploy(x) %已知根求多项式
6.3.1数据插值
- 数据插值可以根据有限个点的取值状况,合理估算出附近其他点的取值,从而节约大量的实验和测试资源,节省大量的人力、物力和财力。
一维插值
- 函数
Y1 = interp1(X,Y,X1,method) %一维差插值凹函数 %根据X、Y的值,计算函数在X1处的值。X、Y是两个等长的已知向量,分别表示采样点和采样值。X1是一个向量或标量,表示要插值的点。
插值方法(用来填入method中)
linear:线性插值,默认方法
将与插值点靠近的两个数据点用直线连接,然后在直线上选取对应插值点的数据。
nearest:最近点插值
选取最近样本点的值作为插值数据。
pchip:分段3次埃尔米特插值
采用分段三次多项式,除满足插值条件,还需满足在若干节点处相邻段插值函数的一阶导数相等,使得曲线光滑的同时,还具有保形性。
spline:3次样条插值
每个分段内构造一个三次多项式,使其插值函数除满足插值的条件外,还要求在各节点处具有连续的一阶和二阶导数
二维插值
函数
Z1 = interp2(X,Y,Z,X1,Y1,method) %二维插值函数 %其中,X、Y是两个向量,表示两个参数的采样点,Z为采样点对应的函数值。X1、Y1是两个标量或向量,表示要插值的点。
6.4.1曲线拟合
曲线拟合的原理
- 曲线拟合也是一种函数逼近的方法
最小二乘法
通过最小化误差的平方和来寻找数据的最佳函数匹配
设\(p(x)\)是一个多项式函数
且\(\sum\limits^n_{i=1}(p(x_i)-y_i)^2\)的值最小,
则\(p(x)\)为原函数\(y = f(x)\)的逼近函数
函数
P = polyfit(X,Y,m) %多项式拟合函数 [P,S] = polyfit(X,Y,m) [P,S,mu] = polyfit(X,Y,m) %由样本数据X、Y,产生一个m次的多项式P及其在采样点误差数据S,mu为一个二元向量,mu(1)是X的平均值,mu(2)是X的标准差
专题七
7.1.1数值微分与数值积分
数值微分
数值差分与差商
数值差分
- 向前差分:\(\bigtriangleup f(x_0) = f(x_0+h)-f(x_0)\)
- 向后差分:\(\bigtriangledown f(x_0) = f(x_0)-f(x_0-h)\)
- 中心差分:\(\delta f(x_0) = f(x_0+\frac h2)-f(x_0-\frac h2)\)
数值差商
任意函数\(f(x)\)在\(x_0\)点的导数是通过极限定义的
向前差商:\(f'(x_0)\approx \lim\limits_{h\to 0}\dfrac{f(x_0 + h) - f(x_0)}h\)
向后差商:\(f'(x_0)\approx \lim\limits_{h\to 0}\dfrac{f(x_0) - f(x_0-h)}h\)
中心差商:\(f'(x_0)\approx \lim\limits_{h\to 0}\dfrac{f(x_0 + \frac h2) - f(x_0- \frac h2)}h\)
数值微分的实现
dx = diff(x) %计算向量x的一阶向前差分,dx(i) = x(i-1)-x(i),i=1,2,···,n-1 dx = diff(x,n) %计算向量x的n阶向前差分 dx = diff(A,n,dim) %计算矩阵A的n阶差分,dim取1时,按列计算差分,dim取2时,按行计算差分
数值积分
数值积分的基本原理
牛顿—莱布尼茨公式:
\(\large {\int}_a^bf(x)dx = F(b)-F(a)\)
- 将积分区间分为若干子区间,求每个区间的近似积分,其和为定积分的近似值
数值积分的实现(一重积分)
[l,n] = quad(filename,a,b,tol,trace) %基于自适应辛普森方法 [l,n] = quad(filename,a,b,tol,trace) %基于自适应Gauss-Lobatto方法 l = integral(filename,a,b) %基于全局自适应积分方法(可以求无穷积分) [l,err] = quadgk(filename,a,b) %基于自适应高斯—克朗罗德方法(可以求振荡积分,积分上下限可以为复数) l = trapz(x,y) %基于梯形积分法 %filename为被积函数名;a,b为定积分的上限和下限;tol控制积分精度,默认为10e06;trace控制是否展现积分过程 %参数l即定积分的值,n为被积函数调用的次数
多重定积分的数值求解
求二重积分的数值解:\(\int_c^d\int_a^bf(x,y)dxdy\)
l = integral2(filename,a,b,c,d) l = quad2d(filename,a,b,c,d) l = dblquad(filename,a,b,c,d)
求三重积分的数值解:\(\int_e^f\int_c^d\int_a^bf(x,y,z)dxdydz\)
l = integral3(filename,a,b,c,d,e,f) l = triplequad(filename,a,b,c,d,e,f,tol)
7.2.1线性方程组求解
线性方程组的直接解法
利用左除运算符的直接解法(列主元消去法)
不必求逆后,再用乘法,可以直接用左除运算
利用矩阵分解求线性方程组
LU分解(分解为上三角和下三角矩阵)
[L,U] = lu(A) %产生一个上三角阵U和一个变换形式的下三角矩阵L,使之满足A=LU。A必须为方阵 [L,U,P] = lu(A) %产生一个上三角阵U和一个下三角矩阵L以及一个置换矩阵P,使之满足PA=LU。A必须为方阵
\(x = U/(L/b)\)或\(x = U/(L/P*b)\)
- QR分解
- Cholesky分解
迭代法
雅可比迭代法
\( D = \begin{bmatrix}a_{11}& & & \& a_{22} & & \& & \ddots & \& & & a_{nn} \\end{bmatrix} \),\(L = -\begin{bmatrix} 0 & & & \ a_{21} & 0 & & \ \vdots & \ddots & \ddots & \ a_{n1} & \dots & a_{n,n-1} & 0 \ \end{bmatrix}\),\(U = \begin{bmatrix} 0 & a_{12} & \dots & a_{1n} \ & 0 & \ddots & \vdots \ & & \ddots & a_{n-1,n} \ & & & 0 \ \end{bmatrix}\)
求解公式为\(x = D^{-1}(L+U)x+D^{-1}b\)
对应的迭代公式为\(x^{[k+1]} = D^{-1}(L+U)x^{[k]}+D^{-1}b\)
高斯—赛德尔迭代法
迭代公式\(x^{[k+1]} = (D-L)^{-1}Ux^{[k]} + (D-L)^{-1}b \)
7.3.1非线性方程求解与函数极值计算
非线性方程组求解
单变量非线性方程求解
x = fzero(filename,x0) %filename为待求根方程左端的函数表达式,x0为初始值
- 非线性方程组的求解
x = fsolve(filename,x0,option) %x为返回的近似值,filename为待求根方程左端的函数表达式,x0是初值,option用于设置优化工具箱的优化参数,可以调用optimset函数完成
函数极值的计算
无约束最优化问题
一般描述:
\(\min\limits_x f(x)~~~x = [x_1,x_2,···,x_n]^T\)
- 求最小值的函数:
[xmin,fmin] = fminbnd(filename,x1,x2,option) [xmin,fmin] = fminsearch(filename,x0,option) [xmin,fmin] = fminunc(filename,x0,option) %filename是定义的目标函数。x1、x2表示被研究区间的左、右边界。x0是一个向量,表示极值点的初值。option为优化参数,可以通过optimset函数来设置
有约束最优化问题
一般描述
\(\min\limits_{x~s.t.G(x)<0}f(x)~~~x = [x_1,x_2,···,x_n]\)
约束条件的细化
- 线性不等式约束
- 线性等式约束
- 非线性不等式约束
- 非线性等式约束
- X的上界与下界
函数:
[xmin,fmin] = fmincon(filename,x0,A,b,Aeq,beq,lbnd,Ubnd,NonF,option) %filename是定义的目标函数,x0是一个向量,表示极值点的初值。option为优化参数,可以通过optimset函数来设置 %其余参数为约束条件,若约束条件不存在,则填入空矩阵
7.4.1常微分方程数值求解
一般概念
概念
常微分方程的初值问题就是寻找函数\(y(t)\)使之满足如下方程:
\(y' = f(t,y),t_0 \in [t_0,b] ~~~~\)
\(y(t_0) = y\)
数值解法,就是求\(y(t)\)在离散结点\(t_0\)处的函数近似值方法,\(y_n=y(x_n)\)
分类
单步法(像只与前一个参量相关的递归)
在计算\(y_{n+1}\)时只用到前一步的\(y_n\),因此在有了初值之后就可以逐步向下计算,代表:龙格—库塔法
多步法
在计算\(y_{n+1}\)时,除了用到前一步的\(y_n\)之外,还要用到\(y_{n-p}\)的值,代表:亚当斯法
求解函数
[t,y] = solver(filename,tspan,y0,option) %t和y分别给出时间向量和相应的数值解;solver为求常微分方程数值解的函数;filename是定义f(t,y)的函数名,该函数必须返回一个列向量;tspan形式为[t0,tf],表示求解区间;y0是初始状态向量;option是可选参数,用于设置求解属性 %常微分方程求解函数存在统一命名格式 %······