Matlab

Matlab界面的简介

 命令窗口的使用:激活命令从窗口,“”>>“”与闪烁的光标表示命令窗口就绪。在命令窗口中【enter】提交命令执行,计算结果中的“ans”是英文“answer”的缩写。运用“clc”可以清楚命令窗口的全部命令内容。

简单的计算:matlab中的“sin”是常见的正弦函数,参数值是以“弧度”为单位的。“pi”也是matlab的预设变量。matlab中的开方为“sqrt(x)

当命令行中用到等'=”,计算结果将不在赋值为“ans”,而是赋值给用户指定的变量。“who”“whos”命令来显示工作空间中的变量。“clear”来清楚工作空间中的变量。

常见通用命令

获得在线帮助
matlab提供的帮助信息有两类:
简单的纯文本帮助信息:help(), lookfor()
窗口式综合帮助信息(文字、公式、图形)doc,helpwin 

数值表示、变量以及表达式

matlab的数只采用习惯的十进制表示,可以带小数点和符号;其缺省的数据类型为双精度浮点型(double)。
例如:3         -10         0.001         1.3e10         1.256e-6

变量命名规则
1.变量名、函数名对字母的大小写是区分的。
2.变量名的第一个字母必须是英文字母
3.变量名可以包含英文字母、下划线和数字
4.变量名不能包括空格、标点
5.变量名最多可包含63个字符

matlab预定义的变量

注意:每当matlab启动完成时,这些变量就被产生。
           每当matlab中,被0除不会引起程序中断,给出报警的同时用inf或NaN给出结果
           用户只能临时覆盖这些变量,clear或者重启matlab可回复其值

运算符和表达式
 注意:matlab用“\”“/”分别表示“左除”和“右除”,对标量没有区别,对矩阵对产生不同的影响。
            表达式按与城规相同的优先级自左至右执行运算。
            优先级:指数运算级别最高,乘除次之,加减最低
            括号可以改变运算的次序

 复数及其运算
matlab中的复数表达式 z = a+bi,其中a、b为实数 
matlab把复数作为一个整体,像计算实数一样计算复数。 

matlab数据及其运算 

matlab的数据类型非常丰富,除了数值型、字符型等基本数据类型,还有结构体、单元等更为复杂的数据类型。各种数据类型都以矩阵的形式存在,矩阵时matlab中最基本的数据对象,并且矩阵的运算时定义在复数域上的。

matlab矩阵(数组)的表示

数组的概念:按行和列顺序排列的实数或者复数的有序集,被称为数组。 
数组中的任何一个都被称为这个数组的元素,由其所在的行和列标识,这个标识也被称为数组元素的下标或索引

数组的分类: 

一维数组:也成为了向量,行向量,列向量。
二维数组:矩阵。
多为数组。
**有效矩阵:每行的元素个数必须相同,每列元素的个数也必须相同

创建一维数组变量

第一种方法:使用方括号"[]"操作符

>> a=[1 3 pi 3+5*i] %or a=[1, 3, pi, 3+5*i]

所有向量元素必须在操作符内,向量元素之间用 空格 或者 英文逗号, 分开

第二种方法:使用冒号“:”操作符

>> b=1:10

使用冒号创建行向量的基本格式:
        x = start:increment:end 
        start 表示新向量的第一个元素
        新向量x的最后一个元素不能大于end
        increment可正可负号,若负,则start>end,若正则start<end,负责创建的空向量
        若increment为1,则可以简写为:start:end

第三种方式:利用函数linspace
x = linspace(x1,x2,n)

该函数生成一个由n个元素组成的行向量;x1为第一个元素,x2为第二个元素,x1,x2之间的元素间隔 = (x2-x1)/(n-1),如果忽略n,则系统默认生成100个元素的行向量

第四种方法:利用函数logspace

列向量的创建

使用方括号"[]"操作符,使用分号“;”分割行

>> x= [1; 2; 3]

**使用冒号操作符

>> x= (1:3)’   % “ ’ ”表示矩阵的转置

创建数组的一般方法:
var = expression (var为变量名,expression为matlab合法表达式)

创建二维数组变量

第一种方法:使用方括号“[]”操作符

使用规则:数组元素必须在“[]”内键入,行与行之间必须使用分号“;”间隔,也可以在分行处用回车间隔。

>> a2=[1 2 3;4 5 6;7 8 9]
>> a2=[1:3;4:6;7:9] %结果同上

第二种方法:函数方法

函数ones(生成全部为1的矩阵),zeros(生成全部为0矩阵)、reshape

