matlab基础

1.基本语法

运算符

~=是不等于,&,|和〜,&& 和 | | ,浮点数用相减小于0.0001(精度)来判断是否相等

运算符 目的
+ 加;加法运算符
- 减;减法运算符
* 标量和矩阵乘法运算符
.* 数组乘法运算符
^ 标量和矩阵求幂运算符
.^ 数组求幂运算符
\ 矩阵左除
/ 矩阵右除
.\ 阵列左除
./ 阵列右除
: 向量生成;子阵提取
( )  下标运算;参数定义 
[ ] 矩阵生成
. 点乘运算,常与其他运算符联合使用
续行标志;行连续运算符
, 分行符(该行结果不显示)
; 语句结束;分行符(该行结果显示)
% 注释标志
' 转置运算符
= 赋值运算符

特殊变量

Name Meaning
ans 默认的变量名,以应答最近依次操作运算结果
eps 浮点数的相对误差
i,j 虚数单位,定义为 i= j= -1
Inf 代表无穷大
NaN 代表不定值(不是数字)
pi 圆周率
注释:%

不加;则直接输出结果

MATLAB使用save命令保存工作区中的所有变量,然后作为一个扩展名为.mat的文件,在当前目录中。 

如以下例子:

save myfile

该文件可以随时重新加载,然后使用load命令。

load myfile

2.变量

使用 who 命令显示所有已经使用的变量名。

whos 命令则显示多一点有关变量:

  • 当前内存中的变量

  • 每个变量的类型

  • 内存分配给每个变量

  • 无论他们是复杂的变量与否

clear [var]可删全部变量或者指定的

...可换行继续

默认情况下,MATLAB 四个小数位值显示数字。这就是所谓的 short format.如果想更精确,需要使用 format 命令。

format long ,format blank,format short e(指数表示)

format rat 格式命令给出最接近的有理表达式(无理数则用分数表示)

创建向量:

