随着美赛的推进,数学建模用到matlab的越来越多,然而对matlab不熟悉的还很多,在此写下matlab基础篇,一是帮助没有了解过matlab的同学入门,二是帮助自己巩固知识。
时间紧迫,直接开始!此篇文章包括:
1.1matlab的基础使用
1.1.1特殊变量和常量
1.1.2 输出
1.1.3 matlab command window的基础使用
1.2matlab矩阵的基础使用
1.2.1矩阵行列的输入
1.2.2matlab矩阵索引
1.2.3快速创建大数组
1.2.4矩阵的运算
1.2.5矩阵运算函数
1.3plot库的基础使用
1.3.1plot颜色形状参数等
1.4matlab的数据类型
1.4.1数值类型
1.4.2字符和字符串
1.4.3数据类型之间的转换
1.4.4单位数组
1.5matlab的绘图
1.5.1线性图的绘制
1.5.2饼图的绘制
1.5.3散点图的绘制
1.5.4误差条图
1.5.5直方图his
1.5.6复合直方图
1.5.7多轴图
1.5.8创建动画
1.1.1特殊变量和常量
变量/常量 | 含义 |
---|---|
ans | 最近的计算结果的变量名 |
i,j | 虚数表示 |
Inf | ∞ |
eps | 2.2204e-016 |
NaN | 非数 |
pi | π |
1.1.2 输出
a = 10 # 确认输入之后会输出ans
b = 10; # 带有分号,确认输入之后不会输出ans,直接当做变量存储到workspace里
1.1.3 matlab command window的基础使用
用↑可以查看历史输入指令
clc:清除command window的所有显示
close all : close all figures
clear:清除workspace所存储的所有变量信息和计算结果(慎用,不可逆)
clear var:清除指定变量var
who:显示在workspace所存储的变量
whos:显示在workspace所存储的变量的详细信息
1.2.1 矩阵行的输入
行向量的表示: a = [1 2 3] #(数字之间用空格隔开,表示数字在同一行)
列向量的表示: b = [1;2;3] #(数字之间用分号隔开,分号相隔的数字单独成行)
1.2.2 matlab矩阵索引
A(row, col)
提取单个元素
A = [1 2 3;4 5 6;7 8 9]
A(2,3) #即提取二行三列的元素6
一次提取多个元素
A = [1 2 3;4 5 6;7 8 9]
A([1 3], [1 3])
提取单个元素
A(8) #纵向开始数,从左往右纵向数,第8个为6
一次提取多个元素
A([1 3 5]) #表示为A(1),A(3),A(5)整合的一个行向量 结果为[1 7 5]
A([1 3;1 3]) #即表示[A(1) A(3);A(1) A(3)]
1.2.3快速创建大数组
我们可以先输入一个二维数组,然后通过第三维数组与其关系生成第三维数组,例如输入以下代码可以生成三维数组:
D2=[1,2,3;4,5,6;7,8,9];
D3(:,:,1)=D2;
D3(:,:,2)=2*D2;
D3(:,:,3)=3*D2;
用:代表要显示的整行整列
显示矩阵的一整行:A(3, :)表示显示矩阵的第3行,冒号表示全部信息
显示矩阵的一整列:A(:, 2)表示显示矩阵的第2列
删除整行整列
删除一整行或一整列:赋值[]即可;如A(3, : ) = []使得A的第三行被删除
矩阵间的连接
增广矩阵C = A|B在MATLAB中采用C = [A B](注意是中括号而不是括号,中括号代表矩阵)表示
同理,若要将B矩阵放在A矩阵的下方,则表示为:C = [A;B](即之前的数字换为矩阵)
1.2.4矩阵的运算
点乘:A.*B 表示A,B对应位置的数相乘所形成的矩阵(就像A+B一样只是对应位置的数相加,只是这里换成了乘法)
点除:与点乘同理,乘法换为除法
点阶乘:同理,A.^a 表示每个entry进行a阶乘运算
矩阵加实数:如A + a 表示将A矩阵的所有entry都加上a
矩阵转置:A’
1.2.5矩阵的运算函数
还是使用上面的矩阵A,一起来看一下矩阵的运算函数的使用。
max(A) #表示A中每一列的最大值提取出来后形成的行向量
max(max(A)) # 表示矩阵中最大的entry,即9
min(min(A)) # 表示矩阵中最小的entry,即1
sum(A) #表示A中每一列之和所组成的行向量
mean(A) # 表示A中每一列的平均数所组成的行向量
sort(A):表示A中的每一列进行从小到大的排序(每一个row的数据没有绑定在一起)
sortrows(A)#表示A中的所有row按第一列进行排序,每一行row的数据是绑定的
size(A)#求出A的m x n
length(A)#求出A的长,也即为:max(m,n)(将A看成矩形,矩形的长即为length(A)的值)
find(A==n)#求出A中n的位置是多少(index按前面提到的角度二计算);若不存在则返回:空矩阵: 0×1
x = 0:pi/10:2*pi;
y = sin(x);
figure;
hold on;
plot(x,y)
生成矩阵图像
X=rand(3,3); %随机生成3*3矩阵
figure;
hold on;
plot(X)
生成带参数的图像
x = 0:pi/10:2*pi;
y = sin(x);
figure;
hold on;
plot(x,y,'r-') #带参数 r为红色 -为实线
1.4matlab的数据类型
1.4.1数值类型
1.实数
Matlab的数值类型分为三种,整形,单精度浮点型和双精度浮点型
整形 int 单精度浮点 single 双精度浮点double
因为系统默认的数据类型是双精度浮点,所以在将变量设置为整数时需要进行转换,matlab提供了如下的转化函数。
函数 | 运算法则 |
---|---|
floor | 向下取整 |
ceil | 向上取整 |
round | 取最接近的整数 |
fix | 向0取整 |
2.复数
复数由实部和虚部两部分构成,在Matlab中,字符i或j默认作为虚部标志,关于复数的相关函数如下:
函数 | 说明 | 函数 | 说明 |
---|---|---|---|
complex(a,b) | 构造以a为实部,以b为虚部的复数 | i,j | 虚部标识 |
real(z) | 返回复数z的实部 | image(z) | 返回复数z的虚部 |
abs(z) | 返回复数z的模 | angle(z) | 返回复数z 的辅角 |
conj(z) | 返回复数z的共轭复数 |
3、无穷量(Inf)和非数值量(NaN)
Matlab中使用Inf和-Inf分别表示正无穷大和负无穷大,NaN表示非数值量。正负无穷大一般是由于运算溢出产生,非数值量则是由于类似0/0或Inf/Inf类型的非正常运算产生。
1.4.2字符和字符串
Matlab将文本作为特征字符串或简单地当做字符串,但是实际存储的是字符串的ASCII码。abs函数可以获得字符串的具体值,使用方法如下:
>> a='abc'
a =
abc
>> abs(a)
ans =
97 98 99
1.4.3数据类型之间的转换
类型识别函数:
函数 | 功能 | 函数 | 功能 |
---|---|---|---|
iscell | 判断是否为单元数组 | isnumeric | 判断是否为数值数组 |
isreal | 判断是否为实数 | ischar | 判断是否为字符数组 |
isstr | 判断是否为字符串 | isfloat | 判断是否为浮点数 |
isstruct | 判断是否为结构数组 | whos | 列举变量类型及相关数据 |
类型转换函数:
函数 | 功能 | 函数 | 功能 |
---|---|---|---|
dec2bin | 十进制转为二进制 | int2str | 整数转为字符串 |
num2str | 数值转为字符串 | str2double | 字符串转为double |
1.4.4单位数组
1.创建单位数组
>> A={'x',[2;3;6];10,2*pi}
A =
'x' [3x1 double]
[10] [ 6.2832]
2.访问单位数组
在单元数组中,单元和单元中的内容属于不同范畴,这意味着访问单元和访问单元中的内容是两个不同的操作。对于单元数组C,C(m,n)指的是单元数组中第m行第n列的单元,而C{m,n}则是指的是第m行第n列的单元中的内容。
>> A(1,1)
ans =
'x'
>> A(1,2)
ans =
[3x1 double]
>> A{1,2}
ans =
2
3
6
3.单位数组的合并
>> C={'a','b';'c','d'}
C =
'a' 'b'
'c' 'd'
>> D={'1','2'}
D =
'1' '2'
>> E={A;B}
E =
{2x2 cell}
{2x2 cell}
>> E{1,1}
ans =
'x' [3x1 double]
[10] [ 6.2832
1.5.8创建动画
sinx 动画绘制
clear all
h = animatedline;%动画线
axis([0 4*pi -1 1])
box on
x = linspace(0,4*pi,200);
for k = 1:length(x)
y = sin(x(k));
addpoints(h,x(k),y);%将数据添加到动画线中
drawnow%画出动画线
f=getframe(gcf);
imind=frame2im(f);
[imind,cm] = rgb2ind(imind,256);
if k == 1;
imwrite(imind,cm,'test.gif','GIF', 'Loopcount',inf,'DelayTime',1);
else
imwrite(imind,cm,'test.gif','GIF','WriteMode','append','DelayTime',1);
end
end
到此关于数学建模matlab入门的学习就到此结束了,但是学习还未结束,如需数学建模优秀论文和算法的资料,可在本文下评论获取。