MATLAB学习第八天(数组,符号,函数)

目录

 

MATLAB数组

MATLAB中的特殊阵列

MATLAB幻方

MATLAB多维数组

详细例子

MATLAB数组函数

详细示例

MATLAB数组排序

MATLAB单元阵列

注意

详细例子

MATLAB在单元格上阵列访问数据

MATLAB冒号符号

详细例子

MATLAB数字

MATLAB各种数字数据类型的转换

详细例子

详细例子

最小和最大整数

详细例子

MATLAB最小和最大浮点数

详细实例

MATLAB字符串

详细例子

MATLAB矩形字符数组

详细例子

详细例子

将字符串组合成单元格数组

详细例子

MATLAB中的字符串函数

详细例子

格式化字符串

加入字符串

查找和替换字符串

比较字符串

MATLAB函数

详细例子

MATLAB匿名函数

详细例子

主要函数和子函数

详细例子

MATLAB嵌套函数

详细例子

MATLAB私有函数

详细例子

MATLAB全局变量

详细例子


 

MATLAB数组

之前,我们讨论了很多关于MATLAB向量和矩阵的知识,在本章中,我们将讨论多维数组。在MATLAB中所有的数据类型的变量是多维数组,向量是一个一维阵列,矩阵是一个二维数组。

首先,我们先来看一些特殊类型的数组。

MATLAB中的特殊阵列

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

使用 zeros() 函数建立一个元素为零的数组:

例如:

zeros(5)

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

ans =
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0

使用 ones() 函数建立一个数组:

例如:

ones(4,3)

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

ans =
     1     1     1
     1     1     1
     1     1     1
     1     1     1

使用 eye() 函数创建一个矩阵:

例如:

eye(4)

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

ans =
     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1

使用 rand() 函数建立一个数组(0,1)上均匀分布的随机数:

例如:

rand(3, 5)

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

ans =
    0.8147    0.9134    0.2785    0.9649    0.9572
    0.9058    0.6324    0.5469    0.1576    0.4854
    0.1270    0.0975    0.9575    0.9706    0.8003

MATLAB幻方

产生相同的总和,当它的元素加入逐行,逐列或对角线幻方是一个正方形。

使用 magic() 函数创建一个幻方阵列,它需要一个单数的参数,该参数必须是一个大于或等于3的标量。

例如:

magic(4)

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

ans =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

MATLAB多维数组

在MATLAB中,一个阵列如果具有两个以上的维度则被称为多维数组。

在MATLAB中的多维数组是正常的两维矩阵的延伸。

MATLAB中需要先创建一个二维数组然后对该二维数组进行扩展,这样才能生成一个多维数组。

例如,我们先建立一个二维数组a。

a = [7 9 5; 6 1 9; 4 3 2]

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

a =
     7     9     5
     6     1     9
     4     3     2

数组 a 是一个 3x3 阵列,通过提供的值,我们可以添加一个第三维,例如:

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

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

a(:,:,1) =
     7     9     5
     6     1     9
     4     3     2

a(:,:,2) =
     1     2     3
     4     5     6
     7     8     9

同样,我们也可以使用 ones(), zeros() 或 rand() 函数建立多维数组。

例如:

b = rand(4,3,2)

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

b(:,:,1) =
    0.0344    0.7952    0.6463
    0.4387    0.1869    0.7094
    0.3816    0.4898    0.7547
    0.7655    0.4456    0.2760

b(:,:,2) =
    0.6797    0.4984    0.2238
    0.6551    0.9597    0.7513
    0.1626    0.3404    0.2551
    0.1190    0.5853    0.5060

还能够使用 cat() 函数来建立多维数组,它结合沿着指定的维度的数组列表:

cat() 函数的语法是:

B = cat(dim, A1, A2...)

注意:

  • B 是新建的数组;

  • A1, A2, ... 是要连接的阵列;

  • dim 是一起串联阵列的维度。

详细例子

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

a = [9 8 7; 6 5 4; 3 2 1];
b = [1 2 3; 4 5 6; 7 8 9];
c = cat(3, a, b, [ 2 3 1; 4 7 8; 3 9 0])

运行该文件时,显示结果:

c(:,:,1) =
     9     8     7
     6     5     4
     3     2     1
c(:,:,2) =
     1     2     3
     4     5     6
     7     8     9
c(:,:,3) =
     2     3     1
     4     7     8
     3     9     0

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 矢量化表达式

详细示例

上述的一些函数将由下列例子说明。

长度,尺寸和数量的元素:

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

x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9];
length(x)  % length of x vector
y = rand(3, 4, 5, 2);
ndims(y)    % no of dimensions in array y
s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab'];
numel(s)   % no of elements in s

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