创建行向量括在方括号中的元素的集合,用空格或逗号分隔的元素(r = [7 8 9 10 11]

创建列向量通过内附组方括号中的元素,使用分号(;)分隔的元素(c = [7; 8; 9; 10; 11]

创建矩阵(m = [1 2 3; 4 5 6; 7 8 9]

3.命令

管理会话

命令 目的/作用
clc 清除命令窗口。
clear 从内存中删除变量。
exist 检查存在的文件或变量。
global 声明变量为全局。
help 搜索帮助主题。
lookfor 搜索帮助关键字条目。
quit 停止MATLAB。
who 列出当前变量。
whos 列出当前变量(长显示)。

系统相关的命令

cd 改变当前目录。
date 显示当前日期。
delete 删除一个文件。
diary 日记文件记录开/关切换。
dir 列出当前目录中的所有文件。
load 负载工作区从一个文件中的变量。
path 显示搜索路径。
pwd 显示当前目录。
save 保存在一个文件中的工作区变量。
type 显示一个文件的​​内容。
what 列出所有MATLAB文件在当前目录中。
wklread 读取.wk1电子表格文件。
输入和输出相关
disp 显示一个数组或字符串的内容。
fscanf 阅读从文件格式的数据。
format 控制屏幕显示的格式。
fprintf 执行格式化写入到屏幕或文件。
input 显示提示并等待输入。
; 禁止显示网版印刷
fscanf和fprintf命令的行为像C scanf和printf函数。他们支持格式如下代码:
%s 输出字符串
%d 输出整数
%f 输出浮点数
%e 显示科学计数法形式
%g %f 和%e 的结合,根据数据选择适当的显示方式
数字显示格式
format short 四位十进制数(默认)
format long 15位定点表示
format short e 五位浮点表示
format long e 15位浮点表示
format bank 两个十进制数字
format + 正,负或零
format rat 有理数近似
format compact 变量之间没有空行
format loose 变量之间有空行
用于工作数组、矩阵和向量的各种命令
cat 连接数组
find 查找非零元素的索引
length 计算元素数量
linspace 创建间隔向量
logspace 创建对数间隔向量
max 返回最大元素
min 返回最小元素
prod 计算数组元素的连乘积
reshape 重新调整矩阵的行数、列数、维数
size 计算数组大小
sort 排序每个列
sum 每列相加
eye 创建一个单位矩阵
ones 生成全1矩阵
zeros 生成零矩阵
cross 计算矩阵交叉乘积
dot 计算矩阵点积
det 计算数组的行列式
inv 计算矩阵的逆
pinv 计算矩阵的伪逆
rank 计算矩阵的秩
rref 将矩阵化成行最简形
cell 创建单元数组
celldisp 显示单元数组
cellplot 显示单元数组的图形表示
num2cell 将数值阵列转化为异质阵列
deal 匹配输入和输出列表
iscell 判断是否为元胞类型
绘图:
axis 人功选择坐标轴尺寸
fplot 智能绘图功能
grid 显示网格线
plot 生成XY图
print 打印或绘图到文件
title 把文字置于顶部
xlabel 将文本标签添加到x轴
ylabel 将文本标签添加到y轴
axes 创建轴对象
close 关闭当前的绘图
close all 关闭所有绘图
figure 打开一个新的图形窗口
gtext 通过鼠标在指定位置放注文
hold 保持当前图形
legend 鼠标放置图例
refresh 重新绘制当前图形窗口
set 指定对象的属性,如轴
subplot 在子窗口中创建图
text 在图上做标记
bar 创建条形图
loglog 创建双对数图
polar 创建极坐标图像
semilogx 创建半对数图(对数横坐标)
semilogy 创建半对数图(对数纵坐标)
stairs 创建阶梯图
stem 创建针状图

4.m_file

可先mkdir progs在当前目录创建根文件夹

edit [filename]打开[创建]matlab的代码文件编辑。

文件代码执行和在命令行差不多,没加分号的赋值语句会把变量输出。

两种M文件:

  • 脚本 - 脚本文件 .m 扩展程序文件。在这些文件中写的一系列命令,想一起执行他们在工作区中的数据操作。脚本不接受输入和不返回任何输出。

  • 函数 - 函数文件 .m 扩展程序文件。函数可以接受输入和返回输出。内部变量是本地的函数。

5.运算符函数

逻辑类

bitand(a, b) 当a、b是一个或数个无符号整数或无符号整数数组,返回参数a和b位和,
bitcmp(a) a的补码
bitget(a,pos) 在指定位置pos中获取位,在整数数组a中
bitor(a, b) 对数a和b按位或
bitset(a, pos) a的集合点在一个特定的位置pos
bitshift(a, k) 返回一个移到左K位,相当于乘以2K。K负值对应的位权转移或除以2|K|向负无穷舍入到最近的整数。任何溢出位都被截断。
bitxor(a, b) 对数a和b按位异或
swapbytes 交换字节顺序

集合操作符

MATLAB提供各种功能集合运算,如集,交集和测试组成员等。

函数 描述
intersect(A,B) 设置两个数组的交集;返回A和B所共有的值。返回的值按排序顺序排列。
intersect(A,B,'rows') 将A和B的每一行作为单个实体处理,并返回A和B的公共行。返回的矩阵的行按排序顺序排列。
ismember(A,B) 返回与A大小相同的数组,包含1(true),其中A的元素在其他地方的B中找到,它返回0(false)。
ismember(A,B,'rows') 将A和B的每一行作为单个实体处理,并返回一个包含1(true)的向量,其中矩阵A的行也是B的行;否则,它返回0(false)。
issorted(A) 如果A的元素按排序顺序返回逻辑1(true),否则返回逻辑0(false)。输入A可以是向量,也可以是N-by-1或1-by-N的字符串数组。如果A和sort(A)的输出相等,则A被认为是排序的。
issorted(A, 'rows') 如果二维矩阵A的行按排序顺序返回逻辑1(真),否则返回逻辑0(假)。 如果A和排序(A)的输出相等,则认为矩阵A被排序。
setdiff(A,B) 设置两个数组的差值;返回不在B中的值。返回数组中的值按排序顺序排列。
setdiff(A,B,'rows')
将每一行A和B行作为单个实体处理,并返回一个不在B中的行。返回的矩阵的行按排序顺序排列。
“行”选项不支持单元格数组。
setxor 设置两个数组的异或
union 设置两个数组的并集
unique 数组中唯一的值

算术运算功能

函数 描述
uplus(a) 一元加号;增加量a
plus (a,b) 相加;返回 a + b
uminus(a) 一元减号;减少a
minus(a, b) 相减;返回 a - b
times(a, b) 数组相乘;返回 a.*b
mtimes(a, b) 矩阵相乘;返回 a* b
rdivide(a, b) 右阵划分;返回 a ./ b
ldivide(a, b) 左阵划分;返回 a. b
mrdivide(A, B) 求解线性方程组xA = B for x
mldivide(A, B) 求解线性方程组xA = B for x
power(a, b) 数组求幂;返回 a.^b
mpower(a, b) 矩阵求幂;返回 a ^ b
cumprod(A)
累积乘积;返回与包含累积乘积的数组A相同大小的数组。
  • 如果A是向量,则cumprod(A)返回一个包含A的元素的累积乘积的向量。

  • 如果A是矩阵,则cumprod(A)返回一个矩阵,其中包含A的每一列的累积乘积。

  • 如果A是一个多维数组,那么cumprod(A)将沿着第一个非正整数维。

cumprod(A, dim) 沿维 dim 返回返回累积乘积。
cumsum(A)
累加总和;返回包含累积和的数组A
  • 如果A是向量,则cumsum(A)返回一个包含A的元素的累积和的向量。

  • 如果A是矩阵,则cumsum(A)返回一个矩阵,其中包含A的每列的累积和。

  • 如果A是一个多维数组,那么cumsum(A)将沿着第一个非整数维度起作用。

cumsum(A, dim) 返回沿着dim的元素的累积和。
diff(X)
差分和近似导数;计算x相邻元素之间的差异。
  • 如果X是向量,则diff(X)返回相邻元素之间的差异的向量,比X短一个元素:[X(2)-X(1)X(3)-X(2)... X(N)-X(N-1)]

  • 如果X是一个矩阵,则diff(X)返回行差的矩阵:[X(2:m,...)-X(1:m-1,:)]

diff(X,n) 递归应用n次,导致第n个差异。
diff(X,n,dim) 它是沿标量dim指定的维数计算的第n个差分函数。 如果order n等于或超过Dim的长度,diff将返回一个空数组。
prod(A)
数组元素的乘积;返回A数组元素的乘积。
  • 如果A是向量,则prod(A)返回元素的乘积。

  • 如果A是非空矩阵,则prod(A)将A的列作为向量,并返回每列乘积的行向量。

  • 如果A是一个空的0-by-0矩阵,则prod(A)返回1。

  • 如果A是一个多维数组,那么prod(A)将沿着第一个非子集维度行为并返回一个乘积数组。 该维数的尺寸减小到1,而所有其他维数的尺寸保持不变。

如果输入A为单个,则prod函数计算并返回B为单个;对于所有其他数字和逻辑数据类型,prod函数计算并返回B为double。
prod(A,dim) 沿dim维度返回乘积。 例如,如果A是矩阵,则prod(A,2)是包含每一行的乘积的列向量。
prod(___,datatype) 在数据类型指定的类中乘以并返回一个数组。
sum(A)
  • 数组元素的总和;返回数组的不同维度的和。如果A是浮动的,那么是双倍或单个,B是本地累加的,它与A相同,B与A具有相同的类。如果A不是浮动的,则B被累加为双,B具有类double。

  • 如果A是向量,则sum(A)返回元素的总和。

  • 如果A是矩阵,则sum(A)将A的列作为向量,返回每列的和的行向量。

  • 如果A是一个多维数组,sum(A)将沿着第一个非单例维度的值作为向量来处理,返回一个行向量的数组。

sum(A,dim) 沿标量A的维度求和。
sum(..., 'double')

sum(..., dim,'double')

执行双精度加法,并返回double类型的答案,即使A具有数据类型单一或整型数据类型。这是整型数据类型的默认值。
sum(..., 'native')

sum(..., dim,'native')

在本机数据类型A中执行添加,并返回相同数据类型的答案。 这是单和双的默认值。
ceil(A) 向正无穷方向舍入;将a元素舍入为大于或等于A的最近整数。
fix(A) 舍入为零
floor(A) 向负无穷方向舍入;将a元素舍入为小于或等于a的最近整数。
idivide(a, b)

idivide(a, b,'fix')

整数除法的舍入选项;与A./B相同,只是分数的商向零舍入到最接近的整数。
idivide(a, b, 'round') 分数的商舍入到最近的整数。
idivide(A, B, 'floor') 分数商向负无穷大舍入到最接近的整数。
idivide(A, B, 'ceil') 分数商向无穷大舍入到最接近的整数。
mod (X,Y)
除法后的模数;返回X - n.* Y,其中 n = floor(X./Y)。 如果Y不是整数,并且商X / Y在整数的舍入误差内,则n是整数。 输入X和Y必须是相同大小的真实数组或实数标量(提供Y〜= 0)。

请注意:

  • mod(X,0) 是 X

  • mod(X,X) 是 0

  • 对于 X = Y 和 Y = 0的 mod(X,Y)具有与Y相同的符号。

rem (X,Y)
除法之后的余数;返回X - n.* Y,其中n = fix(X./Y)。 如果Y不是整数,并且商X / Y在整数的舍入误差内,则n是整数。 输入X和Y必须是相同大小的真实数组或实数标量(提供Y〜= 0)。
请记住:
  • rem(X,0) 是 NaN

  • X〜= 0的rem(X,X)为0

  • 对于 X~=Y 和 Y~=0 的rem(X,Y)与X具有相同的符号。

round(X) 舍入到最接近的整数; 将X的元素舍入到最接近的整数。 正数元素的小数部分为0.5,最大到最接近的正整数。 负数元素的小数部分为-0.5,向下舍入到最接近的负整数。

MATLAB逻辑运算功能


除了在上述的逻辑运算符,MATLAB 提供下面的命令或函数用于同样的目的:

函数 描述
and(A, B) 查找数组或标量输入的逻辑和;执行所有输入数组A,B等的逻辑AND,并返回包含设置为逻辑1(真)或逻辑0(假)的元素的数组。如果所有输入数组在同一个数组位置都包含一个非零元素,那么输出数组的一个元素将被设置为1;否则,该元素设置为0。
not(A) 查找数组或标量输入的逻辑NOT;执行输入数组A的逻辑NOT,并返回包含设置为逻辑1(真)或逻辑0(假)的元素的数组。如果输入数组在同一个数组位置包含一个零值元素,那么输出数组的一个元素将被设置为1;否则,该元素设置为0。
or(A, B) 查找数组或标量输入的逻辑或; 执行所有输入数组A,B等的逻辑或,并返回包含设置为逻辑1(真)或逻辑0(假)的元素的数组。如果任何输入数组在同一个数组位置包含一个非零元素,则输出数组的一个元素设置为1;否则,该元素设置为0。
xor(A, B) 逻辑异或; 对数组A和B的相应元素执行异或运算。如果A(i,j,...)或B(i,j)...,则所得到的元素C(i,j,...) j,...),但不是两者都是非零的。
all(A)
确定数组A的所有数组元素是否为非零或真。
  • 如果A是向量,则如果所有元素都为非零,则所有(A)返回逻辑1(真),如果一个或多个元素为零,则返回逻辑0(假)。

  • 如果A是非空矩阵,则所有(A)将A的列视为向量,返回逻辑1和0的行向量。

  • 如果A是空的0x0矩阵,则全部(A)返回逻辑1(真)。

  • 如果A是一个多维数组,则所有(A)都沿着第一个非指定维度行事,并返回一个逻辑值数组。 该尺寸的尺寸减小到1,而所有其他尺寸的尺寸保持不变。这个维度的大小减少到1,而其他所有维度的尺寸保持不变。

all(A, dim) 通过标量dim沿着维数A的维度进行测试。
any(A)
确定数组元素是否为非零;测试数组中不同维度的元素是否为非零数字,或是逻辑1(真)。 任何函数忽略NaN(不是数字)的条目。
  • 如果A是向量,任何(A)如果A的任何元素是非零数或逻辑1(真),则返回逻辑1(真),如果所有元素为零,则返回逻辑0(假)。

  • 如果A是非空矩阵,则任何(A)将A的列视为向量,返回逻辑1和0的行向量。

  • 如果A是一个空的0x0矩阵,任何(A)返回逻辑0(假)。

  • 如果A是一个多维数组,则任何(A)都沿着第一个非整数维进行操作,并返回一个逻辑值数组。该维度的尺寸减小到1,而所有其他维度的尺寸保持不变。

any(A,dim) 通过标量dim沿着维数A的维度进行测试。
false 逻辑0(假)
false(n) 是逻辑0的n×n矩阵
false(m, n) 是逻辑0的一个m×n矩阵。
false(m, n, p, ...) 是由逻辑0的逐列逐列数组。
false(size(A)) 是与数组A大小相同的逻辑零数组。
false(...,'like',p) 是与逻辑阵列p相同的数据类型和稀疏性的逻辑零数组。
ind = find(X) 查找非零元素的索引和值;定位数组X的所有非零元素,并返回向量中这些元素的线性索引。 如果X是行向量,则返回的向量是行向量; 否则返回列向量。如果X不包含非零元素或是空数组,则返回一个空数组。
ind = find(X, k)

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

最多返回与X的非零条目相对应的前k个索引。k必须是正整数,但它可以是任何数字数据类型。
ind = find(X, k, 'last') 最多返回与X的非零条目相对应的最后k个索引。
[row,col] = find(X, ...) 返回矩阵X中非零条目的行和列索引。使用稀疏矩阵时,此语法特别有用。 如果X是N>2的N维数组,col包含列的线性索引。
[row,col,v] = find(X, ...) 返回X中非零条目的列或行向量v,以及行和列索引。如果X是逻辑表达式,则v是逻辑数组。 输出v包含通过评估表达式X获得的逻辑数组的非零元素。
islogical(A) 确定输入是否为逻辑数组;如果A是逻辑数组,返回true,否则返回false。 如果A是从逻辑类派生的类的实例,它也返回true。
logical(A) 将数值转换为逻辑;返回一个可用于逻辑索引或逻辑测试的数组。
true 逻辑1(真)
true(n) 是一个n×n逻辑矩阵。
true(m, n) 是一个mxn逻辑矩阵。
true(m, n, p, ...) 是由逻辑1的逐列逐列数组。
true(size(A)) 是与数组A大小相同的逻辑数组。
true(...,'like', p) 是与逻辑阵列p相同的数据类型和稀疏性的逻辑阵列。
关系
函数 描述
eq(a, b) 测试a是否等于b
ge(a, b) 测试是否大于或等于B
gt(a, b) 测试a是否大于b
le(a, b) 测试a是否小于或等于b
lt(a, b) 测试a是否小于b
ne(a, b) 测试a是否不等于b
isequal 测试数组以获得相等性
isequaln 测试数组相等,将NaN值视为相等

6.决策决定

if ...elseif...elseif...else...end(只在最后加end)

switch语句:

switch(grade)

case 'A'

fprintf('Excellent!' );

case 'B'

fprintf('Well done' );

case 'C'

fprintf('Well done' );

case 'D'

fprintf('You passed' );

otherwise

fprintf('Invalid grade' );

end

感觉matlab的特殊句式都要在最后加一个end


7.循环

while...end

for a=[1,2,3,4]...end

for a=1:10...end(1,2,3,4,5;即步长为1从1到10)

for a=1:10:2...end(步长为2)

break和continue和C++一样

8.向量与矩阵

  • 行向量:r = [7 8 9 10 11]

  • 列向量:c = [7; 8; 9; 10; 11]

  • v(i)来引用向量v之中第i个元素(没有第0个)
  • 当引用一个冒号,一个向量,其例如为v(:),该载体上的所有组件的被列出。
  • 引用元素3至7写rv(3:7)

(1)加减法必须同类型向量以及元素数量相同,然后按位置相应进行加减得出结果向量。

eg:

A = [7, 11, 15, 23, 9];

B = [2, 5, 13, 16, 20];

C = A + B;

D = A - B;

disp(C); %显示向量

(2)标量乘法:A*5  %A中每个元素乘以5得出新向量

(3)转置:A'

(4)向量合并[A1,A2]  [A1;A2]两个行向量用;连接或者两个列向量用,连接时需要元素个数一致

(5)点乘:dot(A,B)就是a1·b1+a2+b2+···

(6)向量的模就是各个元素平方的和,然后开根号。

(7)等差元素向量:v = [开始值 : 步长 : 末尾(不一定包含,只代表界限)]

(8)行向量和列向量的组合:a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8] 引用:mx(m, n);第m行第n列的数字(从1开始算)

(9)矩阵加减,标量乘法,转置和向量一样

(10)矩阵左(\)右(/)除,A/B就是A*inv(B),A\B就是inv(A)*B

(11)矩阵串联,用,和;连接

(12)矩阵乘法用*

(13)行列式用det(矩阵)

(14)不是每个矩阵都有逆矩阵的,比如一个矩阵的行列式是零的话,则矩阵的逆就不存在,这样的矩阵是奇异的,A逆矩阵是inv(A).

9.数组

MATLAB中会使用一些函数来建立一些特殊的阵列,对于所有这些函数,一个参数创建一个正方形阵列,双参数创建矩形阵列。

  • zeros() 全为0,
  • ones()全为1
  • eye() 左对角线全1其余为0
  • rand() 函数建立一个数组(0,1)上均匀分布的随机数(小数)
  • magic() 函数创建一个幻方阵列,它需要一个单数的参数,该参数必须是一个大于或等于3的标量

多维数组:

先创二维矩阵(数组):a = [7 9 5; 6 1 9; 4 3 2]

再拓展:a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9] %第2层的二维矩阵的=值,原本的矩阵就在第一层了

