打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
数组:向量和矩阵 | MATLAB基础

2.3 ARRAYS: VECTORS AND MATRICES数组:向量和矩阵

  • Initializing vectors: Explicit lists显式列表初始化向量

  • Initializing vectors: The colon operator冒号运算符

  • The linspace and logspace functions

  • Transposing vectors 向量转置

  • Subscripts下标

  • Matrices 矩阵

  • Capturing output捕获输出

    • `evalc`和`diary`

  • Structure plan结构

  • num2str函数

    • sprintf函数

Initializing vectors: Explicit lists显式列表初始化向量

Initializing vectors: Explicit lists(显式列表初始化向量)是MATLAB中用于创建向量的一种方式,它通过在方括号中列出向量的元素来完成初始化操作。具体来说,向量的每个元素都用逗号分隔,放在一对方括号内,例如:

v = [1, 2, 3, 4, 5];

这样就创建了一个包含5个元素的行向量v,元素分别为1、2、3、4、5。在显式列表初始化向量时,还可以使用冒号运算符来创建等差数列,例如:

v = [1:2:9];

这样就创建了一个包含5个元素的行向量v,元素分别为1、3、5、7、9,其中冒号运算符的第一个参数表示向量的起始值,第二个参数表示向量的步长,第三个参数表示向量的结束值。

Initializing vectors: The colon operator冒号运算符

在MATLAB中,使用冒号操作符(:)可以快速初始化向量。冒号操作符可以生成一个等差序列,可以指定序列的起始值、结束值和步长。例如,要生成从1到10的整数序列,可以使用以下代码:

x = 1:10;

这将生成一个包含1到10的整数的行向量。如果要指定步长,可以使用以下语法:

x = start:step:end;

例如,要生成从1到10的偶数序列,可以使用以下代码:

x = 2:2:10;

这将生成一个包含2、4、6、8和10的行向量。冒号操作符还可以用于生成逆序序列,例如:

x = 10:-1:1;

这将生成一个包含从10到1的整数的行向量。

创建一个3x3的矩阵

m = [1:3; 4:6; 7:9];

注意,当增量为正但不等于1时,最后一个元素不允许超过第二个冒号后面的值;当增量为负数但不等于−1时,最后一个元素不允许小于第二个冒号之后的值

需要注意的是,冒号操作符有一些限制和注意事项:

  1. 冒号操作符只能用于创建单调递增或单调递减的向量和矩阵。

  2. 冒号操作符创建的向量和矩阵是行向量或列向量,而不是行矩阵或列矩阵。如果需要创建行矩阵或列矩阵,需要使用其他方法。

  3. 冒号操作符创建的向量和矩阵中的元素类型取决于start、step和end的类型。如果它们都是整数,则创建的向量和矩阵也是整数类型。如果它们中有一个是浮点数,则创建的向量和矩阵也是浮点数类型。

  4. 当使用冒号操作符创建向量和矩阵时,需要确保start、step和end的值是合理的。如果step的值为0,则会出现错误。如果step的值为负数,则创建的向量和矩阵将是单调递减的。

  5. 冒号操作符创建的向量和矩阵是静态的,即它们的大小和元素值在创建后不能更改。如果需要动态创建向量和矩阵,需要使用其他方法。

The linspace and logspace functions

linspacelogspace函数是MATLAB中用于创建等间隔向量的函数。

linspace函数用于创建在指定区间内的等间隔向量。它的语法为:

linspace(start, end, n)

其中,startend分别是向量的起始值和终止值,n是向量中的元素个数。linspace函数将在startend之间创建一个具有n个元素的等间隔向量。

例如,要创建一个从0到1之间的5个元素的等间隔向量,可以使用以下命令:

x = linspace(015)

x的值将为:

0    0.2500    0.5000    0.7500    1.0000


logspace函数用于创建在对数刻度下的等间隔向量。它的语法为:

logspace(start, end, n)

其中,startend分别是向量的起始值和终止值,n是向量中的元素个数。logspace函数将在10^start10^end之间创建一个具有n个元素的等间隔向量。

例如,要创建一个从10的0次方到10的2次方之间的5个元素的等间隔向量,可以使用以下命令:

x = logspace(025)

x的值将为:

 1.0000    3.1623   10.0000   31.6228  100.0000

需要注意的是,linspacelogspace函数在使用时需要注意参数的顺序,以及参数的数据类型。startend参数可以是任意数值类型,但是n参数必须是一个正整数。

在使用linspacelogspace函数时,如果省略向量中元素的数量,则默认生成包含50个元素的向量。

