MATLAB 入门

The assignments require the Octave or MATLAB scientific computing languages。

官方教程:https://cn.mathworks.com/support/learn-with-matlab-tutorials.html?s_tid=hp_learn_tutorials

MATLAB中常用方法:
这里写图片描述

行向量,和列向量的初始化
这里写图片描述

对向量的单个元素进行操作
这里写图片描述

对矩阵的每个元素进行操作
这里写图片描述

生成向量的转置
这里写图片描述

以 起始值:间隔值:结束值 的方式创建列向量,可以不写间隔值,默认是1
这里写图片描述

linspace(起始值,结束值,总共点的数量) 方式创建行向量
这里写图片描述

用向量画图,并设置颜色和标记
这里写图片描述

为图添加轴标签,标题,说明
这里写图片描述

创建 大矩阵,需要使用方法
rand,ones,eye,randi,randn,zeros,toeplitz,vander,diag,magic,hilb
这里写图片描述
这里写图片描述

获取矩阵的元素

>> M=[5,-2,3,1;0,1,2,3;8,-5,0,9;10,2,7,4]

M =

     5    -2     3     1
     0     1     2     3
     8    -5     0     9
    10     2     7     4

>> %获取第3行第2列的元素值
>> s1=M(3,2)

s1 =

    -5

>> %获取第2行和第3行第2列的元素值
>> s2=M([2,3],2)

s2 =

     1
    -5

>> %获取第2行到第4行第2列的元素值
>> s2=M(2:4,2)

s2 =

     1
    -5
     2

>> %获取第2列所有元素值
>> s4=M(:,2)

s4 =

    -2
     1
    -5
     2

length(matirx) 计算矩阵行或列数的最大值
size(matirx) 计算行数和列数
这里写图片描述

连接两个矩阵
这里写图片描述

关系运算符和逻辑运算符
这里写图片描述

这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述


Octave 是一种很好的原始语言(prototyping language),使用 Octave 你能快速地实现你的算法,如果你能让你的学习算法在 Octave 上快速的实现,基本的想法实现以后,再用 C++或者Java 去改写,这样你就能节省出大量的时间。

1. Basic Operation

异或运算 如 XOR ( 1, 0 ),其返回值为 1
这里写图片描述

如果你想分配一个变量,但不希望在屏幕上显示结果,你可以在命令后加一个分号,可以抑制打印输出,敲入回车后,不打印任何东西。
这里写图片描述

现在举一个字符串的例子:变量 b 等于”hi”。
这里写图片描述

设置 A 等于圆周率π
这里写图片描述

对于更复杂的屏幕输出,也可以用 DISP 命令显示:
这里写图片描述

也有一些控制输出长短格式的快捷命令:
这里写图片描述

V=1:0.1:2
集合 V 是一组值,从数值 1 开始,增量或说是步长为 0.1,直到增加到 2,按照这样的方法对向量 V 操作,可以得到一个行向量,这是一个 1 行 11 列的矩阵,其矩阵的元素是 1 1.1 1.2 1.3,依此类推,直到数值 2。

v=1:6
这里写图片描述

其他的方法来生成矩阵
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

如果,你知道什么是高斯随机变量,或者,你知道什么是正态分布的随机变量,你可以设置集合 W,使其等于一个一行三列的 N 矩阵,并且,来自三个值,一个平均值为 0 的高斯分布,方差或者等于 1 的标准偏差。
这里写图片描述

并用 hist 命令绘制直方图。
这里写图片描述

绘制单位矩阵:
这里写图片描述

如果对命令不清楚,建议用 help 命令:
这里写图片描述

2.Moving Data Around

这里写图片描述

size(A, 1),将返回 3,这个命令会返回 A 矩阵的第一个元素,A 矩阵的第一个维度的尺寸,也就是 A 矩阵的行数。

命令 size(A, 2),将返回 2,也就是 A 矩阵的列数。

如果你有一个向量 v,假如 v = [1 2 3 4],然后键入 length(v),这个命令将返回最大维度的大小,返回 4。

读入文件数据:
cd 到文件所在目录
load(‘featureX.dat’)

who 命令,能显示出 在我的 Octave 工作空间中的所有变量
这里写图片描述

whos 命令,能更详细地进行查看
这里写图片描述

如果你想删除某个变量,你可以使用 clear 命令,我们键入 clear featuresX

假如我们想把它存入硬盘,那么用

save hello.mat v

命令,这个命令会将变量 v 存成一个叫 hello.mat 的文件,这个命令把数据按照二进制形式储存,或者说是更压缩的二进制形式,因此,如果 v 是很大的数据,那么压缩幅度也更大,占用空间也更小。如果你想把数据存成一个人能看懂的形式,那么可以键入:

save hello.txt v -ascii

这样就会把数据存成一个文本文档,或者将数据的 ascii 码存成文本文档。

A(2,:) 来返回第二行的所有元素,冒号表示该行或该列的所有元素。
A(:,2),这将返回 A 矩阵第二列的所有元素