ans =
     8
ans =
     4
ans =
    23

循环移位的数组元素:

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

a = [1 2 3; 4 5 6; 7 8 9]  % the original array a
b = 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.

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

a =
     1     2     3
     4     5     6
     7     8     9

b =
     7     8     9
     1     2     3
     4     5     6

c =
     8     9     7
     2     3     1
     5     6     4

MATLAB数组排序

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

v = [ 23 45 12 9 5 0 19 17]  % horizonal vector
sort(v)   %sorting v
m = [2 6 4; 5 3 9; 2 0 1]  %  two dimensional array
sort(m, 1)   % sorting m along the row
sort(m, 2)   % sorting m along the column

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

v =
    23    45    12     9     5     0    19    17
ans =
     0     5     9    12    17    19    23    45
m =
     2     6     4
     5     3     9
     2     0     1
ans =
     2     0     1
     2     3     4
     5     6     9
ans =
     2     4     6
     3     5     9
     0     1     2

MATLAB单元阵列

单元阵列的阵列中每个单元格可以存储不同的维度和数据类型的数组的索引单元格。

单元格函数用于建立一个单元阵列。

单元格函数的语法如下:

C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)

注意

  • C 是单元阵列;

  • dim 是一个标量整数或整数向量,指定单元格阵列C的尺寸;

  • dim1, ... , dimN 是标量整数指定尺寸的C;

  • obj 是以下内容之一

    • Java 数组或对象

    • .NET阵列 System.String 类型或 System.Object

详细例子

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

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]

MATLAB在单元格上阵列访问数据

使用两种方法来引用单元阵列的元素:

  • 封闭的索引在第一个 bracket (),是指一组单元格

  • 封闭的在大括号{},的索引单个单元格内的数据

括在第一支架的索引,它指的是单元格的集。

单元阵列索引平稳括号单元格集合。

例如:

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

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

ans = 
    'Red'    'Blue'
    [  1]    [   2]

同样可以用花括号“{ }”索引访问单元格的内容。

例如:

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

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

ans =
   Blue
ans =
   Green
ans =
   Yellow

 

MATLAB冒号符号

MATLAB 中可以使用 “:” 来建立矢量、下标数组和指定的迭代,是最有用的 MATLAB 运算符之一。

下述例子建立了一个包括 1~10 的一个行向量:

1:10

MATLAB执行该语句,结果返回一个行向量,包含了从1到10的整数:

ans =
     1     2     3     4     5     6     7     8     9    10

如果想指定以外的一个增量值,例如:

100: -5: 50

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

ans =
   100    95    90    85    80    75    70    65    60    55    50

让我们再举一个例子:

0:pi/8:pi

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

ans =
  Columns 1 through 7
         0    0.3927    0.7854    1.1781    1.5708    1.9635    2.3562
  Columns 8 through 9
    2.7489    3.1416

可以使用冒号 “:” 运算符建立矢量指数来选择行、列或数组中的元素。

下表描述了其用于此目的(让我们有一个矩阵A):

格式 目的
A(:,j) 是A的第 j 列
A(i,:) 是A的第 i 行
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相同数量的元素。

详细例子

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

A = [1 2 3 4; 4 5 6 7; 7 8 9 10]
A(:,2)      % second column of A
A(:,2:3)    % second and third column of A
A(2:3,2:3)  % second and third rows and second and third columns

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

A =
     1     2     3     4
     4     5     6     7
     7     8     9    10

ans =
     2
     5
     8

ans =
     2     3
     5     6
     8     9

ans =
     5     6
     8     9

MATLAB数字

MATLAB 支持的数字类有很多,其中包括符号和无符号的整数及单精度和双精度浮点数。

默认情况下,MATLAB 存储所有数值为双精度浮点数。

MATLAB可以选择存储任何数字或数字为整数或单精度数字阵列。

MATLAB所有的数字类型支持基本的数组运算和数学运算。

MATLAB各种数字数据类型的转换

MATLAB提供各种数字数据类型转换为以下功能:

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

详细例子

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

x = single([5.32 3.47 6.28]) .* 7.5
x = double([5.32 3.47 6.28]) .* 7.5
x = int8([5.32 3.47 6.28]) .* 7.5
x = int16([5.32 3.47 6.28]) .* 7.5
x = int32([5.32 3.47 6.28]) .* 7.5
x = int64([5.32 3.47 6.28]) .* 7.5

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

x =
   39.9000   26.0250   47.1000
x =

   39.9000   26.0250   47.1000
x =
   38   23   45
