第八本书|MTALAB R2016a 完全自学一本通

编著:刘浩 韩晶

第一章 概述

工作环境

命令行窗口

命令行窗口是MATLAB最重要的窗口,用户输入各种指令、函数、表达式等。

”>>”是运算提示符,表示MATLAB处于准备状态,等待用户输入指令进行计算。当再提示符后输入命令,并按Enter键确认后,MATLAB会给出计算结果,并再次进入准备状态。
单击命令行窗口右上角的下三角图表并选择“取消停靠”可以使命令行窗口脱离MATLAB界面成为一个独立的窗口。

几个常用的命令:

命令解释
cd显示或改变当前的工作文件夹
dir显示当前文件夹或指定目录下的文件
clc清除工作窗中的所有显示内容
%注释标记
pathMATLAB会把所有的搜索路径搜出来
  • help命令的调用方式:
help fun

例如:要了解sin函数的使用方法,可以在命令行窗口输入如下代码:

help sin
  • lookfor命令常用的调用方式
lookfor topic

执行该命令可以按照指定关键字(topic)查找所有相关的M文件
如: lookfor inverse

  • 演示(Demos)帮助:(这个功能超棒!!!!!!菜鸟入门必备。多看~)

通过Demos演示帮助,用户可以更加直观、快速学习MATLAB中许多实用的知识,可以通过以下两种方式打开演示帮助。
(1)选择MATLAB主界面菜单栏上的帮助下的示例命令。
(2)在命令行窗口输入:demos

  • 命令行输入的几个细节:
    (1)当命令后面有分号,按Enter键后,命令行窗口中不显示运算结果;如果无分号,则在命令行窗口中显示运算结果。
    (2)当希望先输入多条语句,然后再同时执行它们时,则在输入下一条命令时,要在按住shift键同时按Enter键进行换行输入。

第二章 MATLAB基础知识

数据类型
MATLAB中的数据类型主要包括数值类型、逻辑类型、字符串、函数句柄、结构体和单元数组类型。

数值类型:

MATLAB中数值类型的数据包括有符号和无符号整数、单精度浮点数和双精度浮点数。未加说明与特殊定义时,MATLAB对所有数值按照双精度浮点数类型进行存储和操作。

1. 整数类型

函数运算法则实例
floor(x)向下取整floor(1.2)=1,floor(2.5)=2,fllor(-2.5)=-3
ceil(x)向上取整ceil(1.2)=2,ceil(-2.5)=-2
round(x)取最接近的整数,如果小数部分是0.5,则向绝对值大的方向取整round(1.2)=1,round(2.5)=3,round(-2.5)=-3
fix(x)向0取整fix(1.2)=1,fix(-2.5)=-2

在MATLAB中,单精度浮点类型不能与整数类型进行算术运算。

例:

在命令行窗口输入:

a=uint32(120);b=single(22.809);c=73.226;
ab=a*b

输出结果:错误使用

2. 浮点数类型
浮点数只占用一定的存储位宽,其中只有有限位分别用来存储指数部分和小数部分。因此,浮点类型能够表示的实际数值是有限且离散的,任何两个最近相邻的浮点数之间都有微小间隙,而处在间隙中的数值都只能用这两个相邻的浮点数之中的一个来表示。MATLAB中提供了eps函数,可以获取一个数值和最接近该数值的浮点数之间的间隙。

3. 复数
复数包括实部和虚部两部分。MATLAB中默认使用字符i或j作为虚部标志。创建复数时,可以之间按照复数形式进行输入或者利用complex函数。

函数说明
real(z)返回复数z的实部
abs(z)返回复数z的模
conj(z)返回复数z的共轭复数
imag(z)返回复数z的虚部
angle(z)返回复数z的辐角
complex(a,b)以a为实部,b为虚部创建虚数

4. 字符串
一个字符串是由单引号括起来的简单文本。字符串的存储要求每个字符8个字节,如果MATLAB其它变量。因为ASCII字符只要求1字节,故这种存储要求时浪费的,7/8所分配的存储空间无用。然而,对字符串保持同样的数据结构可以简化MATLAB的内部数据结构。

字符串数组的索引示例:

《第八本书|MTALAB R2016a 完全自学一本通》

  • 字符串内的单引号是由两个连续的单引号来表示的。
  • 字符串的连接可以直接将字符串数组连接来实现。