访问:a(:, :, 1) 和a(:, :, 2)

ones(), zeros() 或 rand() 都可建立三(多)维数组,多加一个表示第三维的层数参数即可。

可以使用cat(第三维的个数,A1,A2,A3,A4) A为每一层的二维矩阵。

MATLAB数组函数

MATLAB提供以下功能进行排序,旋转,置乱,重塑或移动数组的内容。

函数 目的
length 矢量长度或最大阵列尺寸
ndims 数组维数
numel 数组元素的数目(字符串数组则为总字符数)
size 数组维度
iscolumn 确定输入是否是列向量
isempty 确定数组是否为空
ismatrix 确定输入是否为矩阵
isrow 确定输入是否为行向量
isscalar 确定输入是否为标量
isvector 确定输入是否为矢量
blkdiag 从输入参数构造块对角矩阵
circshift 循环移位
ctranspose 复数共轭转置
diag 矩阵的对角矩阵和对角线
flipdim 沿指定维度翻转数组
fliplr 从左到右翻转矩阵
flipud 将矩阵向下翻转
ipermute n-维阵列的反置换维数
permute 重新排列 N 维数组的维数
repmat 复制和平铺数组
reshape 重塑数组
rot90 旋转矩阵90度
shiftdim 移位维度
issorted 确定集合元素是否按排序顺序排列
sort 按升序或降序对数组元素进行排序
sortrows 按升序对行排序
squeeze 删除单维度
transpose 转置
vectorize 矢量化表达式
例子:

s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab'];

numel(s)

ans =

23


a = [1 2 3; 4 5 6; 7 8 9] % the original array

ab = circshift(a,1) % circular shift first dimension values down by 1.

c = circshift(a,[1 -1]) % circular shift first dimension values % down by 1

% and second dimension values to the left % by 1.

右和下为正数,[1,-1]表示先向下循环移动一行,再向左循环移动一列


v = [ 23 45 12 9 5 0 19 17] % horizonal vector

sort(v) %sorting 升序

vm = [2 6 4; 5 3 9; 2 0 1] % two dimensional array

sort(m, 1) % 每一列都是升序

sort(m, 2) % 每一行都是升序


c = cell(2, 5);
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}

运行该文件,显示以下结果:

c = 
    'Red'    'Blue'    'Green'    'Yellow'    'White'
    [  1]    [   2]    [    3]    [     4]    [    5]
访问: c(1:2,1:2) %第一个是选择行,第二个参数是选择选中行的列。

10.冒号

格式 目的
A(:,j) 是A的第j列
A(i,:) 是A的第j行
A(:,:) 是等效的二维数组;对于矩阵,这与A相同
A(j:k) 是A(j),A(j + 1),...,A(k)
A(:,j:k) 是 A(:,j), A(:,j+1),...,A(:,k)
A(:,:,k) 是三维数组A的第k页
A(i,j,k,:) 是四维数组A中的矢量;矢量包括A(i,j,k,1),A(i,j,k,2),A(i,j,k,3)等
A(:) 是 A 的所有要素,被视为单列;在赋值语句的左侧,A(:) 填充A,保留以前的形状;在这种情况下,右侧必须包含与A相同数量的元素。
A:B:C则为B步长,A开始到B之间的数。

