MATLAB学习笔记

画图

画图

二维作图

plot()

其中x有个linspace的指令:

用法:linspace(x1,x2,N):x1起始值,x2终止值,N元素数。

功能:linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。其中x1、x2、N分别为起始值、中止值、元素个数。若缺省N,默认点数为100。

plot(x,y):x,y可以是向量,也可以是矩阵,还可以是两个函数
含选项的plot(x,y,选项):选项包括线型,颜色,数据点标记

含选项的plot函数 Matlab提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号。这些选项如表所示: 线型 颜色 标记符号 - 实线 b蓝色 . 点 s 方块 : 虚线 g绿色 o 圆圈 d 菱形 -. 点划线 r红色 × 叉号 ∨朝下三角符号 -- 双划线 c青色 + 加号 ∧朝上三角符号 m品红 * 星号 <朝左三角符号 y黄色 >朝右三角符号 k黑色 p 五角星 w白色 h 六角星 例 用不同的线型和颜色在同一坐标内绘制曲线 及其包络线。
————————————————
版权声明:本文为CSDN博主「飞翔南」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21911231/article/details/51693166

fplot()函数

基本用法

  1. fplot(f,lims,选项)f代表一个函数,通常用函数句柄的形式;lims为x轴取值范围,用二元向量[xmin,xmax]表示,默认为[-5,5]。选项与plot相同。
    fplot(@(x)sin(x),[0,10],'-r')

  1. fplot(fx,fy,)
    fplot(@(t)t.sin(t),@(t)t.cos(t),[0,10*pi],'-r')

polar(theta,rho,选项)极坐标图

三维作图

在二维曲线作图里边我们主要使用的函数是plot和fplot函数,而在三维曲线作图里面我们使用的是plot3fplot3函数,其不但长得像,功能也是差不多的,只不过是做了扩展而已。

三维作图

在 MATLAB 中,进行三维图形绘制时,常常需要首先创建三维网格,也就是先创建 平面图的坐标系。在 MATLAB 中,常用 meshgrid()函数生成网格数据,其调用格式如下。
[X,Y]=meshgrid(x,y):用于生成向量 x 和 y 的网格数据,即变换为矩阵数据 X 和 Y, 矩阵 X 中的行向量为向量 x,矩阵 Y 的列向量为向量 y。
[X,Y]=meshgrid(x):生成向量 x 的网格数据,函数等同[X,Y]=meshgrid(x,x)
[X,Y,Z]=meshgrid(x,y,z) :生成向量 x、y、z 的三维网格数据,生成的数据 X 和 Y 可分别表示三维绘图中的 x 和 y 坐标。

三维网格图形是指在三维空间内连接相邻的数据点,形成网格。在MATLAB中绘制三维网格图的函数主要有mesh()函数、meshc()函数和meshz()函数。其中,mesh()函数最常 用,其调用格式如下:
mesh(x,y,z):绘制三维网格图,x、y、z 分别表示三维网格图形在 x 轴、y 轴和 z 轴 的坐标,图形的颜色由矩阵 z 决定。
mesh(Z):绘制三维网格图,分别以矩阵 Z 的列下标、行下标作为三维网格图的 x 轴、y 轴的坐标,图形的颜色由矩阵 Z 决定。
mesh(...,C):输入参数C用于控制绘制的三维网格图的颜色。
mesh(...,'PropertyName',PropertyValue,...):设置三维网格图的指定属性的属性值。

  • 函数 meshc()可绘制带有等值线的三维网格图,其调用格式与函数 mesh()基本相同, 但函数 meshc()不支持对图形网格线或等高线指定属性的设置。
  • 函数 meshz()可绘制带有图形底边的三维网格图,其调用格式与函数 mesh()基本相同, 但函数 meshz()不支持对图形网格线指定属性的设置。
  • 另外,函数ezmesh()ezmeshc()ezmeshz()可根据函数表达式直接绘制相应的三维网格图。

由于网格线是不透明的,绘制的三维网格图有时只能显示前面的图形部分,而后面的 部分可能被网格线遮住了,没有显示出来。 MATLAB中提供了命令 hidden 用于观察图形后面隐藏的网格,hidden 命令的调用格式如下:
hidden on:设置网格隐藏部分不可见,默认情况下为此状态。
hidden off:设置网格的隐藏部分可见。
hidden:该命令用于切换网格的隐藏部分是否可见。
————————————————
版权声明:本文为CSDN博主「乐清sss」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sunyueqinghit/article/details/81905509

三维表面图的绘制

三维表面图也可以用来表示三维空间内数据的变化规律,与之前讲述的三维网络图的 不同之处在于对网格的区域填充了不同的色彩。在 MATLAB 中绘制三维表面图的函数为surf()函数,其调用格式如下:

surf(Z):绘制数据 Z 的三维表面图,分别以矩阵 Z 的列下标、行下标作为三维网格图的 x 轴、y 轴的坐标,图形的颜色由矩阵 Z 决定。
surf(X, Y, Z):绘制三维表面图,X、Y、Z 分别表示三维网格图形在 x 轴、y 轴和 z 轴的坐标,图形的颜色由矩阵 Z 决定。
surf(X, Y, Z, C):绘制三维表面图,输入参数 C 用于控制绘制的三维表面图的颜色。
surf(..., 'PropertyName', PropertyValue):绘制三维表面图,设置相应属性的属性值。

  • 函数 surfc()用于绘制带等值线的三维表面图,其调用格式同函数 surf()基本相同
  • 函数 surfl()可用于绘制带光照模式的三维表面图,与函数 surf()surfc()不同的调用格式如下:

surfl(...,'light'):以光照对象 light 生成一个带颜色、带光照的曲面。
surfl(...,'cdata'):输入参数 cdata 设置曲面颜色数据,使曲面成为可反光的曲面。
surfl(...,s):输入参数 s 为一个二维向量[azimuth,elevation],或者三维向量[x,y,z],用于指定光源方向,默认情况下光源方位从当前视角开始,逆时针 45°。
————————————————
版权声明:本文为CSDN博主「乐清sss」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sunyueqinghit/article/details/81905509


绘图的辅助操作


  1. 图形标注

  • titll(图形标题)用latex格式控制符{控制部分用大括号括起来}
    可以设置fontsize和color

  • xlabel()

  • ylabel()

  • text(x,y,说明)

  • gtext(说明)

  • legend(图例1,图例2,……)顺序要一一对应

  • subplot(m,n,p)图形分隔

  1. 坐标控制

  • axis([xmin,xmax,ymin,ymax,zmin,zmax])坐标轴
    axis equal:横纵等长
    axis square:产生正方形坐标系
    axis auto:使用默认设置
    axis off:取消坐标轴
    axis on:显示坐标轴
  • grid网格线
    grid on
    grid off
    grid

  • box
    box on
    box off
    box

  • 图形保持
    hold on
    hold off

hold on 和hold off,是相对使用的

前者的意思是,你在当前图的轴(坐标系)中画了一幅图,再画另一幅图时,原来的图还在,与新图共存,都看得到
后者表达的是,你在当前图的轴(坐标系)中画了一幅图,此时,状态是hold off,则再画另一幅图时,原来的图就看不到了,在轴上绘制的是新图,原图被替换了

图形修饰处理

视点处理

方位角,仰角

view(az,el) az为方位角默认-37.5°,el为仰角,默认30°

色彩处理colormap


数据统计分析

求最大元素与最小元素

max():求向量或矩阵的最大元素
min():求向量或矩阵的最小元素

参数为向量有两种调用格式:

  1. y=max(x):返回向量x的最大值存入y,如果x中包含复数元素,则按模取最大值。
  2. [y,k]=max(x):返回向量x的最大值存入y,最大值元素的序号存入k,如果x中包含复数元素,则按模取最大值。

如,求向量x的最大元素,其中x=[-43,72,9,16,23,47]

y=max()
y=72
[y,k]=max(x)
y=72
k=2

参数为矩阵时,函数有三种调用格式:

  1. max(A):返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值
  2. [Y,U]=max(A):返回行向量Y和U,Y记录A的每列最大值,U记录每列最大值的行号
  3. max(A,[],dim):dim取1是,该函数的功能和max(A)完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上最大值

提问:

  • 用什么方法指调用一次max函数就能求得整个矩阵的最大值?
  • 将矩阵按行堆叠,取最大值:max(A(:))

求平均值和中值

mean():求算数平均值
median():求中值
调用方式与max、min基本相同

求和与求积

sum():
prod():求积函数

累加和与累乘积

cumsum():
cumprod():求得是阶乘向量

求标准差与相关系数

std():计算标准差

标准差计算公式:

调用格式:

  1. std(x):计算向量x的标准差。
  2. std(A):计算矩阵A的各列的标准差
  3. std(A,flag,dim):flag取0或1,flag=0时,按S1所列公式计算样本标准差;flag=1时,按S2所列公式计算标准差。默认情况下,flag=0,dim=1

dim是dimension的意思,维度,dim=1是列,dim=2是行

corrcoef:相关系数函数

调用格式
[R = corrcoef(A)] %返回由矩阵A所形成的一个相关系数矩阵,其中第i行第i列的元素表示原矩阵A中第i列和第j列元素
[R = corrcoef(A,B)] %输入参数为两列