《第八本书|MTALAB R2016a 完全自学一本通》

5. 数组

在MATLAB中可以使用冒号“:”来代表一系列数值,有时也使用它来定义数组。其句法格式如下:

Array=i:k

创建从i开始、步长为1,到k结束的数字序列。

Array=i:j:k

创建从i开始,步长为j,到k结束的数字序列。

Array=linspace(a,b,100)

在区间[a,b]上创建一个有100个元素的向量,这100个数把整个区间线性分隔。

Array=linspace(a,b,n)

在区间[a,b]上创建一个由n个元素的向量,这个命令和冒号表示形式相近,但是它直接定义了数据的个数。

《第八本书|MTALAB R2016a 完全自学一本通》

基本矩阵操作

1.建立简单矩阵
简单矩阵采用矩阵构造符号——方括号”[]”,将矩阵元素置于方括号内,同行元素之间用空格或逗号隔开,行与行之间用分号”;”隔开,格式如下:

matrixName=[element11,element12,element13;element21,element22,element23]

matrixName=[element11 element12 element13;element21 element22 element23]

2.建立特殊矩阵
特殊矩阵是指非零元素或另元素的分布有一定规律的矩阵,常见的有对称矩阵、三角矩阵和对角矩阵等。

《第八本书|MTALAB R2016a 完全自学一本通》

函数名称函数功能
ones(n)构建一个n*n的1矩阵
ones(m,n,…,p)构建一个mn…*p的1矩阵
ones(size(A))构建一个和矩阵A同样大小的1矩阵
zeros(n)构建一个n*n的0矩阵
eye(n)构建一个n*n的单位矩阵
eye(m,n)构建一个m*n的单位矩阵
eye(size(A))构建一个和矩阵A同样大小的单位矩阵
magic(n)构建一个n*n的矩阵,其每一行、每一列元素之和都相等
rand(n)构建n*n的矩阵,其元素为0~1之间均匀分布的随机数
rand(m,m,…,p)构建一个mn…*p的矩阵,其元素为0~1之间均匀分布的随机数
randn(n)构建一个n*n的矩阵,其元素为零均值,单位方差的正态分布随机数
diag(x)构建一个n维的方阵,它的主对角线元素取自向量x,其余元素的值都为0
diag(A,k)构建一个由矩阵A第k条对角线的元素组成的列向量,k=0为主对角线;k<0位下第k条对角线;k>0位上帝k条对角线
diag(x,k)构建一个(n+abs(k) )*(n+abs(k))维的矩阵,该矩阵的第k条对角线元素取自向量x,其余元素都为0(参数k参考上个命令)

3.矩阵旋转与改变维度的函数

函数名称函数功能
fliplr(A)矩阵每一行均进行逆序排列
flipud(A)矩阵每一列进行逆序排列
flipdim(A,dim)生成一个在dim维矩阵A内的元素交换位置的多维矩阵
rot90(A)生成一个由矩阵A逆时针旋转90°而得到的新矩阵
rot90(A,k)生成一个由矩阵A逆时针旋转k*90°而得到的新矩阵
reshape(A,m,n)生成一个m×n×…×p维的新矩阵,其元素以线性索引的顺序从矩阵A中取得,如果矩阵A没有m×n×..×p个元素,将返回一个错误的信息。
shiftdim(A,n)矩阵的列移动n步。n为正数,矩阵向左移;n为负数,矩阵向右移
squeeze(A)返回没有空维的矩阵A
cat(dim,A,B)将矩阵A,B组合成一个dim维的多维矩阵
permute(A,order)根据向量order来改变矩阵A中的维数顺序
ipermute(A,order)进行命令permute的逆变换
sort(A)对一维或二维矩阵进行升序排序,并返回排序后的矩阵;当A为二维矩阵时,对矩阵的每一列分别进行排序
sort(A,dim)对矩阵按指定的方向进行升序排序,并返回排序后的矩阵。当dim=1时,对矩阵的每一列排序,dim=2时,对矩阵的每一行排序
sort(A,dim,mode)mode为“ascend”时,进行升序排序;mode为”descend”时,进行降序排序
[B,IX]=sort(A,…)IX为排序后备元素在原矩阵中的行位置或列位置的索引