11.数字

函数 目的
double 转换为双精度数字
single 转换为单精度数
int8 转换为8位有符号整数
int16 转换为16位有符号整数
int32 转换为32位有符号整数
int64 转换为64位有符号整数
uint8 转换为8位无符号整数
uint16 转换为16位无符号整数
uint32 转换为32位无符号整数
uint64 转换为64位无符号整数
类似C++的强制类型转换。

intmax(int8) 或 intmin(int64) 返回所在类型的最大整数

 realmax('single') 和 realmin('double') 返回最大值和最小值,可以表示为浮点数。

12.字符串

MATLAB 认为所有变量,数组和字符串被视为字符数组。

矩阵字符数组:

  • 使用 MATLAB 连接运算符 [] 和分离每行一个分号(;)。请注意,在该方法中的每一行必须包含相同的字符数。不同长度的字符串,应该根据需要使用空格字符。

  • 使用 char 函数。如果字符串长度不同和 char 补齐较短尾随空白,使每一行都有相同数量的字符的字符串。

doc_profile = ['Zara Ali '; ...

'Sr. Surgeon '; ...

'R N Tagore Cardiology Research Center']

函数 目的/作用
用于存储文本字符数组的函数,结合字符数组,等等
blanks 创建空白字符的字符串
cellstr 从字符数组中创建字符串单元格数组
char 转换为字符数组 (字符串)
iscellstr 确定输入是否是字符串的单元格数组
ischar 确定项是否为字符数组
sprintf 将数据格式化为字符串
strcat 水平串联字符串
strjoin 将单元格数组中的字符串合并为单个字符串
识别字符串部分的函数,查找和替换子串
ischar 确定项是否为字符数组
isletter 按照字母次序的数组元素
isspace 数组元素是空格字符
isstrprop 确定字符串是否为指定类别
sscanf 从字符串读取格式化数据
strfind 在另一个字符串中找到一个字符串
strrep 查找和替换字符串
strsplit 在指定分隔符处拆分字符串
strtok 字符串的选定部分
validatestring 检查文本字符串的有效性
symvar 在表达式中确定符号变量
regexp 匹配正则表达式 (区分大小写)
regexpi 匹配正则表达式 (不区分大小写)
regexprep 使用正则表达式替换字符串
regexptranslate 将字符串转换为正则表达式
字符串比较函数
strcmp 比较字符串 (区分大小写)
strcmpi 比较字符串 (不区分大小写)
strncmp 比较字符串的前 n 个字符 (区分大小写)
strncmpi 比较字符串的前 n 个字符 (不区分大小写)
改变字符串大写或小写,创建或删除空格的函数
deblank 从字符串末尾分隔尾随空格
strtrim 从字符串中删除前导空格和尾随空格
lower 将字符串转换为小写
upper 将字符串转换为大写
strjust 对齐字符数组

13.函数

函数在自己的工作空间进行操作,被称为本地工作区,独立的工作区;在 MATLAB 命令提示符访问,这就是所谓的基础工作区的变量。

函数可以接受多个输入参数和可能返回多个输出参数。

函数语句的语法是:

function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
function max = mymax(n1, n2, n3, n4, n5) %max是返回的变量,即return

expression;

end

调用:mymax(34, 78, 89, 23, 11)

匿名函数:

power = @(x, n) x.^n;

result1 = power(7, 3) %用返回变量来指代

在一个文件中,必须定义一个匿名函数以外的任何函数。每个函数的文件包含一个必需的主函数和首先出现的任何数量的可选子函数,在主要函数之后使用。

sym与syms:都是声明符号变量