x = logspace(0, 2)
x =
  列 1 至 11

    1.0000    1.0985    1.2068    1.3257    1.4563    1.5999    1.7575    1.9307    2.1210    2.3300    2.5595

  列 12 至 22

    2.8118    3.0888    3.3932    3.7276    4.0949    4.4984    4.9417    5.4287    5.9636    6.5513    7.1969

  列 23 至 33

    7.9060    8.6851    9.5410   10.4811   11.5140   12.6486   13.8950   15.2642   16.7683   18.4207   20.2359

  列 34 至 44

   22.2300   24.4205   26.8270   29.4705   32.3746   35.5648   39.0694   42.9193   47.1487   51.7947   56.8987

  列 45 至 50

   62.5055   68.6649   75.4312   82.8643   91.0298  100.0000

Transposing vectors 向量转置

MATLAB中,可以通过转置操作符(')来转置向量。转置操作符将行向量转换为列向量,将列向量转换为行向量。

例如,假设有一个行向量a:

a = [1 2 3];

可以通过以下方式将其转换为列向量:

b = a';

这将创建一个列向量b,其元素与a相同:

b = 
    1
    2
    3

或者,你可以直接创建一个列向量:

b=[1 2 3]'

Subscripts下标

Subscripts是MATLAB中用于访问数组元素的一种方式。它们是一个数字或一组数字,用于指定要访问的数组元素的位置。在MATLAB中,数组的第一个元素的下标为1,而不是0。

可以使用单个下标来访问数组中的单个元素,例如A(3)将返回数组A中的第三个元素。还可以使用多个下标来访问多维数组中的元素,例如B(2,3)将返回二维数组B中第二行第三列的元素。

需要注意的是,访问数组元素时,下标必须是整数。如果使用非整数下标,则会出现错误。此外,如果访问的下标超出了数组的范围,则会出现错误。

r = rand(1,7)

r =

    0.8147    0.9058    0.1270    0.9134    0.6324    0.0975    0.2785

r = rand(1,7)这行代码在MATLAB中的作用是生成一个1行7列的随机数数组,并将其赋值给变量r。其中,rand函数是MATLAB中用于生成随机数的函数,它可以生成指定大小的随机数数组,其参数可以是一个整数n,表示生成n行n列的随机数数组,也可以是两个整数m和n,表示生成m行n列的随机数数组。在这个例子中,参数为(1,7),表示生成1行7列的随机数数组。该函数生成的随机数的范围是0到1之间的均匀分布。

r(3)

ans =

    0.1270

r(3)这个操作会返回向量r中的第三个元素。由于MATLAB中的下标从1开始,因此r(3)将返回向量r中的第3个元素。

r(2:4)

ans =

    0.9058    0.1270    0.9134

r(2:4)这将返回r向量中第2到第4个元素组成的子向量。具体而言,它将返回一个包含r(2)、r(3)和r(4)的向量。

r(1:2:7)

ans =

    0.8147    0.1270    0.6324    0.2785

r(1:2:7)这个语句表示从r的第一个元素开始,每隔一个元素选择一个元素,直到r的最后一个元素。因此,它将选择r的第一个、第三、第五和第七个元素,返回一个包含这些元素的向量。

r([1 7 2 6])

ans =

    0.8147    0.2785    0.9058    0.0975

r([1 7 2 6])会返回r向量中第1、7、2和6个元素组成的新向量。即返回[r(1) r(7) r(2) r(6)]。

r([1 7 2]) = [ ]

r =

    0.1270    0.9134    0.6324    0.0975

r([1 7 2]) = [ ]这条语句会将r向量中第1、第7、第2个元素的值设置为空,即将这些位置上的值删除。

Matrices 矩阵

Matrices为matrix的名词复数

矩阵可以看作是由行和列组成的表格。创建矩阵就像创建向量一样,不同之处在于用分号表示行结束。例如,

 a = [1 2 3; 4 5 6]

a =

     1     2     3
     4     5     6

可以使用A'或者transpose(A)来得到它的转置矩阵

a'
ans =

     1     4
     2     5
     3     6
     
transpose(a)
ans =

     1     4
     2     5
     3     6

一个矩阵可以由相同长度的列向量构成

x = 0:30:180;
table = [x' sin(x*pi/180)']

table =

         0         0
   30.0000    0.5000
   60.0000    0.8660
   90.0000    1.0000
  120.0000    0.8660
  150.0000    0.5000
  180.0000    0.0000

这段代码的作用是生成一个包含角度和对应正弦值的表格。其中,x是一个从0到180的等差数列,每隔30取一个数。sin函数将x转换为弧度并计算对应的正弦值,最终生成一个包含角度和正弦值的矩阵table。矩阵的第一列是角度,第二列是对应的正弦值。


在MATLAB中,可以使用方括号将列向量组合成矩阵。例如,如果有三个列向量a、b和c,每个向量的长度为3,则可以使用以下命令将它们组合成一个3x3的矩阵A:

 a=[1 2 3]';  
 b=[4 5 6]'

 c=[7 8 9]';
 A = [a, b, c]

A =

     1     4     7
     2     5     8
     3     6     9

其中,逗号用于将列向量连接在一起,形成一个矩阵。

Capturing output捕获输出

Capturing output(捕获输出)是指在Matlab中,将程序运行后的输出结果保存到一个变量中,以便后续的处理和分析。Matlab提供了多种方法来捕获输出,包括使用分号(;)抑制输出、使用disp()函数输出、使用fprintf()函数输出等。

其中,使用分号(;)可以抑制程序的输出,但是无法保存输出结果。如果需要保存输出结果,可以使用disp( )函数和fprintf( )函数。disp( )函数可以将输出结果直接显示在命令窗口中,而fprintf( )函数可以将输出结果保存到一个文件中,或者按照指定的格式输出到命令窗口或文件中。

在MATLAB中,分号(;)可以用来抑制输出,即在命令行窗口中不显示结果。例如:

a = 1 + 2;
b = 3 + 4;

这段代码不会在命令行窗口中显示任何结果。但是,如果我们想要查看变量a和b的值,可以直接在命令行中输入它们的名称,如下所示:

a
b

这样就可以在命令行窗口中显示变量a和b的值。

除了使用分号来抑制输出,我们还可以使用disp( )函数来输出变量的值。例如:

a = 1 + 2;
disp(a);

这样就可以在命令行窗口中显示变量a的值。

另外,我们还可以使用fprintf( )函数来输出变量的值。该函数可以将变量的值格式化为字符串,并将其输出到命令行窗口或文件中。例如:

a = 1 + 2;
fprintf('a = %d\n', a);

这样就可以在命令行窗口中显示变量a的值,并将其格式化为字符串。其中,%d表示输出整数,\n表示换行符。

另外,Matlab还提供了一种更为方便的方法来捕获输出,即使用evalc( )函数。evalc( )函数可以将程序运行后的所有输出结果保存到一个字符串中,以便后续的处理和分析。这种方法不仅可以捕获程序的输出结果,还可以捕获程序的错误信息。


evalcdiary

MATLAB提供了多种方法来实现输出信息的捕获,其中最常见的方法是使用函数evalcdiaryevalc函数可以执行MATLAB语句并将输出信息保存到一个字符串变量中。使用evalc函数的方法是将需要执行的MATLAB语句作为参数传递给evalc函数,然后将该函数的返回值赋值给一个字符串变量即可。例如,下面的代码演示了如何使用evalc函数捕获程序的输出信息:

% 将程序的输出信息保存到字符串变量中
output = evalc('disp(''Hello, World!'')');

在这个例子中,程序使用disp函数输出了一条信息"Hello, World!",然后使用evalc函数捕获了这条输出信息并将其保存到字符串变量"output"中。

除了evalc函数,MATLAB还提供了函数diary来实现输出信息的捕获。diary函数可以将程序的输出信息保存到一个文件中。使用diary函数的方法是在程序开始时调用diary函数并指定输出文件的路径,然后在程序结束时再次调用diary函数以关闭输出文件。例如,下面的代码演示了如何使用diary函数捕获程序的输出信息:

% 打开输出文件
diary('output.txt');

% 输出信息
disp('Hello, World!');

% 关闭输出文件
diary off;

在这个例子中,程序使用disp函数输出了一条信息"Hello, World!",然后使用diary函数将这条输出信息保存到文件"output.txt"中。需要注意的是,在使用diary函数捕获输出信息时,程序在输出信息的同时也会将输出信息显示在控制台窗口中。如果不希望将输出信息显示在控制台窗口中,可以使用"diary('output.txt'); echo off"的方式来关闭显示功能。

'echo'diary 命令的一个选项,它指定了是否将命令行输入也记录到文件中。当 'echo' 设置为 'off' 时,命令行输入不会被记录到文件中。

下面是一个示例:

diary('output.txt');
echo off % 将输入和输出记录到 output.txt 文件中,但不记录命令行输入
a = 1:5;
a; % 由于没有分号,输出会被记录到文件中
disp('Hello, world!'); % 使用 disp() 函数输出
fprintf('The value of pi is approximately %.4f\n'pi); % 使用 fprintf() 函数输出
diary off; % 关闭日志记录

执行上述代码后,output.txt 文件中应该包含以下内容:

a =

     1     2     3     4     5

Hello, world!
The value of pi is approximately 3.1416

可以看到,由于 a 变量的输出没有使用分号,因此它被记录到了文件中。disp() 函数和 fprintf() 函数的输出也被记录到了文件中。

Structure plan结构

任何计算机程序的本质都可以概括如下:

  1. 输入:声明和分配输入变量。
  2. 操作:求解使用输入变量的表达式。
  3. 输出:以图表或表格的形式显示所需的结果。

Structure plan是MATLAB中一种用于组织和存储数据的数据类型。Structure plan由多个字段组成,每个字段可以保存一个不同的数据类型(例如数值、字符串、逻辑值等)或另一个Structure plan。使用Structure plan可以方便地组织和管理相关的数据,使得数据的访问和处理更加简单和高效。下面是一个简单的例子,展示了如何定义和使用Structure plan:

% 定义一个Structure plan,包含学生的姓名、年龄和成绩
student.name = 'lsy';
student.age = 19;
student.score = [90, 95, 100];

% 输出学生的信息
disp(['Name: ', student.name])
disp(['Age: ', num2str(student.age)])
disp(['Score: ', num2str(student.score)])
%用 `num2str` 函数可以将数字转换为字符串,方便输出和保存

其中,student.score 是一个数字类型的变量,['Score: ', num2str(student.score)] 将该数字和字符串 "Score: " 进行拼接,得到一个字符串 "Score: 90",最终使用 disp 函数输出。

在这个例子中,我们定义了一个名为"student"的Structure plan,包含了三个字段:"name"、"age"和"score"。其中,"name"字段保存学生的姓名,"age"字段保存学生的年龄,"score"字段保存学生的三门课的成绩。我们可以通过"."操作符访问Structure plan中的各个字段,并对其进行操作。例如,我们可以使用"disp"函数输出学生的信息。需要注意的是,在输出"score"字段时,我们需要将其转换成字符串格式,才能输出到控制台窗口中。

num2str函数

num2str是MATLAB中的一个函数,用于将数值类型的数据转换成字符串类型。该函数的语法格式为:

str = num2str(num)

其中,"num"是需要转换的数值,可以是一个标量、向量或矩阵;"str"是转换后得到的字符串。

使用num2str函数可以方便地将数值类型的数据转换成字符串类型,以便于输出和存储。下面是一些例子,展示了如何使用num2str函数:

% 将标量转换成字符串
x = 123.456;
str = num2str(x);
str = num2str(x, format)

% 将向量转换成字符串
y = [1, 2, 3, 4, 5];
str = num2str(y);

% 将矩阵转换成字符串
z = magic(3);
str = num2str(z);

在这些例子中,我们通过num2str函数将标量、向量和矩阵转换成了字符串,并将结果赋值给变量"str"。需要注意的是,转换后得到的字符串是以空格分隔的数字序列。如果需要将数字序列转换成格式化的字符串,可以使用sprintf函数或字符串拼接的方式实现。


sprintf函数

sprintf 是 MATLAB 中的一个函数,用于将数据按照指定的格式转换为字符串。它的语法如下:

str = sprintf(format, A, B, ...)

其中,format 是格式字符串,A, B, ... 是要转换的数据。转换后的字符串会被存储在 str 中。

sprintf 支持的格式化字符有很多,下面是一些常用的格式化字符:

  • %d:将整数转换为十进制字符串;
  • %f:将浮点数转换为十进制字符串;
  • %e:将浮点数转换为科学计数法字符串;
  • %s:将字符串转换为字符串;
  • %c:将字符转换为字符串。

下面是一个例子,演示如何使用 sprintf 函数将数据转换为字符串:

x = 3.14159;
y = 42;
str = sprintf('x = %.2f, y = %d', x, y);
disp(str);

运行结果为:

x = 3.14, y = 42

另外,num2str函数还支持一些可选参数,用于控制转换后字符串的格式。例如,可以通过num2str(num, n)参数指定输出字符串的小数位数,或通过num2str(num, format)参数指定输出字符串的格式。其中,num是要转换为字符串的数字,format是可选的格式字符串,用于指定输出字符串的格式。

如果需要保留小数位,可以使用format参数指定输出字符串的格式。例如,以下代码将指定保留两位小数:

x = 123.456;
str = num2str(x, '%.2f');
disp(str);

上述代码将数值变量x转换为字符串,并通过format参数指定输出格式为保留两位小数。转换后的字符串为123.46,保留了两位小数。

格式字符串可以包含以下占位符:

  • %d:整数
  • %f:浮点数
  • %e:指数形式的浮点数
  • %g:自动选择最佳的表示方式(默认)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MATLAB(一)——软件及基本操作介绍
TOPSIS算法(优劣解距离法)的应用
美赛 10:预测模型、降维模型(十大模型篇)
Matlab数据&数组类型详解(3)字符/字符串
matlab 常用函数
MATLAB字符和字符串
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服