排序

sort()
sort(A,dim,'ascend/descned')

多项式计算

多项式的表示

  1. 多项式稀疏向量的顺序是从高到低
  2. 多项式稀疏向量包含0次项稀疏,所以其长度为多项式最高次加1
  3. 有的项没有,需要用0补足

多项式的四则运算

  1. 加减运算
  2. 乘法conv(p1,p2)
    p1,p2是多项式系数向量
  3. 除法[Q,r]=deconv(p1,p2)
    其中Q为p1除以p2的商式,r返回p1除以p2的余式,仍是系数向量

多项式的求导

函数polyder()

  1. p=polyder(P):求多项式p的导函数
  2. p=polyder(P,Q):P·Q的导函数
  3. [p,q]=polyder(P,Q):求P/Q的导函数,导函数分子存入p,分母存入q

多项式的求值

代数多项式求值:polyval()
矩阵多项式求值:polyvalm() m代表matrix

多项式的求根

函数roots()

若已知多项式的全部根,可以用poly函数p=poly(x)建立起该多项式


数值微分、积分

向前差分
向后差分
中心差分

数值微分的实现

向前差分函数:diff(相当于是求导)

  • dx=diff(x):计算向前差分,dx(i)=x(i+1)-x(i),
  • dx=diff(x,n):计算x的n阶向前差分,例如diff(x,2)=diff(diff(x))
  • dx=diff(A,n,dim):计算矩阵A的差分,dim=1按列,dim=2按行

找到原函数,用牛顿莱布尼茨公式

数值积分的实现
将[a,b]分成n个子区间,变成下面问题求解:

  1. 自适应辛普森法

[l,n]=quad(filename,a,b,tol,trace)

  1. 自适应Gauss-Lobatto方法

[l,n]=quadl(filename,a,b,tol,trace)
其中filename是被积函数名;a,b分别是定积分下限和上限,积分上下限必须是有限的,不能为无穷大;tol用来控制积分精度,默认取;trace控制是否展现积分过程,若取非零则展现过程,若取0则不展现;;返回参数l即定积分的值,n为被积函数调用次数

  1. 自适应高斯-克朗罗德方法:`[l,err]=quadgk(filename,a,b)

err返回近似误差范围,积分上下限可以是无穷大(-Inf或Inf),也可以是复数。

  1. 基于梯形积分法
  2. I=trapz(x,y):其中向量x,y对应函数关系式y=f(x)

积分近似值为
可以用以下语句实现:sum(diff(x)*(y(1:end-1)+y(2:end))/2)

int与quad区别
int的积分可以是定积分,也可以是不定积分(即有没有积分上下限都可以积)可以得到解析的解,比如你对x2积分,得到的结果是1/3*x3,这是通过解析的方法来解的。如果int(x^2,x,1,2)得到的结果是7/3

quad是数值积分,它只能是定积分(就是有积分上下限的积分),它是通过simpson数值积分来求得的(并不是通过解析的方法得到解析解,再将上下限代入,而是用小梯形的面积求和得到的)。如果f=inline('x.^2');quad(f,1,2)得到的结果是2.333333,这个数并不是7/3

线性方程组求解

直接法
已矩阵初等变换为基础,可以求得方程组精确解;占用内存大、程序实现复杂;一般适合求解低阶稠密线性方程组

(1) 利用左除运算符
Ax=b-->x=A\b(若矩阵A是奇异的或接近奇异的,MATLAB会警告)不建议用逆矩阵的方法
(2)利用矩阵分解

  • LU分解
    将一个n阶矩阵表示为一个下三角矩阵和一个上三角矩阵的乘积
    A=LU可以写成LUx=b

[L,U]=lu(A):注意A必须是方阵,产生上三角阵U,和一个变换形式的下三角阵L
[L,U,P]=lu(A):产生一个上三角阵U和一个下三角阵L,还有一个置换矩阵P,使之PA=LU。

L=-tril(A,k):k=0指主对角线,k>0指主对角线以上的第k条对角线;k<0指主对角线以下的第k条线
U=-triu(A,k)

矩阵部分内容详情

  • QR分解
  • Cholesky分解
  • 高斯消去法
  • 列主元消去法
  • 矩阵的三角分解法

迭代法
从给定初始值逐步毕竟精确解,占用内存小,程序设计简单;适用于求解大型稀疏矩阵线性方程组;要考虑算法的收敛性。

  • 雅克比迭代法
    A=D-L-U

怎么算线性方程组,我确实不太会。。哭了。。

你可能感兴趣的:(MATLAB学习笔记)