matlab 建模核心用法
文章目录
- (1) 最基础用法
- (2) matlab 基础函数
- (3) matlab 文件导入
- (4) matlab 作图
- (5) matlab 匿名函数
- (6) matlab 随机数
(1) 最基础用法
(1) 在每一行的语句后面加上分号,表示不显示运行结果。
(2) 多行注释:选中要注释的若干语句,快捷键Ctrl+R。
(3) 取消注释:选中要取消注释的语句,快捷键Ctrl+T。
(4) clear;clc;
clear表示清空工作区的所有变量,clc表示清除命令行窗口的所有文本。clear;clc;
语句一般放在程序的开头,起到初始化的作用。
(5) 输出和输入函数(disp,input
)。
- 对disp,后面的’;'无所谓加不加。
- 对input,后面的分号
A = input('请输入A:');
当加上分号时,不输出A的值,如果不加分号则输出A的值。
(6) matlab合并字符串:
strcat(str_1,str_2,...,str_n)。
[str_1,str_2,……, str_n]
或[str_1 str_2 …… str_n]
。- 字符串元胞数组是用大括号包起来
s = {'str_1','str_2' 。。。'str_n'}
(7) 字符串转换函数:num2str(number)
将数字转换为字符串。
(8) 提取矩阵中指定位置的元素
假设矩阵为
A
A
A
A(i,j)
取指定行和列的一个元素(相当于二维数组,输出的是一个值)。A(i,:)
取指定某一行的全部元素,输出的是一个行向量。A(:,j)
取指定某一列的全部元素,输出的是一个列向量。A(ia:d:ib,:)
取指定的某些行的全部元素 i a , i b i_a,i_b ia,ib 表示起始行和结束行, d d d 代表公差,输出的是一个矩阵。A(:)
取出 A A A 中的所有元素,最后输出一个列向量,因为matlab在底层是以列来存储的。
(9) Matlab中矩阵的运算
- 两个矩阵之间的乘法
*
,两个矩阵之间的除法/
。 A / B A/B A/B 也就相当于 A ∗ i n v ( B ) A*inv(B) A∗inv(B), A A A 与 B B B 的逆相乘。 - 两个形状相同的矩阵之间的对应元素相乘与相除。
.*
./
- 矩阵中的每一个元素乘或除以一个常数使用加点与不加点的都可以。
- 矩阵中每个元素同时乘方。
.^
注意A^2
↔ \leftrightarrow ↔A*A
(10) 矩阵与常数的大小判断运算
> == <
结果返回一个矩阵,如果对用位置满足条件则为1,否则为0。
(11) 判断语句
if a >= 85
disp('成绩优秀')
elseif a >= 60
disp('成绩合格')
else
disp('成绩挂科')
end
(12) 求程序运行时间
tic
程序代码
toc
最后会返回程序运行的时间。
(2) matlab 基础函数
(1) sum
函数
假设矩阵为
A
A
A ,向量为
α
\alpha
α
- 不管
α
\alpha
α 是行向量还是列向量,
sum(α)
都表示 α \alpha α 内所有元素的和。 - 对矩阵
A
A
A 所有元素求和:
sum(sum(A))
或者sum(A(:))
- 将矩阵的每一列进行求和,最终返回一个行向量:
sum(A;1)
与sum(A)
的效果是一样的。 - 将矩阵的每一行进行求和,最终返回一个列向量:
sum(A;2)
。
(2) size
函数的使用
假设矩阵为
A
A
A
- 同时返回矩阵
A
A
A 的行与列
[r,c]=size(A)
- 只返回矩阵
A
A
A 的行
r=size(A,1)
- 只返回矩阵
A
A
A 的列
c=size(A,2)
(3) repmat
函数的使用
B=repmat(A,m,n)
将A复制 m × n m\times n m×n 块。
(4) Matlab求特征值与特征向量
E=eig(A)
直接返回特征值,构成一个列向量。[V,D]=eig(A)
返回特征值与特征向量。注意 D 构成一个对角矩阵,V 的每一列都是与 D 相应的特征值对应的特征向量。
(5) zeros,ones
zeros(m,n)
产生一个 m × n m\times n m×n 维的全0矩阵。ones(m,n)
产生一个 m × n m\times n m×n 维的全1矩阵。
(6) find函数的用法
- 初级功能:
A为一个向量,X为一个矩阵- 返回向量或矩阵中不为0的元素的位置索引。
find(A)
,对于矩阵A,按列存储方式返回不为0的元素的位置索引。对于[r,c]=find(A)
返回每一个不为0的元素的行坐标与列坐标。对于[r,c,v]=find(A)
返回行坐标,列坐标和每一个坐标下的值。 - 返回前k个不为0的元素的位置索引。
find(A,k)
↔ \leftrightarrow ↔find(A,k,'first')
- 返回后k个不为0的元素的位置索引。
find(A,k,'last')
- 返回向量或矩阵中不为0的元素的位置索引。
- 中级功能
- 找A中等于m的元素的索引
find(A==m)
找到A中前k个等于m的元素的索引find(A==m,k,'first')
找到A中后k个等于m的元素的索引find(A==m,k,'last')
。
- 找A中等于m的元素的索引
(7) magic(n)
幻方矩阵。
(8) matlab排序
- 按每一列排序
sort(A,1)
- 按每一行排序
sort(A,2)
- 按降序排序
sort(A,1,'descend')
,sort(A,2,'descend')
(9) roundn(x,n)
:任意位置四舍五入,
x
x
x表示需要四舍五入的数,
n
n
n表示需要在哪位四舍五入 。0个位,1十位 ,2百位,-1小数点后一位。
(10) nargin
:使用nargin
可以判断函数输入的参数的个数。
function test_nargin(a,b)
switch nargin
case 2
disp('2 input arguments')
case 1
disp('1 input arguments')
otherwise
disp('0 input arguments')
end
(11) mean(X)
:求解平均值。
(12) mod(m,n)
:表示求
m
÷
n
m\div n
m÷n 的余数。
(13) unique(X)
:剔除一个矩阵或者向量的重复值,并将结果按照从小到大的顺序排列。
(14) cumsum(X)
:返回矩阵
X
X
X 按列叠加后的一个新矩阵。
(15) diag(A)
:当
A
A
A 是一个矩阵时,会返回
A
A
A 的主对角线元素,当
A
A
A 是一个向量时,会返回一个对角矩阵,向量中的元素依次作为对角线上的元素。
X = diag(v)
v=[1 2 3];
diag(v)
ans =
1 0 0
0 2 0
0 0 3
A=diag(ans)
A=
1
2
3
(16) 重构矩阵 reshape
:一定要注意重构是按照列进行的。
-
将一个向量重构为矩阵
A = 1:10; B = reshape(A,[5,2]) B = 5×2 1 6 2 7 3 8 4 9 5 10
-
将一个矩阵重构
A = magic(4) A = 4×4 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 B = reshape(A,[],2) B = 8×2 16 3 5 10 9 6 4 15 2 13 11 8 7 12 14 1
(3) matlab 文件导入
(1) 将EXCEL表中的文件导入Matlab中,然后可以保存成为.mat文件,下次再使用时用load
导入.mat文件即可。
(4) matlab 作图
-
plot
① ① ① 用法plot(x1,y1,'type',x2,y2,'type')
其中type中填线方式,点方式和颜色。
② ② ② type 的类型- 线方式:
-
实线,:
点线,-.
虚点线,--
虚线。 - 点方式:
.
圆点,+
加号,*
星号,x
x型,o
小圆圈。 - 颜色:
y
黄,r
红,g
绿,b
蓝,w
白,k
黑,m
紫,c
青。 - 例如
plot(x,y,'r*');
③ ③ ③ 标注横纵坐标:
xlabel('string')
,ylabel('string')
④ ④ ④ 对使用的线或点进行标注
legend(string1,string2,...,stringn,'location','方位')
前面的每一个string代表对对应的线或点的描述,后面的方位表示可以将标注框放在figure的哪个位置。
⑤ ⑤ ⑤ 调整线的宽度
plot(任意, 'linewidth', length)
任意代表生成的任何一个图像,length 表示输入一个数字,表示线的宽度。
⑥ ⑥ ⑥ 画图后不显示坐标轴
set( gca, 'XTick', [], 'YTick', [] )
⑦ ⑦ ⑦ 进行点的填充色、大小和轮廓线的设置'MarkerFaceColor' - 标记填充颜色 'MarkerSize' - 标记大小 'MarkerEdgeColor' - 标记轮廓颜色 plot(x,y,'o','LineWidth',1,... 'MarkerEdgeColor','k','MarkerFaceColor','r',... 'MarkerSize',10); %表示线宽为 1,填充色为红色,边框为黑色,点的大小为 10
- 线方式:
-
fplot
绘制表达式或函数
① ① ①fplot(f)
在默认区间 [ − 5 , 5 ] [-5,5] [−5,5](对于 x)绘制由函数 $y = f(x) $ 定义的曲线。
② ② ②fplot(f, [xmin xmax] )
在指定区间内绘制函数。 -
subplot(m,n,p)
:将多个图像画到同一个figure中, m , n m,n m,n 表示将整个figure分成 m × n m\times n m×n个小的作图区域, p p p 表示选取第 p p p 个作图区域,注意subplot
要在plot
前面使用。 -
hold on
:在同一张图上做出多个线或点。 -
grid on
:在图上打开网格。 -
figure
:figure(i)(i=2,3,4)
可以打开新的绘图窗口,保证原来的图像不被覆盖。 -
text(x,y,string)
:在图上坐标为 ( x , y ) (x,y) (x,y) 处标记上字符串 string。 -
close(H)
:关闭画好的 figureH。 -
pause(sec)
: s e c sec sec 填入需要延迟的秒数。 -
axis([x_0 x_1 y_0 y_1])
:将坐标轴横坐标范围设置为(x_0,x_1)
,将纵坐标的范围设置为(y_0,y_1)
。
(5) matlab 匿名函数
handle = @(arglist) anonymous_function
其中handle
表示因变量,arglist
表示自变量,anonymous_function
表示写出的函数表达式。
⭐️例如z= @(x,y)sin(x+y)
(6) matlab 随机数
randi([left,right],m,n)
:产生均匀分布的随机整数矩阵,整数的范围为 [ l e f t , r i g h t ] [\bf left,right] [left,right] ,矩阵的大小为 m × n m\times n m×n 。rand(m,n)
:产生均匀分布的随机数矩阵,数的范围为 [ 0 , 1 ] [0,1] [0,1] ,矩阵的大小为 m × n m\times n m×n。a+(b-a)*rand(m,n)
:产生均匀分布的随机数矩阵,数的范围为 [ a , b ] [a,b] [a,b] ,矩阵的大小为 m × n m\times n m×n。normrnd(μ,σ,m,n)
:产生正态分布的随机数矩阵,均值为 μ \mu μ ,标准差为 σ \sigma σ,矩阵的大小为 m × n m \times n m×n。exprnd(num)
:产生均值为num
的指数分布随机数,也就是 λ = 1 n u m \lambda=\dfrac{1}{num} λ=num1。
unifrnd(a,b,m,n)
:可以输出在 [ a , b ] [a,b] [a,b] 之间均匀分布的随机数组成的 m m m 行 n n n 列的矩阵。randperm(num)
:生成 1 ∼ n u m 1\sim num 1∼num 组成的一个随机序列。randsrc(m,n,[alphabet;prob])
:表示按照一定的概率生成一组随机数,其中alphabet
表示可以产生的数字,prob
表示产生各个数字的概率。