>>a=-4:4
a=
 -4 -3 -2 -1 0 1 2 3 4
>>b=reshape(a, 3, 3)
b=
-4 -1 2
-3 0 3
-2 1 4

数组元素的排列顺序,从上到下从左到右,要求元素的总数不变

数组元素的标识与寻访

“全下标(index)”标识
        如对于一个二维数组,用行下标和列下标标识数组的元素,a(2,2)标识二维数组a第二行第三列的元素。
        对于一维数组,用一下下标即可,b(2)表示一维数组b的第2个元素

“单下标(linear index)”
        所谓单下标就是用一个下标来表明元素在数组的位置。

两种“下标”标识的变换 sub2ind、 ind2sub

单下标的使用:

>> a=zeros(2, 5);
>> a(:)=-4:5
a =
 -4 -2 0 2 4
 -3 -1 1 3 5

数组元素的修改:
可以指定修改数组元素的值,一次可以修改多个数组元素的值,要修改的数组元素的个数应与送入数组的元素个数相同。

size和length函数

size函数返回变量的大小,即变量数组的行列数。
length函数返回变量素组的最大维数。

双下标转换为单下标: 

>> A = [17 24 1 8; 2 22 7 14; 4 6 13 20];
>> A(:,:,2) = A - 10
>> A(2,1,2)
>> sub2ind(size(A),2,1,2)
>> A(14)

单下标转换为双下标:

>> b = zeros(3);
>> b(:) = 1:9
>> IND = [3 4 5 6]
>> [I,J] = ind2sub(size(b),IND)

多维数组

多维数组的定义:在matlab的数据类型中,向量可视为一维数组,矩阵可视为二维数组,对于维数(dimensions)超过2的数组均可视为【多维数组】
将两个二维(平面)数组叠在一起, 就构成三维数组,第三维称为「页」 (Page)。

多维数组可以对应一个x-y-z三维立体坐标系,如下图所示

 三维数组元素的寻址可以通过(行、列、页)来确定

多维数组的建立

A(:, :, 1) = [1 0 2 5; 4 1 8 7; 3 2 6 3];
A(:, :, 2) = [3 5 4 1; 2 6 2 1; 4 2 3 0]

 数组的算术运算

matlab数组支持线性代数中所有的矩阵运算。

MATLAB数组运算符列表
+相应元素相加
-相应元素相减
*矩阵乘法
点乘.*相应元素相乘
^矩阵幂运算
点幂.^相应元素进行幂运算
左除或右除\或者/矩阵左除或者右除
左点除或者右点除.\或者./A的元素被B的对应元素除

关系运算

< > <= >= == ~=

关系运算符的运算法则 
1.当两个标量进行比较时,直接比较两数大小。若关系成立,结果为1,否则为0
2.当两个维数相等的矩阵进行比较时,其相应位置的元素按照标量关系进行比较,并给出结果,形成一个维数与原来相同的0、1矩阵。
3.当一个标量与一个矩阵比较时,该标量与矩阵的各元素进行比较,结果形成一个与矩阵维数相等的0、1矩阵。

逻辑运算

&(与) |(或) ~(非)

逻辑元素符的运算法则:
1.在逻辑运算中,确认非零元素为真(1),零元素为假(0)
2.当两个维数相等的矩阵进行比较时,其相应位置的元素按照标量进行比较,并给出结果,形成一个维数与原来相同的0、1矩阵。
3.当一个标量与一个矩阵比较时,该标量与矩阵的各元素进行比较,结果形成一个与矩阵维数相等的0、1矩阵
4.算术运算优先级最高,逻辑运算优先级最低。
 

数据分析与统计

matlab提供的求数据序列的最大值和最小值的函数分别为max和min,这两个函数的调用格式和操作过程类似。
1.求向量的最大值和最小值
(1)y = max(x):返回向量x的最大值存入y
(2)【y,y1】 = max(x)返回向量的最大值存入y,最大值得序号存入y1(位置)

2.求矩阵的最大值和最小值
求矩阵A的最大值的函数有3中调用格式,分别是:
(1)max(A):返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。(每一列的最大值)
(2)【Y ,U】 = max(A)返回行向量Y U ,Y是向量每一列的最大值,U是每列最大是的行号。
(3)max(A,[],dim):dim取1时,和max的作用相同;dim取2时,返回一个列向量,第i个元素是a矩阵的第i行上的最大值。(返回每一行的最大值)

求和与求积:

sum(x)返回向量x各元素的和
prod(x)返回向量x各元素的乘积
sum(a)返回一个行向量,第i个元素是a第i列的元素和
prod(a)返回一个行向量,第i个元素是a第i列的元素乘积
sum(a,dim)dim为1时,该函数等于sum(a),dim为2时,返回一个列向量,其第i个元素a的第i行的各元素之和。
prod(a,dim)dim为1时,该函数等同于prod(a),dim为2时,返回一个列向量,第i个元素是a第i行的各元素乘积。

平均值与中值

数据序列平均值的函数mean,求数据序列中值得函数median。两个函数的调用格式为:

mean(x)返回向量x的算术平均值
median(x)返回向量x的中值
mean(a)返回一个行向量,其第i个元素是A的第i列的算术平均值。
median(A)返回一个行向量,其第i个元素是A的第i列的中值。
mean(A,dim)当dim为1时,该函数等同于mean(A);当dim为2时, 返回一个列向量,其第i个元素是A的第i行的算术平均值。
median(A,dim)当dim为1时,该函数等同于median(A);当dim为2 时,返回一个列向量,其第i个元素是A的第i行的中值。

字符串

字符可以构成一个字符串,或者字符数组
一个字符串被视为一个行向量
字符串的每一个字符(含空格),及其acsll码的形式存放于行向量中,是该字符串变量的一个元素

matlab用一个【单引号】来界定一个字符串,可以使用方括号“【】”直接连接多个字符串变量,得到一个新的字符串

str1 = ‘I like MATLAB,’; % 建立字串变量 str1
str2 = ' JavaScript, and Perl!'; % 建立字串变量str2
str3 = [str1 str2] % 直接连接str1及str2,以建立str3
str3 =

 I like MATLAB, JavaScript, and Perl!

如果要输入的字符串中有单引号,则由两个联系的单引号表示,若要计算字符串变量的长度(即组成字符串的个数),可用length指令

sentence = 'I''ve got a date!';
length(sentence) % 计算字字符串sentence的长度

double和char指令


double指令:查看字符串变量的储存内容即(ascll内码)
char指令:将ascll内码转换成字符串形式 

class和ischar指令

可以用来判断一个变量的类型是否为字符串

一个字符数组将变量储存多行字符串

第一种方法就是使用二维数组(必须先确认每个字符串的长度一样,否则就必须在短字符串结尾不齐空格)

departments = [‘ee ’; ‘cs ’; ‘econ’]

用char指令储存多字符串

departments = char(‘ee’, ‘cs’, ‘econ’)

从二维字符数组访问字符串时,切记要使用deblank指令来清除字符串尾部的空格字符

departments = char('ee', 'cs', 'econ');
dept1 = departments(1,:); % (1,:)代表第一行的全部元素 
dept2 = deblank(dept1); % 使用 deblank 指令清除尾部的空格字符 
len1 = length(dept1) % 显示变量 dept1 的长度=4
len2 = length(dept2) % 显示变量 dept2 的长度=2

 字符串的操作

strcmp指令:用于比较字符串内容的异同

str1 = 'today'; 
str2 = 'tomorrow'; 
str3 = 'today'; 
out1 = strcmp(str1, str2) % 比较字符串 str1 和 str2 
out1 = 0 %表示字符串 str1 和 str2不同
out2 = strcmp(str1, str3) % 比较字符串 str1 和 str3
out2 = 1 %表示字符串 str1 和 str2相同

空数组(empty array)

有一维是0的数组即为空数组
空数组不占据储存空间
最简单的空数组:0x0的矩阵
复杂的空数组:0x5or10x0

注意:空数组并非全0数组 

数组维度的减小

----删除数组的某列和行

>>a = magic(4), a(:,2)=[]

---删除(2-D,3-D)数组的单个元素

        使用“全下标”方式,不能删除单个元素 

>>a(1, 2)=[] %系统会警告信息

        使用“单下标”可以删除单个元素

>>a(2:4)=[] %数组a将变为向量

        使用“[]”同样可以减小字符数组的维数

元胞数组

特殊的数据类型,在一个数组中存放各种不同类型的数据
每个单元都相当于一个“盒子”
“盒子”可储存各种不同类型的matlab数据

创建方法:
赋值语句   cell函数 

赋值语句创建元胞数组
元胞索引(cell indexing)方式
        格式:a(1,2) = {... ... ... }

元胞内容索引(content indexing)的方式
        格式:a {1,2} = [...] or '...'

直接用大括号一次把所有元素括起来
        格式:a = {'James Bond', [1 2;3 4;5 6]; pi, ones(5)}

