MATLAB基础

常用语句

直接赋值不用声明
输入变量名直接显示输出

命令

clear 清除所有变量
clc 清屏
; 分号抑制输出,但执行命令
doc 函数名 文档
help 函数名 简明文档
函数名( 左括号 帮助提示

常量

pi 内置常量
ans 默认赋值变量
i j虚数
NaN 代表非数

函数

abs 绝对值 求绝对值、复数的模、字符的ASCII值
sqrt 计算平方根(可为复数)
^ 平方
exp() 指数函数
角度函数默认为弧度制,如果用角度为单位则函数名加上d sin(pi/2) 或sind(90)
round 四舍五入
ceil 向上取整
floor 向下取整
fix 取整数
rem(x,10) x除以10取余
isprime(x) 判断是否为素数
find() 返回非0的数
who 只显示变量名称
whos 显示变量更多信息
power() 立方根

大多数数学运算符有符号表示法和公式表示法

逻辑关系
或(|) 与(&) 非(~)为矩阵、数组运算
或(||) 与(&&) 仅对标量运算

数据类型

matlab中一共有8种整型类型,每一种类型都是一个转换函数

int8(8) 
uint(8)

系统默认双精度类型

single() 转换为单精度
double() 转换为双精度

查看数据类型

class(数据类型/数值)

复数中的实部和虚部默认为双精度类型

real() 求数的实部
imag() 求数的虚部

# 输出
format

数组、向量-一维矩阵

数组,行用空格和逗号,列用分号

冒号等间距(创建等间距数组)x=1:3
创建其他等间距数组x=20:2:26
创建数组可以不用括号(), 可以用括号(), 可以用[]

数组函数

  • linspace
linspace(首元素值,尾元素值,元素个数)
x=linspace(0,1,5)
  • max
取最大值 xmax=max(x)
[xMax,idx]=max(x) 可返回向量中的最大值和索引
  • round
四舍五入
  • sqrt
    可以整个向量中的元素操作

  • size

显示矩阵和数组的大小,行数和列数,单变量size只能获得一个输出变量
  • repmat
    重复数组
B=repmat(A,3,2) A可以是标量、数组和矩阵,重复32

数组操作

matlab数组是从1开始的

  • 转置符号' x=(5:2:9)'
  • 索引x=v(3) 向量的第3个元素
  • 标量+数组 数组所有元素全加r=v1+1
  • 数组+数组 必须大小相同
  • 标量*、/数组
  • 标量 比较 [5 10 15]>12 逐个元素进行比较
  • 数组比较数组 大小必须相同 vt=(v1>5)&(v1>v2)
  • 逻辑索引v=v1(v1<4) 返回小于4的数
 s=sample(v1<4)
 试着创建一个名为 s 的变量,其中包含 sample 中与 v1 中小于 4 的元素所在位置对应的元素。

矩阵

矩阵函数

- zeros

生成全0矩阵
x=zeros(6,3)
zeros(m)0方阵
zeros(m,n)0mXn矩阵
zeros(size(A)) 创建与A形状相同的矩阵

任意区间随机分布整数
fix(a+(b-a+1)*x) fix表示取整数

- ones

全部生成1

- eye
创建单位矩阵
奇异矩阵,行列式为0,无穷解
非奇异矩阵,行列式不为0,唯一解

- size

显示矩阵和数组的大小,行数和列数,单变量size只能获得一个输出变量
获得多个输出 [xrow,xcol]=size(x) 得到两个输出变量

- rand

创建0,1区间均匀分布的随机矩阵
创建方阵
x=rand(2) 生成一个2X2的随机数矩阵
创建非方阵
x=rand(2,3) 生成2X3

- randi()

创建矩阵 doc randi

- randn
创建均值为0,方差为1的标准正态分布随机矩阵
μ + σ x {\mu}+{\sigma}x μ+σx表示任意均值和方差 σ 2 {\sigma}^2 σ2为标准差

  • A(:,:,1)
    表示三个维度

- magic()

magic(n) nXn的矩阵,元素从1到n^2, 随机赋值

- vander
创建范德蒙矩阵,注意顺序问题。matlab与书中不太一样

- hilb
创建希尔伯特矩阵

- pascal
创建帕斯卡矩阵,用到的二项式定理展开后的系数

- diag
diag(A)提取矩阵A主对角线元素,组成一个列向量
diag(A,k)提取矩阵A第k条对角线(主对角为第0条,右上为第1条,左下为第2条)元素,组成一个列向量
diag(v)以向量V为主对角元素创建一个对角矩阵
diag(v,k)以向量V为第k条对角元素创建一个对角矩阵

- triu
创建上三角矩阵
triu(A)提取主对角线以上的元素
triu(A,k)提取第k条主对角线以上的元素

- tril
创建下三角矩阵

- reshape
改变矩阵形状

reshape(x,3,4) 改变形状,但是不改变元素的顺序,注意是按列的顺序

A(:) 直接将矩阵变成一个列向量

- max
不同于数组、向量
max(A) 返回一个行向量,行向量中的每个元素i是矩阵A的第i列上的最大值
[y,u]=max(A) y,u为行向量,y向量记录每列的最大值,u向量记录每列最大值元素的行号
max(A,[],dim) dim=1或2,1时,与max(A)完全相同,2时,返回一个列向量,列向量中的第i个元素是矩阵A第i行上的最大值

- cat
cat(dim,A,B…) dim=1按列串联,=2按行串联

- mean
平均值,用法与max相似
- median
中值,用法与max相似

- sum
求和

- prod
求积

- cumsum
累加和,向量中的每个元素是另一个向量前i个元素的累加和

- cumprod
累乘积,向量中的每个元素是另一个向量前i个元素的累乘积

- std
标准差计算数据偏离平均数的距离的平均值
样本标准差;总体标准差: 样本标准差和总体标准差的公式有细微差别
std(x) 计算向量标准差
std(A) 计算矩阵A的各列的标准差
std(A,flag,dim) flag=0为样本标准差,flag=1为总体表标准差 默认flag=0,dim=1(=1为按列计算,=2为按行计算)

- corrcoef
相关系数
corrcoef(A) 返回由矩阵A所形成的一个相关系数矩阵,其中第i行和第j列表示原矩阵A中第i行和第j列的相关系数(需要看公式),返回一个对称矩阵
corrcoef(x,y) x和y是向量,求两向量之间的相关系数

- sort
sort(x) 对向量进行升序排列
[x,y]=sort(A,dim,mode) 对矩阵按行或列,或升序或降序排列,Y为返回后的排序矩阵,I为个元素在矩阵(各行或列)中的位置

- inv
矩阵求逆inv(A)

- det
计算行列式

- compan
创建多项式系数的伴随矩阵

- cond
计算条件数,1为数值稳定,Inf为奇异矩阵
矩阵的范数与矩阵逆的范数的乘积,越接近1越好

- rank
返回矩阵的秩

- trace
矩阵的迹

- norm
计算范数
注意向量的范数和矩阵的范数不同

- rot90
rot90(A,k) 逆时针旋转90度的k倍

- fliplr
矩阵左右翻转

- flipud
矩阵上下翻转

- eig
计算特征值,返回向量
E=eig(A) 构成列向量
[x,D]=eig(A) D为特征值为主对角线构建,X为特征向量构成的矩阵
几何意义:
A相当于变换矩阵,特征向量相当于原矩阵,特征值为伸缩因子
eigshow函数

- kron
计算张量积

- rref([A b])
判断方程是否有精确解

张量积

  • kron()

在这里插入图片描述
## 范数
注意向量范数和矩阵范数定义的不同

norm(v,1) 1范数
norm(v) 2范数
norm(v,inf) 无穷范数
vecnorm 计算每行每列的范数

矩阵操作

  • 索引
单个索引
x=A(5,7) 57列的数据
x=v(3) 向量的第3个元素
x=A(8) 按列数,第8个元素

end 表示最后一行和一列 
x=A(end,2) 最后一行第2列
x=A(end-1,end-2) 可以做运算

索引多个元素,用冒号
x=A(2,:)2行所有元素
x=A(1:3,:)13行,所有列元素
volumes=data(:,end-1:2nd)

单个索引与多个索引的相互转换
D=sub2ind(S,I,J) 将矩阵中指定元素的行、列下标转换成存储的序号 
A=[1:3;4:6] 创建矩阵
D=sub2ind(size(A),[1,2;2,2],[1,1;3,2]) size(A)得到行数和列数,返回一个向量
[1,2;2,2],[1,1;3,2]每个元素分别对应,组成一个矩阵的索引,如11  2,1[I,J]=ind2sub(S,D) 将矩阵元素的序号转换成对应的下标 
[I,J]=ind2sub([3,3],[1,3,5]) 表示取一个3X3矩阵中索引序号为1,3,5的元素,I为索引到的,所有元素的行索引组成的向量,J同理
  • 相加
按元素相加
矩阵和矩阵必须大小相同
矩阵+标量,按元素加标量
  • 相乘
 - 要符合矩阵乘法准则
.* 按元素相乘,允许大小相同矩阵相乘 

- 串联、拼接

A=[a,a] 行串联
A=[a;a] 列串联

使用cat函数进行串联,见上面矩阵函数

- 转置
见上面转置函数

' 共轭转置
.' 转置不改变符号

- 改变矩阵形状

reshape(x,3,4) 改变形状,但是不改变元素的顺序,注意是按列的顺序

A(:) 直接将矩阵变成一个列向量
  • 比较(关系运算)
    矩阵与矩阵比较,表示对应元素比较
    矩阵与标量比较,表示标量与对应矩阵元素比较

  • 逻辑运算
    矩阵与矩阵比较,表示对应元素逻辑运算
    矩阵与标量比较,表示标量与对应矩阵元素逻辑运算

- 矩阵旋转
rot90(A,k) 逆时针旋转90度的k倍

- 矩阵翻转
第一(行)列与最后一(行)列翻转,第二(行)列与倒数第二(行)列互换
fliolr(A)左右翻转
fllipud(A)上下翻转

元胞数组

存储不同的数据类型
元胞数组不能进行加减乘除运算

  • 创建
直接赋值
A={数字,矩阵;向量,字符串}22列的元胞数组(矩阵)
A={} 表示空元胞数组

利用函数创建
A = cell(1,3);
A{1} = 'a';
A{2} = [1,2,3];
A{3} = [4,5;8,9];

多维度元胞数组
emptycell=cell(3,4,2)
emptycelll(:,:,1)
emptycelll(:,:,2)
  • 索引
A(1,2) 仅索引到元胞元素
A{1,2} 索引到元胞元素的内容
  • 拼接
[A,B] A,B均为元胞数组
  • 删减
A(1)=[] 删除元胞元素
A{2}=[] 改变元胞元素为空,不删减

结构矩阵和单元矩阵

结构矩阵

数据类型不同,每个数据为一个成员
创建结构体数组

结构体数组变量=struct
直接创建结构
结构矩阵元素.成员名=表达式

结构矩阵中每个元素都是一个结构,每个结构都有多个成员

a(1).x1=10;a(1).x2='li';a(1).x3=[1,2;3,4];
a(2).x1=20;a(2).x2='zhang';a(2).x3=[4,5;6,7];

结构体(结构矩阵)的嵌套

直接创建即可
s(1).n(2).a = 2*ones(3);
s(1).n(2).b = 2*eye(4);
s(1).n(2).c = 2*magic(5);

s(2).n(1).a = '1a';
s(2).n(2).a = '2a';
s(2).n(1).b = '1b';
s(2).n(2).b = '2b';
s(2).n(1).c = '1c';
s(2).n(2).c = '2c';

结构体(矩阵)的访问

可以逐个访问

可以多个访问
数组中的每个结构体都必须具有相同的字段数和相同的字段名称,但字段的类型和大小可以不同
s(1).f = 1;
s(2).f = 'two';
s(3).f = 3 * ones(3);
访问
s(1:3).f
分配给数组中的单个变量
[v1, v2, v3] = s.f;
分配给元胞数组
c = {s.f};
当字段具有相同数据类型可以形成矩阵
nums(1).f = 1;
nums(2).f = 2;
nums(3).f = 3;

allNums = [nums.f]

结构体的创建

上述方法均使用的是直接创建法,还可以使用struct函数创建

s=struct 创建不含任何字段的标量结构体

s=struct(field,value) field相当于字段(结构体数组中的同名字段),value表示结构体数组中每个结构体元素field字段对应的值
field = 'f';
value = {'some text';
         [10, 20, 30];
         magic(5)};
s = struct(field,value)
表示 s(1).f='some text' s(2).f=[10,20,30] s(3).f=magic(5)

s=struct(field1,value1,field2,value2...)
见文档中的例子,value的元素的最大个数,表示最终结构体数组中包含的结构体元素的个数,如果某个字段对应的value不等于最大个数,则补齐为相同元素

单元矩阵(不等于元胞数组)

把不同数据类型放在一个变量中,单元矩阵的各个元素(成员)就是不同的数据
(相当于)结构矩阵的每个元素都是一个单元矩阵,但是不能这样定义
单元矩阵用{}创建

b={10,'li',[1,2;3,4];20,'张',[4,5;6,7]}
  • num2cell
    将数据矩阵转换为单元矩阵

稀疏矩阵-没看完

矩阵的存储方式:
完全存储方式,按列将所有元素依次存储。
稀疏存储方式:只存储矩阵的非零元素的值即其位置,即行号和列号,也是按列存储
完全矩阵和稀疏矩阵的存储方式

A=sparse(s) 将矩阵S转换为稀疏存储方式
S=full(A) 将矩阵转换为完全存储方式

直接建立稀疏矩阵

sparse(m,n) 生成mXn的所有元素都是零的稀疏矩阵
sparse(u,v,S) u,v,S是三个等长的向量,S是要建立的稀疏矩阵的非零元素,u(i),v(i)分别为S(i)的行下标和列下标 

字符串

字符串函数-char类型字符数组

  • eval
    字符串转换为值
t=pi
m='[t,sint(t),cos(t)]' 这是一个字符串
y=eval(m) 将字符串中的值转换为对应的数据
  • abs
    字符串转换为值
s='matlab'
y=abs(s) 输出字符串中每个元素对应的ASCII
  • char
    数字转换为字符
char(y+32)
  • str2double
    数字字符转数字

  • lower
    大写转小写

  • upper
    小写转大写

  • strcmp(s1,s2)
    比较两个字符串是否相等,返回的是单值

  • strncmp(s1,s2,n)
    比较两个字符串前n个字符是否相等,返回的是单值

  • strcmpi(s1,s2)
    在忽略大小的的前提下,比较两个字符串是否相等,返回的是单值

  • strncmpi(s1,s2,n)
    在忽略大小的的前提下,比较两个字符串前n个字符是否相等,返回的是单值

  • findstr(s1,s2)
    返回短字符串在长字符串中的开始位置

  • strrep(s1,s2,s3)
    将字符串中的所有子字符串s2替换为s3

  • strsplit
    分割字符数组,strsplit('1,2,3',',')以逗号分割

字符串操作-char类型字符数组

字符数组——旧版本
字符数组使用单引号 是char类型的字符数组

- 创建
seq='abcde' 这是char类型数组,组成一个向量(数组就是向量)
这相当于一个行向量(一维数组)

  • 索引
    字符数组(单个字符串)索引seq(4)

- 串联(不等于下面的字符串矩阵)
使用方括号串联seq2=[seq 'abcedfg']直接返回一个字符串(字符数组)
不能用加号+的方式串联
拼接成一个字符串还可以使用strjion函数

- 字符串(字符数组)矩阵
由多个字符串(字符数组向量)组成

ch=['abcd';'1234']

这里要求必须每行的字符串的大小必须相等,否则需要使用元胞数组

  • 倒序排列
ch='abcdefgh'
ch2=ch(end:-1:1)
  • 小写变大写
找到小写字母
k=find(ch>='a'&ch<='z') k为找到的所有满足条件的向量的索引序号组成的数组
小写转换为大写
ch(k)=ch(k)-'a'+'A'
  • 比较
    按每个元素的ASCII比较,返回的是01数值向量
    按函数比较,见上面的字符串函数

  • 查找与替换
    见上面的字符串函数

字符串——新增版本

- 创建

t="hello world" 双引号直接赋值 两个双引号表示内部双引号"" 这是string类型

单引号创建为char类型数组,数组中的元素个数等于字符个数1Xn。字符数组中的元素能够修改,即索引
双引号创建为string类型数据,一个双引号表示一个对象1X1,字符串不能被索引,为常量

- 拼接

f = 71;
c = (f-32)/1.8;
tempText = "Temperature is " + c + "C" 直接使用加号串联

或者使用a.join(b) a,b为字符串,拼接成一个字符串

- 串联

[a,"hello"]
返回的是一个两元素的字符串数组

- 分割
string类型字符串分割a.split(",")以逗号分割字符串a

字符串数组创建
相当于上述的串联

A = ["a","bb","ccc"; "dddd","eeeeee","fffffff"]

- 字符串矩阵
不需要考虑元素的长度

A = ["a","bb","ccc"; "dddd","eeeeee","fffffff"]

- 字符串长度

strlength(A) 查看每个元素字符串的长度

- disp
输出

disp('hello world')

字典

字典数组结构中,键对值,key-value

  • 创建
a=containers.Map
key的类型为字符
value的类型为任意类型
  • 赋值
a('apple')='苹果'
  • 索引
a.keys 返回所有的键值
a.values 返回所有的值

b=a表示指向同一个字典而不是a字典的副本

文件操作

文件函数

  • 数据文件

.mat文件 保存变量的文件

save 将工作区指定变量保存到称为MAT文件中`save foo x` foo为文件名,x为数据 data则为所有数据
save file.mat 保存所有数据
load 加载文件中的变量`load foo` 或者`load file.mat`

导入文件
右键import,创建,可以导入电子表格、图像和文本等

  • 普通文件
    fid=fopen(filename,permission) fid文件识别号,打开失败则返回-1,filename为待操作文件名,perssion为打开文件的允许方式
    r 以读方式打开,文件不存在则返回-1
    w 以写方式打开,不存在则创建,存在则覆盖
    a 在末尾添加
    r+ 以读写方式打开
    status=fclose(fid) fid=all则关闭所有打开的文件,status=0为成功,-1不成功

  • 文本文件
    [A,count]=fscanf(fid,fmt,size) fscanf读取文件
    count=fprintf(fid,fmt,A) fprinf读取文件
    A为存放读写的数据,count返回成功读写的数据的元素个数,fid为文件表示号,fmt以控制读取的数据格式,size指定A的大小

fmt:

%d:整数
%f:小数形式的实数
%e:科学技术法形式的实数
%c:字符
%s:字符串
与c语言控制相似

size

n:指定读取n个数据
inf:读取所有数据
[m,n]:指定读取mXn个数据, 数据按列存放的矩阵A

利用循环使用fscanf读取每行数据

  • 二进制文件
    [A,count]=fread(fid,size,precision,skip) fread读取文件
    count=fprintf(fid,A,precision) fwrite读取文件
    A为存放读写的数据,count返回成功读写的数据的元素个数,fid为文件表示号,precision指定读写数据的类型,size用于指定A的大小,skip指定按比例周期性地跳过一些数据(读取有选择性 )

  • 数据文件定位
    fseek
    fseek(fid,offset,origin) 用于改变文件指针的位置,offset表示位置指针相对移动的字节数(正数向文件尾,负数向文件头),origin表示位置指针移动的参考位置。fseek返回0和-1
    origin:
    cof或0 表示文件指针的当前位置
    bof或-1 表示文件的开始位置
    eof或1 表示文件的结束位置

ftell
position=ftell(fid) 用于查询文件指针的当前位置,ftell返回从文件头开始到指针当前位置的字节数,返回-1表示获取文件当前位置失败

feof
status=feof(fid) 用于判断当前文件位置指针是否到达文件尾部,到达文件尾部时,返回1,否则返回0

脚本\函数文件

脚本文件

脚本:可以在命令行窗口直接执行的文件,也叫命令文件
实时脚本和脚本
创建脚本edit mysphere 创建mysphere脚本
直接在命令行窗口输入脚本名称,直接运行

函数文件

函数文件写法

function
%帮助文本行,>>help function_name可以快速显示
  • nargin
    输入参数的个数

  • nargout
    输出参数的个数

  • 全局变量

global 变量名
%主文件函数
global ALPHA BETA
ALPHA=1;
BETA=2;
s=ward(1,2)
%ward函数
function f=ward(x,y)
global ALPHA BETA
f=ALPHA*X+BETA*y

函数文件:定义一个函数,不能直接执行,必须以函数调用的方式来调用它

function 输出形参表=函数名(输入形参表)
函数体

当有多个形参时,形参之间用逗号分隔,形成形参表。当输出形参多于一个时,应该用方括号括起来,构成一个输出矩阵

函数文件的引导行
function C=f2(A,B)
C=A*B  

在命令行先创建A和B,然后在调用函数
相当于在命令行定义,然后调用函数文件,进行传参

function [s,p]=fcircle(r)
s=pi*r*r;
p=2*pi*r;

函数调用

[输出实参表]=函数名(输入实参表)
在调用函数时,函数输入输出参数称为实际参数
[s,p]=fcircle(123)

函数句柄

函数句柄变量=@(匿名函数输入参数)匿名函数表达式

函数句柄变量相当于这个匿名函数的别名

f=@(x,y) x^2+y^2
f(3,4)
函数句柄变量=@函数名

函数名可以是内部函数或者是自定义函数

文件编写
%定义主文件
%定义匿名函数f1
f1=@(n) n+10*log(N*n+5)
%调用匿名函数f1进行计算
y1=f1(40)/(f1(30)+f1(20))

%利用函数文件调用f2文件中的f2函数
%没调用一个f2函数就返回一个f形参值作为实参
y2=f2(40)/(f2(30)+f2(20))

%=================
这个是另外定义的f2函数
function f=f2(n) %f为输出形参
f=0;
for k=1:n
	f=f+k*(k+1);
end

输入输出

  • 输入input
A=input('字符串提示信息',选项)
  • 输出disp
disp(输出项)
可以是字符串,矩阵,等

控制语句

  • if
if
elseif
else 
end

当条件结果为矩阵时,如果矩阵为非空,且不包含零元素时,条件成立,否则不成立

  • switch
switch
case 
otherwise
end

c=input('输入一个单词','s') s是选项
switch c(1)
	case {'A','E','I','O','U','a','e','i','o','u'}
		disp([c,'以元音字母开头']) 相当于做字符串串联
	otherwise
		disp([c,'以辅音字母开头'])
end	
  • for
利用循环求pi
y=0;
g=-1;
n=input('n=?')
for i=1:n
	g=-g;
	y=y+g*1/(2*i-1);
end
pai=4*y
利用向量计算求pi
n=input('n=?');
x=1:2:(2*n-1);
y=(-1).^(2:n-1)./x
pai=sum(y)*4
a=0;
b=1;
n=input('n=?');
h=(b-a)/n;
x=a:h:b;
f=sqrt(1-x.*x);
s=[];
for k=1:n
	s1=(f(k)+f(k+1))*h/2;
	s=[s,s1];	相当于矩阵串联
end
pai=4*sum(s)
蒙特卡洛法
s=0;
n=input('n=?')
for i:n
	x=rand(1); 0-1分布随机标量
	y=rand(1);
	if x*x+y*y<=1
		s=s+1;
	end
end
pai=s/n*4
for [1,2,3] %循环次数与向量元素的个数,向量元素带入控制语句

在这里插入图片描述

  • while
while
end

函数的递归调用

直接递归

直接自己调用自己

%主函数
n=input('n=?');
s=fact(n);
disp(s)

%递归函数
function f=fact(n)
if n<=1
	f=1;
else
	f=fact(n-1)*n
end

简介递归

先调用第二个函数,然后第二个函数又调用第一个函数

画图

二维图

  • plot
plot(v1) v1向量,值为y,个数为x轴 v1为虚数时,将横坐标为实部,纵坐标为虚部
plot(x,y) x,y为向量,默认有线
plot(x,y,'d') 画点不画线 有属性不写标线属性,默认无线 
plot(x,y) 其中y是多个表达式[表达式1,表达式2..],直接绘制多条曲线在一幅图中
plot(x1,y1,x2,y2..) 包含多个向量对,然后绘制多条曲线
  • fplot

可根据参数函数的变化特性自适应的设置采样间隔

fplot(f,lims,选项)
f表示一个函数,通常采用函数句柄的形式
lims表示x轴的取值范围,[xmin,xmax]
选项与plot函数相同
fplot(@(x) sin(1.x),[0,0.2])

fplot(funx,funy,lims,选项)
funx,funy表示函数,通常采用函数句柄,Lims表示funx和funy的自变量取值范围,funx和funy的参数与lims的参数有关
  • 其他标注

hold hold on 一张图画多条线,hold off 关闭
closeclose all 关闭所有图像打开窗口
title(’’) 加标题
ylabel\xlabel(’’) x轴y轴加标签
还可以在上方交互式画图
‘FrontSize’
legend()指定图例legend(‘a’,‘b’,‘c’) 顺序要与plot函数一致
text()指定坐标位置进行标注
axis([xmin,xmax,ymin,ymax,zmin,zmax]) 控制坐标轴的刻度范围
axis equal横纵坐标登场刻度;axis square 产生正方形坐标系(默认矩形);axis auto使用默认设置
grid on 加网格 grid off不加网格线,grid用于切换 ,默认不加网格线
box on 有边框线,box on 不加边框线,box用于切换

  • 对数坐标图
    semilogx(x1,y1,选项1,x2,y2,选项2…) x轴半对数坐标
    semilogy(x1,y1,选项1,x2,y2,选项2…) y轴半对数坐标
    loglog(x1,y1,选项1,x2,y2,选项2…)) x、y全对数坐标

  • 极坐标图
    polar(theta,rho,选项) theta为极角,rho为极径,选项

  • 条形图
    bar(y, style) style:grouped 簇状分组,stracked 堆积分组。y是数据,选项style用于指定分组排列方式。y为矩阵,每行为一簇
    在这里插入图片描述
    bar(x,y,style) x存储横坐标,y存储数据,矩阵y的行数与x向量相同,即分簇

  • 直方图
    hist(y) y为要统计的数据,将y中最大值和最小值的区间等分,然后统计落在区间上的数
    hist(y,x) x指定区间的划分方式,x元素的个数为y数据分组数

  • 极坐标直方图
    rose(theta,x) theta为向量,用于确定每一区间与原点的角度,即扇形区域,高度表示该扇形区域内的theta个数,x用于控制扇形的分割角度

  • 扇形图
    pi(x,explode) x为存储待统计数据,x的每个元素对应一个扇形,扇形的角度反映对应元素占整体的比重,explorde控制图块的显示模式

  • 散点图
    scatter(x,y,选项,‘filled’) x,y为同大小向量

  • 阶梯图
    stairs

  • 杆图
    stem

  • 罗盘图
    compass

  • 羽毛图
    feather

  • 箭头图
    quiver(x,y,u,v) (x,y)为矢量起点,(u,v)为矢量终点