可以sym x,不可以sym s y,可以syms x,也可以syms x y 

可以syms d(r);然后d=r*2;但sym d(t)会当成一个整体符号变量看待而非函数

MATLAB嵌套函数

在这个机体内另一个函数,可以定义函数。这些被称为嵌套函数。

嵌套函数包含任何其他函数的任何或所有的组件。

嵌套函数被另一个函数的范围内定义他们共享访问包含函数的工作区。

嵌套函数的语法如下:

function x = A(p1, p2)
...
B(p2)
   function y = B(p3)
   ...
   end
...
end
function [x1,x2] = quadratic2(a,b,c)

function disc % nested function

d = sqrt(b^2 - 4*a*c);

end % end of function disc

disc; %要执行一次

x1 = (-b + d) / (2*a);

x2 = (-b - d) / (2*a);

end % end of function quadratic2

MATLAB私有函数

放在子文件夹中的函数文件,只有父级函数文件中才可以调用。

MATLAB全局变量

全局变量可以共享由一个以上的函数。对于这一点,需要将变量声明为全局在所有的函数可使用。

function avg = average(nums)

global TOTAL %最好使用大写命名

avg = sum(nums)/TOTAL;

end

14.数据导入

高级导入方式:默认情况下,Octave 没有importdata() 函数的支持,所以要搜索并安装这个包下面的例子Octave 安装工作。

S.N. 函数&说明
1
A = importdata(filename)
将数据从文件名所表示的文件中加载到数组 A 中。
2
A = importdata('-pastespecial') 
从系统剪贴板加载数据,而不是从文件加载数据。
3
A = importdata(___, delimiterIn) 
将 delimiterIn 解释为 ASCII 文件、文件名或剪贴板数据中的列分隔符。可以将 delimiterIn 与上述语法中的任何输入参数一起使用。
4
A = importdata(___, delimiterIn, headerlinesIn)
从 ASCII 文件、文件名或剪贴板加载数据,并从 lineheaderlinesIn+1 开始读取数字数据。
5
[A, delimiterOut, headerlinesOut] = importdata(___)
在分隔符输出中返回检测到的分隔符字符,并使用前面语法中的任何输入参数检测headerlinesOut 中检测到的标题行数
文件:weeklydata.txt

SunDay MonDay TuesDay WednesDay ThursDay FriDay SatureDay

95.01 76.21 61.54 40.57 55.79 70.28 81.53

73.11 45.65 79.19 93.55 75.29 69.87 74.68

60.68 41.85 92.18 91.69 81.32 90.38 74.51

48.60 82.14 73.82 41.03 0.99 67.22 93.18

89.13 44.47 57.63 89.36 13.89 19.88 46.60


filename = 'weeklydata.txt';

delimiterIn = ' ';

headerlinesIn = 1;

A = importdata(filename,delimiterIn,headerlinesIn);% View data

for k = [1:7]

disp(A.colheaders{1, k})

disp(A.data(:, k))

disp(' ')

end

也可以导入图片文件


MATLAB低级别的文件I / O

MATLAB 中 importdata 函数是一个高层次的函数。如果要处理低级别的文件,在MATLAB中的 I / O 功能允许读取或写入数据到一个文件中的大部分控制权。但是,使用这些功能的要求是这些文件需要具有更加详细的信息,这样能够提高工作效率。

MATLAB字节或字符的读取和写入操作提供了以下功能:

函数 描述
fclose 关闭一个或全部已打开的文件
feof 测试文件结尾
ferror 有关文件I / O错误的信息
fgetl 从文件读取行, 删除换行符
fgets 从文件读取行, 保留换行符
fopen 打开文件, 或获取有关打开的文件的信息
fprintf 将数据写入文本文件
fread 从二进制文件读取数据
frewind 将文件位置指示器移动到打开文件的开头
fscanf 从文本文件读取数据
fseek 移动到文件中的指定位置
ftell 获得打开文件的位置
fwrite 将数据写入二进制文件

MATLAB 低层次的导入文本数据文件由以下函数实现:

  • fscanf 函数读取文本或 ASCII 文件格式的数据。

  • fgetl 函数和 fgets 函数读取一行的文件,换行符分隔每一行。

  • fread 函数读出的数据流的字节或位的级别。

主要介绍fscanf,三种形式:

  • A = fscanf(fileIDformat)
  • A = fscanf(fileIDformatsizeA)
  • [A, count] = fscanf(...)  %count是读取成功的数据个数

主要讲第二种:

%%  A 是你从打开的文件中读入数据最后存储的一个矩阵 叫做A

%%  fileID是从前提函数中返回的结果,代表你要打开的文件是否已经正常打开,其原型为 fid = fopen(fileName, 'r');返回值要么为0 要么为 1 logical value,文件操作结束后要记得用fclose(fid)来关闭。

%%   format 就是数据的格式  '%s' 为一个字符串,'%d' 为一个整数,或 '%f' 表示一个浮点数。'%*s'表示跳过一个字符串(扫描但不读入)

%%  sizeA  这个表示A最终的维数 ,比如[3,3]代表A最终是3x3的矩阵,从原始文件中读的时候是按行读,写入A中时按列优先。直到满足sizeA所表示的维数,其余的丢弃不要。

比如:

E.G.:

1 2 3

4 5 6

4 5 6

7 8 9

A = fscanf(fileID, '%d', [3,3]);

A =

1 4 4

2 5 5

3 6 6

15.数据导出

导出数字阵列的 ASCII 数据文件的方法有两种:

  • 使用 save 函数及指定的 ASCII 限定符

  • 使用 dlmwrite 函数

使用 save 函数的语法如下:

save my_data.out num_array -ASCII

其中,my_data.out 定界 ASCII 创建的数据文件,num_array是一个数字的阵列和 ASCII 符。

dlmwrite 函数的语法如下:

dlmwrite('my_data.out', num_array, 'dlm_char')

其中,my_data.out 定界 ASCII 创建的数据文件,num_array 是一个数字阵列和 dlm_char 作为分隔符。

num_array = [ 1 2 3 4 ; 4 5 6 7; 7 8 9 0];

save array_data1.out num_array -ASCII;

type array_data1.out

dlmwrite('array_data2.out', num_array, ' ');

type array_data2.out

如果使用 SAVE 功能写一个字符数组的 ASCII 文件,它等价 ASCII 码字符写入到文件中。

h = 'hello';
save textdata.out h -ascii
type textdata.out

MATLAB执行上述语句,显示以下结果:

1.0400000e+02   1.0100000e+02   1.0800000e+02   1.0800000e+02   1.1100000e+02

这是字符的字符串 'hello' 的8位 ASCII 格式。

MATLAB低级别的I/O数据导出到文本数据文件:fprintf


默认情况下,fopen 函数打开一个文件进行只读访问。你应该指定写入的权限或追加,如 'w' 或 'a'。

例子:

% create a matrix y, with two rows
x = 0:10:100;
y = [x; log(x)];
 
% open a file for writing
fid = fopen('logtable.txt', 'w');
 
% Table Header
fprintf(fid, 'Log     Function');
 
% print values in column order
% two values appear on each row of the file
fprintf(fid, '%f    %f', y);
fclose(fid);
% display the file created
type logtable.txt

运行该文件,显示以下结果:

Log     Function

0.000000    -Inf
10.000000    2.302585
20.000000    2.995732
30.000000    3.401197
40.000000    3.688879
50.000000    3.912023
60.000000    4.094345
70.000000    4.248495
80.000000    4.382027
90.000000    4.499810
100.000000    4.605170

16.函数图

1.函数图形:

x = [0:5:100];%指定自变量的值域

y = x;%定义因变量和自变量的关系 ,y = x.^2;则为x的平方

plot(x, y)%绘图,注意参数位置

x = [0:0.01:10];

y = sin(x);

plot(x, y),

xlabel('x'), %添加x轴的标签

ylabel('Sin(x)'), %添加y轴的标签

title('Sin(x) Graph'),%添加标题

grid on,%添加网格(从x,y轴各个单位值为标准划出来的虚线)

axis equal%允许生成与同等规模因素和空间两个坐标轴上的积点。x与y轴的单位长度一致

绘制图形的线条颜色:

Color Code
White w
Black k
Blue b
Red r
Cyan c
Green g
Magenta m
Yellow y
2.同一个图形中并存两个函数图形:

x = [-10 : 0.01: 10];

y = sin(x);

g = cos(x);

plot(x, y, 'r', x, g, 'g'),

legend('Sin(x)', 'Cos(x)')%添加图形的字符串说明(说明那种颜色线条属于哪个函数)

该轴命令允许您设置轴的刻度,您可以提供的最小值和最大值的 x 和 y 轴,使用轴命令的方式如下:

axis ( [xmin xmax ymin ymax] )
3.生成子图:同时显示多个图(并非多个函数在同一个图中)

subplot(m, n, p)

其中,m 和 n 为积阵列的行和列的数量,p 指定把一个特定的积。

x = [0:0.01:5];

y = exp(-1.5*x).*sin(10*x);

subplot(1,2,1)

plot(x,y), xlabel('x'),ylabel('exp(–1.5x)*sin(10x)'),axis([0 5 -1 1])

y = exp(-2*x).*sin(10*x);

subplot(1,2,2)

plot(x,y),xlabel('x'),ylabel('exp(–2x)*sin(10x)'),axis([0 5 -1 1])

17.图形

1.MATLAB绘制条形图

MATLAB 中使用 bar 命令绘制一个二维条形图。

x = [1:10];

y = [75, 58, 90, 87, 50, 85, 92, 75, 60, 95];

bar(x,y), xlabel('Student'),ylabel('Score'),title('First Sem:')

print -deps graph.eps %把图形保存成一张图片

2.MATLAB绘制等值线

contour 线的两个变量的函数的曲线,沿着该函数具有一个恒定值。加入等于标高点,一个给定的水平,如平均海平面以上用于创建等高线图等高线。

MATLAB 提供了一个轮廓绘制等高线图的函数。

meshgrid 命令是用于产生一个矩阵的元素,赋予 x 和 y 的范围内进行了在每一种情况下的增量同规格一起。

让我们绘制函数 g = f(x, y), where −5 ≤ x ≤ 5, −3 ≤ y ≤ 3,这两个值的增量为0.1。

[x,y] = meshgrid(-5:0.1:5,-3:0.1:3); %independent variables

g = x.^2 + y.^2; % our function

contour(x,y,g) % call the contour function

3.MATLAB绘制三维图

三维绘图基本显示两个变量中的一个函数定义的表面,g = f (x,y)。

像以前一样,定义 g,我们首先创建一组点(X,Y)函数,使用 meshgrid 命令在域;接下来,我们该函数本身分配;最后使用 surf 命令来创建曲面图。

[x,y] = meshgrid(-2:.2:2);

g = x .* exp(-x.^2 - y.^2);

surf(x, y, g)

18.代数

solve('x-5=0')
ans =
 5
y = solve('x-5 = 0')
y =
 5

甚至可能不包括的右边的方程:

solve('x-5')
ans =
 5

多个变量时:

solve('v-u-3*t^2=0', 'v')
ans =
 3*t^2 + u
eq = 'x^2 -7*x + 12 = 0';
s = solve(eq); %解作为一个数组返回,二阶高阶都是返回数组
disp('The first root is: '), disp(s(1));
disp('The second root is: '), disp(s(2));

运行该文件,显示以下结果:

The first root is: 
3
The second root is: 
4
求解方程组:

s = solve('5*x + 9*y = 5','3*x - 6*y = 4');
s.x
s.y
ans =
 22/19
