1.变量及类型转换
double() | 转换为双精度浮点数 |
single() | 转换为单精度浮点型 |
int8() | 转换为8位有符号整数 |
int16() | 转换为16位有符号整数 |
int32() | 转换为32位有符号整数 |
int64() | 转换为64位有符号整数 |
uint8() | 转换为8位无符号整数 |
uint16() | 转换为16位无符号整数 |
uint64() | 转换为64位无符号整数 |
1.字符型character(char)
-
在ASCLL中使用0~255之间的数字代码表示。
-
放入一对单引号中创建字符或字符串。
例如:
s1='A';
whos;
disp(uint16(s1));#65
2.字符串String
s1='hello';
s2='world';
s1="hello world"; s2='hello world';
s1
与s2
不同,s1
包含与s2
相同的字符。但是s2
是字符向量,而s1
是字符串标量。
3.字符串拼接
s1='hello';
s2='world';
s3=[s1 s2];#s3的大小为1*10
s4=[s1;s2];#s4的大小为2*5
若s1=“hello”;s2=“world”;
[s1,s2] = “hello” “world”
[s1;s2] = “hello”
“world”
4.逻辑运算和赋值
字符数组与单个字符进行逻辑运算
结果为该字符与字符串中字符一一进行逻辑运算,返回一个一维向量。
如:
str = 'aardvark';
'a' == str
#结果
ans =
1×8 logical 数组
1 1 0 0 0 1 0 0
str = 'abcdabvdabcdsdsa';
str(str == 'a') = 'Z'; #若结果为1则改变该字符的值为‘Z’
5.字符数组的翻转
str = 'hello world';
s2=str(length(str):-1:1);
# s2 = 'dlrow olleh';
函数
fliplr()
:将数组从左向右翻转语法: B = fliplr(A)
6.结构体
student=struct('name','lilei','id','2230090211','phone','10086','grade',[100 99 98 97 96 95 94 93 92 91 90]);
disp(student);
disp(student.grade);
student(2).name='lijiahang';
disp(student(2));
结构体函数
函数 | 作用 |
---|---|
struct | 创建结构体 |
struct2cell | 将结构体转换为元胞数组 |
cell2struct | 将元胞数组转换为结构体 |
isstruct | 判断某变量是否是结构体 |
structfun | 对结构体的某字段都对应某函数 |
fieldnames | 获取结构体的所有字段名 |
isfield | 判断结构体是否包含某字段 |
getfield | 获取结构体某字段的值 |
setfield | 为结构体中的某字段赋值 |
rmfield | 删除结构体中的某字段 |
orderfields | 为结构体字段排序 |
7.元胞数组
-
元胞数组是一种通用的数据容器,可以包含不同类型的数据,包括数值、字符串、函数句柄、其他元胞数组等。元胞数组用花括号
{ }
来访问其元素。 -
结构体是一种有序的数据容器,每个元素都包含一个字段名和相应的值。字段值可以是不同类型的数据,但通常结构体用于组织和存储具有不同属性的数据。结构体用点运算符
.
来访问其字段。
访问元素:
元胞数组中的元素可以是任何类型的数据,因此访问元素时需要使用花括号 {}
,并指定索引位置。
结构体的元素是由字段名标识的,因此访问元素时需要使用点运算符.
,并指定字段名。
数据组织:
元胞数组通常用于存储不同类型的数据,或者需要灵活处理不同类型数据的情况。
结构体通常用于组织和存储具有不同属性的数据,例如,一个人的姓名、年龄、地址等属性可以存储在一个结构体中,每个属性用一个字段表示。
索引成员
B=cell(2,2);
B(1,1)={'This is the first cell'};
B(1,2)={[5+j*6 4+j*5]};
B(2,1)={[1 2 3; 4 5 6; 7 8 9]};
B(2,2)={['Tim' 'Chris']}
B{2,1}(1,:); #1 2 3
元胞数组函数
函数 | 作用 |
---|---|
cell | 创建一个元胞数组 |
iscell | 判断某类型的变量是否为元胞数组 |
cell2mat | 将元胞数组转为矩阵 |
cell2struct | 将元胞数组转为结构体 |
mat2cell | 将数组转为指定大小的元胞数组 |
num2cell | 将数组转为相同大小的元胞数组 |
struct2cell | 将结构体转换为元胞数组 |
celldisp | 递归的显示元胞数组中的内容 |
cellplot | 以图像的形式绘制元胞数组的结构 |
cellfun | 对元胞数组的每个元胞应用某个函数 |
函数 mat2cell()
:将数组转换为在元胞中包含子数组的元胞数组
语法:C = mat2cell(A,dim1Dist,...,dimNDist)
示例:
a=magic(5);
b=num2cell(a);
c=mat2cell(a,[2 3],[2 2 1]);
disp(c);
#ans
C=2×3 cell array
{2x2 double} {2x2 double} {2x1 double}
{3x2 double} {3x2 double} {3x1 double}
M = magic(n) 幻方矩阵
M = magic(n)
返回由1
到n
2 的整数构成并且总行数和总列数相等的n
×n
矩阵。n
的阶数必须是大于或等于3
的标量才能创建有效的幻方矩阵。如:
$$
magic(3)=\left[ \matrix{ 8 & 1 & 6\\ 3 & 5 & 7\\ 4 & 9 & 2\\ } \right]
$$
dim1Dist
,...,dimNDist
各个数组中的参数和必修等与输入矩阵的的每个维度。如:第三行中的
c=mat2cell(a,[2 3],[2 2 1])
中2+3=5 且 2+2+1=5。
-
多维元胞数组:一个三维的元胞数组可以 有 行 (row), 列(column),层(layer)三个维度.在对元胞数组进行索引时,优先级从高到低的顺序分别是: 行→列→层。
8.cat()
使用cat 函数可以在指定维度上对元胞数组进行拼接。
A=[1,2;3,4];
b=[5,6;7,8];
C=cat(1,A,B);#行
#ans=
# 1 2
# 3 4
# 5 6
# 7 8
D=cat(2,A,B);#列
#ans=
# 1 2 5 6
# 3 4 7 8
E=cat(3,A,B);#层
#ans=
#(:,:,1) =
# 1 2
# 3 4
#(:,:,2) =
# 5 6
# 7 8
9.reshape()
重构数组,重组数组的大小。
语法
B= reshape(A,m,n);
其中 A 是要重组的数组,m 和 n 是新数组的行数和列数。
示例
A={'James Bond',[1 2;3 4;5 6];pi,magic(5)};
B=reshape(A,1,4);
10.判断变量数据类型的函数
函数 | 作用 |
---|---|
isinteger | 判断输入参数是否为整型数数组 |
islogical | 判断输入参数是否为逻辑量数组 |
isnumeric | 判断输入参数是否为数值数组 |
isreal | 判断输入参数是否为实数数组 |
ischar | 判断输入参数是否为字符数组 |
iscell | 判断输入参数是否为元胞数组 |
isfloat | 判断输入数组是否为浮点数数组 |
ishandle | 判断输入数组是否为有效的图形句柄 |
isempty | 判断输入数组是否为空 |
isprime | 确定哪些数组元素是质数 |
isnan | 确定哪些数组元素为NaN |
isinf | 确定哪些数组元素为Inf |
isqueal | 判断数组是否相等 |
Nan
:值为空
Inf
:值为正无穷的标量
clear all
(或 clear) 清空工作区内存中的变量
close all
关闭之前程序绘制的图像
clc
清空之前程序在终端的输出
-
在Matlab中,省略号可以将多行语句拼接为一行
A = [1 2 3 4 5 6;...
6 5 4 3 2 1];
11.脚本与函数
脚本 | 函数 |
---|---|
无输入参数 | 有输入参数 |
无输出参数 | 有输出参数 |
对全局工作区中的数据进行操作 | 对本地工作区中的数据进行操作 |
12.函数
-
函数名与文件名匹配
-
目录:Matlab中需要查找的函数
-
输出和输入变量是可选的
-
局部变量:dim和flag不能被访问
dim
参数:在很多 MATLAB 函数中,
dim
通常表示在哪个维度上进行操作。例如,对于sum
函数,你可以指定在哪个维度上进行求和。语法可能类似于sum(A, dim)
,其中A
是输入矩阵,而dim
是指定的维度。 举例:sum(A, 1)
表示沿着矩阵的第一个维度(列)进行求和。flag
参数:
flag
通常用于控制函数的某些特定行为。例如,flag
参数可能是一个布尔值,用于启用或禁用某些功能。具体的功能和用法会根据函数而异。 举例:在 sort 函数中,flag 参数可能用于控制升序还是降序排序。语法可能是 sort(A, 'descend'),其中descend
是 flag 参数。
语法
function [y1,...,yN] = myfun(x1,...,xM)
[Matlab code]
end
可以将函数保存在以下位置(.m文件):
只包含函数定义的函数文件中。文件的名称须与文件中第一个函数的名称一致。
包含命令和函数定义的脚本文件中。函数必须位于该文件的末尾。脚本文件不能与文件中的函数具有相同的名称。R2016b 或更高版本的脚本中支持函数。
文件可以包含多个局部函数或嵌套函数。为提高可读性,可使用
end
关键字来表示文件中每个函数的末尾。以下情况下需要end
关键字:
文件中有任意函数包含嵌套函数。
该函数是函数文件中的局部函数,并且文件中有局部函数使用
end
关键字。该函数是脚本文件内的局部函数。
参数列表
函数参数 | 意义 |
---|---|
imputname | 输入变量名列表 |
mfilename | 函数源代码文件名 |
nargin | 输入变量数 |
nargout | 输出变量数 |
varargin | 可变长输入参数列表 |
varargout | 可变长输出参数列表 |
-
Matlab不提供指定默认参数值以及函数重载等语法,但灵活使用上述内置函数参数,可以在一定程度上实现指定默认参数以及方法重载。
函数句柄
-
可以使用函数句柄的形式定义函数,这更接近数学上的函数定义,其语法如下:
函数句柄 = @(输入变量) 输出变量
示例:
f = @(x) exp(-2*x);#定义
x=0:0.1:2;
plot(x,f(x));#调用
练习
编写一个摄氏温度Celsius
转换为华氏温度Fahrenheit
的函数,该脚本一直运行,知道没有要提供转换的数字为止。
function myfun()
while(true)
%‘s’:以字符串的形式输入
%输入摄氏温度
str_c=input('输入摄氏温度:','s');
%判断输入是否为空行
if isempty(str_c)
break;
else
c=str2double(str_c);
%判断输入的是否为有效数字
if isnan(c)
disp("无效数字,重新输入");
else
F=9/5*c+32;
disp("等效摄氏温度为 "+F);
end
end
end
end