>> a(1,1) = {[1 4 3; 0 5 8; 7 2 9]};
>> a(1,2) = {'Anne Smith'};
>> a(2,1) = {3+7i};
>> a(2,2) = {-pi:pi/10:pi};
>> b{1,1} = 'James Bond' ;
>> b{1,2} = [1 2;3 4;5 6];
>> b{2,1} = pi;
>> b{2,2} = zeros(5);

元胞数组的连接

c=[a b] % or c=[a; b]

cell函数创建元胞数组

>> b = cell(2, 3)
b = 
 [] [] []
 [] [] []
>>  whos b
 Name Size Bytes Class
 b 2x3 24 cell array

>> b(1,3) = {1:3}; % or b{1,3} = 1:3

注意:每一个cell占有4个字节的空间

显示元胞数组的内容

1.celldisp 显示元胞数组的全部内容

>> celldisp(a) %显示全部内容

>> cellplot(a) %图形方式显示元胞数组的结构

2.市容内容下标索引显示指定元胞的数据

格式:var_name{row_index, column_index}

>> a{1, 2} 显示a第一行第二列的元素 
…
>> a{:} %一次显示a的全部数据
…

3.读取元胞数组中的内容

直接取用元胞数组的整个元胞(单元)
取用元胞数组某元胞内的数据单位
一次读取或删除多个元胞

读取b元胞数组的第一行第二列的内容

>> b, d=b{1, 2}
d =
 1 2
 3 4
 5 6

其中b为
b = 
 'James Bond' [3x2 double]
 [ 3.1416] [5x5 double]
读取b元胞第一行第二列元素的第三行第一列的那一个元素
>> e = b{1,2}(3,1)
读取元胞数组a第一行的所有元胞
>> f=a(1,:)
删除元胞数组第一行的所有元胞
>>a(1,:) = []

结构与结构数组的概念

结构:
由字段组成
每个字段可以使任一种matlab数据类型的数据或变量

结构数组:
多个结构构成结构数组
结构数组的元素就是一个结构

方法1直接键入
 

Exam:创建一个关于学生信息的结构数组,每个结构包含学生姓名(name)、学号(id)、成绩(scores)。
>>clear student % 清除 student 变量

>>student.name = '张三'; % 加入 name 字段

>>student.id = 'mr871912'; % 加入 id字段

>>student.scores = [58, 75, 62]; % 加入 scores字段

>>student % 显示结构变量的数据

student = 
     name: '张三' 
     id: 'mr871912'
     scores: [58,75,62]

第二个学生的信息建立

>>student(2).name = '张宁'; % 加入 name 字段

>>student(2).id = 'mr871913'; % 加入 id字段

>>student(2).scores=[68, 85, 92]; % 加入 scores字段

>>student % 显示变量信息

student = 
    1x2 struct array with fields:
     name
     id
     scores

方法2 struc函数

格式:Structure Array_var_name = struct(field1, value1, field2, value2,….)

field1、field2、…是结构的字段名,
value1、value2、…则是相应字段所包含的数据。

>>clear student 

>>student=struct('name', '张听说', 'scores', [50 60]);

>> student(2)=struct('name', '张廷安', 'scores', [60 70]);

>> student(1), student(2) %显示student(1),student(2)

ans = 
     name: '张听说'
     scores: [50 60]
ans = 
     name: '张廷安'
     scores: [60 70}

使用struct创建结构数组变量(一次建立多个元素)

>>clear student 

>>student = struct('name', {'张听说', '张廷安'}, 'scores', {[50 60], [60 70]});

>> student(1), student(2) %显示student(1), …

ans = 
     name: '张听说'
     scores: [50 60]
ans = 
     name: '张廷安'
     scores: [60 70]

结构数组的嵌套

student = struct('name', {'张听说', '张廷安'}, 'scores', {[55 60], [65 80]});

student(2).course(1).title = 'Web Programming';

student(2).course(1).credits = 2;

student(2).course(2).title = 'Numerical Method';

student(2).course(2).credits = 3;

student(2).course
    ans = 
    1x2 struct array with fields:
     title
     credits

访问与修改结构数组变量的内容

>> student(1).name=‘Newton’;
>> student(1).name % Result ?

cat函数:排列结构数组某字段的值

cat(dim,structurefield)    dim=1,竖牌;dim=2,横排

>>cat(1, student.scores)
    ans =
     55 60
     65 80
>>cat(2, student.scores)
    ans =
     55 60 65 80

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值