直接赋值不用声明
输入变量名直接显示输出
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(首元素值,尾元素值,元素个数)
x=linspace(0,1,5)
取最大值 xmax=max(x)
[xMax,idx]=max(x) 可返回向量中的最大值和索引
四舍五入
sqrt
可以整个向量中的元素操作
size
显示矩阵和数组的大小,行数和列数,单变量size只能获得一个输出变量
B=repmat(A,3,2) A可以是标量、数组和矩阵,重复3行2列
matlab数组是从1开始的
符号' x=(5:2:9)'
x=v(3) 向量的第3个元素
r=v1+1
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为标准差
- 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])
判断方程是否有精确解
norm(v,1) 1范数
norm(v) 2范数
norm(v,inf) 无穷范数
vecnorm 计算每行每列的范数
单个索引
x=A(5,7) 5行7列的数据
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,:) 第1到3行,所有列元素
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]每个元素分别对应,组成一个矩阵的索引,如1,1 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={数字,矩阵;向量,字符串} 有2行2列的元胞数组(矩阵)
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]}
矩阵的存储方式:
完全存储方式,按列将所有元素依次存储。
稀疏存储方式:只存储矩阵的非零元素的值即其位置,即行号和列号,也是按列存储
完全矩阵和稀疏矩阵的存储方式
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)的行下标和列下标
t=pi
m='[t,sint(t),cos(t)]' 这是一个字符串
y=eval(m) 将字符串中的值转换为对应的数据
s='matlab'
y=abs(s) 输出字符串中每个元素对应的ASCII
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类型的字符数组
- 创建
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
A=input('字符串提示信息',选项)
disp(输出项)
可以是字符串,矩阵,等
if
elseif
else
end
当条件结果为矩阵时,如果矩阵为非空,且不包含零元素时,条件成立,否则不成立
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
利用循环求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
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(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(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)
在同一个窗口中绘制多个图像
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的标准差
差分与差商
差分:向前、向后、中心
差商:向前、向后、中心
基于自适应辛普森法
[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:
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的基向量
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
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(x<0)
assume(x,'positive')
逻辑运算
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
反射特性
libmat.lib 包含Mat文件的操作函数
libmx.lib 包含对MAT文件中mxArray矩阵的操作函数
定义指向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变量的函数