三维图-没看完

新定义X,Y[X,Y] = meshgrid(-2:.2:2);
再计算ZZ = X .* exp(-X.^2 - Y.^2);
画图surf(X,Y,Z)

  • plot3
    三维曲线

子图

在同一个窗口中绘制多个图像
subplot(2,2,1) 两行两列,第一个

数学计算

多项式计算

  • 创建
    将系数组成一个向量
    多项式系数向量的顺序从高到低排列
    多项式系数包含0次项系数,系数向量长度为最高次项+1,注意用0补足

  • 相加
    对应向量相加

  • 相乘

conv(p1,p2)
  • 相除
[Q,r]=deconv(p1,p2)

Q返回多项式p1除以p2的商,r返回p1除以p2的余式,Q和r为向量
p1=conv(Q,p2)+r

  • 求导
    p=polyder§ 求导函数
    p=plolyder(P,Q) 求P乘Q的导数
    [p,q]=polyder(P,Q) 没懂

  • 求值
    polyval(p,x) 代数多项式求值,p为多项式系数向量,x为标量(求点值),x为向量和矩阵,求每个元素的值,按矩阵每个对应元素计算
    polyvalm(p,x) 矩阵多项式求值,x为矩阵,按矩阵乘法计算

  • 求根
    roots§,p为系数向量
    poly

