Matlab command汇总

Basic Operations

算术运算

>>1+2
>>ans=3

>>10-7
>>ans=3

>>2*10
>>ans=20

>>1/2
>>ans=0.50000

>>2^6
>>ans=64

逻辑运算

>>1 == 2 %comparison
>>ans=0

>>1 ~= 2 %not equal
>>ans=1

>>1 && 0 %AND
>>ans=0

>>1 || 0 %OR
>>ans=1

>>xor(1,0)
>>ans=1

变量

变量赋值

>>a=3; %加上“;”表示不打印结果
>>b='hi'
>>c= (3>=1)
c=1

显示变量

>>a=pi;
>>a
a=3.1416
>>disp(a);
3.1416

保留小数点后两位输出

>>disp(sprintf('2 decimals: %0.2f',a))
2 decimals: 3.14

高精度&低精度输出

>>a=3.1416
>>format long
>>a
a=3.14159265358979
>>format short
>>a
a=3.1416

向量与矩阵(Vector and Matrix)

矩阵表示

>>A=[1 2;3 4;5 6]  %A是一个2*3的矩阵,分号表示另起一行
A=
    1 2
    3 4
    5 6

向量表示

>>v=[1 2 3]   %v是一个1*3的矩阵或者说是行向量
v=
    1 2 3
>>v=[1;2;3]   %v是一个3*1的矩阵或者说是列向量

在[m,n]范围内以固定步长生成元素

>>v=1:0.1:2   %以0.1的步长生成范围在1~2之间的元素
>>v=1:6       %默认以1为步长

取矩阵的整行或整列

>>A(2,:) %取A的第二行所有元素
>>A(:,2) %取A的第二列所有元素
>>A([1 3],:)  %取A得第一行和第三行所有元素

矩阵赋值

>>A=[1 2;3 4;5 6]
A=
    1 2
    3 4
    5 6
>>A(:2)=[10;11;12]  %把列向量[10;11;12]赋给A的第二列
A=
    1 10
    3 11
    5 12

给矩阵增一列

>>A=[A, [100;101;102]
A=
    1 10 100
    3 11 101
    5 12 102

把A中所有元素放入一个列向量

>>A(:)
ans=
    1
    3
    5
    10
    11
    12
    100
    101
    102

合并矩阵

>>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=[A B]
C=
    1 2 11 12
    3 4 13 14
    5 6 15 16

>>C=[A;B]  %分号表示把B放到A下面
C=
    1 2
    3 4
    5 6
    11 12
    13 14
    15 16

生成全0或全1矩阵

>>ones(2,3)
ans=
    1 1 1
    1 1 1    
>>zeros(2,3)
ans=
    0 0 0
    0 0 0

生成随机矩阵

>>rand(3,3)   %生成3*3的矩阵,矩阵里所有元素值介于[0,1]
>>rands(3,3)  %生成3*3的矩阵,矩阵的所有元素符合均值为0,标准差为1的高斯分布

绘制向量直方图

>>w=-6+sqrt(10)*randn(1,10000))
>>hist(w)
>>hist(w,50)  %50代表把横坐标分隔为50

单位矩阵

>>eye(4)
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

获取矩阵的维数

>>A=[1 2;3 4;5 6]
>>size(A)
ans=
    3 2

获取向量的长度

>>v=[1 2 3 4]
>>length(v)
ans=4

加载和存储数据

显示当前path

>>pwd

显示当前path所有文件

>>ls

更改path

>>cd 'C:...'

加载数据

>>load data.dat
或者
>>load ('data.data')

查看当前所有变量

>>who
或者
>>whos

清除变量

>>clear

对数据进行运算

假设

>>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'
ans=
    1 3 5
    2 4 6

向量运算

>>v=[1;2;3]
v=
    1 
    2 
    3
>>1./v
ans
    1.00000
    0.50000
    0.33333
>>log(v)  %取指数
ans=
    0.00000
    0.69315
    1.09861
>>exp(v)  %取对数
ans=
    2.7183
    7.3891
    20.0855
>>-v
v=
    -1
    -2
    -3
>>abs(v)  %取绝对值
ans=
    1
    2
    3
>>v+ones(length(v),1)  %等价于v+1,给v的每个元素加1
ans=
    2
    3
    4

有用的函数

>>a=[1 15 2 0.5];

找最值

>>val=max(a)
val=15
>>[val,ind]=max(a)
val=15
ind=2

将元素逐个与3比较

%将元素逐个与3比较
>>a<3
ans=
    1 0 1 1

魔方阵

%魔方阵--所有的行和列加起来值相同
>>A=magic(3)
>>A=
    8 1 6
    3 5 7
    4 9 2

寻找大于/小于/等于某值的元素

>>[r,c]=find(A>=7) %返回元素所在的行和列
r=
    1
    3
    2
c=
    1
    2
    3

向量之和

>>sum(a)
>>floor(a)
>>ceil(a)

取矩阵每一列、行的最大元素

>>A=[8 1 6;3 5 7;4 9 2]
A=
    8 1 6
    3 5 7
    4 9 2
>>max(A,[],1)  %1表示每一列的最大值,也可以用max(A)
ans=
    8 9 7
>>max(A,[],2)  %2表示每一行的最大值
ans=
    8
    7
    9
>>max(max(A))  %取A得最大元素
或者
>>A(:)
>>max(A(:))

取对角元素

>>A=magic(9);
>>A.*eye(9);
>>sum(sum(A.*eye(9)))  %对角元素之和

画数据

画函数曲线

>>t=[0:0.01:0.98];
>>y1=sin(2*pi*4*t);
>>plot(t,y1);
>>hold on;
>>y2=cos(2*pi*4*t);
>>plot(t,y2,'r');
>>xlabel('time');
>>ylabel('value');
>>legend('sin','cos')%标记曲线
>>title('my plot');

>>subplot(1,2,1)  %1行放两张图,编号为1(从左往右第一张)
>>plot(t,y1);
>>subplot1,22) %1行放两张图,编号为2(从左往右第二张)
>>plot(t,y2);
>>axis([0.5 1 -1 1]) %固定横纵坐标值的范围

color bar

>>A=magic(5);
>>imagesc(A)
>>imagesc(A),colorbar,colormap gray;%逗号用于连接命令

控制语句

for

>>for i=1:10
    v(i)=2^i;
>>end;

while

>>while i<=5
    v(i)=100;
    i=i+1;
>>end;

if

>>i=1;
>>while true
>   v(i)=999;
>   i=i+1;
>   if i==6
>        break;
>    elseif i==7
>        break;
>    end;
>>end;

向量化表示(Vectorization)

${h\theta(x)}={\sum(j=0)^n}{\theta_j}{x_j}$=${\theta^T}{x}$

${\theta}={\left[\theta_0\ \theta_1\ theta_2]^T\right}$
${x}={\left[\x_0\ \x_1\ x_2]^T\right}$

Unvertorized implementation

Eg.1

prediction=0.0
for j=1:n+1,
    prediction=prediction+theta(j)*x(j)
end;

Eg.2

double prediction=0.0;
for(int j=0;j<=n;j++)
    prediction+=theta[j]*x[j];

Vectorized implementation

Eg.1

prediction=theta'*x;

Eg.2

double prediction=theta.transpose()*x;

Gradient descent的向量化实现

Gradient descent的数学表达式

${\theta_j}:={\thetaj}-{\alpha}{\frac1m}{\sum{i=1}^m}{h_\theta}{(x^(i)-y^(i))}{x_j^(i)}$
(for all j)

matlab向量化实现