Matlab矩阵实验室,所有的运算都是基于矩阵的。这也就是为什么矩阵论在数学建模和工科学习中这么重要。
以下是自己记录的关于Matlab中最简单的操作。虽然简单但是很多细节能够帮助在我们处理以后的研究工作中的很多方面。
一、在Mtalab中复杂的矩阵需要自己动手输入,但是对于等差和等比矩阵能够很方便的创建。
还记得我们一开始学习Matlab语言的时候,为什么我们会常常定义一个syms变量x,然后给出x的范围和步长,其实就是创建一个一维的矩阵(矩阵论里把它叫做形式矩阵在编程中我们可以把它当做数组)。
创建一个x的形式矩阵形式:x=a:b:c。a为初值,b为步长,c为终值。在不给出步长的情况下,步长默认为1.
命令x=linspace(a,b,c)。创建一个初值为a,b为终值,有c个元素的形式矩阵x。
命令x=logspace(a,b,c)。创建一个等比数列,a和b分别是10的指数的初值和终值,c为元素的个数。
二、在做基本运算中,Matlab是不能够分辨形式矩阵的乘法和一般矩阵的乘法的。
所以我们需要引入点乘(.*),点除(./),点幂(.^)用来对基本的一维矩阵来进行运算。他们所表示的是两个矩阵对应的位置进行运算,而不是遵循矩阵的乘法。
三、输出数值显示控制。
其中最常用的是format
short(4位有效数字),format(14位有效数字),在研究GF(2)上的编码的时候最常用的format +(只显示+,-符号),format rat(分数形式),当然matlab会自己提供最好的表示方法format short
g和format long g。
四、Matlab中的内置函数的使用。
函数很多,我只挑了一些自己觉得比较常用的函数进行分析:
*这些简单的操作都是对列进行操作,若要对行操作,我们可以对原始矩阵进行转置。
数学方面:
factor(x) 对x进行因式分解
gcd(x,y) 找出x和y的最大公因数
lcm(x,y) 找出x和y的最小公倍数
rats(x) 用分数表示x
factorial(x) 求x的阶乘
数据分析方面:
max(x)
对于一维的矩阵输出里面的最大值,如果对于一个一般矩阵它将会输出每一列的最大值。如果我们需要求出每一行的最大值,我们可以对x进行转置(x=x')然后再使用max,而如果我们需要知道这个矩阵中最大的值,有两种方法,一是输入max(max(x))或者利用max(x(:)),x(:)的意思是把矩阵转成一维矩阵。min(x)用法是一样的。
[a,b]=max(x)
对于一维的矩阵a输出里面的最大值,b输出它的位置,如果对于一个一般矩阵a将会输出每一列的最大值,b会输出它的每一列的位置。[a,b]=min(x)用法是一样的。
mean(x)求x的平均值,如果x为矩阵则它求的是每一列的平均值,同求最大值一样,如果我们需要求整个矩阵的平均值,那么我们也可以使用mean(mean(x))或者mean(x(:))。
mode(x) 求数组中出现次数最多的数。
std(x) 计算数组的标准差。一般矩阵输出每列的标准差。
var(x) 计算数组的方差。一般矩阵输出每列的方差。
求和累乘方面:
sum(x)
对于数组求个元素的和,对于一般矩阵,返回各列的和。
prood(x) 对于数组求个元素的乘积,对于一般矩阵,返回各列的乘积。
cumsum(x) 求x元素的累加和。
cumprod(x) 求x的累乘。
排序方面:
sort(x)
对于数组会按x的升序输出,对于一般矩阵会对每列进行排序然后输出。sort(x,'dexcend')强制降序输出。
sortrows(x)以矩阵的第一列为标准,升序排列矩阵的各行。
sortrows(x,n)以矩阵的第n列为标准,升序排列矩阵的各行。
矩阵方面:
size(x)和[a,b]=size(x)前者会输出矩阵的行数和列数,后者令行数等于a,列数等于b。
length(x) 确定矩阵x的最大长度,列的个数。
rand(n) 产生一个0到1区间内的n阶方阵,rand(m,n) 产生一个0到1区间内的m*n阶阵。
randn(n) 产生一个均值为0,方差为1的n阶高斯随机方阵。randn(m,n)
产生一个0到1区间内的m*n高斯随机阶阵。
五、下面是一个对Matlab里面的数据添加高斯噪声的Matlab程序,这样的程序能够在经过对信道的研究分析中起很可观的作用。
clear;
clc;
load handel; %载入Matlab数据文件中的音乐
noise=randn(length(y),1)*0.1; %为载入的因为添加高斯噪声
sound(y+noise,Fs); %播放带有该高斯噪声的音乐
t=1:length(y); %创建一个一维线性的矩阵
noisy=y+noise; %对原始的声音加入高斯噪声
plot(t(1,1:200),y(1:200,1),'b',t(1,1:200),noisy(1:200,1),':r');
%输出音乐数据采集的图(由点构成,由于数据点很多,只取了前200个点做出比较)
title( 'Music from Handel' );
xlabel( 'Element Number in Music Array' );
ylabel( 'Frequency' );
%这里要讲的是,加高斯噪声时候我们需要关心噪声的标准差,标准差关系着声音的离散程度,也就是说噪声的强度,标准差越大,噪声越大。
%
plot(t(1,1:200),y(1:200,1),'b',t(1,1:200),noisy(1:200,1),':r');中的t(1,1:200)是取第一行,1到200列的数据的意思,y(1:200,1)是取第一列,1到200行数据的意思。这里关系到矩阵里面冒号的一些操作。