数据插值

  • 一维插值
    interp1(x,y,x1,'方法) x为采样点,y为采样,x1为插值点
    方法:
    linear线性插值,默认的方法(将与插值点靠近的两个数据点用直线连接,然后在直线上选取对应插值点的数据)
    nearest最近点插值,选择最近样本点的值作为插值数据
    pchip分段3次赫米特插值,采用分段三次多项式,出满足插值条件外,还需满足在若干结点出相邻段插值函数的一阶导数相等,使的曲线光滑的同时,还有保形性
    spline三次样条插值,每段内构造一个三次多项式,且在各结点具有连续的一阶和二阶导数

  • 二维插值
    interp2(x,y,z,x1,y1,‘方法’)与上述同理

曲线拟合

polyfit(x,y,3)函数利用多项式函数逼近样本函数,此处是3次,这个是在最小二乘法意义下的
P=polyfit(x,y,m) m为次数,P为产生的多项式
[P,S]=polyfit(x,y,m) s为误差数据
[P,S,mu]=polyfit(x,y,m) mu为一个二元向量mu(1)x的均值,mu(2)为x的标准差

数值微分

差分与差商
差分:向前、向后、中心
差商:向前、向后、中心

  • 向前差分
    dx=diff(x) 向量x的一阶向前差分,dx(i)=x(i+1)-x(i)
    dx=diff(x,n) n阶差分,diff(x,2)=diff(diff(x))
    dx=diff(x,n,dim) dim=1按列差分,=2按行差分
    差分后数据变少

数值积分

  • 基于自适应辛普森法
    [l,n]=quad(filename,a,b,tol,trace) filename为被积函数名,a,b为定积分的下限和上限,且积分限有限,不能为无穷,tol控制积分精度,trace是否展示积分过程,I为定积分的值,n为北极函数的调用次数

  • 基于自适应gauss-lobatto法
    [l,n]=quadl(filename,a,b,tol,trace)

  • 基于全局自适应积分方法
    I=integral(filename,a,b) I为积分值,filename为被积函数名,a和b为下限和上限,积分限可以为无穷大

  • 基于自适应高斯-克朗罗德方法
    [l,err]=quadgk(filename,a,b) 一般用于计算振荡函数的积分

  • 基于梯形积分
    I=trapz(x,y) x和y为等长向量,用于构建函数关系,积分区间为x1到xn

  • 多重定积分
    二重定积分
    在这里插入图片描述
    三重积分
    在这里插入图片描述

线性方程组求解

  • 奇异与非奇异
    A=mXn
    m = n 方阵方程组。求精确解。
    m > n 超定方程组,即方程个数多于未知数个数。求最小二乘解。
    m < n 欠定方程组,即方程个数少于未知数个数。使用最多 m 个非零分量求基本解。

非奇异矩阵(满秩)A:
Ax=b有唯一解 x=A\b
奇异系数矩阵A:
如果 A 为奇异矩阵并且 Ax = b 具有解,可以通过键入以下内容求不是唯一的特定解

rank(A) 返回矩阵的秩
p=pinv(A)*b pinv(A)为伪逆 
p返回精确解(如果方程有精确解),最小二乘解(如果方程没有精确解)
判断是否有精确解
利用增广矩阵
rref([A b])

有直接解法、迭代法

  • 高斯消去法

  • 列主元消去法
    Ax=b利用左除运算符,A\b,注意奇异矩阵和非奇异矩阵

  • 矩阵的三角分解法
    LU分解、QR分解、cholesky分解

  • LU分解
    非奇异矩阵总可以分解成一个LU矩阵
    [L,U]=lu(A) A必须是方阵, 上三角矩阵U,变换形式的下三角矩阵L,对应方程x=U(L\b)
    [L,U,P]=lu(A) A必须是方阵,上三角矩阵U,下三角矩阵L,置换矩阵P,PA=LU,对应方程x=U(L\P*b)

mrdivide
mldivide
x=b/A 解方程xA=b b/A等价于b*inv(A)
x=A\b 解方程Ax=b 要求A和b的列数相同 A\b等价于inv(A)*b

null(A) 求Ax=0的基向量
  • 雅克比迭代法
    Ax=b,A为非奇异方阵,且主对角线元素不等于0,将A分解为A=D-L-U,见公式
function [y,n]=jacobi(A,b,x0,ep) %A系数矩阵,b列向量,x0迭代初值,ep精度
D=diag(diag(A)) %diag(A)返回对角矩阵列向量,diag(diag(A)) 构成对角矩阵
L=-tril(A,-1) %A的下三角矩阵
U=-tilu(A,1) %A的上三角矩阵
B=D\(L+U)
f=D\b
y=B*x0+f %初始迭代
n=1 %当前迭代次数为1
while norm(y-x0)>=ep %范数迭代精度
	x0=y
	y=B*x0+f
	n=n+1
end
  • gauss-serdel迭代法
    见公式
function [y,n]=gauseidel(A,b,x0,ep) %A系数矩阵,b列向量,x0迭代初值,ep精度
D=diag(diag(A)) %diag(A)返回对角矩阵列向量,diag(diag(A)) 构成对角矩阵
L=-tril(A,-1) %A的下三角矩阵
U=-tilu(A,1) %A的上三角矩阵
B=(D-L)\U
f=(D-L)\b
y=B*x0+f %初始迭代
n=1 %当前迭代次数为1
while norm(y-x0)>=ep %范数迭代精度
	x0=y
	y=B*x0+f
	n=n+1
end

非线性方程求解

非线性与最优化工具箱

  • 单变量非线性方程求解
    x=fzero(filename,x0) filename为待求根方程左端的函数表达式,x0为初始值

  • 非线性方程求解
    x=fsolve(filename,x0,option) x为返回的近似解,filename为待求根方程左端的函数表达式,x0为初始值,option用于设置优化工具箱的优化参数,可以调用optimset函数

函数极值

  • 无约束最优化问题
    求最小值:
    [xmin,fmin]=fminbud(filename,x1,x2,option) 求一元函数在开区间x1到x2的点,和极小值
    [xmin,fmin]=fminsearch(filename,x0,option) 基于单纯形法,求多元函数的极小值点和极小值
    [xmin,fmin]=fminunc(filename,x0,option) 基于拟牛顿法,求多远函数的极小值点和极小值
    filename为目标函数,x1到x2为开区间,x0表示极值点的初值,option利用opyimset函数来设置

  • 有约束最优化问题
    约束条件:线性不等式约束,线性等式约束,非线性等式约束,非线性不等式约束,x的上下界
    [xmin,fmin]=fmincon(filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option) Aeq,beq,Lbnd,Ubnd,NonF表示约束和约束的函数,约束不存在则用空矩阵代替,见文档

常微方程数值求解

[t,y]=solver(filename,tspan,y0,option) 见文档

符号计算

符号对象

符号常量、符号变量

  • sym
    sym 建立单个符号对象符号对象名=sym(A)
    由A建立符号对象,A可以是一个数值常量,数值矩阵或数值表达式(不加单引号),表示符号常量sin()sym(pi/3) 输出3^(1/2)/2
    A可以是一个变量名(加单引号),表示符号变量 a=1 b=2 x=sym('a') y=sym('b') x+y 输出a+b 而不是数值3 eval(x+y) 输出具体数值 eval函数将符号转换为值

  • syms
    syms 符号变量名1,符号变量名2,… 变量名不能加单引号,相互之间用空格隔开

符号对象运算

四则运算
运算结果仍是一个符号表达式

关系运算
lt() 小于,le() 小于等于,gt() 大于,ge() 大于等于 eq() 等于 ne() 不等于
参与运算的是一个符号表达式,其结果是一个符号关系表达式,若参与运算的是符号矩阵,则结果是由符号关系表达式组成的矩阵

  • assume
    在运算之前,对符号对象设置值域
    assume(condition) 指定变量满足条件condition assume(x<0)
    assume(expr,set) 指定表达式expr属于集合set a assume(x,'positive')
    syms x

逻辑运算
and() 与 ,or() 或 ,not 非,xor 异或

因式分解与展开
factor(s) 对符号表达式s分解因式 s=a^3-b^3 factor(s)进行分解返回因式组成的向量
expand(s) 对符号表达式s进行展开
collect(s) 对符号表达式s合并同类项
collect(s,v) 对符号表达式s按变量v合并同类项

提取有理分式的分子分母 [n,d]=numden(s)
提取符号表达式的系数 c=coeff(s,x)
符号表达式化简 simplify(s)
符号多项式与多项式系数向量之间的转换p=sym2poly(s) s=poly2sym§

符号运算中变量的确定
如果没有明确指定自变量,默认原则为:除i,j外,在字母顺序上最接近x的小写字母,若表达式中有两个符号变量与x距离相等,则ASCII码大者优先
symvar(s,n) 查找一个符号表达式中的符号变量,返回符号表达式中的n个符号变量,symvar(s,1)查找表达式s中的主变量

符号函数微积分

符号函数极限
limit(f,x,a) 求函数f关于变量x在a点的极限 x省略则采用系统默认的自变量,a的默认值为0
求单边极限,limit(f,x,a,‘right’) limit(f,x,a,‘left’)

符号函数求导
diff(f,x,n) 求函数f关于变量x的n阶导数 n默认为1
可以用于求偏导数

符号函数求不定积分
int(f,n) 求函数对变量的积分

符号函数求定积分
int(f,x,a,b) ab为定积分的下限和上限,注意上下限可以是数、无穷大、符号表达式

级数

级数求和
symsum(s,v,n,m) s是一个级数的通项是一个符号表达式,v是一个求和变量,v省略时使用系统的默认变量,n和m是求和变量v的初值和末值

泰勒级数
taylor(f,v,a,Name,Value) 将函数变量v在a点展开为泰勒级数,v省略时按默认规则确定变量,a的默认值是0,Name和Value为选项设置

符号方程求解

代数方程符号求解
solve(s) 求解符号表达式s的代数方程,求解变量为默认变量
solve(s,v) 求解符号表达式s的代数方程,求解变量v
solve(s1,s2,v1,v2) 求解符号表达式s1,s2,…组成的代数方程组,求解变量分别为v1,v2,…

常微分方程求解
dsolve(e,c,v) 求解常微分方程e在初值条件下c下的特解,没有给出c则求方程通解
dsolve(e1,e2,…,c1,c2,…,v)求解常微分方程组

图形用户

图形对象句柄-没看全

访问图形对象
图形对象句柄.属性名

h=plot(x,y)
h.color为窗口的背景色
h0.lineWidth=2

gcf:获取当前图像窗口,相当于绘图的窗口,不包含菜单栏
gca:获取当前坐标轴,相当于坐标轴
gco:获取最近被选中的图形对象
findobj:按照指定的属性来获取图形对象

图形静态对象属性
图像动态对象属性

图形窗口属性

句柄变量=figure(属性1,2…)
句柄变量=figure 窗口默认属性

图形窗口属性:
MenuBar:控制图像窗口是否具有菜单条,none或figure
Name:图形窗口标题
NamberTitle:决定这图形窗口的标题中是否以figure n为标题前缀
Color:设定图形窗口背景颜色
Position:图形窗口对象在屏幕上的位置和大小
Units:定义图形窗口使用的长度单位

坐标轴对象

坐标轴对象是图形窗口的子对象,每个图形窗口中可以定义多个坐标轴对象,只有一个坐标轴是当前坐标轴,坐标轴对象是图形对象的父对象,即为图形对象的容器,在没有指定坐标轴时,所有图形对象都在当前坐标轴上输出
建立坐标轴对象
句柄变量=axes(属性1,2,…) 属性为坐标轴的特征
句柄变量=axes 默认属性
axes(坐标轴句柄)

坐标轴属性:见文档
Position
Units
Box
GridLineStyle
Title
XLabel,YLabel,ZLabel
XLim,YLim,ZLim
XScale,YScale,ZScale
View
ColorOrder

曲线对象

句柄变量=line(x,y,z,属性1,2…)
plot,polt3

曲线属性:
Color
LineStyle
LineWidth
Marker
MarKerSize
XData,YData,ZData

曲面对象

句柄变量=surface(x,y,z,c,属性1,2…)
surf

曲面属性:
FaceColor
EdgeColor

光照处理:
light(属性1,2…) 选项
属性:Color,Style,Position

反射特性

图形用户界面GUI

函数调用
可视化调用:新建GUIDE
在这里插入图片描述

Simulink-没看

混合编程

读取MAT文件中的数据

libmat.lib 包含Mat文件的操作函数
libmx.lib 包含对MAT文件中mxArray矩阵的操作函数

C++调用-没看完

定义指向MAT文件的指针
MATFile* mfp;

打开和关闭MAT文件
mfp=matOpen(filename,mode) mode对文件的使用方式,r,w,u
matClose(mfp)

读取MAT文件
matPutVariable(mfp,name,mp) 向MAT写入文件
matGetvariable(mfp,name) 从MAT获取文件
name指定存储数据的变量,mp指向MATLAB 工作区mxArray类型变量的指针

mxArray对象——没看完
操作mxArray对象要用到mx函数
建立和清楚mxArray变量的函数

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值