ans =
-5/57

MATLAB中 expand 和 collect 命令用于扩展,并分别收集一个方程。下面的示例演示的概念:

当工作中有许多象征性的函数,你应当声明你的变量是象征意义的。

collect用来合并同类项,处理符号变量,默认以x为符号变量(非符号变量当常数符号处理):

>> syms x y
>>collect(x^2*y+y*x-x^2-2*x)%此处默认x为符号变量
ans =
(y- 1)*x^2 + (y - 2)*x
>>collect(x^2*y+y*x-x^2-2*x,y)%此处修改为以y为符号变量
ans =
(x^2 + x)*y - x^2 -2*x

collect函数用于符号表达式的展开运算,collect只能用于符号运算.

在MATLAB中建立一个脚本文件,并输入下述代码:

syms x %symbolic variable x
syms y %symbolic variable x
% expanding equations
expand((x-5)*(x+9))
expand((x+2)*(x-3)*(x-5)*(x+7))
expand(sin(2*x))
expand(cos(x+y))
 
% collecting equations
collect(x^3 *(x-7))
collect(x^4*(x-3)*(x-5))

运行该文件,显示以下结果:

ans =
 x^2 + 4*x - 45
 ans =
 x^4 + x^3 - 43*x^2 + 23*x + 210
 ans =
 2*cos(x)*sin(x)
 ans =
cos(x)*cos(y) - sin(x)*sin(y)
 ans =
 x^4 - 7*x^3
 ans =
 x^6 - 8*x^5 + 15*x^4 
分解和简化表达式:

syms x
syms y
factor(x^3 - y^3)
factor([x^2-y^2,x^3+y^3])
simplify((x^4-16)/(x^2-4))

运行该文件,显示以下结果:

ans =
(x - y)*(x^2 + x*y + y^2)
 ans =
 [ (x - y)*(x + y), (x + y)*(x^2 - x*y + y^2)]
 ans =
 x^2 + 4

19.微积分

计算极限:limit(式子,趋向的值)%不写趋向值则默认为0

limit(x^2 + 5, 3)
ans =
 14 
limx->p ( f(x) + g(x)) = limx->p f(x) + limx->p g(x) limx->p (f(x)- g(x)) = limx->p f(x) - limx->p g(x) limx->p (f(x)· g(x)) =  limx->p f(x)· limx->p g(x) limx->p (f(x)/g(x)) = limx->p f(x)/ limx->p g(x) 左右极限:

f = (x - 3)/abs(x-3);

l = limit(f,x,3,'left')

r = limit(f,x,3,'right')

结果:

l = -1

r =1

20.多项式

在 MATLAB 中,多项式用一个行向量表示,行向量的元素值为多项式系数按幂次的降序排列。

例如,方程 P(x) = x4 + 7x3 - 5x + 9 可以表示为:

p = [1 7 0 -5 9];

MATLAB计算多项式

MATLAB中 polyval 函数用于将指定的值 - 计算多项式。例如,要计算我们本节开始时举例的多项式 p, x = 4,输入:

p = [1 7 0  -5 9];
polyval(p,4)

MATLAB 执行上述语句,返回以下结果:

ans =
   693
p = [1 7 0 -5 9];

X = [1 2 -3 4; 2 -5 6 3; 3 1 0 2; 5 -7 3 8]; %可以用矩阵作为变量x的赋值,结果也是一个矩阵

polyvalm(p, X)

给出多项式求根:

p = [1 7 0  -5 9];
r = roots(p)

MATLAB执行上述语句,返回以下结果:

r =
  -6.8661 + 0.0000i
  -1.4247 + 0.0000i
   0.6454 + 0.7095i
   0.6454 - 0.7095i

 poly 根据根返回一个多项式(系数表示)

例如:

p2 = poly(r)

MATLAB执行上述语句,返回以下结果:

p2 =
    1.0000    7.0000    0.0000   -5.0000    9.0000

多项式曲线拟合

p = polyfit(x,y,n)

x为一个赋值向量,y为在x中对应赋值元素下多项式的值,n为最高次幂。

在MATLAB中建立一个脚本文件,并输入下述代码:

x = [1 2 3 4 5 6]; y = [5.5 43.1 128 290.7 498.4 978.67];  %data
p = polyfit(x,y,4)   %get the polynomial
p =
    4.1056  -47.9607  222.2598 -362.7453  191.1250

x2 = 1:.1:6;

y2 = polyval(p,x2); %对于p多项式,x2位赋值向量,y2位返回的结果向量

21.变换

MATLAB拉普拉斯变换

syms s t a b w
laplace(a)
laplace(t^2)
laplace(t^9)
laplace(exp(-b*t))
laplace(sin(w*t))
laplace(cos(w*t))

运行该文件,显示以下结果:

ans =
 1/s^2

 ans =
 2/s^3

 ans =
 362880/s^10

 ans =
 1/(b + s)
  
ans =
 w/(s^2 + w^2)
  
ans =
 s/(s^2 + w^2)

MATLAB逆拉普拉斯变换

MATLAB中使用命令 ilaplace 计算拉普拉斯逆变换。

例如:

ilaplace(1/s^3)

MATLAB执行上述语句,并显示结果:

ans =
 t^2/2

MATLAB傅立叶变换

在MATLAB中建立一个脚本文件,并输入下述代码:

syms x 
f = exp(-2*x^2);  %our function
ezplot(f,[-2,2])  % plot of our function
FT = fourier(f)	% Fourier transform

显示以下结果:

FT =
 (2^(1/2)*pi^(1/2)*exp(-w^2/8))/2

MATLAB傅立叶逆变换

f = ifourier(-2*exp(-abs(w)))

MATLAB执行上述语句,并显示如下结果:

f =
-2/(pi*(x^2 + 1))


  • 46
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值