MATLAB复习

MATLAB常用的标点符号

|---------|-----------|---------------------------------------------|
| 空格 | | 变量分隔符 矩阵一行中各元素间的分隔符 程序语句关键词分隔符 |
| 逗号 | | 分隔显示计算结果的各语句 变量分隔符 矩阵中一行各元素的分隔符 |
| 点号 | . | 数值中的小数点 结构数组的域访问符 |
| 分号 | | 分隔不想显示计算结果的各语句 矩阵行与行的分隔符 |
| 冒号 | | 用于生成一维数值数组 表示一维数组的全部元素或多维数组某一维的全部元素 |
| 百分号 | % | 注释语句说明符,凡在其后的字符均视为注释性内容而不被执行 |
| 单引号 | ' ' | 字符串标识符 |
| 圆括号 | () | 用于矩阵元素引用 用于函数输入变量列表 确定运算的先后次序 |
| 方括号 | [ ] | 向量和矩阵标识符 用于函数输出列表 |
| 花括号 | {} | 标识细胞数组 |
| 续行符 | ... | 长命令行需分行时连接下行用 |
| 赋值号 | = | 表达式赋值给一个变量6 |

逗号
显示计算结果的指令与其后指令的分隔
用作输入量与输入量的分隔符
用作数组元素分隔符号

命令行窗口清屏 clc 清除指令窗中显示的内容

清除MATLAB工作空间的所有变量clear

清除图形窗clf

whos

变量命名规则

(1)变量名称和函数名称有大小写之分

(2)变量名称的第一个字符必须是英文字符

5xf、_mat等都是不合法的变量名称

(3)变量名称中不可以包含空格或者标点符号,但是可以包含下划线

xf_mat是合法的

MATLAB文件存取的命令

save Filename

load Filename

MATLAB中的预定义变量

|--------------|-----------------------------------|
| ans | 计算结果的默认名称 |
| eps | 计算机的零阈值 |
| Inf(inf) | A无穷大 |
| pi | 圆周率 |
| NaN(nan) | 表示结果或者变量不是数值 0/0 0*∞ ∞/∞ |

MATLAB中的取整函数

|--------------|------------------------------------|
| round(a) | 向最接近的整数取整,小数 部分是0.5时向绝对值大的方向取整 |
| fix(a) | 向0方向取整 |
| floor(a) | 向不大于a的最接近整数取整 |
| ceil(a) | 向不小于a的最接近整数取整 |

复数相关运算函数

|------------------|--------------------|
| real(z) | 返回复数z的实部 |
| imag(z) | 虚部 |
| abs(z) | 幅度 |
| angle(z) | 幅角 |
| conj(z) | 共轭复数 |
| complex(a,b) | 以a为实部、b为虚部创建复数 |

A=[2,3,4,5,6]

A=1:2:10 %1 3 5 7 9

A=linspace(1,30,5)

%1.0000 8.2500 15.5000 22.7500 30.0000

向量的点积运算:对应位置上的元素相乘然后再相加

dot(A)

叉积运算:A、B的叉积C,C的方向垂直于A与B所确定的平面

cross(A)

矩阵元素的下标表示法

(1)全下标A(i,j)

(2)单下标A(s) s=(j-1)*m+i

A(2,3) A(6)

A(1:2,3) 矩阵A第1、2行第3列的元素值

A(6,8) 矩阵A单下标第6-8号元素的值

A(:)=1:9

A=

1 4 7

2 5 8

3 6 9

A(2,:)=[ ] %删除第二行

矩阵的创建

  • 直接输入法
  • 抽取法

A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16]

A=

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

(1)全下标

B=A(1:3,2:3) %取矩阵A行数为1~3、列数为2~3的元素构成子矩阵B

B=

2 3

6 7

10 11

C=A([1,3],[2,4]) %取矩阵A行数为1、3,列数为2、4的元素构成子矩阵C

C=

2 4

10 12

D=A(4,:) %取矩阵A的第4行、所有列

D=

13 14 15 16

(2)单下标

B=A([4:6;3 5 7;12:14])

B=

13 2 6

9 2 10

15 4 8

  • 拼接法

F=[A;C]

  • 函数法

矩阵生成函数

|----------------|----------------------------|
| zeros(m,n) | 生成m*n阶的全0矩阵 |
| ones(m,n) | 全1矩阵 |
| rand(m,n) | 生成取值在0~1之间满足均匀分布的随机矩阵 |
| randn(m,n) | 生成满足正态分布的随机矩阵 |
| eye(m,n) | 生成m*n阶的单位矩阵 |