A([1 3],:),这个命令意思是取 A 矩阵第一个索引值为 1 或 3 的元素,也就是说我取的是 A 矩阵的第一行和第三行的每一列,冒号表示的是取这两行的每一列元素

依然是 A 矩阵,A(:,2) 命令返回第二列,我们还可以为它赋值,第二列就被替换为 10 11 12。
这里写图片描述

接下来一个操作,让我们把 A 设为 A = [A, [100; 101; 102]],这样做的结果是在原矩阵的右边附加了一个新的列矩阵,就是把 A 矩阵设置为原来的 A 矩阵再在右边附上一个新添加的列矩阵。
这里写图片描述

最后,还有一个小技巧,如果你就输入 A(:),这是一个很特别的语法结构,意思是把 A中的所有元素放入一个单独的列向量,这样我们就得到了一个 9×1 的向量,这些元素都是A 中的元素排列起来的。
这里写图片描述

C = [A B],这个意思就是把这两个矩阵直接连在一起
这里写图片描述

我还可以设 C = [A; B],上下排列
这里写图片描述

这个[A B]命令跟 [A, B] 是一样的,这两种写法的结果是相同的。

3.Computing On Data

两个矩阵的乘积,比如说 A × C,我只需键入 A×C,这是一个 3×2 矩阵乘以2×2 矩阵,得到这样一个 3×2 矩阵。

做点乘运算 A .*B,矩阵 A 中的每一个元素与矩阵 B 中的对应元素相乘
这里写图片描述

输入 A .^ 2,这将对矩阵 A 中每一个元素平方
这里写图片描述

同样:1 ./ A 得到 A 中每一个元素的倒数

进行求对数运算,也就是对每个元素进行求对数运算
这里写图片描述

自然数 e 的幂次运算,就是以 e 为底,以这些元素为幂的运算
这里写图片描述

abs 来对 v 的每一个元素求绝对值

直接用 -v ,其实就等于 -1*v

v 中的每个元素都加 1,ones(length(v) ,1) 就相当于ones(3,1),然后我做的是 v + ones(3,1)
这里写图片描述
另一种更简单的方法是直接用 v+1,v + 1 也就等于把 v 中的每一个元素都加上 1
这里写图片描述

A 的转置矩阵, A’, (A’)’ A 转置两次,那么我又重新得到矩阵 A

a=[1 15 2 0.5],这是一个 1 行 4 列矩阵, val=max(a),这将返回 A 矩阵中的最大值 15。
[val, ind] = max(a),这将返回 a 矩阵中的最大值存入 val,以及该值对应的索引,元素 15 对应的索引值为 2 存入 ind,所以 ind 等于 2

命令 max(A), 返回A矩阵每一列的最大值

如果你想要找出整个矩阵 A 的最大值,你可以输入max(max(A))
或者你可以将 A 矩阵转成一个向量,然后键入 max(A(:)),这样做就是把 A 当做一个向量,并返回 A 向量中的最大值。

max(A,B) ,表示取A,B两个矩阵每个位置上的最大值,组成一个维度相同的矩阵

max(A,[],1),这样做会得到每一列的最大值,1表示取矩阵的第一个维度即列
max(A,[],2),这样做会得到每一行的最大值,2表示取矩阵的第二个维度即行
这里写图片描述

a 矩阵 a=[1 15 2 0.5],如果输入 a<3,这将进行逐元素的运算,所以元素小于 3 的返回 1,否则返回 0。
这里写图片描述

如果我写 find(a<3),这将告诉我 a 中的哪些列元素是小于 3 的
这里写图片描述

A = magic(3),magic 函数将返回一个矩阵,称为魔方阵或幻方 (magic squares),它们具有以下这样的数学性质:它们所有的行和列和对角线加起来都等于相同的值。
这里写图片描述

[r,c] = find( A>=7 ),这将找出所有 A 矩阵中大于等于 7 的元素,因此,r 和c 分别表示行和列,这就表示,第一行第一列的元素大于等于 7,第三行第二列的元素大于等于 7,第二行第三列的元素大于等于 7。
这里写图片描述

sum(a),就把 a 中所有元素加起来了

prod(a),prod 意思是 product(乘积),它将返回这四个元素的乘积

floor(a) 是向下四舍五入,因此对于 a 中的元素 0.5 将被下舍入变成 0。

ceil(a),表示向上四舍五入,所以 0.5 将上舍入变为最接近的整数,也就是 1。

a =

    1.0000   15.0000    2.0000    0.5000

>> sum(a)

ans =

   18.5000

>> prod(a)

ans =

    15

>> floor(a)

ans =

     1    15     2     0

>> ceil(a)

ans =

     1    15     2     1