4.矩阵下标的引用
在MATLAB中,普通二维数组元素的数字索引分别为双下标索引和单下标索引。
双下标索引是通过一个二元数组对来对应元素在矩阵中的行列位置。如A(2,3)表示矩阵A中第2行第3列的元素。
单下标索引的方式时采用列元素优先的原则。例如对于4×4的矩阵,A(7)表示矩阵A中第3行第2列的元素。

  • 矩阵索引表达式
索引表达式函数功能
A(1)将二维矩阵A重组为一维矩阵,返回数组中第一个元素
A(:,j)返回二维矩阵A中第j列列向量
A(i,:)返回二维矩阵中第i行行向量
A(:.j:k)返回由二维矩阵A中第j列到第k列列向量组成的子矩阵
A(i:k,:)返回由二维矩阵A中第i行到第k行行向量组成的子矩阵
A(i:k,j:l)返回由二维矩阵A中第i行到第k行行向量和第j列到第l列列向量的交集组成的子矩阵
A(:)将矩阵A中的每列合并成一个长的列向量
A(j:k)返回一个行向量,其元素为A(:)中的第j个元素到第k个元素
A([j1 j2…..])返回一个行向量,其中的元素为A(:)中第j1、j2个元素
A(:,[j1 j2 …])返回矩阵A的第j1列,第j2列等的列向量
A([i1 i2….],:)返回矩阵A的第i1行、第i2行等的行向量
A([i1 i2 …],[j1 j2 …])返回矩阵第i1行,第i2行等和第j1列、第j2列等的元素

5.矩阵信息的获取
矩阵的信息主要包括矩阵结构、矩阵大小、矩阵维度、矩阵的数据类型以及内存占用等。

  • 矩阵结构测试函数
函数名称函数功能
isempty(A)检测矩阵是否为空
isscalar(A)检测矩阵是否是单元素的标量矩阵
isvector(A)检测矩阵是否是指具有一行或一列元素的一维向量
issparse(A)检测数组是否是稀疏矩阵

这类函数的返回值是逻辑类型的数据。返回值为1表示该矩阵时某一特定类型的矩阵,返回值为0表示该矩阵不是该特定类型的矩阵。

  • 矩阵形状信息查询函数

    矩阵的形状信息包括了:矩阵的维数;矩阵各维的长度;元素个数。

函数名称调用格式描述
ndimsn=ndims(X)获取矩阵的维数
size[m,n]=size(X)获取矩阵在各维上的长度
lengthn=length(X)获取矩阵最长维的长度
numeln=numel(X)获取矩阵元素的个数
  • 矩阵的数据类型测试函数
函数名称函数功能
isnumeric检测矩阵元素是否为数值型变量
isreal检测矩阵元素是否为实数数值型变量
isfloat检测矩阵元素是否为浮点数值型变量
isinterger检测矩阵元素是否为整数型变量
islogical检测矩阵元素是否为逻辑型变量
ischar检测矩阵元素是否为字符型变量
isstruct检测矩阵元素是否为结构体变量
iscell检测矩阵元素是否为元胞型变量
iscellstr检测矩阵元素是否为结构体的元胞型变量
  • 使用者可以通过whos命令查看当前工作区中指定变量的所有信息,包括变量名、矩阵大小、内存占用和数据类型等
Matrix=rand(2);
whos Matrix

6.矩阵的保存和加载

  • 矩阵元素的赋值
A(i,j)=value

等号左边为矩阵中的某个元素;等号右边为值

A=[]

删除矩阵中的所有元素

字符串处理函数

字符串函数函数功能
eval(string)作为一个MATLAB命令求字符串的值
blanks(n)返回一个n个零或空格的字符串
deblank去掉字符串中后拖的空格
feval求由字符串给定的函数值
findstr从字符串内找出字符串
isletter字符串存在时返回真值
isspace空格字符串存在时返回真值
Isstr输入一个字符串,返回真值
iasterr返回上一个产生MATLAB错误的字符串
strcmp字符串相同,返回真值
strrep用一个字符串替换另一个字符串
strtok在一个字符串里找出第一个标记
  • 字符串的构造
    构造多行字符串时,若字符串内容写在[]中,那么多行字符串的长度必须相同;若字符串内容写在{}中,则这多行字符串的长度可以不同。

《第八本书|MTALAB R2016a 完全自学一本通》