矩阵的代数运算

行列式det(A)

逆矩阵 inv(A)

求矩阵的秩rank(A)

求矩阵的迹trace(A)

求矩阵的特征值和特征向量 [X,Lamda]=eig(A)

转置B=A'

乘幂A^3 开方sqrtm(A) 指数expm(A) 对数logm(A)

|-------------|-----------------------|
| triu(A) | 提取矩阵A的右上三角元素,其余补0 |
| tril(A) | 提取矩阵A的左下三角元素,其余补0 |
| diag(A) | 提取矩阵A的对角线元素 |

数组的创建

创建空数组A=[ ]

创建一维数组

A=1:4

B=linspace(1,2,4)

B=

1.0000 1.3333 1.6667 2.0000

创建二维数组

A=[1 2 3;2 5 6;1 4 5]

B=[ [1:3]; [linspace(2,3,3)]; [3 5 6] ]

C=[ 1:5 ;linspace(3,10,5); a 5 2 6 4]

胞元数组 A(2,3) 第2行第3列元素 A{2,3} 所存的内容

数组大小

d=size(A) d=[m,n]

[a,b]=size(A)

length(A)

数组的维度

ndims(A)

|----------------|----------------------------------------------|
| zeros(m,n) | 创建一个m行n列的全0数组 zeros(m) 创建一个m行m列的全0数组 |
| ones(m,n) | 全1数组 |
| eye | 单位数组,对角线元素为1,其他元素为0 |
| diag(v) | 对角线元素依次对应于向量v的元素 |
| rand(m,n) | m行n列的随机数组,其元素服从0到1的均匀分布 |
| magic(n) | n行n列的魔方数组 |

数组的表示

逻辑索引 B=A>0.8

双下标索引 A(3,1)

单下标索引 A(3)

转换sub2ind/ind2sub

IND=sub2ind(size(A),I,J)

[I,J]=ind2sub(size(A),IND)

数组尺寸调整 reshape(A,2,6)

A=[1,2;3,4];

B=[-1,-2;2,1];

S=3;

A.*B= -1 4

6 4

A*B= 3 0

5 -2

S.*A= 3 6

9 12

S*B= -3 -6

6 3

数值计算

norm(A) 计算向量和矩阵2阶范数

norm(A,p) 计算向量或矩阵的p阶范数

求解线性方程组

矩阵相除法Amn

AX=B X=A\B

m=n且A可逆-----唯一解

n>m-----------最小二乘解

n<m----------最小范数解

消去法

增广矩阵 [A B]

rref() 初等行变换

迭代法

多项式

A=[1,2,3,4,5]

ploy2sym(A) %显示多项式

x=[-1,2;-2,1]

y=ploycalm(p,x)

根roots(p)

导数ployer(p)

乘法卷积conv(p1,p2)

反卷积 [div,rest]=deconv(a,b)

零点 [x,fval,exitflag,output]=fzero(fun,x0,options)

数值积分

q=quad(fun,a,b,tol,trace)

q=quadl(fun,a,b,tol,trace)

q=dbquad(fun,xmin,ymin,ymax,tol,method)

数值计算和符号计算的区别和联系

  1. 数值计算:
    • 当需要快速进行大量数值运算时,如矩阵运算、数值积分等,应使用数值计算。
    • 当对计算精度要求不高,或者可以接受一定误差时,也应使用数值计算。
  2. 符号计算:
    • 当需要进行代数运算、微分、积分、方程求解等时,应使用符号计算。
    • 当需要得到精确结果,或者需要进行符号推导时,也应使用符号计算。

两者的根本区别是 : 数值计算的表达式、矩阵变量中不允许有未定义的自由变量 , 而符号计算可以含有未定义的符号变量。

符号计算

符号对象 sym syms

确定方程中的自变量 symvar()

符号变量代换 subs(S,old,new)

将符号对象转换为数值对象的函数 double() digits() vpa() eval()

c1=sym(sqrt(2)*log(7));

ans1=double(c1)

ans1=

2.7519

符号表达式因式分解 factor()

符号表达式展开expand()

同类项合并函数collect()

化简函数simplify()

通分函数numden()

求极限limit(F,x,a) limit(F,x,a

,'left')左极限

微分 diff(f,n)

积分 int(S,v,a,b)

xor(x,y) 异或

函数

全局变量 global a

局部变量 每个函数在运行时会占用独自的内存

1). 作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等
2). 内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区
3). 生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了
4). 使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量

