Matlab入门
matlab简介
help
在命令窗口(command windows)显示指定命令的简短使用说明doc
以网页形式显示指定命令的帮助页,此命令显示的标准更加具体,还有各种使用举例lookfor
按指定的关键词查询与之相关的命令which
显示指定函数所在的目录. 例如cd、dir、more
1
2
3
41. help eig # 用于查看eig函数的帮助文档,查询结果在command窗口显示
2. doc eig # 同样是查看eig函数帮助文档,结果在单独的查看显示,比help显示更加完整详细
3. lookfor eig # 模糊查找, 比如说你知道某个可能的函数是plo***, 但是你有记不清就可以用这个命令了
4. which eig #查找函数具体在什么位置
Matlab 变量
变量命名原则:以字母或者下划线开头(很少用下划线打头啊);后面可以跟字母、数字和下划线;变量名区分字母的大小写.
Matlab 语句的通常形式
1 |
|
表达式是用运算符将有关运算量连接起来的式子,其结果被赋给赋值号“=
”左边的变量
分号和续行符的作用
- 若不想在命令行窗口的屏幕上输出结果,可以在语句最后加分号;
- 如果语句很长,可用续行符 “
…
”(三个点)续行; 续行符的前面最好留一个空格.1
2
3
4a = 1 % a=1就会在命令行窗口输出
b = 1; % 加了分号就不显示在命令行窗口
c = 123+456+789+ ...
123456 %三个点换行
变量的查询
who
显示工作空间中的所有变量;whos
查看工作空间中变量的详细属性1
2
3
4
5
6
7
8
9
10
11
12>> a = 1;
b = 2;
>> c = pi;
>> who
您的变量为:
a b c
>> whos
Name Size Bytes Class Attributes
a 1x1 8 double
b 1x1 8 double
c 1x1 8 double
系统预定义变量
pi
: 圆周率 π ;inf, Inf
:无穷大;nan, NaN
:Not-a-Number,一个不定值,如 0/0;eps
:浮点运算相对精度i, j
:虚部单位, 通常为了避免混淆我们写作1i, 1j
- 特殊变量
ans
– 应尽量避免给系统预定义变量重新赋值
数学运算符
- 加法;- 减法;* 乘法;/ 和 \ 除法(右左除):^ 幂运算;
点乘 (.*
) 与点除 (./
): 这两个用的特别多,例如1
2
3
4
5x = [1 2 3];
y = [ 2 4 6];
x.*y % 输出1*2 2*4 3*6
y./x %输出 2/1 4/2 6/3
x.^3 %输出 1^3 2^3 3^3
/(向右倒称为右除) 右除 AB=C A=C/B
\(向左倒称为左除) 左除 AB=C B=A\C
运算符 | 目的 |
---|---|
+ | 加; 加法运算符。 |
- | 减; 减法运算符。 |
***** | 标量和矩阵乘法运算符。 |
.* | 数组乘法运算符。 |
^ | 标量和矩阵求幂运算符。 |
.^ | 数组求幂运算符。 |
\ |
左除法运算符。 |
/ |
右除法运算符。 |
``.` | 数组左除法运算符。 |
./ | 数组右除法运算符。 |
: | 冒号;生成规则间距的元素并表示整行或整列。 |
( ) | 圆括号;封闭函数参数和数组索引;重写优先级。 |
[ ] | 括号;附件数组元素。 |
. | 小数点。 |
… | 省略号;行连续运算符 |
, | 逗号;分隔一行中的语句和元素 |
; | 分号; 分隔列并抑制显示。 |
% | 百分号;指定注释并指定格式。 |
_ | 引用符号和转置运算符。 |
._ | Nonconjugated转置运算符。 |
= | 赋值运算符。 |
特殊变量与常量
名称 | 意义 |
---|---|
ans | 最近计算的答案。 |
eps | 浮点精度。 |
i,j | 虚数单位√-1。 |
Inf | 无穷。 |
NaN | 未定义的数值结果(不是数字)。 |
pi | π |
命令分隔符:逗号和分号
输出格式
Matlab 以双精度执行所有的运算,运算结果可以在屏幕上输出,同时赋给指定变量;若无指定变量,则系统会自动将结果赋给变量 “ans”;Matlab 中数的输出格式可以通过 format
命令指定;format
只改变变量的输出格式,但不会影响变量的值!
石头:matlab入门2:变量与赋值,数据保存于读取9 赞同 · 2 评论文章
format命令
默认情况下,MATLAB显示带有四个小数位值的数字。这就是所谓的short format。
但是,如果要提高精度,则需要使用format命令。
format long命令在小数点后显示16位数字。
窗口命令
用于管理会话的命令
命令 | 目的 |
---|---|
clc | 清除命令窗口。 |
clear | 从内存中删除变量。 |
exist | 检查文件或变量的存在。 |
global | 声明变量为全局变量。 |
help | 搜索帮助主题。 |
lookfor | 在帮助条目中搜索关键字。 |
quit | 停止MATLAB。 |
who | 列出当前变量。 |
whos | 列出当前变量(长显示)。 |
变量的存储
save 文件名 变量名列表
1 |
|
- 变量名列表中各变量之间用空格分隔
save命令用于将工作空间中的所有变量保存为当前目录中扩展名为.mat的文件。
例如,
1 |
|
您以后可以随时使用load命令重新加载文件。
1 |
|
- 清除当前工作空间中的变量;
1
2
3clear A x %清除指定的变量
clear all % 清除所有工作空间变量
查看变量
who命令显示您已使用的所有变量名。
1 |
|
MATLAB将执行上述语句并返回以下结果-
1 |
|
whos命令显示了有关变量的更多信息-
- 当前内存中的变量
- 每个变量的类型
- 分配给每个变量的内存
- 它们是否为复杂变量
1 |
|
MATLAB将执行上述语句并返回以下结果-
1 |
|
该clear命令variable(s)从内存中删除所有(或指定的)。
1 |
|
用于系统的命令
MATLAB提供了各种有用的命令来处理系统,例如将当前工作作为文件保存在工作区中,并在以后加载文件。
它还为其他与系统相关的活动提供各种命令,例如显示日期,在目录中列出文件,显示当前目录等。
下表显示了一些常用的与系统相关的命令-
命令 | 目的 |
---|---|
cd | 更改当前目录。 |
date | 显示当前日期。 |
delete | 删除文件。 |
diary | 开启/关闭日记文件录制。 |
dir | 列出当前目录中的所有文件。 |
load | 从文件加载工作区变量。 |
path | 显示搜索路径。 |
pwd | 显示当前目录。 |
save | 将工作空间变量保存在文件中。 |
type | 显示文件的内容。 |
what | 列出当前目录中的所有MATLAB文件。 |
wklread | 读取.wk1电子表格文件。 |
输入和输出命令
MATLAB提供以下与输入和输出相关的命令-
命令 | 目的 |
---|---|
disp | 显示数组或字符串的内容。 |
fscanf | 从文件中读取格式化的数据。 |
format | 控制屏幕显示格式。 |
fprintf | 执行对屏幕或文件的格式化写入。 |
input | 显示提示并等待输入。 |
; | 禁止丝网印刷。 |
fscanf和fprintf命令的行为像C的scanf和printf函数。它们支持以下格式代码-
格式代码 | 目的 |
---|---|
%s | 格式化为字符串。 |
%d | 格式化为整数。 |
%f | 格式化为浮点值。 |
%e | 以科学计数形式格式化为浮点值。 |
%g | 以最紧凑的格式进行格式化:%f或%e。 |
\n | 在输出字符串中插入新行。 |
\t | 在输出字符串中插入一个选项卡。 |
格式函数具有以下用于数字显示的形式-
格式功能 | 最多显示 |
---|---|
format short | 四个小数位(默认值)。 |
format long | 16位小数。 |
format short e | 五位数加指数。 |
format long e | 16位数字加指数。 |
format bank | 两个小数位数。定点货币形式 |
format + | 正数,负数或零。 |
format rat | 有理近似。小数分数表示 |
format compact | 禁止某些换行符。 |
format loose | 重置为不太紧凑的显示模式。 |
向量,矩阵和数组命令
下表显示了用于处理数组,矩阵和向量的各种命令-
命令 | 目的 |
---|---|
cat | 连接数组。 |
find | 查找非零元素的索引。 |
length | 计算元素数。 |
linspace | 创建规则间隔的矢量。 |
logspace | 创建对数间隔的向量。 |
max | 返回最大元素。 |
min | 返回最小的元素。 |
prod | 每列的乘积。 |
reshape | 更改大小。 |
size | 计算数组大小。 |
sort | 对每一列进行排序。 |
sum | 对每列求和。 |
eye | 创建一个单位矩阵。 |
ones | 创建一个数组。 |
zeros | 创建一个零数组。 |
cross | 计算矩阵叉积。 |
dot | 计算矩阵点积。 |
det | 计算数组的行列式。 |
inv | 计算矩阵的逆。 |
pinv | 计算矩阵的伪逆。 |
rank | 计算矩阵的秩。 |
rref | 计算精简行梯形表格。 |
cell | 创建单元格数组。 |
celldisp | 显示单元格数组。 |
cellplot | 显示单元格数组的图形表示形式。 |
num2cell | 将数字数组转换为单元格数组。 |
deal | 匹配输入和输出列表。 |
iscell | 标识单元格数组。 |
绘图命令
MATLAB提供了许多用于绘制图形的命令。下表显示了一些常用的绘图命令-
命令 | 目的 |
---|---|
axis | 设置轴限制。 |
fplot | 函数的智能绘图。 |
grid | 显示网格线。 |
plot | 生成xy图。 |
打印图或将图保存到文件中。 | |
title | 将文本放在图的顶部。 |
xlabel | 在x轴上添加文本标签。 |
ylabel | 将文本标签添加到y轴。 |
axes | 创建轴对象。 |
close | 关闭当前图。 |
close all | 关闭所有地块。 |
figure | 打开一个新的图形窗口。 |
gtext | 通过鼠标启用标签放置。 |
hold | 冻结当前图。 |
legend | 用鼠标放置图例。 |
refresh | 重新绘制当前图形窗口。 |
set | 指定对象(例如轴)的属性。 |
subplot | 在子窗口中创建图。 |
text | 在图中放置字符串。 |
bar | 创建条形图。 |
loglog | 创建对数-对数图。 |
polar | 创建极坐标图。 |
semilogx | 创建半对数图。(对数横坐标)。 |
semilogy | 创建半对数图。(对数纵坐标)。 |
stairs | 创建楼梯图。 |
stem | 创建茎图。 |
几个小技巧
- Matlab的命令记忆功能:上下箭头键(先输入命令的前几个字符,再按上下键缩小搜索范围)
- 命令补全功能:
Tab键
;用Esc键
删除命令行
矩阵
创建矩阵
Matlab 的操作对象是矩阵
- 定义矩阵:
直接输入法
1
2
3
4
5A = [1 2 3; 4 5 6; 7 8 9]
%或者
A = [1 2 3;
4 5 6;
7 8 9] - 矩阵用方括号 “
[ ]
” 括起1
mat = [元素]
- 矩阵同一行中的元素之间用
空格
或逗号
分隔1
2mat1 = [1 2 3];
mat2 = [1,2,3];%两者意义一样 - 矩阵行与行之间用 分号 分开
1
mat3 =[ 1 2 3; 4, 5, 6];
- 直接输入法中,分号可以用 回车 代替
1
2mat4 = [1 2 3
4 5 6]; - 利用函数建立数值矩阵:MATLAB提供了许多生成和操作矩阵的函数。例如:
reshape
函数和diag
函数等。reshape函数用于建立数值矩阵。diag函数用于产生对角阵。
1 |
|
转置
转置操作将列向量更改为行向量,反之亦然。转置操作由单引号(’)表示。
1 |
|
建立矩阵的函数
1 |
|
赋值操作
- 矩阵A是一个1X2矩阵,第一个元素1,第二个元素2
1
2A(1)=1;
A(2)=2; - 大矩阵可以把小矩阵作为其元素
1
A = [A ; 3 4];
矩阵元素提取引用操作
单个元素的引用;利用小括弧和元素所在的位置(下标)A(1)
引用A的第一个元素;A(i)
:向量 A 中的第 i 个元素;A(i,j)
:矩阵 A 中的第 i 行,第 j 列元素;多个元素的引用:
冒号的特殊用法;a:b:c
%产生一个由等差序列组成的向量; a 是首项,b 是公差,c 确定最后一项;若 b=1,则 b 可以省略。
1 |
|
矩阵元素的引用A(i:j, m:n)
表示由矩阵 A 的第 i 到第 j 行和第 m 到第 n 列交叉线上的元素组成的子矩阵。可利用冒号提取矩阵的整行或整列
1 |
|
MATLAB 向量操作
MATLAB 向量追加
MATLAB 允许您将向量附加到一起来创建新的向量。
如果您有两个包含n和m个元素的行向量r1和r2,则要创建一个包含n个元素和m个元素的行向量r,通过添加这些向量,您可以编写-
1 |
|
您还可以通过添加这两个向量来创建矩阵r,向量r2将是矩阵的第二行-
1 |
|
数组运算
(1) 数组的加和减 (2) 数组的乘和除 (3) 数组的乘方
石头:matlab入门4:基本运算19 赞同 · 0 评论文章
1、行列式计算;
1 |
|
2、求解线性方程组;
1 |
|
3、解特征值问题
1 |
|
数据类型
MATLAB 不需要任何类型声明或维度语句。每当 MATLAB 遇到一个新的变量名,它就创建变量并分配适当的内存空间。
如果变量已经存在,那么MATLAB将用新内容替换原始内容,并在必要时分配新的存储空间。
例如,
1 |
|
上面的语句创建一个名为“ Total”的1比1矩阵,并将值42存储在其中。
数据类型转换
MATLAB提供了用于将值从一种数据类型转换为另一种数据的各种函数。下表显示了数据类型转换函数-
函数 | 作用 |
---|---|
char | 转换为字符数组(字符串) |
int2str | 将整数数据转换为字符串 |
mat2str | 将矩阵转换为字符串 |
num2str | 将数字转换为字符串 |
str2double | 将字符串转换为双精度值 |
str2num | 将字符串转换为数字 |
native2unicode | 将数字字节转换为 Unicode 字符 |
unicode2native | 将Unicode字符转换为数字字节 |
base2dec | 将N进制数字符串转换为十进制数 |
bin2dec | 将二进制数字符串转换为十进制数 |
dec2base | 将十进制数转换为字符串中的N进制数 |
dec2bin | 将十进制转换为字符串中的二进制数 |
dec2hex | 将字符串中的十进制数转换为十六进制数 |
hex2dec | 将十六进制数字字符串转换为十进制数字 |
hex2num | 将十六进制数字字符串转换为双精度数字 |
num2hex | 将单精度和双精度转换为IEEE十六进制字符串 |
cell2mat | 将单元格数组转换为数值数组 |
cell2struct | 将单元数组转换为结构数组 |
cellstr | 从字符数组创建字符串的单元格数组 |
mat2cell | 将数组转换为单元格大小可能不同的单元格 |
num2cell | 将数组转换为大小一致的单元格数组 |
struct2cell | 将结构转换为单元格数组 |
数据类型的确定
MATLAB提供了各种功能来识别变量的数据类型。
下表提供了确定变量的数据类型的功能-
函数 | 作用 |
---|---|
is | 检测状态 |
isa | 确定输入是否为指定类的对象 |
iscell | 确定输入是否为单元格数组 |
iscellstr | 确定输入是否为字符串的单元格数组 |
ischar | 确定项目是否为字符数组 |
isfield | 确定输入是否为结构数组字段 |
isfloat | 确定输入是否为浮点数组 |
ishghandle | 适用于处理图形对象句柄 |
isinteger | 确定输入是否为整数数组 |
isjava | 确定输入是否为Java对象 |
islogical | 确定输入是否为逻辑数组 |
isnumeric | 确定输入是否为数值数组 |
isobject | 确定输入是否为MATLAB对象 |
isreal | 检查输入是否为实数数组 |
isscalar | 确定输入是否为标量 |
isstr | 确定输入是否为字符数组 |
isstruct | 确定输入是否为结构数组 |
isvector | 确定输入是否为向量 |
class | 确定对象的类别 |
validateattributes | 检查数组的有效性 |
whos | 列出工作空间中的变量,包括大小和类型 |
位运算
按位运算
按位运算符对位进行运算并执行逐位运算。&,|和^的真值表如下-
p | q | p&q | p | q | p ^ Q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
函数 | 作用 |
---|---|
bitand(a, b) | 整数 a 和 b 的位与 |
bitcmp(a) | a的逐位补码 |
bitget(a,pos) | 在整数数组a的指定位置获取位 |
bitor(a, b) | 整数a和b的位或 |
bitset(a, pos) | 将bit设置为a的特定位置pos |
bitshift(a, k) | 返回一个由向左移动ķ比特,相当于乘以2 ķ。k的负值对应于右移位或除以2 | k | 并朝负无穷大四舍五入到最接近的整数。任何溢出位都将被截断。 |
bitxor(a, b) | 整数 a 和 b 的位异或 |
swapbytes | 整数 a 和 b 的位异或 |
冒号表示法
colon(:)是在MATLAB中最有用的运算符之一。它用于创建向量,下标数组和指定迭代。
如果要创建包含1到10的整数的行向量,请编写-
示例
1 |
|
MATLAB执行该语句并返回包含1到10的整数的行向量-
1 |
|
如果要指定一个增量值而不是一个值,例如-
示例
1 |
|
MATLAB执行该语句并返回以下结果-
1 |
|
可以使用冒号运算符创建索引向量,以选择行,列或数组元素。
下表描述了它的用途(让我们有一个矩阵A)-
格式 | 目的 |
---|---|
A(:,j) | 是A的第j列。 |
A(i,:) | 是A的第i行。 |
A(:,:) | 是等效的二维数组。对于矩阵,这与A相同。 |
A(j:k) | is A(j), A(j+1),…,A(k). |
A(:,j:k) | 是A(:,j),A(:,j + 1),…,A(:,k)。 |
A(:,:,k) | 是第k个三维阵列A的页 |
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图像可视化
二维平面图形与坐标系
- 线性坐标曲线
plot
函数命令,它可以生成线段、曲线和参数方程曲线的函数图形。命令格式:plot(X,Y)
;plot(x1,y1,x2,y2,…)
- 用命令
plot(x,y)
绘制y=cos(x)
在一个周期内的图形。
1 |
|
- 在同一图形窗口中用命令
plot(x,y)
绘出正弦余弦函数的图形。
1 |
|
- plot 函数可以设置曲线的线段类型、定点标记和线段颜色。
调用格式:plot(x,y,s) ,s 为类型说明参数,是字符串
。 s 字符串可以是三种类型的符号之一,也可以是线型与颜色和定点标记与颜色的组合。用hold on
命令在一个坐标系中增加新的图形对象。
- 图形窗口的分割: 实现在同一个窗口中同时显示多个图像的命令
subplot
。 使用格式为:
1 |
|
其含义为 :把图形窗口分割为 m 行 n 列子窗口,然后选定第 i 个窗口为当前窗口。 subplot 命令不仅用于二维图形,对三维图形一样适用。其本质是将 figure 窗口分为几个区域,再在每个区域内分别绘图
。
- 用 subplot 函数把两种不同的图形综合在一个图形窗口中。
1 |
|
- 坐标系的调整 实现坐标系的调整的命令是 axis 函数。 调用格式为:
axis([xmin,xmax,ymin,ymax,zmin,zmax])
坐标的最小值( xmin,ymin,zmin)必须小于相应的最大值( xmax,ymax,zmax).
1 |
|
三维绘图
绘图命令 plot3. 其调用格式为:plot3(X1,Y1,Z1,s1,X2,Y2,Z2,s2,…)
参数的含义如下: X1, Y1,Z1:第一到三维数据,是尺寸相等的向量/矩阵; s、s1、s2:是字符串,用来设置线型、颜色、数据点标记。 x、y、z 是向量时,plot3 命令的使用
1 |
|
x、y、z 都是矩阵时,plot3 命令的使用
1 |
|
三维曲面绘图命令 :首先是平面网格点的生成 函数命令meshgrid 用来生成 x-y 平面上的网格点矩阵。 调用形式为:
1
2[X,Y]=meshgrid(x,y)
[X,Y]=meshgrid(x) 等价于[X,Y]=meshgrid(x,x)
参数含义如下: x:是区间[x0,xm]上分划的向量; y:是区间[y0,yn]上分划的向量; X,Y:输出变量矩阵,矩阵 X 的行向量都是向量 x,矩阵 Y 的列向量都是向量 y。 函数 meshgrid 将由两个向量决定的区域转换为对应的网格点矩阵
。
- 三维网格命令 mesh 利用函数mesh生成网格曲面。 调用格式为:
- mesh(X,Y,Z,C):X、Y、Z、C 是同维数的矩阵,X、Y、Z 对应空间上的网格点,网格线颜色由C决定;
- mesh(X,Y,Z):相当于上面的 C=Z 的情况;
- mesh(x,y,Z,C):x 和 y 是向量,Z 和 C 是同维数的矩阵,网格曲面的网格顶点是( x(j),y(i),Z(i,j)),网格线的颜色由矩阵 C 决定;
- 三维表面命令 surf 函数:surf 命令的调用格式与 mesh 相同。 利用三维网格表面命令 surf 绘制图形。
1 |
|
- 柱面的表达cylinder cylinder命令中,柱面的轴线定义为 z 轴,只要给出母线的描述就可完成一个柱面。 调用格式为:
1 |
|
R:是一描述柱面母线的向量; N:是旋转柱面上的分割线条数; [X,Y,Z] :是返回的x,y,z坐标向量。 绘制一个柱面。
1 |
|
- 球面的表达sphere 调用格式为:
[X,Y,Z]=sphere(N):产生一个( N+1)×( N+1)的矩阵,然后用函数 surf 命令绘制一个单位的球面,N 为设置分割线的条数;
[X,Y,Z] = sphere:缺省 N = 20。
画一个球面。
1 |
|
图像标注修饰
- 图形标注:坐标轴和图形标题标注; 标注坐标轴 x、y 和 z 的命令函数为
xlabel、ylabel 和 zlabel
调用格式为:
1 |
|
图例的标注 legend命令实现不同图例的说明。其调用格式为:
1 |
|
按顺序把字符串添加到相应的曲线线型符号之后;Pos对图例的位置作出设置和调整:
0 = 自动把图例置于最佳位置( 和图中曲线重复最少)
; 1 = 置于图形窗口的右上角( 缺省值)
; 2 = 置于图形窗口的左上角
; 3 = 置于图形窗口的左下角
; 4 = 置于图形窗口的右下角
; -1 = 置于图形窗口的右侧( 外部)
。
- 控制分格线 对二维和三维图形都适用。 有三种用法:
grid on
:打开分格线控制开关,以后绘制的图形都带有分格线;grid off
:关闭分格线控制开关,以后绘制的图形都不带分格线;grid
:用于实现分格线绘制切换。绘制图形,并用函数xlabel、title 和 legend
命令进行标注。
1 |
|
matlab符号运算
符号对象的建立:sym 和 syms
1 |
|
syms
符号变量1 符号变量2 … 符号变量n
1 |
|
查找符号表达式中的符号变量:findsym(expr)
%按字母顺序列出符号表达式 expr 中的所有符号变量;findsym(expr, N)%按顺序列出 expr 中离 x 最近的 N 个符号变量;用给定的数据替换符号表达式中的指定的符号变量
1 |
|
用 a 替换字符函数 f 中的字符变量 x
- 因式分解
1 |
|
- 函数展开
1 |
|
- 合并同类项
1 |
|
- 函数简化
1 |
|
- 计算极限
1 |
|
- 计算导数
1 |
|
- 计算积分
1 |
|
- 符号求和
1 |
|
- 代数方程求解
solve(f,v)
:求方程关于指定自变量的解 - 微分方程求解
1 |
|
其中 y 为输出的解, eq1、eq2、. . . 为微分方程,cond1、cond2、…为初值条件, v 为自变量
matlab 程序设计
M文件
用MATLAB语言编写的程序,称为M文件
。 M文件有两类:
命令文件和函数文件。
命令文件:没有输入参数,也不返回输出参数。
函数文件:可以输入参数,也可返回输出参数。
input
函数: 用于向计算机输入一个参数;pause
函数:暂停程序的执行;disp
函数:命令窗口输出函数。
程序设计
- for语句:格式:
1 |
|
注:其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略
- while语句: 格式为:
1 |
|
函数
函数是一起执行任务的一组语句。在MATLAB中,函数是在单独的文件中定义的。文件名和函数名应该相同。
函数在其自己的工作空间(也称为本地工作空间)中对变量进行操作,与在MATLAB命令提示符下访问的工作空间(称为基本工作空间)不同。
函数可以接受多个输入参数,并且可以返回多个输出参数。
函数语句的语法是-
1 |
|
注:其中函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于1个时,则应该用方括号括起来
。
编写函数文件求小于任意自然数n的Fibonacci数列各项。
1 |
|
- 函数调用:
[输出实参表]=函数名(输入实参表)
匿名函数
匿名函数就像传统编程语言中的内联函数一样,是在单个MATLAB语句中定义的。它由一个MATLAB表达式以及任意数量的输入和输出参数组成。
您可以直接在MATLAB命令行或在函数或脚本中定义匿名函数。
这样,您可以创建简单的功能,而不必为其创建文件。
从表达式创建匿名函数的语法是
1 |
|
实例
在此示例中,我们将编写一个名为power的匿名函数,该函数将两个数字作为输入,并将第一个数字提高为第二个数字的幂。
创建一个脚本文件并在其中键入以下代码-
示例
1 |
|
运行文件时,它显示-
1 |
|
主和子函数
必须在文件中定义除匿名函数以外的任何函数。每个函数文件都包含一个首先出现的必需主函数,以及在主函数之后并由其使用的任意数量的可选子函数。
可以从定义主文件的文件外部(从命令行或其他函数)调用主函数,但是不能从命令行或其他函数在功能文件外部调用子函数。
子函数仅对主函数和定义它们的函数文件中的其他子函数可见。
实例
让我们写一个名为quadratic的函数来计算一个二次方程的根。该函数包含三个输入:二次系数、线性系数和常数项。它将回归根。
函数文件quadratic.m将包含主函数quadratic和子函数disc,后者计算判别式。
创建一个函数文件 quadratic.m 并在其中输入以下代码
1 |
|
您可以从命令提示符处调用上述功能,如下所示:
1 |
|
MATLAB将执行上述语句并返回以下结果-
1 |
|
嵌套函数
您可以在另一个函数的主体内定义函数。这些称为嵌套函数。嵌套函数包含任何其他函数的任何或所有组件。
嵌套函数在另一个函数的范围内定义,它们共享对包含函数的工作区的访问。
嵌套函数遵循以下语法-
1 |
|
实例
让我们重写前面实例中的quadratic函数,不过,这次disc函数将是一个嵌套函数。
创建一个函数文件quadratic2.m,并在其中输入以下代码-
1 |
|
您可以从命令提示符处调用上述函数,如下所示:
1 |
|
MATLAB将执行上述语句并返回以下结果-
1 |
|
私有函数
私有函数是仅对有限的一组其他函数可见的主函数。如果不想公开函数function(s)的实现,可以将它们创建为私有函数。
私有函数位于具有特殊名称 Private 的子文件夹中。
它们仅对父文件夹中的函数可见。
实例
让我们重写quadratic函数。不过,这一次,disc函数计算判别式,将是一个私有函数。
在工作目录文件夹中创建一个名为 private 的子文件夹,在其中存储以下函数文件 disc.m
1 |
|
在您的工作目录中创建一个函数 quadratic3.m ,并在其中输入以下代码-
1 |
|
您可以从命令提示符处调用上述函数,如下所示:
1 |
|
MATLAB将执行上述语句并返回以下结果-
1 |
|
全局变量
全局变量可以由多个函数共享。为此,您需要在所有函数中将变量声明为全局变量。
如果要从基本工作空间访问该变量,请在命令行中声明该变量。
全局声明必须在变量实际在函数中使用之前发生。最好将大写字母用作全局变量的名称,以将其与其他变量区分开。
实例
让我们创建一个名为average.m的函数文件,并在其中输入以下代码-
1 |
|
创建一个脚本文件并在其中键入以下代码-
1 |
|
运行文件时,它将显示以下结果-
1 |
|
matlab数据
MATLAB 数据导入(ImportData)
在MATLAB中导入数据意味着从外部文件加载数据。该importdata功能允许加载不同格式的各种数据文件。它具有以下五种形式-
序号 | 功能说明 |
---|---|
1 | *A = importdata(filename)*从filename*表示的文件*中将数据加载到数组A中。 |
2 | **A = importdata(‘-pastespecial’)**从系统剪贴板而不是文件加载数据。 |
3 | **A = importdata(___, delimiterIn)**将 delimiterIn 解释为 ASCII 文件、文件名或剪贴板数据中的列分隔符。可以对上述语法中的任何输入参数使用 delimiterIn。 |
4 | **A = importdata(___, delimiterIn, headerlinesIn)*从ASCII文件,文件名或剪贴板中加载数据,并从行headerlinesIn + 1*开始读取数字数据。 |
5 | **[A, delimiterOut, headerlinesOut] = importdata(___)**使用前面语法中的任何输入参数,返回delimiterOut中输入ASCII文件的检测到的分隔符字符和headerlinesOut中检测到的头行数。 |
默认情况下,Octave不支持该*importdata()*功能,因此您必须搜索并安装此软件包才能使以下示例适用于Octave安装。
实例1
让我们加载并显示图像文件。创建一个脚本文件并在其中键入以下代码-
1 |
|
运行文件时,MATLAB将显示图像文件。但是,必须将其存储在当前目录中。
实例2
在此示例中,我们导入一个文本文件并指定Delimiter和Column Header。让我们创建一个以空格分隔的ASCII文件,其中包含标题为weeklydata.txt的列标题。
我们的文本文件weeklydata.txt看起来像这样-
1 |
|
创建一个脚本文件并在其中键入以下代码-
1 |
|
运行文件时,它显示以下结果-
1 |
|
实例3
在此示例中,让我们从剪贴板导入数据。
将以下行复制到剪贴板-
Mathematics is simple
创建一个脚本文件并输入以下代码-
1 |
|
运行文件时,它显示以下结果-
1 |
|
底层文件I / O
importdata函数是一个高级函数。MATLAB中的底层文件I/O函数允许对文件的读写数据进行最大程度的控制。但是,这些函数需要更详细的文件信息才能有效地工作。
MATLAB为字节或字符级别的读写操作提供以下函数-
函数 | 描述 |
---|---|
fclose | 关闭一个或所有打开的文件 |
feof | 文件结尾测试 |
ferror | 有关文件I/O错误的信息 |
fgetl | 从文件中读取行,删除换行符 |
fgets | 从文件中读取行,保留换行符 |
fopen | 打开文件,或获取有关打开文件的信息 |
fprintf | 将数据写入文本文件 |
fread | 从二进制文件读取数据 |
frewind | 将文件位置指示器移动到打开文件的开头 |
fscanf | 从文本文件读取数据 |
fseek | 移动到文件中的指定位置 |
ftell | 在打开文件中的位置 |
fwrite | 将数据写入二进制文件 |
导入具有底层I / O的文本数据文件
MATLAB提供以下功能用于文本数据文件的底层导入-
- fscanf函数读取文本或ASCII文件中的格式化数据。
- fgetl和fgets的时间,其中,一个换行字符的每一行分离功能读取的文件的一行。
- fread函数读取字节或位级别的数据流。
MATLAB 数据输出
数据导出(或输出)在 MATLAB 的意思是写入文件。MATLAB 允许您在另一个读取 ASCII 文件的应用程序中使用您的数据。为此,MATLAB 提供了几个数据导出选项。
您可以创建以下类型的文件-
- 数组中的矩形、分隔的ASCII数据文件。
- 击键的日记(或日志)文件和结果文本输出。
- 使用底层函数(如fprintf)的专用ASCII文件。
- MEX文件,用于访问以特定文本文件格式写入的C / C ++或Fortran例程。
除此之外,您还可以将数据导出到电子表格。
有两种方法可以将数字数组导出为定界的ASCII数据文件-
- 使用save函数并指定**-ascii**限定符
- 使用dlmwrite函数
使用save函数的语法是-
1 |
|
其中,my_data.out是创建的带分隔符的ASCII数据文件,num_array是数字数组,并且 −ascii是说明符。
使用dlmwrite函数的语法是-
1 |
|
其中,my_data.out是创建的带分隔符的ASCII数据文件,num_array是数字数组, dlm_char是分隔符。
在线示例
下面的示例演示了该概念。创建一个脚本文件并输入以下代码-
示例
1 |
|
运行文件时,它显示以下结果-
1 |
|
请注意,save -ascii命令和dlmwrite函数不适用于作为输入的单元格数组。要从单元格数组的内容创建定界的ASCII文件,您可以
- 使用cell2mat函数将单元格数组转换为矩阵
- 或使用底层文件I / O功能导出单元数组。
如果使用save函数将字符数组写入ASCII文件,则它将等效于字符的ASCII写入文件。
例如,让我们将单词“ hello”写到文件中-
示例
1 |
|
MATLAB执行以上语句并显示以下结果。这是8位ASCII格式的字符串“ hello”的字符。
1 |
|
写入日记文件
日记文件是您的MATLAB会话的活动日志。日记功能可以在磁盘文件中创建会话的精确副本,但不包括图形。
要打开日记函数,请输入-
1 |
|
(可选)您可以提供日志文件的名称,例如-
1 |
|
关闭日记函数-
1 |
|
您可以在文本编辑器中打开日记文件。
使用底层I / O将数据导出到文本数据文件
到目前为止,我们已经导出了数字数组。但是,您可能需要创建其他文本文件,包括数字和字符数据的组合,非矩形输出文件或具有非ASCII编码方案的文件。为此,MATLAB提供了底层fprintf函数。
与在底层I / O文件活动中一样,在导出之前,您需要使用fopen函数打开或创建文件并获取文件标识符。默认情况下,fopen打开文件以进行只读访问。您应指定写入或追加的权限,例如“ w”或“ a”。
处理完文件后,需要使用**fclose(fid)**函数将其关闭。
以下示例演示了概念-
实例
创建一个脚本文件并在其中键入以下代码-
示例
1 |
|
运行文件时,它显示以下结果-
1 |
|