您的位置:首页 > 编程语言 > MATLAB

matlab函数的集锦

2014-02-21 10:56 148 查看
1.textread基本语法是:

[A,B,C,…] = textread(filename,format)

[A,B,C,…] = textread(filename,format,N)

其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。

必须严格遵守用法不可出现data=textread(filename,format,N)的形式

其中括号里面变量的个数必须和format中定义的个数相同。如果每N行相同格式的数据,可采用[A,B,C,…] = textread(filename,format,N)的语法,读取N次。

_______________________________________________________________________________________

注:textread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。

例如:有分隔符(逗号,分号...)

myfile.txt 中的内容如下:

1, 2,3, 4

5, 6,7, 8

9, 10,11, 12

读取:

>>[data1,data2,data3,data4]=textread('myfile.txt','%n%n%n%n','delimiter', ',')

>> data=[data1 data2 data3 data4]

data =

1 2 3 4

5 6 7 8

9 10 11 12

这里delimiter是指 指出分隔符,读数据的时候会自动跳过分隔符。

至此应该知道Iris.txt怎么读入了吧。

[data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s','delimiter',',');

需要注意的是,参数位置要和textread函数用法对应

[A,B,C,…] = textread(filename,format,N)也就是filename,format,N三个参数必须在其他参数前面,所以150才会出现在format后

例如:[data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s',150,'delimiter',',');

..............................................................................

2. find

找到非零元素的索引和值

语法:

1. ind = find(X)

2. ind = find(X, k)

3. ind = find(X, k,'first')

4. ind = find(X, k,'last')

5. [row,col] =find(X, ...)

6. [row,col,v] =find(X, ...)

说明:

1. ind =find(X)

找出矩阵X中的所有非零元素,并将这些元素的线性索引值(linear indices:按列)返回到向量ind中。

如果X是一个行向量,则ind是一个行向量;否则,ind是一个列向量。

如果X不含非零元素或是一个空矩阵,则ind是一个空矩阵。

2. ind = find(X, k)
或 3. ind = find(X, k, 'first')

返回第一个非零元素k的索引值。

k必须是一个正数,但是它可以是任何数字数值类型。

4. ind = find(X, k,'last')

返回最后一个非零元素k的索引值。

5. [row,col] =find(X, ...)

返回矩阵X中非零元素的行和列的索引值。

这个语法对于处理稀疏矩阵尤其有用。

如果X是一个N(N>2)维矩阵,col包括列的线性索引。

例如,一个5*7*3的矩阵X,有一个非零元素X(4,2,3),find函数将返回row=4和col=16。也就是说,(第1页有7列)+(第2页有7列)+(第3页有2列)=16。

6. [row,col,v] =find(X, ...)

返回X中非零元素的一个列或行向量v,同时返回行和列的索引值。

如果X是一个逻辑表示,则v是一个逻辑矩阵。

输出向量v包含通过评估X表示得到的逻辑矩阵的非零元素。

3.
使用struct函数创建结构
使用struct函数也可以创建结构,该函数产生或把其他形式的数据转换为结构数组。

struct的使用格式为:

s = sturct('field1',values1,'field2',values2,…);//注意引号

该函数将生成一个具有指定字段名和相应数据的结构数组,其包含的数据values1、valuese2等必须为具有相同维数的数据,数据的存放位置域其他结构位置一一对应的。对于struct的赋值用到了元胞数组。数组values1、values2等可以是元胞数组、标量元胞单元或者单个数值。每个values的数据被赋值给相应的field字段。

当valuesx为元胞数组的时候,生成的结构数组的维数与元胞数组的维数相同。而在数据中不包含元胞的时候,得到的结构数组的维数是1×1的。例如:

s = struct('type',{'big','little'},'color',{'blue','red'},'x',{3,4})s =

1x2 struct array with fields:

type

color

x

得到维数为1×2的结构数组s,包含了type、color和x共3个字段。这是因为在struct函数中{'big','little'}、{'blue','red'}和{3,4}都是1×2的元胞数组,可以看到两个数据成分分别为:

s(1,1)

ans =

type: 'big'

color: 'blue'

x: 3

s(1,2)

ans =

type: 'little'

color: 'red'

x: 4

相应的,如果将struct函数写成下面的形式:

s = struct('type',{'big';'little'},'color',{'blue';'red'},'x',{3;4})

s =

2x1 struct array with fields:

type

color

x

则会得到一个2×1的结构数组。

下面给出利用struct构建结构数组的具体实例。

【例4.3.1-3】利用函数struct,建立温室群的数据库。

(1) struct预建立空结构数组方法之一

a = cell(2,3); % 创建2×3的元胞数组

green_house_1=struct('name',a,'volume',a,'parameter',a(1,2))

green_house_1 =

2x3 struct array with fields:

name

volume

parameter

(2)struct预建空结构数组方法之二

green_house_2=struct('name',a,'volume',[],'parameter',[])

green_house_2 =

2x3 struct array with fields:

name

volume

parameter

(3)struct预建空结构数组方法之三

green_hopuse_3(2,3)=struct('name',[],'volume',[],'parameter',[])

green_hopuse_3 =

2x3 struct array with fields:

name

volume

parameter

(4)struct创建结构数组方法之四

a1={'六号房'};a2={'3200立方米'};

green_house_4(2,3)=struct('name',a1,'volume',a2,'parameter',[]);

T6=[31.2,30.4,31.6,28.7;29.7,31.1,30.9,29.6]; green_house_4(2,3).parameter.temperature=T6;

green_house_4

ans =

2x3 struct array with fields:

name

volume

parameter

4. 3.2 结构数组的操作

MATLAB中专门用于对结构数组的操作的函数并不多,通过 help datatypes获取数据类型列表,可以看到其中的结构数据类型的有关的函数,主要如表4.3.1所示。

表4.3.1
结构数组的操作函数
函数名
功能描述 函数名 功能描述
deal把输入处理成输出 fieldnames
获取结构的字段名
getfield
获取结构中指定字段的值 rmfield
删除结构的字段(不是字段内容)
setfield
设置结构数组中指定的字段的值 struct
创建结构数组
struct2cell
结构数组转化成元胞数组 isfield
判断是否存在该字段
isstruct
判断某变量是否是结构类型


4.
在MATLAB中:

size:获取数组的行数和列数

length:数组长度(即行数或列数中的较大值)

numel:元素总数。

s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。

[r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。

如果在size函数的输入参数中再添加一项,并用1或2为该项赋值,则size将返回数组的行数或列数。其中r=size(A,1)该语句返回的时数组A的行数,
c=size(A,2) 该语句返回的时数组A的列数。

n=numel(A)该语句返回数组中元素的总数。

n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A为空数组,则返回0;如果A是一个向量则返回A的长度。n=max(size(A):若A为非空数组,返回A的最大维数;若A为空数组,返回A中最长的非0维数

5. ceil
是向离它最近的大整数圆整

如a = [-1.9,-0.2, 3.4, 5.6, 7, 2.4+3.6i]

圆整后:a=[-1,0,4, 6, 7 ,3+4i]

6. squeeze
除去size为1的维度

B = squeeze(A)

描述:

B
= squeeze(A),B与A有相同的元素,但所有只有一行或一列的维度(a
singleton dimension)被去除掉了。A singletondimension的特征是size(A,dim) = 1。二维阵列不受squeeze影响;
如果 A 是一个row or column矢量或a scalar (1-by-1) value,then B = A.

比如,rand(4,1,3)产生一个均匀分布的阵列,共3页,每页4行1列,经过squeeze后,1列的那个维度就没有了,只剩下4行3列的一个二维阵列。而rand(4,2,3)因为没有1列或1行的维度,所有squeeze后没有变化。

7.
ones产生全1数组,zeros产生全零数组。

ones(a,b)产生a行b列全1数组

ones(a)产生a行a列全1数组

例如:

ones(1,3)产生1行3列全1数组[1 1 1]

ones(2)产生 1 1

11

zeros用法同ones,只是产生的是全0数组

8.matlab中mean的用法

函数功能

求数组的平均数或者均值

使用方法

M = mean(A)

返回沿数组中不同维的元素的平均值。

如果A是一个向量,mean(A)返回A中元素的平均值。

如果A是一个矩阵,mean(A)将其中的各列视为向量,把矩阵中的每列看成一个向量,返回一个包含每一列所有元素的平均值的行向量。

如果A是一个多元数组,mean(A)将数组中第一个非单一维的值看成一个向量,返回每个向量的平均值。

M = mean(A,dim)

返回A中沿着标量dim指定的维数上的元素的平均值。对于矩阵,mean(A,2)就是包含每一行的平均值的列向量。

A = [1 2 3; 3 3 6; 4 6 8; 4 7 7];

mean(A)

ans =

3.0000 4.5000 6.0000

mean(A,2)

ans =

2.0000

4.0000

6.0000

6.0000

9. MATLAB中的log函数是我们所学的数学中的ln,而非log。而在matlab中,以10为底的对数需要用log10函数,以2为底的对数需要用log2函数。

10

Y = eye(n)
返回n*n单一矩阵,对角线为1

Y = eye(m,n) or eye([m n]) 对角线是1,其他是0。

Y = eye(size(A)) 返回与A统一大小的对角为1的矩阵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: