中国十佳企业网站设计公司,武威住房和城乡建设厅网站,网站建设预计费用,301重定向手机网站MATLAB入门一基础知识
此篇为课程学习笔记
链接: link
什么是MATLAB
平时所说的MATLAB既是一款软件又是一种编程语言#xff0c;只是这种高级解释性语言是在配套的软件下进行开发的
MATLAB的一个特性
MATLAB的一个特性#xff0c;如果一条语句以英文分号‘;’结尾…MATLAB入门一基础知识
此篇为课程学习笔记
链接: link
什么是MATLAB
平时所说的MATLAB既是一款软件又是一种编程语言只是这种高级解释性语言是在配套的软件下进行开发的
MATLAB的一个特性
MATLAB的一个特性如果一条语句以英文分号‘;’结尾那么这条语句对应的内容或者运行结果不会在命令窗口中被显示如果没有分号‘;’则会被显示。
最常见的函数
内置输出函数disp(X)
disp函数是MATLAB的内置输出函数直接调用它可以在命令窗口中输出你想输出的结果X。 X可以是各种各样的数据包括数字、字符、矩阵等等。
内置输入函数input()
用于用户对程序内输入数据具体用法为x input(prompt)或者str input(prompt,‘s’)前者表示输入一个数值后者表示输入一个字符串。 当程序运行到这个地方时在命令窗口内需要用户输入一个数据以回车键结束那么这个数据会存储到x(如果使用的是字符型输入则存储到str)其中prompt表示提示语一般是一个字符串而且这个字符串必须有可以为空字符串。
数字转字符函数num2str(A)
用于将数字A转换为字符串根据这个函数的构造很容易看出它的意思“number to string”。
函数
在MATLAB中对函数的调用方法分为直接调用和间接调用。
直接调用一个M文件中只能有一个主函数这个主函数与m文件同名可以被其他文件的函数调用但其他子函数不能间接调用使用函数句柄创建函数句柄需要使用到操作符。创建格式为
Function_Handle Function_FileName;
其中Function_Handle变量保存了这个函数句柄Function_FileName变量是函数所对应的m文件名称或者是MATLAB内部函数的名称。如
F_Handle cos;
x 0:0.25 * pi : 2 * pi;
F_Handle(x)结果为learn_Matlabans 1.0000 0.7071 0.0000 -0.7071 -1.0000 -0.7071 -0.0000 0.7071 1.0000结构体
MATLAB中的结构体和C语言中的结构体类似。创建结构体的方式有两种
通过字段赋值创建 例如
Student.Name Sam;
Student.Grade 6;
Student.Subject {Chinese, Math, English};
Student.Result {99,99,99};
Student运行结果learn_MatlabStudent 包含以下字段的 struct:Name: SamGrade: 6Subject: {Chinese Math English}Result: {[99] [99] [99]}
通过struct函数创建 例如
Schedule struct(Day,Thu,Time,15:00,Number,18)运行结果learn_MatlabSchedule 包含以下字段的 struct:Day: ThuTime: 15:00Number: 18补充:repmat 函数定义 B repmat(A,n) B repmat(A,r1,…,rN) B repmat(A,r)
这是一个处理矩阵内容有重复时使用其功能是以A的内容堆叠在r1xr2的矩阵B中B矩阵的大小由r1r2r3*…及A矩阵的内容决定。 如
Schedule struct(Day,Thu,Time,15:00,Number,18)
SS repmat(Schedule,1,2);
SS(1)
SS(2)运行结果 learn_Matlab
Schedule 包含以下字段的 struct:Day: ThuTime: 15:00Number: 18
ans 包含以下字段的 structDay: ThuTime: 15:00Number: 18
ans 包含以下字段的 struct:Day: ThuTime: 15:00Number: 18结构体数组
newArray struct(Day, {Thu, Fri}, Time, {15:00, 13:00}, Number, {12, 2})
newArrary(1)
newArrary(2)运行结果learn_Matlab
newArray 包含以下字段的 1×2 struct 数组:DayTimeNumber
ans 包含以下字段的 struct:Day: ThuTime: 15:00Number: 12
ans 包含以下字段的 struct:Day: FriTime: 13:00Number: 2数组类型
在MATLAB中进行运算的所有数据类型都是按照数组及矩阵的形式进行存储和运算的而两者的运算方式完全不同数组强调的是元素对元素而矩阵是用线性代数的运算方式。 数组的定义是广义的数组的元素可以是任何数据类型。利用数组的构建方法可以直接对变量进行赋值
array [1 2 3 4 5]
运行结果learn_Matlab
array 1 2 3 4 5
也可以使用冒号”“来代表一系列的值
array 0:10 % 表示从0开始步长为1到10结束的一系列数字序列
% 序列最后一个数小于等于10
array1 0:2:9 % 表示从0开始步长为2到9结束的一系列数字序列
% 序列最后一个数小于等于9 learn_Matlab
array 0 1 2 3 4 5 6 7 8 9 10
array1 0 2 4 6 8
运行结果
空数组的创建
array []运行结果learn_Matlab
array []单元cell)数组
使用单元数组的目的在于它可以把不同类型数据归并到一个数组中。单元数组的维数不受限制。
使用赋值语句创建单元数组 与一般数组有所不同的是单元数组使用花括号”{}“来创建使用逗号”“或空格来分隔每一个单元使用分号”“来分行。
C {x, [1;3;6]; 10, pi}
whos C运行结果learn_Matlab
C 2×2 cell 数组{x } {3×1 double}{[10]} {[ 3.1416]}Name Size Bytes Class AttributesC 2x2 490 cell 利用cell函数创建空单元数组
%创建一个m*n的空单元数组其中每一个单元均为空矩阵
cellName cell(2, 3)learn_Matlab
cellName 2×3 cell 数组{0×0 double} {0×0 double} {0×0 double}{0×0 double} {0×0 double} {0×0 double}单元数组的寻访
在单元数组中寻访单元和单元中的内容是不一样的对应的是两种不同的操作。为此MATLAB设计了相对应的操作对象单元外标识cell indexing)和单元内编址content Addressing). 对于单元数组C, **cell(m,n)**指的是单元数组中的第m行第n列的单元它返回的是一个单元**cell{m,n}**指的是单元数组中的第m行第n列单元中的内容返回的是单元中的值。例如 C {2[2 4;3 6;1 3], string; sin(pi/8),310, code}v1 C(2, 2)class(v1)v2 C{2, 2}class(v2)运行结果learn_Matlab
C 2×3 cell 数组{[ 2]} {3×2 double} {string}{[0.3827]} {[ 0]} {code }
v1 1×1 cell 数组{[0]}
ans cell
v2 logical0
ans logical
1. 单元数组的合并
a{1, 1} cellclass;
a{1, 2} [1 2 2];
a{2, 1} [q w e];
a{2, 2} [6 5 4];
a
b {Jan}
c {a, b}
2. 删除单元数组中指定的单元 只需要将空矩阵复制给指定的单元即可。
a{1, 1} cellclass;
a{1, 2} [1 2 2];
a{2, 1} [q w e];
a{2, 2} [6 5 4];a{2, 2} []
a(1, 2) {[]}运行结果learn_Matlab
a 2×2 cell 数组{cellclass} {1×3 double}{qwe } {0×0 double}
a 2×2 cell 数组{cellclass} {0×0 double}{qwe } {0×0 double}3. 使用reshape函数改变单元数组的形状 reshape函数的调用格式
teimC reshape(C, m, n)
%该函数将单元数组C改变为一个具有m行n列的新单元数组。例如
C {ones(3), hello,world, zeros(5), [21, 3, 2]}
newC reshape(C,2,2)运行结果为learn_Matlab
C 1×4 cell 数组{3×3 double} {hello,world} {5×5 double} {1×3 double}
newC 2×2 cell 数组{3×3 double } {5×5 double}{hello,world} {1×3 double}map容器类型
map的本意是映射就是将一个量映射到另一个量map中的内容是键值对即一个key对应一个value。map中存储的数据可以是任何类型的。
创建map对象
mapObj containers.Map({key1,key2,……}, {value1, value2,……})
%当键和值是字符串时需要稍做变更
mapObj containers.Map({key1, key2,……}, {value1, value2,……})
例如
scheduleMap containers.Map({Mon, Tue, Wed, Thu, Fri}, {Maths, Chinese, History, Geography, Biology})运行结果learn_MatlabscheduleMap Map - 属性:Count: 5KeyType: charValueType: char可以使用MapName.property来访问Map的属性如
scheduleMap.KeyType 运行结果
ans char也可以先创建一个空的Map再通过键值对的对应来补充其内容。
读取Map对象 可以通过keys()函数来查看所有的key也可以通过values()函数来查看所有的值。 如
keys(scheduleMap)
values(scheduleMap)运行结果
ans 1×5 cell 数组{Fri} {Mon} {Thu} {Tue} {Wed}
ans 1×5 cell 数组{Biology} {Maths} {Geography} {Chinese} {History}读取格式如下
valueName mapName(keyName)
%当键名是一个字符串时需要使用单引号将键名括起来例子
course scheduleMap(Wed)输出为course History如果需要对多个键进行访问时可以使用values函数
values(scheduleMap,{Mon, Thu})输出为
ans 1×2 cell 数组{Maths} {Geography}编辑Map对象 从map中是删除键值对
%使用remove函数的格式
remove(mapName, keyName)例如
scheduleMap containers.Map({Mon, Tue, Wed, Thu, Fri}, {Maths, Chinese, History, Geography, Biology})remove(scheduleMap, Thu)keys(scheduleMap)
values(scheduleMap)输出为
ans Map - 属性:Count: 4KeyType: charValueType: char
ans 1×4 cell 数组{Fri} {Mon} {Tue} {Wed}
ans 1×4 cell 数组{Biology} {Maths} {Chinese} {History}添加键值对 需要注意的是原Map对象里的key是什么类型的新添加的key就得是什么类型的。
%调用格式为
existingMapObj(newKeyName) newValue例如
scheduleMap(Sta) public
keys(scheduleMap)
values(scheduleMap)输出为
ans 1×6 cell 数组{Fri} {Mon} {Sta} {Thu} {Tue} {Wed}
ans 1×6 cell 数组{Biology} {Maths} {public} {Geography} {Chinese} {History}修改key: 如果需要在保持值不变的情况下对键名进行修改则首先要删除键值对然后再添加。 修改value:通过复制操作覆盖原有的值。
基本矩阵操作