%% 导言
%MATLAB这个词代表“矩阵实验室”(matrix laboratory)
%是Mathworks公司于1984年推出的一套高性能的数值计算的可视化软件
%数学计算;
%算法开发;
%数据采集;
%系统建模和仿真;
%数据分析和可视化;
%科学和工程绘图;
%应用软件开发(包括用户界面)。
%% 1 常用命令
% help+命令 /*在command window中显示帮助*/
% doc+命令 //在windows窗口中显示帮助
% demo //打开examples and videos
% clear all //清除workspace中的所有变量
% clear X //清除变量X
% clc //清除command window中的所有命令
% whos //查看当前定义的变量
%% 2 变量的命名规则
%2.1 变量区分大小写
%2.2 长度不能超过63位
%2.3 变量名以字母开头,可以由字母、数字和下划线组成,但不能使用标点
%% 3 数据类型
%3.1 数字
%3.2 字符与字符串
s='Feifeitezhandui'
length(s)
%3.3 矩阵//神经网络、无人驾驶都归结于矩阵计算
A=[1,2,3;4,5,6;7,8,9]
B=A'%矩阵转置
C=A(:)
D=inv(A)
A*D
E=zeros(10,5,3)%(10行,5列,3维)
E(:,:,1)=rand(10,5)%rand(m,n) //生成m行,n列的伪随机数
E(:,:,2)=randi(5,10,5)%randi //生成均匀分布的伪随机数
E(:,:,3)=randn(10,5)%randn //生成标准正态分布的伪随机数
%3.4 元胞数组:matlab中特有的一种数据类型,是数组的一种,内部元素可以是属于不同的数据类型。
A=cell(1,6)%(行,列)
A{2}=eye(3)%3乘3的对角线数值为1的单位矩阵;索引从1开始
A{5}=magic(5)%魔方,用来生成n阶的幻方。比如3阶的幻方就算1-9个数字,组成一个3*3的矩阵,横、竖、斜三个方向的3个数字的和是相同的
B=A{5}
%()取单元数组的元数;{}取单元数组的内容。
%3.5 结构体
books=struct('name',{{'Machine Learning','Date Mining'}},'price',[30 40])
% struct后面的称为结构体,我们把它赋予books
books.name%books.name相当于在books当中选择name这个属性
books.name(1)%表示选择name属性的第n项,结果是个元胞数组
books.name{1}%表示选择name属性的第n项,结果是个值(字符串)
%% 4矩阵
%4.1矩阵的定义
A=[1,2,3,4,5,6]
B=1:2:9%选择1-9中的数值,‘2’是步长
C=repmat(B,3,1)%重复3行1列
D=ones(2,4)%2行4列全1
%4.2矩阵的四则运算
A=[1,2,3,4;5,6,7,8]
B=[1,1,2,2;2,2,1,1]
C=A+B
D=A-B
E=A*B'%(A乘B的转置)(需要第一个矩阵的列数和第二个矩阵的行数相同才能相乘)
F=A/B%相当于A乘B的逆矩阵(矩阵里面没有直接表示除的但是意思上时乘逆矩阵)
J=A.*B%意思是每一项对应相乘
H=A./B%意思是每一项对应相除
%4.3矩阵的下标
A=magic(5)
B=A(2,3)
C=A(3,:)%冒号代表取的全部
D=A(:,4)
[m,n]=find(A>20)%找大于20的序号值/矩阵
%% 5逻辑和流程控制
%5.1 for...end 按照给定的判断范围或给定的循环次数重复完成一次或多次运算
%for 循环变量=初值:步长:终值(步长为1时可以省略)
%执行语句1
%...
%执行语句n
%end
%例5.1.1:求1^2+2^2+3^2+4^2+5^2的和
sum=0
for n=(1:5)
sum=sum+n^2
end
%例5.1.2:求sigma i!(i=1:5)
sum=0
for i=1:5
p=1
for j=1:i
p=p*j
end
sum=sum+p
end
%5.2 while...end 根据给定的条件,决定是否以不确定的循环次数来执行循环语句体
%while 条件表达式(成立即执行,不成立直接end)
%执行语句1
%...
%执行语句n
%end
%例5.2.1 求1+2+3+4+5+...+10的和
sum=0
for i=(1:10)
sum=sum+i
end
sum=0
n=1
while n<=10
sum=sum+n
n=n+1
end
%例5.2.2 求1~100的奇数和
x=1
sum=0
while x<101
sum=sum+x
x=x+2
end
%5.3
%5.3.1 if...end一种分支结构
%if 条件表达式(如果表达式为真,执行语句体,为假则end)
%...
%语句体
%...
%end
%例
a=100
b=20
if a>b
'true'
end
%5.3.2 if...else...end一种分支结构
%if 条件表达式(如果表达式为真,执行语句体1,为假则执行els表达式)
%...
%语句体1
%...
%else 条件表达式(如果表达式为真,执行语句体2,为假则end)
%...
%语句体2
%...
%例
a=100
b=20
if b>a
'fake'
else b<a
'ture'
end
%5.4 switch...case...end通过某个表达式的值进行比较,根据比较的结果做不同的选择,以实现程序的分支功能
%switch 表达式(数值或字符串)
%case数值或字符串1
%语句体1;
%case数值或字符串2
%语句体2;
%...
%otherwise(可以省略,省略时所有case不满足就end)
%语句体n;
%end
%####配合end使用,千万不要漏掉end
%% 6绘图基础操作
%6.1 二维平面绘图
%常用设置:颜色‘color’;线形‘LineStyle’;线宽‘LineWidth’
x=0:0.01:2*pi
y=sin(x)
figure%建立一个幕布
plot(x,y)%/函数/绘制一个二维图
title('y=sinx')
xlabel('x')
ylabel('sin(x)')
xlim([0,2*pi])%横坐标的取值范围
x=0:0.01:20;
y1=200*exp(-0.05*x).*sin(x)
y2=0.8*exp(-0.5*x).*sin(10*x)
figure
[AX,H1,H2]=plotyy(x,y1,x,y2,'plot')%共用一个x轴的坐标系
set(get(AX(1),'Ylabel'),'String','Slow Decay')
set(get(AX(2),'Ylabel'),'String','Fast Decay')
xlabel('Time(/musec)')
title('Multiple Decay Rates')
set(H1,'LineStyle','--')%虚线
set(H2,'LineStyle',':')%冒号线
x=(1:0.01:100)
y= randn(100,3);
figure;
plot(y(:,1));hold on;
plot(y(:,2));hold on;
plot(y(:,3));
set(plot(y(:,1)),'color','r','LineStyle','--')
set(plot(y(:,2)),'color','g','LineStyle',':')
%6.2 三维立体绘图
t=0:pi/50:10*pi
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
%hold on 保持前面的设定
grid on%加网格线
axis square%变成正方体
[x,y,z]=peaks(30)
mesh(x,y,z)
grid
%% 7图形的保存与导出
% Eit-Copy Figure
% Toolbar-Save
% print('-depsc','tiff',')
% File Export Setup
%%
clear;clc;close all;
x = linspace(1, 200, 100);
y1 = log(x) + 1;
y2 = log(x) + 2;
figure;
plot(x, y1);
hold on
plot(x, y2, 'LineWidth', 2);
hold off
legend('y1', 'y2');
y3 = y1 + rand(1, 100) - 0.5;
plot(x, y1, 'LineWidth', 2, 'Color', [0.21, 0.21, 0.67]);
hold on
% 设置数据点的形状、数据点的填充颜色、数据点的轮廓颜色
plot(x, y3, 'o', 'LineWidth', 2, 'Color', [0.46, 0.63, 0.90], 'MarkerFaceColor', [0.35, 0.90, 0.89], 'MarkerEdgeColor', [0.18, 0.62, 0.17]);
hold off
scatter(x, y3, x, x, 'filled');
%scatter(x, y3,50, 'filled');
% 先自己做一个 colormap
c_map = [0.00, 0.36, 0.67
0.68, 0.42, 0.89
0.44, 0.62, 0.98
0.10, 0.67, 0.59
0.99, 0.57, 0.59
0.28, 0.55, 0.86
0.96, 0.62, 0.24
0.30, 0.90, 0.56
0.12, 0.46, 0.71
0.46, 0.63, 0.90
0.96, 0.37, 0.40
0.14, 0.76, 0.71
0.99, 0.50, 0.02
0.00, 0.57, 0.76
0.35, 0.90, 0.89
0.17, 0.62, 0.47
0.21, 0.21, 0.67
0.99, 0.49, 0.00
0.98, 0.74, 0.44
0.97, 0.60, 0.58
0.18, 0.62, 0.17
0.68, 0.87, 0.53
0.12, 0.46, 0.70
0.65, 0.79, 0.89
0.95, 0.99, 0.69
0.74, 0.92, 0.68
0.37, 0.81, 0.72
0.01, 0.72, 0.77];
colormap(c_map);