x =
     38     23     45
x =
          38          23          45
x =
                   38                   23                   45

详细例子

对前面的例子进行扩展,建立一个脚本文件,输入下述代码:

x = int32([5.32 3.47 6.28]) .* 7.5
x = int64([5.32 3.47 6.28]) .* 7.5
x = num2cell(x)

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

x =
          38          23          45
x =
                   38                   23                   45
x = 
    [38]    [23]    [45]

最小和最大整数

MATLAB中使用函数 intmax() 和 intmin() 返回最大和最小的值,它可以表示所有类型的整数。

这两个功能整数数据类型作为参数,例如,intmax(int8) 或 intmin(int64) 最大值和最小值值,可以表示的整数数据类型并返回。 

详细例子

下面的例子说明如何得到最小值和最大值的整数。

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

% displaying the smallest and largest signed integer data
str = 'The range for int8 is:
	%d to %d ';
sprintf(str, intmin('int8'), intmax('int8'))
str = 'The range for int16 is:
	%d to %d ';
sprintf(str, intmin('int16'), intmax('int16'))
str = 'The range for int32 is:
	%d to %d ';
sprintf(str, intmin('int32'), intmax('int32'))
str = 'The range for int64 is:
	%d to %d ';
sprintf(str, intmin('int64'), intmax('int64'))
 
% displaying the smallest and largest unsigned integer data
str = 'The range for uint8 is:
	%d to %d ';
sprintf(str, intmin('uint8'), intmax('uint8'))
str = 'The range for uint16 is:
	%d to %d ';
sprintf(str, intmin('uint16'), intmax('uint16'))
str = 'The range for uint32 is:
	%d to %d ';
sprintf(str, intmin('uint32'), intmax('uint32'))
str = 'The range for uint64 is:
	%d to %d ';
sprintf(str, intmin('uint64'), intmax('uint64'))

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

ans =
The range for int8 is:
	-128 to 127 
ans =
The range for int16 is:
	-32768 to 32767 
ans =
The range for int32 is:
	-2147483648 to 2147483647 
ans =
The range for int64 is:
	-9223372036854775808 to 9223372036854775807 
ans =
The range for uint8 is:
	0 to 255 
ans =
The range for uint16 is:
	0 to 65535 
ans =
The range for uint32 is:
	0 to 4294967295 
ans =
The range for uint64 is:
	0 to 1.844674e+19

MATLAB最小和最大浮点数

使用函数 realmax() 和 realmin() 返回的最大值和最小值,可以表示为浮点数。

这两个函数调用时的参数'单',返回的最大值和最小值值,可以代表单精度数据类型以及何时被称为'双'的参数,返回的最大值和最小值值,可以表示双精度数据类型。

详细实例

下面的例子说明如何获得最大和最小的浮点数。

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

% displaying the smallest and largest single-precision 
% floating w3cschool number
str = 'The range for single is:
	%g to %g and
	 %g to  %g';
sprintf(str, -realmax('single'), -realmin('single'), ...
    realmin('single'), realmax('single'))
% displaying the smallest and largest double-precision 
% floating w3cschool number
str = 'The range for double is:
	%g to %g and
	 %g to  %g';
sprintf(str, -realmax('double'), -realmin('double'), ...
    realmin('double'), realmax('double'))

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

ans =
The range for single is:
	-3.40282e+38 to -1.17549e-38 and
	 1.17549e-38 to  3.40282e+38
ans =
The range for double is:
	-1.79769e+308 to -2.22507e-308 and
	 2.22507e-308 to  1.79769e+308

 

MATLAB字符串

本节我们学习如何在MATLAB中创建一个字符串。

例如:

my_string = 'w3cschool''在线教程'

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

my_string =
w3cschool在线教程

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

让我们使用命令检查上面创建的变量:

whos

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

Name           Size            Bytes  Class    Attributes
my_string      1x16               32  char

你可以使用数字转换函数,如 uint8 或 uint16 字符串中的字符转换成数字代码。 

char 函数整数向量转换回字符: 

详细例子

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

my_string = 'w3cschool''在线教程';
str_ascii = uint8(my_string)        % 8-bit ascii values
str_back_to_char= char(str_ascii)  
str_16bit = uint16(my_string)       % 16-bit ascii values
str_back_to_char = char(str_16bit)  

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

str_ascii =
  Columns 1 through 14
   84  117  116  111  114  105   97  108   39  115   32   80  111  105
  Columns 15 through 16
  110  116
str_back_to_char =
w3cschool在线教程
str_16bit =
  Columns 1 through 10
     84    117    116    111    114    105     97    108     39    115
  Columns 11 through 16
     32     80    111    105    110    116
