数值数据
整形数据:无符号整数,带符号整数
相关函数:
uint8()函数,将数据转化为无符号8位整数
int8()函数 将数据转化为带符号8位整数
>> x=int8(129)
x =
int8
127
>> x=uint8(129)
x =
int8
129
浮点数据:单精度和双精度(4byte和8byte)
数值数据默认双精度
>> class(4)
ans =
'double'
>> class(single(4))
ans =
'single'
复型数据:分为实部虚部两部分,都默认双精度类型,虚数部分用i或j表示
函数:
real()求复数的实部
imag()求复数的虚部
>> real(3+4i)
ans =
3
>> imag(3+4j)
ans =
4
format命令:
决定数据输出格式
后面都由format决定,不是只有一个
只影响输出格式,不影响计算与存储
>> format long
>> 50/3
ans =
16.666666666666668
>> format
>> 50/3
ans =
16.6667
常用数学函数:
1.函数自变量规定为矩阵变量,也可以是标量,标量是矩阵的一种特例
2.函数运算时是将函数逐项作用于矩阵的每个元素,产生同类型矩阵
A=[4,2;3,6]
A =
4 2
3 6
>> B=exp(A)
B =
1.0e+02 *
0.545981500331442 0.073890560989307
0.200855369231877 4.034287934927351
三角函数有以弧度为单位的函数和以角度为单位的函数
角度的话用sind,cosd。。。
>> sin(pi/2)
ans =
1
>> sind(90)
ans =
1
abs函数可以求绝对值,复数的模,字符串的ASCII值
取整函数:
round按照四舍五入
ceil向上取整
floor向下取整
fix固定取整,靠近0的整数,也就是舍去小数
函数应用举例:
①求一个三位正整数的个位数字,十位数字,百位数字
m =
345
>> m1=rem(m,10)%rem函数是求余数的意思
m1 =
5
>> m2=rem((m-m1)/10,10)
m2 =
4
>> m3=fix(m/100)
m3 =
3
②求【1,100】中所有素数
提供函数isprime(n)是素数返回1,不是返回0
>>x=1:100%行矩阵
>>l=isprime(x)%对每个元素操作
>>k1=find(l)%找到里面非0的元素,因为是函数都返回同类型矩阵
>>x[k1]%输出结果
变量
变量名是内存单元的一种抽象,字母开头
直接在命令行输入表达式后回车会将结果赋给ans的变量
NaN代表非数
输入who命令
只显示现有变量的名称
输入whos命令
还可以显示大小,存储的值等信息
内存变量文件,用于保存matlab里的变量
可以使用save命令保存到文件里
再使用load装载变量
>>save mydata a x
>%把a x两个变量保存到mydata文件中
>>load mydata
>%装载
矩阵
例:A=【1,2,3;4,5,6;7,8,9】
逗号和分号分别分开列和行
还可以用已建好的小矩阵创建大矩阵
A=。。。
B=。。。
C=[A,B;B,A]
可以用实部矩阵和虚部矩阵(同型的)构成复数矩阵
A=。。
B=。。
C=A+(i * B)
冒号表达式产生行向量
格式:
e1:e2:e3
初始值:步长:终止值
>> t=0:1:5
t =
0 1 2 3 4 5
省略e2也可以:
>> t=0:5
t =
0 1 2 3 4 5
还可以用linspace函数产生向量
格式:
linspace(a,b,n)
a:第一个元素
b:最后一个元素
n:元素个数(缺省为100)
>> linspace(0,pi,3)
ans =
0 1.570796326794897 3.141592653589793
结构矩阵
a(1).x=10; a(1).y='zhangsan'; a(1).z=[11,21;34,78];
a(2).x=12; a(2).y='lisi; a(2).z=[34,191;27,578];
a(3).x=14; a(3).y='wangwu'; a(3).z=[13,890;67,231];
单元矩阵
b = { 10 , 'liu' , [ 10 , 1 ; 3 , 5 ] ;
9 , 'wang' , [ 9 , 1 ; 3 , 5 ] ;
8 , 'yang' , [ 8 , 1 ; 3 , 5 ] };
矩阵元素的引用
1.用下标引用,从1开始
2.用(),不是【】
A(3,2)=10%第三行第二列的数据
可以这样,自动补齐矩阵
>> A=[1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> A(4,5)=10
A =
1 2 3 0 0
4 5 6 0 0
0 0 0 0 0
0 0 0 0 10
可以用序号引用
A =
1 2 3 0 0
4 5 6 0 0
~~0~~ 0 0 0 0
0 0 0 0 10
>>A(3)
结果为0(图中标记的那个)(先列再行)
序号和下标可以用sub2ind和ind2sub来实现相互转换
格式D=sub2ind(S,I,J)
sub 坐标 ind-index 序号
S为矩阵数据:行数和列数组成的向量
I 和J分别是要转换的元素的行数和列数
>> A=[1:3;4:6]
A =
1 2 3
4 5 6
>> D=sub2ind(size(A),[1,2;2,2],[1,1;3,2])
D =
1 2
6 4
给一个矩阵用size函数,返回一个向量,分别是行数和列数
ind2sub函数
【I,J】=ind2sub(S,D)
D是序号,其他同上
子矩阵
是指矩阵中的一部分元素构成的矩阵
A(1,:)第1行的全部元素
A(I:i+m,k:k+m)小矩阵
end表示某一维的最后一个元素下标
A(end,:)
表示最后一行的全部元素
A([1,4],3:end)
第1,4行的第三列到最后一列
A=[]
空矩阵
可以利用空矩阵删除矩阵中的元素
A(:,[2,4])=[]
第二,四列的元素删除,不是置为空
reshape(A,m,n)函数,在总元素不变的情况下,将矩阵排列成m*n的新矩阵
第一列排满再排第二列
A(:)将A的每一列元素堆叠起来,成为一个列向量(因为单独一个数字作为下标是利用序号调用,:代表全部元素)
基本运算
1.矩阵加减运算必须同型
2.标量和矩阵加减运算,等同于标量和矩阵每一个元素加减运算
3.乘法运算,必须满足矩阵乘法条件
4.除法运算,inv()代表求逆矩阵,左除和右除,A/B代表Ainv(B),A\B代表inv(A)B,除号上端冲谁谁就取逆矩阵
5.乘方运算A^2 即AA
6.点运算:对应元素进行运算
. ./ .\ .^
例:求x=0.1 0.4 0.7 1 时,y=sinx·cosx的值
x=0.1:0.3:1
y=sin(x).*cos(x)
7.关系运算符,关系表达式同C语言,如果两个矩阵之间进行关系运算,得到的是一个同型的逻辑矩阵
不等于~=
8.标量和矩阵之间关系运算,得到的也是一个同型的逻辑矩阵,是标量挨个比较
9.例:建立三阶矩阵,判断A的元素是否为偶数
A=。。。
P=rem(A,2)==0
得到的P矩阵中,值为0的位置对应原矩阵的元素是偶数
10.逻辑运算,& | ~
字符串数据
1.字符串是单字符括起来的字符序列
2.当成行向量
3.可以用字符串构造矩阵
>> ch=['abcdef';'123456']
ch =
2×6 char 数组
'abcdef'
'123456'
>> ch(2,3)
ans =
'3'
4.相关处理
ch=‘ABc123d4e56Fg9’
取1-5个字符组成的子字符串
subch=ch(1:5)
将字符串倒过来排列
revch=ch(end : -1 : 1)
将字符串小写变大写
K=find(ch>=‘a’&ch<=‘z’)
ch(k)=ch(k)-(‘a’-‘A’)
统计小写字母个数
length(k)
5.eval()函数(字符串的执行)
>> t=pi
t =
3.141592653589793
>> m='[t,sin(t),cos(t)]'
m =
'[t,sin(t),cos(t)]'
>> eval(m)
ans =
3.141592653589793 0.000000000000000 -1.000000000000000
字符串和数值之间可以转换
字符串转化成数值数值数组:abs()函数
数值向量转字符串,直接加32
(char函数将ASCII码变为字符)
字符串比较
1.用>=号比较,结果1或0
2.用相关函数
①strcmp(s1,s2)
②strncmp(s1,s2,n)前n个字符
③strcmpi(s1,s2)忽略大小写
④strncmpi(s1,s2,n)忽略+前n
字符串查找与替换
findstr(s1,s2)
返回短字符串在长字符串中的开始位置
strrep(s1,s2,s3)
将s1中所有s2替换成s3
特殊矩阵
1.zeros()产生全0矩阵
2.ones()产生全1矩阵
3.eye()产生对角线为1的矩阵,当矩阵为方阵时,得到一个单位矩阵
4.rand()产生(0,1)区间均匀分布的矩阵
5.randn()产生均指为0,方差为1的标准正态分布随机矩阵
例:
产生10-99的随机5✖️5整数矩阵
fix(10+(90*rand(5)))
产生均值0.6,方差0.1的5阶正态分布随机矩阵B
0.6+sqrt(0.1)*randn(5)
6.魔方矩阵
n阶魔方阵–数独
magic(n)
7.范德蒙矩阵
>> vander(1:5)
ans =
1 1 1 1 1
16 8 4 2 1
81 27 9 3 1
256 64 16 4 1
625 125 25 5 1
8.希尔伯特矩阵
>> format rat,以有理数形式输出
>> H=hilb(4)
H =
1 1/2 1/3 1/4
1/2 1/3 1/4 1/5
1/3 1/4 1/5 1/6
1/4 1/5 1/6 1/7
矩阵处理
diag(A)函数,提取A的主对角线元素,产生一个列向量
diag(A,k):提取A的第k条对角线的元素,产生一个列向量
主对角线–第0条
往上1 2 3。。。条
往下-1 -2 -3。。。条
例:
建立5✖️5的矩阵A,将A的第一行元素✖️1,第二行元素✖️2.。。第五行元素✖️5
A=。。。
计划用12345为主对角线的对角矩阵左乘
D=diag(1:5)
矩阵的转置
.’ 转置运算符
'共轭转置运算符,在转置的基础上还要取每个数的共轭
矩阵的旋转
rot90(A,k)函数,将矩阵A逆时针旋转90°的k倍
矩阵的翻转
fliplr(A)
对矩阵A实施左右翻转
flipud(A)
对矩阵A实施上下翻转
可以用求逆矩阵的方法解线性方程组
x+2y+3z=5
x+4y+9z=-2
x+8y+27z=6
A=[1,2,3;1,4,9;1,8,27]
B=[5;-2;6]
Ax=B
x=inv(A)*B
矩阵求值
det(A)求A的行列式值
rank(A)求A的秩
trace(A)求矩阵的迹
E=eig(A)求A的全部特征值,构成向量E
[X,D]=eig(A)求矩阵A的全部特征值,构成对角阵D,矩阵X各列是相应的特征向量
矩阵的稀疏存储方式
>> A=sparse(eye(5))
A =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
(5,5) 1
>> B=full(A)
B = A原来的格式
>> whos
Name Size Bytes Class Attributes
A 5x5 128 double sparse
B 5x5 200 double
直接创建稀疏存储矩阵
sparse(m,n)生成mXn的全都是0的系数矩阵
sparse(u,v,s)其中u,v,s是3个等长的向量,s是要建立系数矩阵的非零元素,u,v分别是行下标和列下标
spconvert(A)直接将矩阵A变为稀疏存储矩阵
矩阵A是一个mX3或mX4的矩阵,每行表示一个非零元素。
>> A=[2,2,1;2,1,-1;2,4,3]
A =
2 2 1
2 1 -1
2 4 3
>> B=spconvert(A)
B =
(2,1) -1
(2,2) 1
(2,4) 3
如果A矩阵有第四列,则表示实部虚部中的虚部
带状稀疏矩阵的稀疏存储
[B,d]=spdiags(A)
A=spdiags(B,d,m,n)m,n是行数和列数
>> A=[11,0,0,12,0,0;0,21,0,0,22,0;0,0,31,0,0,32;41,0,0,42,0,0;0,51,0,0,52,0]
A =
列 1 至 5
11 0 0 12 0
0 21 0 0 22
0 0 31 0 0
41 0 0 42 0
0 51 0 0 52
列 6
0
0
32
0
0
>> [B,d]=spdiags(A)
B =
0 11 12
0 21 22
0 31 32
41 42 0
51 52 0
d =
-3
0
3
会把对角线表示出来
>> A=spdiags(B,d,5,6)
A =
(1,1) 11
(4,1) 41
(2,2) 21
(5,2) 51
(3,3) 31
(1,4) 12
(4,4) 42
(2,5) 22
(5,5) 52
(3,6) 32
转成稀疏存储矩阵
speye(m,n)
返回稀疏存储单位矩阵
>> speye(5)
ans =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
(5,5) 1
文件管理
更换当前文件夹,这样创建文件就会默认保存在当前文件夹下,运行也能找到
脚本文件存盘后命名为test.m
运行test即可
函数文件格式
function C=f2(A,B) f2为函数名
C=A*B
输入:
A=input(“提示信息”)
输出:
disp(A)
输出信息
暂停程序的进行
pause(延迟秒数)
选择结构
if 条件
语句
end
if 条件
语句
else
语句
end
函数:
x^(1/3)==power(x,1/3)
lower()
upper()
小写、大写字母
switch语句
switch(表达式)
case__
语句
case__
语句
otherwise
语句
end
(case后面可以填{3,4,5}这样的数据)
num2cell(2:35)函数
是判断一个数是否满足这个区间
case num2cell(2:35)
语句
如果在这个区间
就执行语句
循环结构
for 循环变量 x1:x2:x3
语句
end
for k=[1:2:10]
for k=[1,3,2,5] 循环4次
for k=1:-2:10
一次也不执行
函数
function开头‘函数名与文件名相同
function [s,p]=fcircle®
s=pirr
p=2pir
匿名函数
函数句柄变量=@(匿名函数输入参数)匿名函数表达式
f=@(x,y)x^2 + y^2
例:
f(n)=1X2+2X3+3X4+…+n(n+1)
function f=f2(n)
f=0
for k=1:n
f=f+k*(k+1)
end
参数可调性
function fout=test(a,b,c)
if nargin == 1 (参数个数只有一个)
fout=a
end
if(nargin==2)
fout=a+b
end
全局变量
global x
二维曲线
plot(x,y)都是向量,x为横坐标,y为纵坐标
plot(x),以下标为横坐标,x为纵坐标
↑x为复数向量时,以实部和虚部为轴绘制图像
plot(x,y)x为向量,y为矩阵时,看x的长度等于Y的行数还是列数,分为很多条曲线
绘制sin(x),sin(2x),sin(x/2)的图像
x=linspace(0,2pi,100)
y=[sin(x),sin(2x),sin(x/2)]
plot(x,y)
当x,y为同型矩阵时,以对应列元素绘制图像,图形条数等于列数
例:
x=[t1,t1,t1]
y=[sin(t1),sin(2t1),sin(t1/2)]
plot(x,y)
含有多组参数的plot函数
plot(t1,sin(t1),t2,sin(2t2),t3,sin(t3/2))
可以含选项:
线型,颜色,数据点标记
fplot函数
fplot(f,lims,选项)
例:
fplot(@(x)sin(1./x),[0,0.2],‘b’)
双输入函数参数:
fplot(funx,funy,tlims,选项)
funx,funy代表函数,函数句柄
fplot(@(t)tsin(t),@(t)tcos(t),[0,10pi],‘r’)
辅助操作
plot(x,y)
title(‘y=sin(x)’)
可以使用LaTeX格式控制符
{\omega}–>ω
title里可以填写选项
title(‘y=cos{\omega}t’,‘Color’,‘r’,‘FontSize’,‘24’)
xlabel() x轴说明
ylabel() y轴说明
text(x,y,说明)–>特定点说明
legend()多个图例的命名
plot(A,B,C)
legend(A,B,C)
坐标控制
axis([xmin,xmax,ymin,ymax,zmin,zmax])
axis equal 等刻度
axis square 正方形
axis auto
axis off/on
grid on/off控制(不)显示网格线
默认不显示网格线
box on/off控制(不)显示边框线
hold on/off 图形保持
plot(A)
hold on
plot(B)
subplot(m,n,p) 分成m*n个绘图区,当前第p个
对数坐标图
semilogx(x1,y1,选项) x采用对数刻度,y仍保持线型刻度
semilogy() y采用对数刻度
loglog 全部采用对数刻度
极坐标图
ρ=1-sinσ
t=0:pi/100:2*pi
r=1-sin(t)
polar(t,r)
统计图:
①条形图
bar(y,style) ‘grouped’/‘stacked’
bar(x,y,style)
直方图:
hist(y)
hist(y,x)–>指定分组数量
rose(theta,x)极坐标直方图
统计图:
面积类图形:
①扇形图:pie(x,explode)x->待统计数据 explode->显示控制
②面积图:area
③散点图:scatter(x,y,选项,‘filled’)
④矢量图
三维图形(曲线,曲面)
plot3(x,y,z,选项)空间折线
是同型矩阵的话会生成多条曲线
plot3(x1,y1,z1,x2,y2,z2,x3,y3,z3)
xlabel,ylabel,zlabel
fplot3(funx,funy,funz,tlims)
生成平面网格数据矩阵:
①矩阵运算:
x=2:6
y=(3:8)’
X=ones(size(y))x
Y=yones(size(x))
②meshgrid函数
【x,y】=meshgrid(x,y)
mesh函数绘制三维网格图
mesh(x,y,z,c),x,y是网格矩阵 z是高度矩阵 c是颜色
也可以mesh(z,c)
x,y缺省时使用z的下标作为图形x,y坐标
meshc带等高线
meshz带底座
[x,y,z]=sphere(n)
绘制三维球面,产生三个矩阵,n决定圆滑程度
[x,y,z]=cylinder(R,n)
绘制三维柱面,r是标量则生成圆柱面
peaks函数:多峰函数
fsurf(funx,funy,funz,uvlims)
fmesh(funx,funy,funz,uvlims)
uvlims:四元向量
视角处理
view函数,view(az,el),az是方位角,el是仰角
默认 az-37.5 el30
色彩处理
色图矩阵 n行3列,每一行是一种颜色
指定色图 colormap函数
colormap(cmap)
NaN not a number 可以用于图像裁剪
plottools 可以显示绘图工具