sum(A,1),得到矩阵A每一列的总和,组成的行向量
sum(A,2),得到矩阵A每一行的总和,组成的列向量
sum(sum(A.*eye(3)),得到矩阵A的对角线的和

>> A=magic(3)

A =

     8     1     6
     3     5     7
     4     9     2

>> sum(A,1)

ans =

    15    15    15

>> sum(A,2)

ans =

    15
    15
    15

>> sum(sum(A.*eye(3)))

ans =

    15

>> 

pinv(A),矩阵 A 求逆,伪逆矩阵

flipud 表示向上/向下翻转。

>> flipud(eye(9))

ans =

     0     0     0     0     0     0     0     0     1
     0     0     0     0     0     0     0     1     0
     0     0     0     0     0     0     1     0     0
     0     0     0     0     0     1     0     0     0
     0     0     0     0     1     0     0     0     0
     0     0     0     1     0     0     0     0     0
     0     0     1     0     0     0     0     0     0
     0     1     0     0     0     0     0     0     0
     1     0     0     0     0     0     0     0     0

4.Plotting Data

正弦函数
这里写图片描述
plot(t, y1)
这里写图片描述

>> plot(t,y1)
>> hold on
>> plot(t,y2);
>> plot(t,y2,'r');%r表示使用的颜色
>> plot(t,y2,'g');%r表示使用的颜色
>> xlabel('time');%标记X轴
>> ylabel('value');%标记Y轴
>> legend('sin','cos')%添加图例
>> title('myplot')%添加标题
>> print('myplot.png','-dpng')%将图保存成png格式的文件
>> close %关闭图形窗口

这里写图片描述

Octave 也可以让你为图像标号:
figure(1); plot(t, y1);将显示第一张图,绘制了变量 t y1。
figure(2); plot(t, y2); 将显示第一张图,绘制了变量 t y2。

>> subplot(1,2,1)%将图像分为一个 1*2 的格子,使用第一个格子
>> plot(t,y1);
>> subplot(1,2,2)%使用第二个格子
>> plot(t,y2);

这里写图片描述

axis([0.5 1 -1 1])
设置 x 轴和 y 轴的范围,它将图中的横轴的范围调整至 0.5到 1,竖轴的范围为-1 到 1。

clf
清除一幅图像

>> 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)%可视化矩阵,不同的颜色对应 A 矩阵中的不同值

这里写图片描述

>> imagesc(magic(15)),colorbar,colormap gray

实际运行了三个命令,生成了一个颜色图像,一个灰度分布图,并在右边也加入一个颜色条。所以这个颜色条显示不同深浅的颜色所对应的值。
这里写图片描述

逗号可以连接多个命令或函数调用。
这里写图片描述

5.控制语句(Control Statements)

>> v=zeros(10,1) %将 v 值设为一个 10 行 1 列的零向量

v =

     0
     0
     0
     0
     0
     0
     0
     0
     0
     0

>> for i=1:10,  %循环 让 i 等于 1 到 10
v(i)=2^i;
end;
>> v

v =

           2
           4
           8
          16
          32
          64
         128
         256
         512
        1024
>> indices=1:10 %设置索引等于1一直到10

indices =

     1     2     3     4     5     6     7     8     9    10

>> for i=indices,
disp(i);
end;
     1

     2

     3

     4

     5

     6

     7

     8

     9

    10

Octave 里也有 “break” 和 “continue”语句,你也可以在 Octave 环境里使用那些循环语句。

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

v =

         100
         100
         100
         100
         100
          64
         128
         256
         512
        1024
>> i=1;
>> while true,
v(i)=999;
i=i+1;
if i==6,
break;
end;
end;
>> v(1)=2;
>> if v(1)==1,
disp('The value is one');
elseif v(1)==2,
disp('The value is two');
else
disp('The value is not one or two');
end;
The value is two

如何定义和调用函数:
创建squareThisNumber.m 文件,写入函数体

function y=squareThisNumber(x)
y=x^2;

在MATLAB中将工作区间,cd 到squareThisNumber.m 文件所在文件夹,即可调用函数:
也可以增加环境路径
addpath(‘C:\Users\zxm\Desktop\MATLAB测试’)

>>squareThisNumber(2)

ans =

     4

定义函数function J=costFunctionJ(X,y,theta) 来计算代价函数的值,模型为y= θ0+θ1x

X位训练数据组成的矩阵,y为数据对应的标签

function J=costFunctionJ(X,y,theta)
%X is the "design matrix" containing our training examples
%y is the class labels

m=size(X,1);    %number of training examples X的行数
predictions=X*theta;   %predictions of hypothesis on all m examples

sqrErrors=(predictions-y).^2; %squared errors
J=1/(2*m)*sum(sqrErrors);
X =

     1     1
     1     2
     1     3
 y =

     1
     2
     3    
 theta =

     0
     1    
>> costFunctionJ(X,y,theta)

ans =

     0

设置 θ0=0,θ1=1 ,模型为y=x,测试数据完全拟合,所以代价函数值为0

6.向量化(Vectorization)

对于一些问题,如果能用合适的向量化方法来实现,就会简单许多:
如,这是一个常见的线性回归假设函数:
hθ(x)=j=1nθjxj

未向量化的代码实现方式:

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

     1
     2
     3

>> x=[1;2;3]

x =

     1
     2
     3
>> summatrix(3,theta,x)

ans =

    14

向量化的实现只需要将 hθ(x) 看作 θTx

>> prediction=theta'*x

prediction =

    14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值