MatLab基础操作详解(有示例)

数值数据

整形数据:无符号整数,带符号整数
相关函数:
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(32=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 即A
A
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 =15

      11              0              0             12              0       
       0             21              0              0             22       
       0              0             31              0              0       
      41              0              0             42              0       
       0             51              0              0             526

       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(2
t1),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)t
sin(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=y
ones(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 可以显示绘图工具

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值