str_back_to_char =
w3cschool在线教程

MATLAB矩形字符数组

目前为止我们已经讨论过的字符串的字符数组是一维,但是我们需要更立体的文本数据存储在我们的程序中。这是通过创建的矩形的字符数组。

建立一个矩形字符数组的最简单的方法是通过连接两个或两个以上的一维字符数组,无论是垂直或水平的要求。

您可以通过以下方式之一合并垂直字符串:

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

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

详细例子

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

doc_profile = ['Zara Ali                             '; ...
               'Sr. Surgeon                          '; ...
               'R N Tagore Cardiology Research Center']
doc_profile = char('Zara Ali', 'Sr. Surgeon', ...
                   'RN Tagore Cardiology Research Center')

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

doc_profile =
Zara Ali                             
Sr. Surgeon                          
R N Tagore Cardiology Research Center
doc_profile =
Zara Ali                            
Sr. Surgeon                         
RN Tagore Cardiology Research Center

采取下述方式之一横向合并字符串:

  • 使用MATLAB串连运算,[],并用逗号或空格分隔输入字符串。这种方法保留任何尾随空格输入数组。

  • 使用字符串连接函数 strcat。此方法删除尾随空格输入

详细例子

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

name =     'Zara Ali                             ';
position = 'Sr. Surgeon                          '; 
worksAt =  'R N Tagore Cardiology Research Center';
profile = [name ', ' position ', ' worksAt]
profile = strcat(name, ', ', position, ', ', worksAt)

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

profile =
Zara Ali                             , Sr. Surgeon                          , R N Tagore Cardiology Research Center
profile =
Zara Ali,Sr. Surgeon,R N Tagore Cardiology Research Center

将字符串组合成单元格数组

从前面的学习中,很明显,组合不同长度的字符串可能会很痛苦,因为数组中的所有字符串都必须具有相同的长度。在字符串的末尾使用了空格,使其长度相等。

然而,组合字符串的更有效的方法是将生成的数组转换为单元格数组。

MATLAB单元格数组可以在数组中保存不同大小和类型的数据。单元格数组提供了一种更灵活的方法来存储不同长度的字符串。

cellstr​函数将字符数组转换为字符串的单元格数组。

详细例子

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

name =     'Zara Ali                             ';
position = 'Sr. Surgeon                          '; 
worksAt =  'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)

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

'Zara Ali'
'Sr. Surgeon'
'R N Tagore Cardiology Research Center'

MATLAB中的字符串函数

MATLAB 提供了许多创建、组合、分析、比较和处理字符串的字符串函数。

下表是对 MATLAB 中字符串函数的简要说明:

函数 目的/作用
用于存储文本字符数组的函数,结合字符数组,等等
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 对齐字符数组

详细例子

接下来对上述的字符串的函数进行举例说明:

格式化字符串

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

A = pi*1000*ones(1,5);
sprintf(' %f 
 %.2f 
 %+.2f 
 %12.2f 
 %012.2f 
', A)

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

ans =
 3141.592654 
 3141.59 
 +3141.59 
      3141.59 
 000003141.59

加入字符串

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

%cell array of strings
str_array = {'red','blue','green', 'yellow', 'orange'};

% Join strings in cell array into single string
str1 = strjoin(str_array, "-")
str2 = strjoin(str_array, ",")

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

str1 =
red blue green yellow orange
str2 =
red , blue , green , yellow , orange

查找和替换字符串

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

students = {'Zara Ali', 'Neha Bhatnagar', ...
            'Monica Malik', 'Madhu Gautam', ...
            'Madhu Sharma', 'Bhawna Sharma',...
            'Nuha Ali', 'Reva Dutta', ...
            'Sunaina Ali', 'Sofia Kabir'};
 
% The strrep function searches and replaces sub-string.
new_student = strrep(students(8), 'Reva', 'Poulomi')
% Display first names
first_names = strtok(students)

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

new_student = 
    'Poulomi Dutta'
first_names = 
  Columns 1 through 6
    'Zara'    'Neha'    'Monica'    'Madhu'    'Madhu'    'Bhawna'
  Columns 7 through 10
    'Nuha'    'Reva'    'Sunaina'    'Sofia'

比较字符串

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

str1 = 'This is test'
str2 = 'This is text'
if (strcmp(str1, str2))
 sprintf('%s and %s are equal', str1, str2)
else
 sprintf('%s and %s are not equal', str1, str2)
end

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

str1 =
This is test
str2 =
This is text
ans =
This is test and This is text are not equal

MATLAB函数

在MATLAB中,函数定义在单独的文件。函数和函数的文件名应该是相同的。

函数是一起执行任务的一组语句。

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

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

函数语句的语法是:

function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)