MATLAB中提供了strvcat和char函数用于纵向连接多个字符串。
strcat函数连接多行字符串时,每行字符串的长度不要求相等,所有非最长字符串的右边会自动补偿空格,使得每行字符串的长度相同。
char函数与strvcat函数类似,不过当多行字符串中有空字符串时,strvcat函数会自动进行忽略,而char函数会把空字符串也用空格补偿后进行连接。

《第八本书|MTALAB R2016a 完全自学一本通》

测试结果好像与书上不符合,是怎么回事呢?

  • 字符串查找
    通过findstr函数实现
    findstr函数对字幕的大小写是敏感的,findstr函数对字符串矩阵不起作用,因此对字符串矩阵的搜索只能通过循环索引矩阵内的元素进行搜索。

    《第八本书|MTALAB R2016a 完全自学一本通》

  • 字符串的替换
    字符串的替换可以通过对字符串数组中相应的元素直接赋值来实现,也可以使用strrep函数来实现。

    《第八本书|MTALAB R2016a 完全自学一本通》

直接赋值的方法并不能使两个不同长度的字符串相互替换,而strrep函数可以替换两个任意长度的字符串。与findstr函数类似,strrep函数也对字符串矩阵不起作用。

《第八本书|MTALAB R2016a 完全自学一本通》

第三章 数组与矩阵

数组运算

数组运算是MATLAB计算的基础。

  • 创建空数组、行向量、列向量示例
clear all
A=[]
B=[6 5 4 3 2 1]
D=[6;5;4;3;2;1]
E=B' %转置
  • 访问数组示例
A=[6 5 4 3 2 1]
a1=A(1) %访问个第一个元素
a2=A(1:3)%访问数组第1、2、3个元素
a3=(3:end)%访问数组第3个元素到最后一个元素
a4=A(end:-1:1)%数组元素反序输出
a5=A([1 6]) %访问数组第1个及第6个元素

《第八本书|MTALAB R2016a 完全自学一本通》

《第八本书|MTALAB R2016a 完全自学一本通》

创建数组

  • 通过冒号创建一维数组
X=A:step:B

其中,A是创建一维数组的第一个变量,step是每次递增或递减的数值,直到最后一个元素和B的差的绝对值小于等于step的绝对值为止。

  • 通过logspace函数创建一维数组

(1)y=logspace(a,b):该函数创建行向量y,第一个元素为10a,最后一个元素为10b,形成总数为50个元素的等比数列。
(2)y=logspace(a,b,n):该函数创建行向量y,第一个元素为10a,最后一个元素为10b,形成总数为n个元素的等比数列。

  • 通过linspace函数创建一维数组
y=linspace(a,b)

该函数创建行向量y,第一个元素是a,最后一个元素是b,形成总数为100个元素的线性间隔向量。

y=linspace(a,b,n)

该函数创建行向量y,第一个元素为a,最后一个元素为b,形成总数为n个元素的线性间隔向量。

第四章 MATLAB编程基础

M文件编辑器

  • 使用情况:
    当需要完成的运算比较复杂
    需要几十行甚至成百上千行指令来完成
  • 拓展名:.m

(1)创建新的M文件,启动M文件编译器
在MATLAB命令行窗口运行指令edit
(2)打开已有的M文件
在MATLAB命令行窗口运行指令

edit filename

其中filename是已有的文件名,可以不带扩展名,文件名也可以省略不写。

变量

变量的本质:一段可操作的内存。
变量是内存的符号化表示

  • 变量的命名
    MATLAB中,变量不需要预先声明就可以赋值,变量的命名遵循以下规则:
    变量名开头必须是字母,后面可以是字母或者下划线。
    不能用关键字做变量名,当用函数做变量名时,函数失效。
    attetion:通过调用isvarname函数,可以验证用户指定的变量名能否为MATLAB接收的合法变量名。该函数返回值为1或者0,代表合法或者不合法。
    《第八本书|MTALAB R2016a 完全自学一本通》
  • 变量的类型
    (1)局部变量。
    这些变量存储在该函数独立的工作区中,与其他函数的变量及主干工作区中的变量分开存储。
    (2)全局变量。
    全局变量在定义该变量的全部工作区中有效。
    全局变量通常用大写字母表示,并且在函数体的开头位置进行定义。
global X_VAL

使用全局变量的目的:减少数据传递的次数。
(3)永久变量
永久变量用persistent声明,只能在M文件函数中定义,只允许声明它的函数存取。当声明它的函数退出时,MATLAB不会从内存中清除它。