switch case 分支

某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示)

price<200 没有折扣

200 500 3%折扣

500 1000 5%折扣

1000 2500 8%折扣

2500 5000 10%折扣

5000<=price 14%折扣

输入所售商品的价格,求其实际销售价格

price=input("请输入商品价格");
switch fix(price/100)
case {0,1}
    rate=0;
case {2,3,4}
    rate=3/100;
case num2cell(5:9)
    rate=5/100;
case num2cell(25:49)
    rate=10/100;
otherwise
    rate=14/100;
end
price=price*(1-rate)

input

disp

二维曲线

plot

plot(x,y1,'option',x,y2,'option',...) 缺省:颜色--蓝 折线

|-------|---------|-------|--------|--------|---------|--------|--------|-------------|--------|
| w | 白色 | y | 黄色 | - | 实线 | v | | * | 型号 |
| m | 洋红色 | r | 红色 | -- | 虚线 | ^ | Δ | | 圆圈 |
| g | 绿色 | k | 黑色 | | 点线 | x | 叉号 | square | |
| b | 蓝色 | c | 青色 | -. | 点画线 | + | 加号 | diamond | |

为了使两个plot的图形在同一个坐标显示,可以用hold on命令进行图形保持

可以使用grid on命令为图形添加网格

xlable

ylable

legend 图例

text 在某点上加上文字

1.在同一图上分别用红色实线和绿色虚线绘制y1=sin(x)和y2=cos(x)在区间[0,4*pi]的曲线,并用星号*标出两条曲线的交点以及建立图例

x=0:pi/200:4*pi;
y1=sin(x)
y2=cos(x)
zz=x(find(abs(y1-y2)<0.005))
z=min(zz)
plot(x,y1,'r-',x,y2,'g-.')
hold on
plot(zz,sin(zz),'*')
legend('sin','cos')

2.同一图形窗的不同子图

t=(0:pi/100:pi)';
y1=sin(t)*[1,-1];
y2=sin(t).*sin(9*t);
t3=pi*(0:9)/9;
y3=sin(t3).*sin(9*t3);
subplot(1,2,1)
plot(t,y1,'r:',t,y2,'b',t3,y3,'b。')
subplot(1,2,2)
plot(t,y2,'b')
axis([0,pi,-1,1])

|-----------------------------------|----------|
| bar(x,y) | 条形图 |
| polar(θ,r) | 极坐标图 |
| stairs(x,y) | 阶梯图 |
| line([x1,y1],[x2,y2],...) | 折线图 |
| fill(x,y,'b') | 实心图 |
| scatter(x,y,s,c) | 散点图 |
| pie(x) | 饼图 |

|----------------------|----------------|
| axis on/off | 显示/取消坐标轴 |
| xlabel('option') | x轴加备注 |
| ylabel('option') | y轴加备注 |
| title('option') | 图形加标题 |
| legend('option') | 图形加备注 |
| grid on/off | 显示/取消网格线 |
| box on/off | 给坐标加/不加边框线 |

axis(xmin xmax ymin ymax)

text(x,y,'string','option')

子图

subplot(m,n,p)

三维曲面

surf(z,y,z)

surfc() 在曲线下面绘制等高线

peak镂空

sphere 三维球面

surf() mesh()

相关推荐
远望清一色2 小时前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
顶呱呱程序7 小时前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
简简单单做算法10 小时前
基于Retinex算法的图像去雾matlab仿真
算法·matlab·图像去雾·retinex
其实吧320 小时前
基于Matlab的图像融合研究设计
人工智能·计算机视觉·matlab
Matlab程序猿小助手1 天前
【MATLAB源码-第208期】基于matlab的改进A*算法和传统A*算法对比仿真;改进点:1.无斜穿障碍物顶点2.删除中间多余节点,减少转折。
开发语言·嵌入式硬件·算法·matlab·机器人
IT猿手1 天前
基于卷积神经网络(CNN)的时间序列预测,15个输入1个输出,可以更改数据集,MATLAB代码
人工智能·深度学习·神经网络·算法·matlab·cnn
其实吧31 天前
基于MATLAB的运动车辆跟踪检测系统
开发语言·matlab
梦里水乡8572 天前
基于MATLAB的农业病虫害识别研究
开发语言·matlab
墨痕_7772 天前
论文阅读笔记Dense Passage Retrieval for Open-Domain Question Answering
matlab
真的是我22 天前
基于MATLAB课程设计-图像处理完整版
图像处理·人工智能·计算机视觉·matlab