详细例子

下述有个 mymax 函数,它需要五个数字作为参数并返回最大的数字。

建立函数文件,命名为 mymax.m 并输入下面的代码:

function max = mymax(n1, n2, n3, n4, n5)
%This function calculates the maximum of the
% five numbers given as input
max =  n1;
if(n2 > max)
    max = n2;
end
if(n3 > max)
   max = n3;
end
if(n4 > max)
    max = n4;
end
if(n5 > max)
    max = n5;
end

每个函数的第一行要以 function 关键字开始。它给出了函数的名称和参数的顺序。

在我们的例子中,mymax 函数有5个输入参数和一个输出参数。

注释行语句的功能后提供的帮助文本。这些线条打印,当输入:

help mymax

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

This function calculates the maximum of the
 five numbers given as input

可以调用该函数:

mymax(34, 78, 89, 23, 11)

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

ans =
    89

MATLAB匿名函数

一个匿名的函数就像是在传统的编程语言,在一个单一的 MATLAB 语句定义一个内联函数。

它由一个单一的 MATLAB 表达式和任意数量的输入和输出参数。

在MATLAB命令行或在一个函数或脚本可以定义一个匿名函数。

这种方式,可以创建简单的函数,而不必为他们创建一个文件。

建立一个匿名函数表达式的语法如下:

f = @(arglist)expression

详细例子

在这个例子中,我们将编写一个匿名函数 power,这将需要两个数字作为输入并返回第二个数字到第一个数字次幂。

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

power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)

运行该文件时,显示结果:

result1 =
   343
result2 =
     7
result3 =
   1.0000e-10
result4 =
    9.5459

主要函数和子函数

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

主要函数可以调用的文件,它定义之外,无论是从命令行或从其他函数,但子功能不能被称为命令行或其他函数,外面的函数文件。

子功能可见函数内的文件,它定义它们的主要函数和其他函数。

详细例子

我们写一个 quadratic 函数来计算一元二次方程的根。

该函数将需要三个输入端,二次系数,线性合作高效的和常数项,它会返回根。 

函数文件 quadratic.m 将包含的主要 quadratic 函数和子函数 disc 来计算判别。

在MATLAB中建立一个函数文件 quadratic.m 并输入下述代码:

function [x1,x2] = quadratic(a,b,c)
%this function returns the roots of 
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the 
%constant term
% It returns the roots
d = disc(a,b,c); 
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic

function dis = disc(a,b,c) 
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function

可以从命令提示符调用上述函数为:

quadratic(2,4,-4)

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

ans =
    0.7321

MATLAB嵌套函数

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

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

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

嵌套函数的语法如下:

function x = A(p1, p2)
...
B(p2)
   function y = B(p3)
   ...
   end
...
end

详细例子

我们重写前面例子的 quadratic 函数,但是,这一次的 disc 函数将是一个嵌套函数。 

在MATLAB中建立一个函数文件 quadratic2.m,并输入下述代码:

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

可以从命令提示符调用上面的函数为:

quadratic2(2,4,-4)

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

ans =
    0.7321

MATLAB私有函数

一个私有函数是一个主要的函数,是只看得见一组有限的其它函数。

如果不想公开的执行的一个函数,可以创建私有函数。

私有函数驻留特殊的名字私人的子文件夹中。

他们是可见的,只有在父文件夹的函数。

详细例子

重写 quadratic 函数。然而,这时计算​​的判别式 disc 函数,是一个私有函数。

在MATLAB中建立一个子文件夹命名为私人工作目录。它存储在以下函数文件 disc.m:

function dis = disc(a,b,c) 
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end % end of sub-function

在工作目录,创建一个函数 quadratic3.m ,输入下述代码:

function [x1,x2] = quadratic3(a,b,c)
%this function returns the roots of 
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the 
%constant term
% It returns the roots
d = disc(a,b,c); 
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % end of quadratic3

可以从命令提示符调用上面的函数为:

quadratic3(2,4,-4)

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

ans =
    0.7321

MATLAB全局变量

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

如果想访问该变量。从基工作区,然后在命令行声明的变量。

全局声明必须出现在变量中。实际上是使用功能。这是一个很好的做法是使用大写字母为全局变量的名称,以区别于其他变量。

详细例子

创建一个函数文件名为 average.m ,输入下述代码:

function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end

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

global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)

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

av =
   35.5000

 

 

你可能感兴趣的:(MATLAB基础学习,matlab,学习,开发语言)