目录
5-1 基本操作
1.基本运算
5+6
ans =
11
>> 3-2
ans =
1
>> 5*8
ans =
40
>> 1/2
ans =
0.5000
2^6
ans =
64
2.逻辑运算
1==2 %false
ans =
logical
0
>> 1~=2 %true
ans =
logical
1
>> 1&&0 %AND
ans =
logical
0
>> 1||0 %or
ans =
logical
1
3.变量赋值
>> a=3; %变量
>> b='in'; %字符串
>> disp(a) %显示
3
>> disp(sprintf('2 decimals:%0.2f',a))
2 decimals:3.00
>> disp(sprintf('2 decimals:%0.6f',a))
2 decimals:3.000000
4.向量与矩阵
A=[1 2;3 4;5 6] %生成三行两列的矩阵
A =
1 2
3 4
5 6
V=[1 2 3] %生成行向量
V =
1 2 3
>> W=[1;2;3] %生成列向量
W =
1
2
3
V=1:0.1:2 %从1起始每间隔0.1列写一个数,直到2
V =
1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 1.8000 1.9000 2.0000
>> ones(2,3) %2行3列的1矩阵
ans =
1 1 1
1 1 1
>> zeros(1,3) %1行3列的零矩阵
ans =
0 0 0
>> rand(1,3) %随机值在0~1之间的随机变量矩阵
ans =
0.8147 0.9058 0.1270
>> randn(1,3) %高斯随机变量矩阵
ans =
0.8622 0.3188 -1.3077
>> eye(5) %单位矩阵
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
5-2 移动数据
1.测量数据长度
size(A) %返回矩阵大小
size(A,1) %返回矩阵行数
size(A,2) %返回矩阵列数
length(V) %返回向量长度
2.数据存取
>> pwd %文件所在路径
ans =
'C:\Users\by\Desktop'
cd %改变路径
who %显示变量
whos %显示变量的详细内容
save hello.mat V; %在桌面保存一个.mat后缀的文件
load hello.mat; %加载已经保存的文件
save hello.txt V -ascii %将数据保存为ascii编码的文档
%获取数据
>> A=[1 2;3 4;5 6]
A =
1 2
3 4
5 6
>> A(3,2) %获取第三行第二列的数
ans =
6
>> A(2,:) %第2行所有元素
ans =
3 4
>> A(:,2)=[1,3,5] %给第二列赋值
A =
1 1
3 3
5 5
>> A=[A,[1;3;5]] %增加1列
A =
1 1 1
3 3 3
5 5 5
>> A=[A,[1;3;5]]
A =
1 1 1
3 3 3
5 5 5
>> A(:) %A中所有元素放入一个列向量
ans =
1
3
5
1
3
5
1
3
5
5-3 计算数据
>> A=[1 2;3 4;5 6]
A =
1 2
3 4
5 6
>> B=[11 12;13 14;15 16]
B =
11 12
13 14
15 16
>> C=[1 1;2 2]
C =
1 1
2 2
>> A*C %矩阵相乘
ans =
5 5
11 11
17 17
>> A.*B %矩阵内元素相乘
ans =
11 24
39 56
75 96
% .表示元素运算
A' %A的转置
V=[1;2;3]
max(V) %向量V最大值
>> V<3 %判断向量与设定条件大小比较
ans =
3×1 logical 数组
1
1
0
find(V<3) %找到V中所有小于3的值,返回其索引
magic(3) %生成幻方矩阵
>> sum(V) %向量元素求和
ans =
6
sum(A,1) %每一列的和
sum(A,2) %每一行的和
>> prod(V) %向量元素求积
ans =
6
a=[1;0.5;1.5;2]
a =
1.0000
0.5000
1.5000
2.0000
>> floor(a) %向下取整
ans =
1
0
1
2
>> ceil(a) %向上取整
ans =
1
1
2
2
rand( ) %随机矩阵
pinv( ) %逆矩阵
5-4 数据绘制
定义一个向量t及变量y1
>> t=[0:0.01:0.98];
>> y1=sin(2*pi*4*t);
若需绘制以t为横轴,y1为纵轴的曲线,则
plot(t,y1)
得到正弦曲线
若要绘制余弦曲线,需输入cos( )
若要两个曲线并列显示,则
>> hold on;
>> y2=cos(2*pi*4*t);
>> plot(t,y2)
得到
>> xlabel('time') %横轴标记
>> ylabel('value') %纵轴标记
>> legend('sin','cos') %曲线标记
>> title('plot') %图名标记
>> print -dpng 'my plot.png' %保存图像
关闭图像时使用close
使用以下代码绘制两个图像
>> figure(1);plot(t,y1)
>> figure(2);plot(t,y2)
>> subplot(1,2,1); %在一个1*2大小的第一个格子中绘图
>> plot(t,y1)
>> subplot(1,2,2); %在一个1*2大小的第二个格子中绘图
>> plot(t,y2)
axis([0.5 1 -1 1]) %限定图中坐标轴范围
还有一些对矩阵直观感受的图
>> A=magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> imagesc(A)
colorbar %色卡
colormap gray %灰度地图
5-5 控制语句
1.for循环
>> V=zeros(10,1);
>> for i=1:10
V(i)=2^i;
end;
>> V
V =
2
4
8
16
32
64
128
256
512
1024
2.while循环
>> i=1;
>> while i<=5,
V(i)=100;
i=i+1;
end;
>> V
V =
100
100
100
100
100
64
128
256
512
1024
3.if语句
>> i=1;
>> while true,
V(i)=999;
i=i+1;
if i==6,
break;
end;
end;
>> V
V =
999
999
999
999
999
64
128
256
512
1024
4.if-else语句
>> V(1)=2;
>> if V(1)==1.
disp('the value is 1');
elseif V(1)==2,
disp('the value is 2');
else
disp('not 1 or 2');
end;
the value is 2
5.定义函数
function y=squarethisnumber(x) %编辑器定义函数
y=x^2;
%------------------------------------------------
>> squarethisnumber(5)
ans =
25
5-6 矢量
设有一个线性回归假设函数
等同于
未向量化代码
>> prediction=0.0;
>> for j=1:n+1,
prediction=prediction+theta(j)*x(j)
end;
向量化代码
>> prediction=theta'*x;
梯度下降:
可以写为向量形式,使算法更为高效。