本篇文章是我在准备2020年全国大学生数学建模竞赛所学习的笔记,篇幅较长,将其分为编程篇和算法篇。
前言
一、Matlab基础
1.1实数和复数
>> z = 5
z =
5
1
2
3
4
5
6
>>z=5
z=
5
1.2行向量和列向量
>> x=[1 2 3]
x =
1 2 3
>> x = [1;2;3]
x =
1
2
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>x=[123]
x=
123
>>x=[1;2;3]
x=
1
2
3
1.3矩阵
>> y=[1 2 3;4 5 6;7 8 9]
y =
1 2 3
4 5 6
7 8 9
1
2
3
4
5
6
7
8
>>y=[123;456;789]
y=
123
456
789
>> y = [0:10]
y =
0 1 2 3 4 5 6 7 8 9 10
>> y = [0:10]'
y =
0
1
2
3
4
5
6
7
8
9
10
>> x = [0:0.5:2] | >> x = linspace(0, 2, 5)
x =
0 0.5000 1.0000 1.5000 2.0000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
>>y=[0:10]
y=
012345678910
>>y=[0:10]'
y=
0
1
2
3
4
5
6
7
8
9
10
>>x=[0:0.5:2]|>>x=linspace(0,2,5)
x=
00.50001.00001.50002.0000
>> x = zeros(2,3)
0 0 0
0 0 0
>> x = ones(2,3)
1 1 1
1 1 1
>> x = eye(2)
1 0
0 1
1
2
3
4
5
6
7
8
9
10
11
12
>>x=zeros(2,3)
000
000
>>x=ones(2,3)
111
111
>>x=eye(2)
10
01
1.4 固定变量
pi 3.1416
i 虚数
Inf 报错信息
1.5 矩阵运算和数组运算
矩阵的加、减、乘、除和乘方(加点)
比较和逻辑运算
% 有 == & | xor(异或)
>> a1 = [1,2,3,4,5,6,7,8,9,];
>> a2 = [1,4,3,8,5,6,7,2,9];
>> eq = (a1==a2)
eq =
1 0 1 0 1 1 1 0 1
1
2
3
4
5
6
7
8
9
10
%有==&|xor(异或)
>>a1=[1,2,3,4,5,6,7,8,9,];
>>a2=[1,4,3,8,5,6,7,2,9];
>>eq=(a1==a2)
eq=
101011101
>> Stu =[98 75 64 45 54 67 85 90 89 96 77];
>> A(Stu>90) = 'A'
A =
'A A'
>> A(Stu<90 & Stu>80) = 'B'
A =
'A B BA'
>> A(Stu<80 & Stu>60) = 'C'
A =
'ACC CB BAC'
>> A(Stu<60 & Stu>0) = 'D'
A =
'ACCDDCB BAC'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
>>Stu=[9875644554678590899677];
>>A(Stu>90)='A'
A=
'A A'
>>A(Stu<90&Stu>80)='B'
A=
'A B BA'
>>A(Stu<80&Stu>60)='C'
A=
'ACC CB BAC'
>>A(Stu<60&Stu>0)='D'
A=
'ACCDDCB BAC'
数组操作函数
filpud() 上下旋转 | fliplr() 左右旋转 | rot90 旋转90°
sum()
max、min
常用的数学函数:sin , cos , tan , cot , asin , acos , atan , acot
abs( ) 取决绝对值
sqrt( )开根号
向上取整(aeil)、向下取整(floor)、向零靠取整(fix)、四舍五入(round)
1.6 基本语句
for …. end
if … else … end
while … end
switch … case … end
% 求 1-10 之间的和
x = 0;
for i = 1:10
if mod(i,2)
x=x+1;
end
end
1
2
3
4
5
6
7
8
%求1-10之间的和
x=0;
fori=1:10
ifmod(i,2)
x=x+1;
end
end
t = 0 : pi/180 : 4*pi;
x = 16*sin(t).^3;
y = 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t);
plot(x-3,y,'-r', x+3,y,'-b');
xlabel('x');
ylabel('y');
axis([-20, 20, -20, 15]); %坐标的取值范围
title('Two Heart');
legend('U', 'I');
1
2
3
4
5
6
7
8
9
10
11
12
t=0:pi/180:4*pi;
x=16*sin(t).^3;
y=13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t);
plot(x-3,y,'-r',x+3,y,'-b');
xlabel('x');
ylabel('y');
axis([-20,20,-20,15]);%坐标的取值范围
title('Two Heart');
legend('U','I');
1.7 三维曲面图:meshgrid函数
>> [x,y] = meshgrid(1:3, 1:2)
x =
1 2 3
1 2 3
y =
1 1 1
2 2 2
1
2
3
4
5
6
7
8
9
10
11
12
13
>>[x,y]=meshgrid(1:3,1:2)
x=
123
123
y=
111
222
[x,y] = meshgrid(-pi: 0.1 :pi);
z = sin(x).*cos(y);
mesh(x,y,z);
surf(x,y,z);
xlabel('x');
ylabel('y');
zlabel('z');
title('sin and cos')
1
2
3
4
5
6
7
8
9
10
[x,y]=meshgrid(-pi:0.1:pi);
z=sin(x).*cos(y);
mesh(x,y,z);
surf(x,y,z);
xlabel('x');
ylabel('y');
zlabel('z');
title('sin and cos')
1.8 M函数格式
关键词 function 定义
方便代码的复用
function area = rectarea(L, W)
% 计算面积
% 在这里注释
% 下面是返回值
area = L. * W
1
2
3
4
5
6
7
8
functionarea=rectarea(L,W)
%计算面积
%在这里注释
%下面是返回值
area=L.*W
二、Matlab进阶
2.1文件操作
2.1.1 文本数据的读取
fprintf()
fopen(‘文件名’,‘访问权限(r)’)
读取一行 fgetl()
记得使用fclose()关闭,
2.1.2 关于Excel文件的操作
xlsread(’文件路径’,’表单名’,’单元格’)
xlswrite()
2.1.3 图片数据的读入
imread()
image() 显示
2.2 简单方程计算
定解方程组
\begin{cases} 2x+3y+1z=4\ 4x+2y+3z=17\ 7x+1y-1z=1\ \tag{1}\end{cases}
>> A = [2 3 1; 4 2 3; 7 1 -1];
>> B = [4 17 1]';
>> A\B
ans =
1.0000
-1.0000
5.0000
1
2
3
4
5
6
7
8
9
10
>>A=[231;423;71-1];
>>B=[4171]';
>>A\B
ans=
1.0000
-1.0000
5.0000
线性和非线性拟合
ployfit()默认拟合
fittype() 指定拟合公式
实例
插值
interpl
线性回归
regress
2.3 微分方程
使用Runge-Kutta法求解微分方程
一阶微分方程求解
高阶微分方程求解
1.3.1 传染病模型
其中,@odesir 是定义的一个函数。