persistent a
  • MATLAB默认的特殊变量
特殊变量描述
ans系统默认的用作保存运算结果的变量名
pi圆周率
eps机器零阈值,MATLAB中的最小数【eps(1)返回的是1的精度。指的是1和离他最近的浮点数之间的距离。】
inf无穷大
NaN或nan表示不定数
i或j表示虚数
nargin函数的输入参数个数
nargout函数的输出参数个数
realmin可用的最小正实数
bitmax可用的最大正整数(用双精度格式存储
vatargin可变的函数输入参数个数
varatgout可变的函数输出参数个数
beep使计算机发出”嘟嘟”的声音
  • 关键字
    关键字是MATLAB程序设计中常用的流程控制变量,一共20个。
    命令行输入命令Iskeyword即可查询这20个关键字。

MATLAB控制流

MATLAB平台上的控制流结构包括顺序结构,is-else-end分支结构,switch_case结构,try_catch结构,for循环结构和while循环。

  • if-else-end 分支结构的简单运用示例
Rand_a=rand(1) %创建一个随机数Rand_a
if Rand_a>0.5
Rand_b=Rand_a
else
Rand_b=1-Rand_a
end
  • 使用if语句判断当给定变量x的值时,对应的函数值y
x=input('enter''x'':');
if(x>0)
y=1;
elseif(x==0)
y=0;
else
y=-1;
end
disp(y)
  • 求任意底数的对数函数值y=lognX
clear
n=input('Enter the value of''n'':');
x=input('Enter the value of''x'':');
switch(n)
 case 1
errordlg('出错');
case 2
y=log2(x);
case exp(1)
y=log(x);
case 10
y=log10(x);
otherwise
y=log10(x)/log10(n);
end
disp(y)
  • if语句和switch语句的比较
if语句switch 语句
比较复杂,特别是嵌套使用的if语句可读性强,容易理解
要调用strcmp函数比较不同长度的字符串可比较不同长度的字符串
可检测相等和不相等仅检测相等
  • try-catch结构
    try-catch结构的具体句法形式:
try
   command 1 %命令组1 总是首先被执行。若正确,执行完成后结束此结构
catch 
   command 2 %命令组1执行发生错误时,执行命令组2
end

说明:
(1)只有当MATLAB执行命令组1发生错误时,才会执行命令组2.try-catch结构只提供两个可供选择的命令组。
(2)当执行command1发生错误时,可调用lasterr函数查询出错原因。如果lasterr函数的运行结果为空字符串,则表示命令组1被成功执行了。
(3)如果执行命令组2时又发生错误,则MATLAB将会终止该结构。

  • try-catch结构的简单运用示例
Num=6;
Mat=magic(4)
try
Mat_Num=Mat(Num,:) %取Mat的第Num行元素
catch
Mat_end=Mat(end,:) %若Mat没有Num行元素,则去Mat最后一行元素
end
lasterr %显示出错原因

《第八本书|MTALAB R2016a 完全自学一本通》

  • for循环结构
for x=array
commands
end

脚本与函数

  • 完整的M文件示范
function spir_len=siprallength(d,n,lcolor)
%CIRCLE plot a circle of radius as r in the provided color and calculate its area
% d:螺旋的旋距
% n:螺旋的圈数
% lcolor:画图线的颜色
% spir_len:螺旋的周长
%spirallength(d,n):利用蓝色以预设参数的螺旋线
%spirallength(d,n,lcolor):利用lcolor颜色以预设参数的螺旋线
%spir_len=spirallength(d,n):计算螺旋线周长,并用蓝色填充螺旋线
%spir_len=spirallength(d,n,lcolor):计算螺旋线周长,并用lcolor颜色填充螺旋线
if nargin>3
error('输入变量过多!');
elseif nargin==2
lcolor='b';
end
j=sqrt(-1);
phi=0:pi/1000:n*2*pi;
amp=0:d/2000:n*d;
spir=amp .*exp(j*phi);
if nargout==1
spir_len=sum(abs(diff(spir)));
if nargout==1
spir_len=sum(abs(diff(spir)));
fill(real(spir),img(spir),lcolor)
elseif nargout==0
plot(spir,lcolor)
else
error('输出变量过多!')
end
axis('square')
  • 匿名函数、子函数、私有函数与私有目录
    1.匿名函数
    匿名函数没有函数名,也不是函数M文件,只包含一个表达式和输入/输出函数。用户可以在命令行窗口中输入代码,创建匿名函数。匿名函数的创建方法:
f=@(input1,input2,...)expression
  • 例 当给定实数x,y的具体数值后要求计算表达式x^y+3xy的结果
Fxy=@(x,y) x.^y+3*x*y

《第八本书|MTALAB R2016a 完全自学一本通》

  • 示例说明feval函数中的FN只能接收函数名不能接收表达式
j=sqrt(-1);
Z=exp(j*(-pi:pi/100:pi));
eval('plot(Z)');
set(gcf,'units','normalized','position',[0.2,0.3,0.2,0.2])
title('Results by eval');axis('square')
figure
set(gcf,'units','normalized','position',[0.2,0.3,0.2,0.2])
feval('plot',Z);
title('Results by feval');axis('square')

《第八本书|MTALAB R2016a 完全自学一本通》

M文件中变量的检测与传递

  • 输入/输出变量检测指令
指令名功能
Nargin在函数体内获得实际的输入变量
Nargout在函数体内获得实际的输出变量
nargin(‘fun’)获取fun制定的函数的标称输入变量数量

第五章 数据可视化

  • 例5-1 离散数据和离散函数的可视化
X1=[1,2,4,6,7,8,10,11,12,14,16,17,18,20];
Y1=[1,2,4,6,7,8,10,10,8,7,6,4,2,1];
figure(1)
plot(X1,Y1,'o','MarkerSize',15)
X2=1:20;
Y2=log(X2);
figure(2)
plot(X2,Y2,'o','MarkerSize',15)

《第八本书|MTALAB R2016a 完全自学一本通》

二维图形的绘制

  • plot指令
    将数对排序的一种方法是使用plot指令。该命令可以带有不同数目的参数。最简单的形式就是讲数据传递给plot,但是线条的类型和颜色可以通过使用字符串来制定,这里用str来表示。线条的默认类型为实数型。

plot指令的一般使用规范
(1)plot(x,y)
语句说明:以x为横坐标,y为纵坐标,按照坐标(xj,yj)的有序排列绘制曲线。
(2)plot(y)
y为一维实数数组,以1:n为横坐标,yj为纵坐标,绘制曲线
(3)plot(z)
z为一维复数数组,以横轴为实轴,纵轴为虚轴。在复平面上绘制(real(zj),imag(zj))的有序集合的图形。

  • 例5-4 plot指令使用示例1
X=-10:10;Y=X.^2;
figure(1)
subplot(1,4,1);plot(X,Y,'LineWidth',2);
subplot(1,4,2);plot(Y,'LineWidth',2);xlim([1 length(Y)])
Z=cos(-pi:pi/10:pi)+sqrt(-1)*sin(-pi:pi/10:pi);
subplot(1,4,3);plot(Z,'LineWidth',2);

《第八本书|MTALAB R2016a 完全自学一本通》

(4)plot(A)
语句说明:绘制矩阵A的列对它下标的图形。对于m*n的矩阵A,有n个含有m个元素的数对,或是n条有m个点的曲线,且这n条曲线均采用颜色监视器上不同的颜色绘制而成。

A=magic(20);
A(9:20,:)=[];
figure;
plot(A)

《第八本书|MTALAB R2016a 完全自学一本通》

(5)plot指令使用规范五:plot(x,A)

语句说明:绘制矩阵A对向量x的图形。对m
n的矩阵A和长度为m的向量x,绘制矩阵A的列对向量x的图形;如果x的长度为n,则绘制矩阵A的行对向量x的图形。向量x可以是行向量,也可以是列向量。
(6)plot指令使用规范六:plot(A,x)
语句说明:对矩阵A绘制向量x的图形。对于一个m
n的矩阵A和一个长度为m的向量x,对矩阵A的列绘制向量x的图形;如果x的长度为n则对矩阵A的行绘制向量x的图形。向量x可以是行向量也可以是列向量。

(7)plot指令使用规范七:plot(A,B)

语句说明:对矩阵A的行绘制矩阵B的列的图形。如果A和B都是m*n的矩阵,则将绘制n条由m个有序对联城的曲线。

    原文作者:阳光不锈201314
    原文地址: https://www.jianshu.com/p/018198023407
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