全网最全MATLAB学习归纳总结(建模学习必备)

MATLAB学习

编辑器常用快捷键

编辑器窗口
自动整理代码 用鼠标选中代码行,按Ctrl + I (我一般先 Ctrl+A 全选所有代码,再 Ctrl+I)
快速注释代码段 拖动鼠标选中需要注释的代码行,按Ctrl + R
快速取消注释代码段 拖动鼠标选中已经注释的代码行,按Ctrl + T
撤销改动 Ctrl + Z
取消撤销(撤销过多时使用) Ctrl + Y
多行代码增加缩进(代码段右移) 选中代码段,按 Tab键 或 Ctrl + ]
多行代码减少缩进(代码段左移) 选中代码段,按 Shift+Tab键 或 Ctrl + [
自动补全命令(记不全函数名时使用) 输入函数的前几个字母,再按Tab
查找或替换变量名、函数名 Ctrl + F
关闭当前的程序文本(.m)文件 Ctrl + W
在Editor窗体中切换 Ctrl + PageUp/PageDownCtrl+PgUp表示编辑器窗口向左切换文件Ctrl+PgDn表示编辑器窗口向右切换文件
代码调试常用快捷键:
运行 F5可保存并直接运行程序
执行选中代码段 F9
单步执行 F10
F11 表示step in,即当遇见子函数时,使用此快捷键,进入函数内部
Shift + F11 表示step out,即使用此快捷键,执行完子函数的剩余程序,并跳出子函数
设置或取消断点的方法有两种 (1) 在要设置断点的行左侧的-处单击;(2) 可按F12设置断点。
直接跳至某行 Ctrl + G, 当程序源代码很长时,可能有几百上千行。有时错误出现在很后面的地方,需要用鼠标中间的滚轮往下滚很久,才能滚到想要的那一行。这时,按Ctrl+G,就会跳出一个对话框,输入想要去的那一行的行号,就可以直接跳过去了。
强制中断程序的运行 Ctrl + C
命令窗口
再现历史命令 上下光标键↑↓ ,在命令窗口中,上下光标键可以调用Matlab最近使用过的历史命令,便于快速重新执行。 如果输入命令的前几个字母,再使用光标键,则只会选择以这些字母开始的命令。 上下箭头寻找此前和此后输入的命令,每次一条。
快速退出MATLAB Ctrl + Q
清除输入的命令 Esc
将光标处至结尾之间的代码删除 Ctrl + K
what 显示当前工作路径中的所有代码文件
type 代码文件名 显示代码文件的内容
edit 启动编辑器,并新建一个空白文件
edit 代码文件名 打开相应代码文件
whatsnew 列出MATLAB新版本更新的内容
切换窗口
Ctrl+0 命令行窗口(Command Window)
Ctrl + Shift + 0 编辑器窗口(Editor)
Ctrl + 1 历史命令窗口(Command History)
Ctrl + 2 当前工作窗口(Current Folder)
Ctrl + 3 工作空间(Workspace)

数据类型

  1. []
    矩阵

    定义
    x = [];

  2. {}
    集合

    定义
    x = {};

  3. struct()
    结构体

    定义
    x = struct();


  4. 字符数组

    定义
    x = ‘aaa’;

  5. “”
    字符串

    定义
    x = “aaa”;

注意:''"" 是不同的。

clear 变量名 :清楚变量

who 、whos : 可以查看当前我们有的所有变量。区别:,who这个命令仅仅是列出变量的名字,而whos这个命令,显示的信息更加的全面,包括数据的大小(由于matlab默认用二维数组存放,所以对于数字,就是一行一列的数组,就是单个的值),类型,占了多少空间等数据。

基础语法

MATLAB常用的运算符和特殊字符

常用运算符和符号

MATLAB常用的运算符和特殊字符如下表所示:

运算符 目的
+ 加;加法运算符
- 减;减法运算符
***** 标量和矩阵乘法运算符
.* 数组乘法运算符
^ 标量和矩阵求幂运算符
.^ 数组求幂运算符
\ 矩阵左除
/ 矩阵右除
.\ 阵列左除
./ 阵列右除
: 向量生成;子阵提取
( ) 下标运算;参数定义
[ ] 矩阵生成
. 点乘运算,常与其他运算符联合使用
续行标志;行连续运算符
, 分行符(该行结果不显示)
; 语句结束;分行符(该行结果显示)
% 注释标志
_ 引用符号和转置运算符
._ 非共轭转置运算符
= 赋值运算符

特殊变量和常量

MATLAB支持以下特殊变量和常量:

Name Meaning
ans 默认的变量名,以应答最近依次操作运算结果
eps 浮点数的相对误差
i,j 虚数单位,定义为 i2 = j2 = -1
Inf 代表无穷大
NaN 代表不定值(不是数字)
pi 圆周率

MATLAB命名变量

变量名称是由一个字母后由任意数量的字母,数字或下划线。

注意MATLAB中是区分大小写的。

变量名可以是任意长度,但是,MATLAB使用只有前N个字符,其中N是由函数namelengthmax。

保存你的工作进度

MATLAB使用save命令保存工作区中的所有变量,然后作为一个扩展名为.mat的文件,在当前目录中。

如以下例子:

save myfile

该文件可以随时重新加载,然后使用load命令。

load myfile

MATLAB变量

用一个简单的方法指定变量。例如:

x = 3	       % defining x and initializing it with a value

MATLAB注意事项:

  • 在使用变量之前,必须进行赋值。
  • 当系统接收到一个变量之后,这个变量可以被引用。
  • 当表达式返回一个结果,不分配给任何变量,系统分配给一个变量命名ans,以后可以继续使用。

多个任务可以在同一行。例如,

a = 2; b = 7; c = a * b

在MATLAB中可以使用 who 命令显示所有已经使用的变量名。

who

whos 命令则显示多一点有关变量:

  • 当前内存中的变量
  • 每个变量的类型
  • 内存分配给每个变量
  • 无论他们是复杂的变量与否
whos

clear命令删除所有(或指定)从内存中的变量(S)。

长任务

长任务可以通过使用省略号(…)延伸到另一条线路。例如,

initial_velocity = 0;
acceleration = 9.8;
time = 20;
final_velocity = initial_velocity ...
    + acceleration * time

MATLAB格式命令

默认情况下,MATLAB 四个小数位值显示数字。这就是所谓的 short format.

如果想更精确,需要使用 forma【t 命令。

长(long ) 命令格式显示小数点后16位。

format long
x = 7 + 10/3 + 5 ^ 1.2

空格格式命令回合到小数点后两位数字。例如:

format bank
daily_wage = 177.45;
weekly_wage = daily_wage * 6

MATLAB 显示大量使用指数表示法。

短格式e命令允许以指数的形式显示小数点后四位,加上指数。

例如:

format short e
4.678 * 4.9

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

ans =
   2.2922e+01 

format long e命令允许以指数的形式显示小数点后十六位,加上指数。例如:

format long e
x = pi

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

x =
     3.141592653589793e+00

format rat 格式大鼠命令给出最接近的有理表达式,从计算所得。例如:

format rat
4.678 * 4.9

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

ans =
   2063/90  

MATLAB创建向量

向量是一维数组中的数字。 MATLAB允许创建两种类型的矢量:

  • 行向量
  • 列向量

创建行向量括在方括号中的元素的集合,用空格或逗号分隔的元素。

r = [7 8 9 10 11]

创建列向量通过内附组方括号中的元素,使用分号(;)分隔的元素。

c = [7;  8;  9;  10; 11]

MATLAB创建矩阵

矩阵是一个二维数字阵列。

在MATLAB中,创建一个矩阵每行输入空格或逗号分隔的元素序列,最后一排被划定一个分号。

例如,下面创建了一个3×3的矩阵:

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

MATLAB常用命令

MATLAB管理会话的命令

MATLAB提供管理会话的各种命令。如下表所示:

命令 目的/作用
clc 清除命令窗口。
clear 从内存中删除变量。
exist 检查存在的文件或变量。
global 声明变量为全局。
help 搜索帮助主题。
lookfor 搜索帮助关键字条目。
quit 停止MATLAB。
who 列出当前变量。
whos 列出当前变量(长显示)。

MATLAB的系统命令

使用MATLAB的时候有一些系统命令可以方便我们的操作,如在当前的工作区中可以使用系统命令保存为一个文件、加载文件、显示日期、列出目录中的文件和显示当前目录等。

下表列举了一些MATLAB常用的系统相关的命令:

命令 目的/作用
cd 改变当前目录。
date 显示当前日期。
delete 删除一个文件。
diary 日记文件记录开/关切换。
dir 列出当前目录中的所有文件。
load 负载工作区从一个文件中的变量。
path 显示搜索路径。
pwd 显示当前目录。
save 保存在一个文件中的工作区变量。
type 显示一个文件的内容。
what 列出所有MATLAB文件在当前目录中。
wklread 读取.wk1电子表格文件。

MATLAB输入和输出命令

MATLAB提供了以下输入和输出相关的命令:

命令 作用/目的
disp 显示一个数组或字符串的内容。
fscanf 阅读从文件格式的数据。
format 控制屏幕显示的格式。
fprintf 执行格式化写入到屏幕或文件。
input 显示提示并等待输入。
; 禁止显示网版印刷

fscanf和fprintf命令的行为像C scanf和printf函数。他们支持格式如下代码:

格式代码 目的/作用
%s 输出字符串
%d 输出整数
%f 输出浮点数
%e 显示科学计数法形式
%g %f 和%e 的结合,根据数据选择适当的显示方式

用于数字显示格式的函数有以下几种形式:

Format函数 最多可显示
format short 四位十进制数(默认)
format long 15位定点表示
format short e 五位浮点表示
format long e 15位浮点表示
format bank 两个十进制数字
format + 正,负或零
format rat 有理数近似
format compact 变量之间没有空行
format loose 变量之间有空行

MATLAB向量,矩阵和阵列命令

下表列出了MATLAB用于工作数组、矩阵和向量的各种命令:

命令 作用/目的
cat 连接数组
find 查找非零元素的索引
length 计算元素数量
linspace 创建间隔向量
logspace 创建对数间隔向量
max 返回最大元素
min 返回最小元素
prod 计算数组元素的连乘积
reshape 重新调整矩阵的行数、列数、维数
size 计算数组大小
sort 排序每个列
sum 每列相加
eye 创建一个单位矩阵
ones 生成全1矩阵
zeros 生成零矩阵
cross 计算矩阵交叉乘积
dot 计算矩阵点积
det 计算数组的行列式
inv 计算矩阵的逆
pinv 计算矩阵的伪逆
rank 计算矩阵的秩
rref 将矩阵化成行最简形
cell 创建单元数组
celldisp 显示单元数组
cellplot 显示单元数组的图形表示
num2cell 将数值阵列转化为异质阵列
deal 匹配输入和输出列表
iscell 判断是否为元胞类型

MATLAB绘图命令

MATLAB提供了大量的命令绘制图表。下表列出了一些常用的命令绘制:

命令 作用/目的
axis 人功选择坐标轴尺寸
fplot 智能绘图功能
grid 显示网格线
plot 生成XY图
print 打印或绘图到文件
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运算符

MATLAB 的基本运算类型:

  • 算术运算符
  • 逻辑运算符
  • 关系运算符
  • 位运算
  • 集合运算

算术运算符

MATLAB 的工作针对的是整个矩阵和阵列,它允许两种不同类型的算术运算:

  • 矩阵算术运算
  • 阵列算术运算
运算符 描述
+ 加法或一元加号。A + B将A和B。 A和B必须具有相同的尺寸,除非一个人是一个标量。一个标量,可以被添加到任何大小的矩阵。
- 减法或一元减号。A - B,减去B从A和B必须具有相同的大小,除非是一个标量。可以从任意大小的矩阵中减去一个标量。
* 矩阵乘法;是一个更精确的矩阵A和B的线性代数积,矩阵乘法对于非纯量A和B,列一个数必须等于B.标量可以乘以一个任意大小的矩阵的行数。
.* 数组的乘法;A.*B是数组A和B的元素积,A和B必须具有相同的大小,除非A、B中有一个是标量。
/ 斜线或矩阵右除法;B/A与B * inv(A)大致相同。更确切地说: B/A = (A’B’)’
./ 矩阵右除法;矩阵A与矩阵B相应元素相除(A、B为同纬度的矩阵)
.\ 反斜杠或矩阵左除;如果A是一个方阵,AB是大致相同的INV(A)* B,除非它是以不同的方式计算。如果A是一个n*n的矩阵,B是一个n组成的列向量,或是由若干这样的列的矩阵,则X = AB 是方程 AX = B ,如果A严重缩小或者几乎为单数,则显示警告消息。
. 数组左除法;A. B是元素B(i,j)/A(i,j)的矩阵。A和B必须具有相同的大小,除非其中一个是标量。
^ 矩阵的幂。X^P是X到幂P,如果p是标量;如果p是一个整数,则通过重复平方计算功率。如果整数为负数,X首先反转。对P值的计算,涉及到特征值和特征向量,即如果[ D ] = V,EIG(x),那么X^P = V * D.^P / V。
.^ A.^B:A的每个元素的B次幂(A、B为同纬度的矩阵)
矩阵的转置;A’是复数矩阵A的线性代数转置,这是复共轭转置。
.' 数组的转置;A’是数组A的转置,对于复数矩阵,这不涉及共轭。

MATLAB逻辑运算

除了在上述的逻辑运算符,MATLAB 提供下面的命令或函数用于同样的目的:

函数 描述
and(A, B) 查找数组或标量输入的逻辑和;执行所有输入数组A,B等的逻辑AND,并返回包含设置为逻辑1(真)或逻辑0(假)的元素的数组。如果所有输入数组在同一个数组位置都包含一个非零元素,那么输出数组的一个元素将被设置为1;否则,该元素设置为0。
not(A) 查找数组或标量输入的逻辑NOT;执行输入数组A的逻辑NOT,并返回包含设置为逻辑1(真)或逻辑0(假)的元素的数组。如果输入数组在同一个数组位置包含一个零值元素,那么输出数组的一个元素将被设置为1;否则,该元素设置为0。
or(A, B) 查找数组或标量输入的逻辑或; 执行所有输入数组A,B等的逻辑或,并返回包含设置为逻辑1(真)或逻辑0(假)的元素的数组。如果任何输入数组在同一个数组位置包含一个非零元素,则输出数组的一个元素设置为1;否则,该元素设置为0。
xor(A, B) 逻辑异或; 对数组A和B的相应元素执行异或运算。如果A(i,j,…)或B(i,j)…,则所得到的元素C(i,j,…) j,…),但不是两者都是非零的。
all(A) 确定数组A的所有数组元素是否为非零或真。如果A是向量,则如果所有元素都为非零,则所有(A)返回逻辑1(真),如果一个或多个元素为零,则返回逻辑0(假)。如果A是非空矩阵,则所有(A)将A的列视为向量,返回逻辑1和0的行向量。如果A是空的0x0矩阵,则全部(A)返回逻辑1(真)。如果A是一个多维数组,则所有(A)都沿着第一个非指定维度行事,并返回一个逻辑值数组。 该尺寸的尺寸减小到1,而所有其他尺寸的尺寸保持不变。这个维度的大小减少到1,而其他所有维度的尺寸保持不变。
all(A, dim) 通过标量dim沿着维数A的维度进行测试。
any(A) 确定数组元素是否为非零;测试数组中不同维度的元素是否为非零数字,或是逻辑1(真)。 任何函数忽略NaN(不是数字)的条目。如果A是向量,任何(A)如果A的任何元素是非零数或逻辑1(真),则返回逻辑1(真),如果所有元素为零,则返回逻辑0(假)。如果A是非空矩阵,则任何(A)将A的列视为向量,返回逻辑1和0的行向量。如果A是一个空的0x0矩阵,任何(A)返回逻辑0(假)。如果A是一个多维数组,则任何(A)都沿着第一个非整数维进行操作,并返回一个逻辑值数组。该维度的尺寸减小到1,而所有其他维度的尺寸保持不变。
any(A,dim) 通过标量dim沿着维数A的维度进行测试。
false 逻辑0(假)
false(n) 是逻辑0的n×n矩阵
false(m, n) 是逻辑0的一个m×n矩阵。
false(m, n, p, …) 是由逻辑0的逐列逐列数组。
false(size(A)) 是与数组A大小相同的逻辑零数组。
false(…,‘like’,p) 是与逻辑阵列p相同的数据类型和稀疏性的逻辑零数组。
ind = find(X) 查找非零元素的索引和值;定位数组X的所有非零元素,并返回向量中这些元素的线性索引。 如果X是行向量,则返回的向量是行向量; 否则返回列向量。如果X不包含非零元素或是空数组,则返回一个空数组。
ind = find(X, k)ind = find(X, k, ‘first’) 最多返回与X的非零条目相对应的前k个索引。k必须是正整数,但它可以是任何数字数据类型。
ind = find(X, k, ‘last’) 最多返回与X的非零条目相对应的最后k个索引。
[row,col] = find(X, …) 返回矩阵X中非零条目的行和列索引。使用稀疏矩阵时,此语法特别有用。 如果X是N>2的N维数组,col包含列的线性索引。
[row,col,v] = find(X, …) 返回X中非零条目的列或行向量v,以及行和列索引。如果X是逻辑表达式,则v是逻辑数组。 输出v包含通过评估表达式X获得的逻辑数组的非零元素。
islogical(A) 确定输入是否为逻辑数组;如果A是逻辑数组,返回true,否则返回false。 如果A是从逻辑类派生的类的实例,它也返回true。
logical(A) 将数值转换为逻辑;返回一个可用于逻辑索引或逻辑测试的数组。
true 逻辑1(真)
true(n) 是一个n×n逻辑矩阵。
true(m, n) 是一个mxn逻辑矩阵。
true(m, n, p, …) 是由逻辑1的逐列逐列数组。
true(size(A)) 是与数组A大小相同的逻辑数组。
true(…,‘like’, p) 是与逻辑阵列p相同的数据类型和稀疏性的逻辑阵列。

集合操作符

MATLAB提供各种功能集合运算,如集,交集和测试组成员等。

下表是对一些常用的设置操作的例举与描述:

详细例子

函数 描述
intersect(A,B) 设置两个数组的交集;返回A和B所共有的值。返回的值按排序顺序排列。
intersect(A,B,‘rows’) 将A和B的每一行作为单个实体处理,并返回A和B的公共行。返回的矩阵的行按排序顺序排列。
ismember(A,B) 返回与A大小相同的数组,包含1(true),其中A的元素在其他地方的B中找到,它返回0(false)。
ismember(A,B,‘rows’) 将A和B的每一行作为单个实体处理,并返回一个包含1(true)的向量,其中矩阵A的行也是B的行;否则,它返回0(false)。
issorted(A) 如果A的元素按排序顺序返回逻辑1(true),否则返回逻辑0(false)。输入A可以是向量,也可以是N-by-1或1-by-N的字符串数组。如果A和sort(A)的输出相等,则A被认为是排序的。
issorted(A, ‘rows’) 如果二维矩阵A的行按排序顺序返回逻辑1(真),否则返回逻辑0(假)。 如果A和排序(A)的输出相等,则认为矩阵A被排序。
setdiff(A,B) 设置两个数组的差值;返回不在B中的值。返回数组中的值按排序顺序排列。
setdiff(A,B,‘rows’) 将每一行A和B行作为单个实体处理,并返回一个不在B中的行。返回的矩阵的行按排序顺序排列。“行”选项不支持单元格数组。
setxor 设置两个数组的异或
union 设置两个数组的并集
unique 数组中唯一的值

语法结构

MATLAB if…end 语句

一个 if 语句和一个布尔表达式后跟一个或多个语句,由 end 语句分隔,就是一个 if … end 语句

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

a = 10;
% check the condition using if statement 
   if a < 20 
   % if condition is true then print the following 
       fprintf('a is less than 20
' );
   end
fprintf('value of a is : %d
', a);

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

a is less than 20
value of a is : 10

MATLAB if…else…end 语句

在MATLAB的 if…else…end 语句中,if 语句后面可以跟一个可选择的 else 语句,当执行的表达式为假的时候,执行 else 语句。

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

a = 100;
% check the boolean condition 
   if a < 20 
        % if condition is true then print the following 
       fprintf('a is less than 20
' );
   else
       % if condition is false then print the following 
       fprintf('a is not less than 20
' );
   end
   fprintf('value of a is : %d
', a);

编译和执行上述代码,产生下述结果:

a is not less than 20
value of a is : 100

MATLAB if…elseif…elseif…else…end 语句

MATLAB 的 if…elseif…elseif…else…end 语句中 if 语句可以跟随一个(或多个)可选的 elseif… else 语句,这是非常有用的,可以用来对各种条件进行测试。

使用 if… elseif…elseif…else 语句,要注意以下几点:

  • 一个 if 可以有零个或多个 else,但是它必须跟在 elseif 后面(即只有 elseif 存在才会有 else)。
  • 一个 if 可以有零个或多个 elseif ,必须出现else。
  • 一旦 elseif 匹配成功,余下的 elseif 将不会被测试。

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

a = 100;
%check the boolean condition 
   if a == 10 
         % if condition is true then print the following 
       fprintf('Value of a is 10
' );
    elseif( a == 20 )
       % if else if condition is true 
       fprintf('Value of a is 20
' );
    elseif a == 30 
        % if else if condition is true  
       fprintf('Value of a is 30
' );
   else
        % if none of the conditions is true '
       fprintf('None of the values are matching
');
   fprintf('Exact value of a is: %d
', a );
   end

编译和执行上述代码,产生如下结果:

None of the values are matching
Exact value of a is: 100

MATLAB嵌套if语句

在MATLAB中嵌套if语句始终是合法的,也就是说可以使用一个嵌套的 if-else语句 if 或 elseif 语句在另一个 if 或 elseif 语句。

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

a = 100;
b = 200;
    % check the boolean condition 
   if( a == 100 )
   
       % if condition is true then check the following 
       if( b == 200 )
       
          % if condition is true then print the following 
          fprintf('Value of a is 100 and b is 200
' );
       end
       
   end
   fprintf('Exact value of a is : %d
', a );
   fprintf('Exact value of b is : %d
', b );

运行该文件,它显示的结果如下:

Value of a is 100 and b is 200
Exact value of a is : 100
Exact value of b is : 200

MATLAB switch语句

MATLAB中 switch 块有条件地执行一组语句,这些语句是从几个选项里选择执行的,其中每个选项涵盖了一个 case 语句。

请记住:

  • 计算 switch_expression 是一个标量或字符串。
  • 计算 case_expression 是标量,标量或字符串的字符串或单元阵列。

switch 块的功能是测试每个 case ,直到被测试的其中一个 case 是 true 。

case 是 true 的情况如下:

  • 对于数字,eq(case_expression,switch_expression).
  • 对于字符串,strcmp(case_expression,switch_expression).
  • 对于对象,支持 eq 函数,eq(case_expression,switch_expression).
  • 对于单元阵列case_expression的,在单元阵列与switch_expression相匹配的元素中的至少一个,如上文所定义的数字,字符串和对象。

当上述有一个情况是 true,MATLAB 就执行与之相应的语句,然后不再执行以后的语句,直接退出 switch 块。

otherwise 块是可选的,任何情况下,只有当真正执行。

详细例子

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

grade = 'B';
   switch(grade)
   case 'A' 
      fprintf('Excellent!
' );
   case 'B' 
       fprintf('Well done
' );
   case 'C' 
      fprintf('Well done
' );
   case 'D'
      fprintf('You passed
' );
   
   case 'F' 
     fprintf('Better try again
' );
     
   otherwise
     fprintf('Invalid grade
' );
   end

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

Well done
Your grade is  B

MATLAB 嵌套switch语句

在 MATLAB 中嵌套 switch 语句是可能的,可以在 switch 一部分外嵌套 switch 语句序列。即使 case 常量的内部和外部的 switch 含有共同的值,也不算冲突出现。

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

a = 100;
b = 200;
switch(a) 
      case 100 
         fprintf('This is part of outer switch %d
', a );
         switch(b) 
            case 200
               fprintf('This is part of inner switch %d
', a );
         end
end
fprintf('Exact value of a is : %d
', a );
fprintf('Exact value of b is : %d
', b );

当运行该文件时,它会显示:

This is part of outer switch 100
This is part of inner switch 100
Exact value of a is : 100
Exact value of b is : 200

MATLAB while循环

MATLAB的 while 循环会重复执行 whileend 语句间的运算式,只要表达式为 true

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

a = 10;
% while loop execution 
while( a < 20 )
  fprintf('value of a: %d
', a);
  a = a + 1;
end

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

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19

MATLAB for循环

MATLAB中 for 循环是一个重复的控制结构,可以有效地写一个循环,只是执行的次数是特定的。

for 循环的值有下述三种形式之一:

格式 描述
initval:endval 将索引变量从初始到终值递增1,并重复执行程序语句,直到索引值大于终值。
initval:step:endval 按每次迭代中的值步骤递增索引, 或在步骤为负值时递减。
valArray 在每个迭代 valArrayon 数组的后续列中创建列向量索引。例如, 在第一次迭代中, index = valArray (:, 1),循环执行最大 n 次, 其中 n 是 valArray 的列数,由 numel (valArray, 1,:) 给出。输入 valArray 可以是任何 MATLAB 数据类型, 包括字符串、单元格数组或结构。

例子 1

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

for a = 10:20 
  fprintf('value of a: %d
', a);
end

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

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19
value of a: 20

例子 2

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

for a = 1.0: -0.1: 0.0
   disp(a)
end

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

1

    0.9000

    0.8000

    0.7000

    0.6000

    0.5000

    0.4000

    0.3000

    0.2000

    0.1000

     0

例子3

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

for a = [24,18,17,23,28]
   disp(a)
end

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

    24

    18

    17

    23

    28

MATLAB嵌套循环

MATLAB嵌套循环允许使用一个循环的另一循环内。

我们将使用一个嵌套循环来把所有从1到100的素数显示出来。

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

for i=2:100
       for j=2:100
        if(~mod(i,j)) 
            break; % if factor found, not prime
        end 
      end
      if(j > (i/j))
          fprintf('%d is prime
', i);
      end
end

然后运行该文件,显示如下结果:

2 is prime
3 is prime
5 is prime
7 is prime
11 is prime
13 is prime
17 is prime
19 is prime
23 is prime
29 is prime
31 is prime
37 is prime
41 is prime
43 is prime
47 is prime
53 is prime
59 is prime
61 is prime
67 is prime
71 is prime
73 is prime
79 is prime
83 is prime
89 is prime
97 is prime

MATLAB break语句

MATLAB中 break 语句用于终止 for 或 while 循环的执行,当在循环体内执行到该语句的时候,程序将会跳出循环,继续执行循环语句的下一语句。

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

a = 10;
% while loop execution 
 while (a < 20 )
      fprintf('value of a: %d
', a);
      a = a+1;
      if( a > 15)
         % terminate the loop using break statement 
          break;
      end 
  end

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

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15

MATLAB continue语句

MATLAB中 continue 语句控制跳过循环体的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所剩下的语句,继续下一次循环。

MATLAB中的 continue 语句跟 break 语句有点像,但 break 是强制终止,continue 强制下一次迭代的循环发生,跳跃中的任何代码之间。

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

a = 10;
%while loop execution 
while a < 20
  if a == 15
      % skip the iteration 
      a = a + 1;
      continue;
  end
  fprintf('value of a: %d
', a);
  a = a + 1;     
end

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

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 16
value of a: 17
value of a: 18
value of a: 19

MATLAB向量

向量

我们可以创建两种 MATLAB 向量类型:

  • 行向量
  • 列向量

MATLAB 行向量:

创建行向量括在方括号中的元素的集合,用空格逗号分隔的元素。

r = [7 8 9 10 11]

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

r =
  Columns 1 through 4
       7              8              9             10       
  Column 5
      11    

MATLAB 列向量:

创建列向量括在方括号中的元素的集合,使用分号来分隔的元素。

c = [7;  8;  9;  10; 11]

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

c =
       7       
       8       
       9       
      10       
      11  
 

引用向量元素

可以参照的向量元素的几种方式中的一种或多种。ith 一个矢量v的分量被称为v(i)。

例如:

v = [ 1; 2; 3; 4; 5; 6];	% creating a column vector of 6 elements
v(3)

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

ans =
     3 

当引用一个冒号,一个向量,其例如为v(,该载体上的所有组件的被列出。

例如:

v = [ 1; 2; 3; 4; 5; 6];	% creating a column vector of 6 elements
v(:)

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

ans =
     1
     2
     3
     4
     5
     6

MATLAB允许你选择一个范围从向量的元素。

在下面的例子中,我们创建了一个行向量rv 9个元素,我们将引用元素3至7写rv(3:7),并创建一个新的向量名为sub_rv。

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

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

sub_rv =
     3     4     5     6     7

MATLAB向量的加法和减法

在 MATLAB 中当进行两个向量的加法与减法的时候,这两个向量的元素必须有相同的类型和数量。

MATLAB中创建一个脚本文件,代码如下:

A = [7, 11, 15, 23, 9];
B = [2, 5, 13, 16, 20];
C = A + B;
D = A - B;
disp(C);
disp(D);

运行该文件,产生下述结果:

9    16    28    39    29
5     6     2     7   -11

MATLAB标量向量乘法

MATLAB标量乘法:让一个数字乘以一个向量。

标量乘法会产生相同类型的新的一个向量,原先的向量的每个元素乘以数量。

MATLAB中建立一个脚本文件,代码如下:

v = [ 12 34 10 8];
m = 5 * v

运行该文件,产生下述结果:

m =
    60   170    50    40

MATLAB转置向量

MATLAB中转置操作能够将一个行向量改变成一个列向量,反之亦然。

MATLAB中转置操作使用一个单引号()来表示。

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

r = [ 1 2 3 4 ];
tr = r';
v = [1;2;3;4];
tv = v';
disp(tr); disp(tv);

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

     1
     2
     3
     4

     1     2     3     4

MATLAB追加向量

MATLAB 允许在原有的向量中附加向量,共同创造新的向量。

如果有两个行向量 r1 和 r2 这两个行向量中各有 n 和 m 个元素,现在创建行向量 r 并将n和m个元素都放在行向量 r 中,通过附加这些载体,编写:

r = [r1,r2]

通过追加这两个向量,向量r2的,也可以建立一个矩阵R,矩阵的第二行编写如下:

r = [r1;r2]

要注意的是,要完成上述操作,上述两个载体中的元素的数量应该相同。

当然,可以附加两个列向量 c1 和 c2 的 n 和 m 的元素个数。要创建一个列向量 c 将 n 加 m 个元素放入其中,通过附加这些载体,编写:

c = [c1; c2]

还可以创建一个矩阵c追加这两个向量;向量c2将第二列的矩阵:

c = [c1, c2]

同样要注意,完成上述操作,上述两个载体中的元素的数量应该相同。

详细例子

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

r1 = [ 1 2 3 4 ];
r2 = [5 6 7 8 ];
r = [r1,r2]
rMat = [r1;r2]
 
c1 = [ 1; 2; 3; 4 ];
c2 = [5; 6; 7; 8 ];
c = [c1; c2]
cMat = [c1,c2]

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

r =
     1     2     3     4     5     6     7     8
rMat =
     1     2     3     4
     5     6     7     8
c =
     1
     2
     3
     4
     5
     6
     7
     8
cMat =
     1     5
     2     6
     3     7
     4     8

MATLAB向量的模

向量 v 中的元素 v1, v2, v3, …, vn,下式给出其幅度:

|v| = √(v12 + v22 + v32 + … + vn2)

MATLAB中需要采按照下述步骤进行向量的模的计算:

  1. 采取的矢量及自身的积,使用数组相乘(*)。这将产生一个向量sv,其元素是向量的元素的平方和V.

    sv = v.*v;

  2. 使用求和函数得到 v。这也被称为矢量的点积向量的元素的平方的总和V.

    dp= sum(sv);

  3. 使用sqrt函数得到的总和的平方根,这也是该矢量的大小V.

    mag = sqrt(s);

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

v = [1: 2: 20];
sv = v.* v;     %the vector with elements 
                % as square of v's elements
dp = sum(sv);    % sum of squares -- the dot product
mag = sqrt(dp);  % magnitude
disp('Magnitude:'); disp(mag);

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

Magnitude:
   36.4692

MATLAB向量点积

MATLAB 中两个向量的点积 a = (a1, a2, …, an) and b = (b1, b2, …, bn) 由以下给定:

a.b = ∑(ai.bi)

下述函数可以计算两个向量 a 和 b 的点积:

dot(a, b);

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

v1 = [2 3 4];
v2 = [1 2 3];
dp = dot(v1, v2);
disp('Dot Product:'); disp(dp);

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

Dot Product:
    20

MATLAB等差元素向量

当一个向量中的元素过多,同时向量的各元素有等差的规律,此时采用直接输入法将过于繁琐。针对该种情况 ,可以使用冒号(:) 来生成等差元素向量。

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

v = [1: 2: 20];
sqv = v.^2;
disp(v);disp(sqv);

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

1     3     5     7     9    11    13    15    17    19
1     9    25    49    81   121   169   225   289   361

MATLAB矩阵

矩阵

在MATLAB中创建矩阵有以下规则:

  • 矩阵元素必须在 “[ ]” 内;
  • 矩阵的同行元素之间用空格(或 “,”)隔开;
  • 矩阵的行与行之间用 “;”(或回车符)隔开;
  • 矩阵的元素可以是数值、变量、表达式或函数;
  • 矩阵的尺寸不必预先定义。

下面的例子中我们创建了一个4×5的矩阵:

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

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

a =
     1     2     3     4     5
     2     3     4     5     6
     3     4     5     6     7
     4     5     6     7     8

MATLAB引用一个矩阵的元素

如果要引用 mth 行和 nth 列的一个元素,写法如下:

mx(m, n);

例如,参阅第2行和第5列中的元素的矩阵,所创建的最后一节中,我们输入:

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

MATLAB将执行上述语句,并返回结果:

ans =
     6

引用m列中的所有元素,我们A型(m)。

接下来我们要从矩阵 a 的第4行的元素开始建立一个列向量 v :

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

MATLAB将执行上述语句,并返回结果:

v =
     4
     5
     6
     7

当然也可以选择第 n 列的 m 个元素,对于这一点,写法如下:

a(:,m:n)

我们建立一个较小的矩阵中的元素,第二和第三列:

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

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

ans =
     2     3
     3     4
     4     5
     5     6

用相同的方式,则可以建立一个子矩阵的一个子部分的矩阵。

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

MATLAB将执行上述语句,并返回结果:

ans =
     2     3
     3     4
     4     5
     5     6

用相同的方式,则可以创建一个子矩阵的一个子部分的矩阵。

例如,让我们创建一个子矩阵内部子部分的:

3     4     5     
4     5     6     

下述写法可以达到该目的:

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

MATLAB将执行上述语句,并返回结果:

sa =
     3     4     5
     4     5     6

MATLAB删除行或列矩阵

可以删除整行或整列的矩阵,只要分配一组空方括号 [ ] 给该行或列。

基本上,[ ] 表示一个空数组。

在下述例子中我们删除第四行:

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

MATLAB将执行上述语句,并返回结果:

a =
     1     2     3     4     5
     2     3     4     5     6
     3     4     5     6     7

接下来,我们删除第五列:

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

MATLAB将执行上述语句,并返回结果:

a =
     1     2     3     4
     2     3     4     5
     3     4     5     6
     4     5     6     7

详细例子

在本例中,我们会建立一个3-3的矩阵 m,并把矩阵 m 中的第二行和第三行复制两次,这样就能够建立一个4×3的矩阵。

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

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

运行该文件,显示结果:

new_mat =
     4     5     6
     7     8     9
     4     5     6
     7     8     9

MATLAB矩阵的加法和减法

MATLAB矩阵可以有加法和减法的操作,但是两个操作数的矩阵必须具有相同的行数和列数。

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

a = [ 1 2 3 ; 4 5 6; 7 8 9];
b = [ 7 5 6 ; 2 0 8; 5 7 1];
c = a + b
d = a - b

运行该文件,显示结果:

c =
     8     7     9
     6     5    14
    12    15    10
d =
    -6    -3    -3
     2     5    -2
     2     1     8

MATLAB除法(左,右)矩阵

MATLAB 中有两种矩阵除法符号:即左除“\” 和右除 “/” 。

注意:这两个操作数的矩阵必须具有相同的行数和列数。

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

a = [ 1 2 3 ; 4 5 6; 7 8 9];
b = [ 7 5 6 ; 2 0 8; 5 7 1];
c = a / b
d = a  b

运行该文件,显示结果:

c =

  -0.52542   0.68644   0.66102
  -0.42373   0.94068   1.01695
  -0.32203   1.19492   1.37288

d =

  -3.27778  -1.05556  -4.86111
  -0.11111   0.11111  -0.27778
   3.05556   1.27778   4.30556

MATLAB矩阵标量操作

MATLAB矩阵的标量操作就是加,减,乘或者除以一个数字矩阵。

添加到具有原始矩阵的每个元素的行和列,相减,乘或除以数相同数量的标量运算会产生一个新的矩阵。

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

a = [ 10 12 23 ; 14 8 6; 27 8 9];
b = 2;
c = a + b
d = a - b
e = a * b
f = a / b

运行该文件,显示结果:

c =
    12    14    25
    16    10     8
    29    10    11
d =
     8    10    21
    12     6     4
    25     6     7
e =
    20    24    46
    28    16    12
    54    16    18
f =
    5.0000    6.0000   11.5000
    7.0000    4.0000    3.0000
   13.5000    4.0000    4.5000

MATLAB矩阵的转置

MATLAB中矩阵的转置操作是用一个单引号(’)表示的,该操作能够切换一个矩阵的行和列。

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

a = [ 10 12 23 ; 14 8 6; 27 8 9]
b = a'

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

a =
    10    12    23
    14     8     6
    27     8     9
b =
    10    14    27
    12     8     8
    23     6     9

MATLAB串联矩阵

MATLAB中使用一对中括号“[ ]”,能够将两个矩阵连接起来,创建出一个新矩阵。

MATLAB串联矩阵的两种类型:

  • 水平串联:要进行连接的两个矩阵是使用逗号 “,” 分隔开的。
  • 垂直串联:要进行连接的两个矩阵是使用分号 “;” 分隔开的。

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

a = [ 10 12 23 ; 14 8 6; 27 8 9]
b = [ 12 31 45 ; 8 0 -9; 45 2 11]
c = [a, b]
d = [a; b]

运行该文件,显示结果:

a =
    10    12    23
    14     8     6
    27     8     9
b =
    12    31    45
     8     0    -9
    45     2    11
c =
    10    12    23    12    31    45
    14     8     6     8     0    -9
    27     8     9    45     2    11
d =
    10    12    23
    14     8     6
    27     8     9
    12    31    45
     8     0    -9
    45     2    11

MATLAB矩阵乘法

MATLAB中如果有两个矩阵 A 和 B ,其中 A 是 mxn 矩阵,B 是 nxp 矩阵,那么他们相乘能够产生一个 mxn 的矩阵 C。

MATLAB矩阵乘法只发生在矩阵 A 的列数的数量等于矩阵 B 的行数的矩阵乘法中,具有相应的列中的第二矩阵乘以第一矩阵中的行的元素。

比如,第(i,j)个位置中的每个元素,在所得的矩阵 C 中,是在第 i 行的第一矩阵具有第二矩阵的第 j 列中的相应元素的产品的元素的总和。

在 MATLAB 中,矩阵乘法使用*运算符。

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

a = [ 1 2 3; 2 3 4; 1 2 5]
b = [ 2 1 3 ; 5 0 -2; 2 3 -1]
prod = a * b

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

a =
     1     2     3
     2     3     4
     1     2     5
b =
     2     1     3
     5     0    -2
     2     3    -1
prod =
    18    10    -4
    27    14    -4
    22    16    -6

MATLAB矩阵的行列式

MATLAB要计算对应矩阵行列式的值的指令为:d=det(A),该指令返回矩阵 A 的行列式,并把所得值赋给 d。若 A 仅包含整数项,则该结果 d 也是一个整数。

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

a = [ 1 2 3; 2 3 4; 1 2 5]
det(a)

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

a =
     1     2     3
     2     3     4
     1     2     5
ans =
    -2

MATLAB逆矩阵

MATLAB中矩阵A的逆矩阵被记为 A−1 ,下面的关系成立:

AA−1 = A−1A = 1

MATLAB中不是每个矩阵都有逆矩阵的,比如一个矩阵的行列式是零的话,则矩阵的逆就不存在,这样的矩阵是奇异的。

MATLAB中,逆矩阵的计算使用 inv 函数:逆矩阵A是inv(A).

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

a = [ 1 2 3; 2 3 4; 1 2 5]
inv(a)

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

a =
     1     2     3
     2     3     4
     1     2     5
ans =
   -3.5000    2.0000    0.5000
    3.0000   -1.0000   -1.0000
   -0.5000         0    0.5000

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 命令提示符访问,这就是所谓的基础工作区的变量。

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

函数语句的语法是:

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全局变量

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

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

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

详细例子

创建一个函数文件名为 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使用多种格式打开数据。本章将要介绍MATLAB中数据的导入。

MATLAB中导入数据的方式有两种,分别是在命令行通过代码把数据导进去和通过MATLAB的数据导入向导导入数据。本节将为大家介绍第一种数据导入方法。

MATLAB中导入数据意味着从外部文件加载数据。importdata 函数允许加载各种数据的不同格式的文件。它具有以下五种形式:

S.N. 函数&说明
1 **A = importdata(filename)**将数据从文件名所表示的文件中加载到数组 A 中。
2 A = importdata(’-pastespecial’) 从系统剪贴板加载数据,而不是从文件加载数据。
3 A = importdata(___, delimiterIn) 将 delimiterIn 解释为 ASCII 文件、文件名或剪贴板数据中的列分隔符。可以将 delimiterIn 与上述语法中的任何输入参数一起使用。
4 **A = importdata(___, delimiterIn, headerlinesIn)**从 ASCII 文件、文件名或剪贴板加载数据,并从 lineheaderlinesIn+1 开始读取数字数据。
5 **[A, delimiterOut, headerlinesOut] = importdata(___)**在分隔符输出中返回检测到的分隔符字符,并使用前面语法中的任何输入参数检测headerlinesOut 中检测到的标题行数。

示例 1

该例中我们将加载和显示图像文件。

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

filename = 'smile.jpg';
A = importdata(filename);
image(A);

示例 2

本例中,我们在MATLAB中导入文本文件,并指定分隔符和列标题。

我们建立以空格分隔的 ASCII 文件的列标题,文件名为 weeklydata.txt。

文本文件 weeklydata.txt 内容如下:

SunDay  MonDay  TuesDay  WednesDay  ThursDay  FriDay  SatureDay
95.01   76.21   61.54    40.57       55.79    70.28   81.53
73.11   45.65   79.19    93.55       75.29    69.87   74.68
60.68   41.85   92.18    91.69       81.32    90.38   74.51
48.60   82.14   73.82    41.03       0.99     67.22   93.18
89.13   44.47   57.63    89.36       13.89    19.88   46.60

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

filename = 'weeklydata.txt';
delimiterIn = ' ';
headerlinesIn = 1;
A = importdata(filename,delimiterIn,headerlinesIn);
% View data
for k = [1:7]
   disp(A.colheaders{1, k})
   disp(A.data(:, k))
   disp(' ')
end

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

SunDay
   95.0100
   73.1100
   60.6800
   48.6000
   89.1300
 
MonDay
   76.2100
   45.6500
   41.8500
   82.1400
   44.4700
 
TuesDay
   61.5400
   79.1900
   92.1800
   73.8200
   57.6300

WednesDay
   40.5700
   93.5500
   91.6900
   41.0300
   89.3600
 
ThursDay
   55.7900
   75.2900
   81.3200
    0.9900
   13.8900
 
FriDay
   70.2800
   69.8700
   90.3800
   67.2200
   19.8800

SatureDay
   81.5300
   74.6800
   74.5100
   93.1800
   46.6000

示例 3

本例讲的是如何从剪贴板导入数据到MATLAB。

复制到剪贴板中的以下几行:

Mathematics is simple

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

A = importdata('-pastespecial')

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

A = 
    'Mathematics is simple'

MATLAB低级别的文件I / O

MATLAB 中 importdata 函数是一个高层次的函数。如果要处理低级别的文件,在MATLAB中的 I / O 功能允许读取或写入数据到一个文件中的大部分控制权。但是,使用这些功能的要求是这些文件需要具有更加详细的信息,这样能够提高工作效率。

MATLAB字节或字符的读取和写入操作提供了以下功能:

函数 描述
fclose 关闭一个或全部已打开的文件
feof 测试文件结尾
ferror 有关文件I / O错误的信息
fgetl 从文件读取行, 删除换行符
fgets 从文件读取行, 保留换行符
fopen 打开文件, 或获取有关打开的文件的信息
fprintf 将数据写入文本文件
fread 从二进制文件读取数据
frewind 将文件位置指示器移动到打开文件的开头
fscanf 从文本文件读取数据
fseek 移动到文件中的指定位置
ftell 获得打开文件的位置
fwrite 将数据写入二进制文件

MATLAB导入文本数据文件与低级别的I/O

MATLAB 低层次的导入文本数据文件由以下函数实现:

  • fscanf 函数读取文本或 ASCII 文件格式的数据。
  • fgetl 函数和 fgets 函数读取一行的文件,换行符分隔每一行。
  • fread 函数读出的数据流的字节或位的级别。

具体例子

我们有 myfile.txt 文本数据文件保存在我们的工作目录。该文件存储3个月的降雨量数据,分别是2012年的6月,7月和8月。

myfile.txt 包含重复的数据集的时间,一个月的雨量测量五个数据项。头数据存储数个月的中号,所以我们有M组测量。

该文件内容如下:

Rainfall Data
Months: June, July, August
 
M=3
12:00:00
June-2012
17.21  28.52  39.78  16.55 23.67
19.15  0.35   17.57  NaN   12.01
17.92  28.49  17.40  17.06 11.09
9.59   9.33   NaN    0.31  0.23 
10.46  13.17  NaN    14.89 19.33
20.97  19.50  17.65  14.45 14.00
18.23  10.34  17.95  16.46 19.34
09:10:02
July-2012
12.76  16.94  14.38  11.86 16.89
20.46  23.17  NaN    24.89 19.33
30.97  49.50  47.65  24.45 34.00
18.23  30.34  27.95  16.46 19.34
30.46  33.17  NaN    34.89  29.33
30.97  49.50  47.65  24.45 34.00
28.67  30.34  27.95  36.46 29.34
15:03:40
August-2012
17.09  16.55  19.59  17.25 19.22
17.54  11.45  13.48  22.55 24.01
NaN    21.19  25.85  25.05 27.21
26.79  24.98  12.23  16.99 18.67
17.54  11.45  13.48  22.55 24.01
NaN    21.19  25.85  25.05 27.21
26.79  24.98  12.23  16.99 18.67

我们将数据导入此文件,并显示这些数据。步骤如下:

  1. 使用 fopen 函数打开文件并获得文件标识符。

  2. 描述文件中的数据格式说明符,如 ‘%s’ 为一个字符串,’%d’ 为一个整数,或 ‘%f’ 表示一个浮点数。

  3. 要跳过文字字符的文件,包括他们的格式描述。要跳过一个数据字段,在符使用一个星号(“*”)。

    例如,要读取头,并返回单个的M值,我们这样写:

    M = fscanf(fid, '%*s %*s
    %*s %*s %*s %*s
    M=%d
    
    ', 1);
    
  4. 缺省情况下,fscanf读取数据,直到它可以根据我们的格式说明描述的数据不匹配,或它到达文件末尾的。在这里,我们将使用for循环阅读3组数据,每一次,它会读取7行5列。

  5. 我们将创建一个名为 mydata 在工作区中,从文件中读取数据存储结构。这种结构具有三个字段:时间、月和 raindata 阵列。

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

filename = '/data/myfile.txt';
rows = 7;
cols = 5;
 
% open the file
fid = fopen(filename);
 
% read the file headers, find M (number of months)
M = fscanf(fid, '%*s %*s
%*s %*s %*s %*s
M=%d

', 1);
 
% read each set of measurements
for n = 1:M
    mydata(n).time = fscanf(fid, '%s', 1);
    mydata(n).month = fscanf(fid, '%s', 1);
 
    % fscanf fills the array in column order,
    % so transpose the results
    mydata(n).raindata  = ...
      fscanf(fid, '%f', [rows, cols]);
end
for n = 1:M
    disp(mydata(n).time), disp(mydata(n).month)
    disp(mydata(n).raindata)
end
 
% close the file
fclose(fid);

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

12:00:00
June-2012
   17.2100   17.5700   11.0900   13.1700   14.4500
   28.5200       NaN    9.5900       NaN   14.0000
   39.7800   12.0100    9.3300   14.8900   18.2300
   16.5500   17.9200       NaN   19.3300   10.3400
   23.6700   28.4900    0.3100   20.9700   17.9500
   19.1500   17.4000    0.2300   19.5000   16.4600
    0.3500   17.0600   10.4600   17.6500   19.3400

09:10:02
July-2012
   12.7600       NaN   34.0000   33.1700   24.4500
   16.9400   24.8900   18.2300       NaN   34.0000
   14.3800   19.3300   30.3400   34.8900   28.6700
   11.8600   30.9700   27.9500   29.3300   30.3400
   16.8900   49.5000   16.4600   30.9700   27.9500
   20.4600   47.6500   19.3400   49.5000   36.4600
   23.1700   24.4500   30.4600   47.6500   29.3400

15:03:40
August-2012
   17.0900   13.4800   27.2100   11.4500   25.0500
   16.5500   22.5500   26.7900   13.4800   27.2100
   19.5900   24.0100   24.9800   22.5500   26.7900
   17.2500       NaN   12.2300   24.0100   24.9800
   19.2200   21.1900   16.9900       NaN   12.2300
   17.5400   25.8500   18.6700   21.1900   16.9900
   11.4500   25.0500   17.5400   25.8500   18.6700

MATLAB数据导出

MATLAB 中数据导出表明可以将数据写入文件。

MATLAB 允许你使用数据在另一个应用程序读取 ASCII 文件,MATLAB提供了多种数据输出选项。

你可以建立以下类型的文件:

  • 矩形,从一个数组分隔的ASCII数据文件。
  • 日记或日志文件的按键和文本输出。
  • 专业的ASCII文件,如 fprintf 使用低层函数。
  • 使用 MEX 文件来访问你的 C/ C++ 或 Fortran 程序写入到一个特定的文本文件格式。

另外,还可以将数据导出到 Excel。

导出数字阵列作为分隔符的 ASCII 数据文件的方法有两种:

  • 使用 save 函数及指定的 ASCII 限定符
  • 使用 dlmwrite 函数

使用 save 函数的语法如下:

save my_data.out num_array -ASCII

其中,my_data.out 定界 ASCII 创建的数据文件,num_array是一个数字的阵列和 ASCII 符。

dlmwrite 函数的语法如下:

dlmwrite('my_data.out', num_array, 'dlm_char')

其中,my_data.out 定界 ASCII 创建的数据文件,num_array 是一个数字阵列和 dlm_char 作为分隔符。

详细例子

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

num_array = [ 1 2 3 4 ; 4 5 6 7; 7 8 9 0];
save array_data1.out num_array -ASCII;
type array_data1.out
dlmwrite('array_data2.out', num_array, ' ');
type array_data2.out

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

   1.0000000e+00   2.0000000e+00   3.0000000e+00   4.0000000e+00
   4.0000000e+00   5.0000000e+00   6.0000000e+00   7.0000000e+00
   7.0000000e+00   8.0000000e+00   9.0000000e+00   0.0000000e+00

1 2 3 4
4 5 6 7
7 8 9 0

请注意 save ASCII 命令和 dlmwrite 命令作为输入不起单元阵列作用。

要创建一个分隔的 ASCII 文件,你可以从一个单元数组的内容

  • 要么,转换单元阵列一个矩阵使用 cell2mat 函数,
  • 或者导出单元阵列,使用低级别的文件 I/O 函数。

如果使用 SAVE 功能写一个字符数组的 ASCII 文件,它等价 ASCII 码字符写入到文件中。

例如,让我们写的字’hello’的文件:

h = 'hello';
save textdata.out h -ascii
type textdata.out

MATLAB执行上述语句,显示以下结果:

1.0400000e+02   1.0100000e+02   1.0800000e+02   1.0800000e+02   1.1100000e+02

这是字符的字符串 ‘hello’ 的8位 ASCII 格式。

写到日记文件

日记文件的活动日志MATLAB的会话。日记函数创建您的会话在磁盘文件的精确副本,不包括图形。

要打开的日记功能,输入:

diary

或者,您可以给日志文件的名字,说:

diary logdata.out

要关闭的日记函数:

diary off

可以在文本编辑器中打开日记文件。

MATLAB低级别的I/O数据导出到文本数据文件

到目前为止,我们已经导出数字阵列。MATLAB提供低级别的 fprintf 函数创建其他文本文件,包括组合的数字和字符数据,非矩形输出文件,或文件中使用非ASCII编码方案。

在低级别的I/O文件活动,在导出之前需要用 fopen 函数打开或创建一个文件,得到的文件标识符。默认情况下,fopen 函数打开一个文件进行只读访问。你应该指定写入的权限或追加,如 ‘w’ 或 ‘a’。

处理文件后,你需要使用 fclose(fid) 函数关闭它。

下面的例子演示了这一概念:

详细例子

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

% create a matrix y, with two rows
x = 0:10:100;
y = [x; log(x)];
 
% open a file for writing
fid = fopen('logtable.txt', 'w');
 
% Table Header
fprintf(fid, 'Log     Function

');
 
% print values in column order
% two values appear on each row of the file
fprintf(fid, '%f    %f
', y);
fclose(fid);
% display the file created
type logtable.txt

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

Log     Function

0.000000    -Inf
10.000000    2.302585
20.000000    2.995732
30.000000    3.401197
40.000000    3.688879
50.000000    3.912023
60.000000    4.094345
70.000000    4.248495
80.000000    4.382027
90.000000    4.499810
100.000000    4.605170

MATLAB绘图

在MATLAB中绘制函数图形的步骤如下:

  1. 先定义变量 x,通过指定的变量 x 值的范围,该函数被绘制;
  2. 然后定义函数, y = f(x);
  3. 最后调用 plot 命令,如 plot(x, y)。

让我们举一个例子,绘制函数 y = x2。

在这个例子中,我们将绘制两个图形具有相同的函数,但在第二次,我们将减少值的增量。

请注意,因为减少了增量,图形会变得平滑。

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

x = [1 2 3 4 5 6 7 8 9 10];
x = [-100:20:100];
y = x.^2;
plot(x, y)

MATLAB添加标题,标签,网格线和缩放的图形

我们可以在 MATLAB 中添加标题,调整 x 轴和 y 轴,网格线,并沿标签美化图形。

  • xlabel 和 ylabel 指令产生沿 x 轴和 y 轴的标签。
  • 标题命令允许你生成图表上的一个标题。
  • 网格命令允许你生成图上的网格线。
  • 轴等于命令允许生成与同等规模因素和空间两个坐标轴上的积点。
  • 轴方形命令生成一个正方形的积点。

详细示例

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

x = [0:0.01:10];
y = sin(x);
plot(x, y), xlabel('x'), ylabel('Sin(x)'), title('Sin(x) Graph'),
grid on, axis equal

MATLAB在同一张图上绘制多个函数

在MATLAB中可以绘制多个图形相同的积点。下面的例子演示了这一概念:

具体示例

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

x = [0 : 0.01: 10];
y = sin(x);
g = cos(x);
plot(x, y, x, g, '.-'), legend('Sin(x)', 'Cos(x)')

MATLAB在走势图上的颜色设置

MATLAB包含了八个绘制图形的基本颜色选项,下表提供了显示的颜色以及相应的代码:

Color Code
White w
Black k
Blue b
Red r
Cyan c
Green g
Magenta m
Yellow y

具体示例

让我们绘制两个多项式的图形:

  1. f(x) = 3x4 + 2x3+ 7x2 + 2x + 9 and
  2. g(x) = 5x3 + 9x + 2

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

x = [-10 : 0.01: 10];
y = 3*x.^4 + 2 * x.^3 + 7 * x.^2 + 2 * x + 9;
g = 5 * x.^3 + 9 * x + 2;
plot(x, y, 'r', x, g, 'g')

MATLAB设置轴刻度

该轴命令允许您设置轴的刻度,您可以提供的最小值和最大值的 x 和 y 轴,使用轴命令的方式如下:

axis ( [xmin xmax ymin ymax] )

具体示例

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

x = [0 : 0.01: 10];
y = exp(-x).* sin(2*x + 3);
plot(x, y), axis([0 10 -1 1])

MATLAB生成子图

当创建一个数组地块在相同的数字,这些地块被称为子图。

MATLAB 中使用 subplot 命令创建子图。

subplot 命令的语法如下:

subplot(m, n, p)

其中,m 和 n 为积阵列的行和列的数量,p 指定把一个特定的积。

subplot 命令建立的每个绘图都可以有其自己的特点。

具体示例

让我们生成下述的两个图:

  • y = e−1.5xsin(10x)
  • y = e−2xsin(10x)

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

x = [0:0.01:5];
y = exp(-1.5*x).*sin(10*x);
subplot(1,2,1)
plot(x,y), xlabel('x'),ylabel('exp(–1.5x)*sin(10x)'),axis([0 5 -1 1])
y = exp(-2*x).*sin(10*x);
subplot(1,2,2)
plot(x,y),xlabel('x'),ylabel('exp(–2x)*sin(10x)'),axis([0 5 -1 1])

MATLAB图形

MATLAB绘制条形图

MATLAB 中使用 bar 命令绘制一个二维条形图。

具体示例

如果有一个包含10名学生的教室,这些学生获得的分数的百分比是75,58,90,87,50,85,92,75,60和95,使用这个数据,我们将绘制条形图。

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

x = [1:10];
y = [75, 58, 90, 87, 50, 85, 92, 75, 60, 95];
bar(x,y), xlabel('Student'),ylabel('Score'),
title('First Sem:')
print -deps graph.eps

MATLAB绘制等值线

contour 线的两个变量的函数的曲线,沿着该函数具有一个恒定值。加入等于标高点,一个给定的水平,如平均海平面以上用于创建等高线图等高线。

MATLAB 提供了一个轮廓绘制等高线图的函数。

具体例子

让我们生成的等高线图,显示了对于一个给定的功能的轮廓线 g = f(x, y)。这个函数有两个变量,因此,我们将生成两个独立的变量,即两个数据集 x 和 y。这是通过调用 meshgrid 命令。

meshgrid 命令是用于产生一个矩阵的元素,赋予 x 和 y 的范围内进行了在每一种情况下的增量同规格一起。

让我们绘制函数 g = f(x, y), where −5 ≤ x ≤ 5, −3 ≤ y ≤ 3,这两个值的增量为0.1。这些变量设置语法为:

[x,y] = meshgrid(–5:0.1:5, –3:0.1:3);

最后,我们需要分配功能,函数是:x2 + y2

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

[x,y] = meshgrid(-5:0.1:5,-3:0.1:3); %independent variables
g = x.^2 + y.^2;                     % our function
contour(x,y,g)                       % call the contour function
print -deps graph.eps

让我们修改代码,慢慢美化该等高线图:

[x,y] = meshgrid(-5:0.1:5,-3:0.1:3); %independent variables
g = x.^2 + y.^2;                     % our function
[C, h] = contour(x,y,g);             % call the contour function
set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2)
print -deps graph.eps

MATLAB绘制三维图

三维绘图基本显示两个变量中的一个函数定义的表面,g = f (x,y)。

像以前一样,定义 g,我们首先创建一组点(X,Y)函数,使用 meshgrid 命令在域;接下来,我们该函数本身分配;最后使用 surf 命令来创建曲面图。

具体示例

让我们建立一个三维地图函数表面 g = xe-(x2 + y2)

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

[x,y] = meshgrid(-2:.2:2);
g = x .* exp(-x.^2 - y.^2);
surf(x, y, g)
print -deps graph.eps

MATLAB中也可以使用的网格的命令来生成一个三维表面。然而,surfcommand 显示连接线和面的表面的颜色,而 meshcommand 创建一个线框表面色线,连接定义点。

MATLAB代数

在MATLAB解决基本的代数方程组

MATLAB 中使用 solve 命令求解代数方程组。在其最简单的形式,solve 函数需要括在引号作为参数方程。

例如,让我们在方程求解 x, x-5 = 0

solve([x-5=0])

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

ans =
 5

还可以调用求解函数为:

y = solve([x-5 = 0])

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

y =
 5

甚至可能不包括的右边的方程:

solve([x-5])

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

ans =
 5

然而,如果公式涉及多个符号,那么MATLAB默认情况下,假定正在解决 x,解决命令具有另一种形式:

solve(equation, variable)

在那里,还可以提到的变量。

例如,让我们来解决方程 v – u – 3t2 = 0, 或 v 在这种情况下,我们应该这样写:

solve([v-u-3*t^2=0], [v])

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

ans =
 3*t^2 + u

MATLAB解决基本在Octave中代数方程组

根命令用于求解代数方程组 Octave ,可以写上面的例子如下:

例如,让我们在方程求解x , x-5 = 0

roots([1, -5])

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

ans =
 5

还可以调用求解函数为:

y = roots([1, -5])

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

y =
 5

在MATLAB解决二次方程

solve 命令也可以解决高阶方程。它经常被用来求解二次方程,该函数返回在数组中的方程的根。

下面举例子解决二次方程 x2 -7x +12 = 0。

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

eq = 'x^2 -7*x + 12 = 0';
s = solve(eq);
disp('The first root is: '), disp(s(1));
disp('The second root is: '), disp(s(2));

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

The first root is: 
3
The second root is: 
4

Octave二次方程求解

下面的例子解决二次方程 x2 -7x +12 = 0 在 Octave 中。创建立一个脚本文件,并输入下述代码:

s = roots([1, -7, 12]);

disp('The first root is: '), disp(s(1));
disp('The second root is: '), disp(s(2));

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

The first root is: 
 4
The second root is: 
 3

在MATLAB解高阶方程

solve 命令还可以解决高阶方程。例如,让我们来解决一个三次方程 (x-3)2(x-7) = 0

solve([(x-3)^2*(x-7)=0])

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

ans =
  3
  3
  7

在高阶方程的情况下,根长含有许多术语。可以得到的数值如根,把它们转换成一倍。

下面的例子解决了四阶方程 x4 − 7x3 + 3x2 − 5x + 9 = 0.

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

eq = 'x^4 - 7*x^3 + 3*x^2 - 5*x + 9 = 0';
s = solve(eq);
disp('The first root is: '), disp(s(1));
disp('The second root is: '), disp(s(2));
disp('The third root is: '), disp(s(3));
disp('The fourth root is: '), disp(s(4));
% converting the roots to double type
disp('Numeric value of first root'), disp(double(s(1)));
disp('Numeric value of second root'), disp(double(s(2)));
disp('Numeric value of third root'), disp(double(s(3)));
disp('Numeric value of fourth root'), disp(double(s(4)));

运行该文件,返回以下结果:

The first root is: 
6.630396332390718431485053218985
 The second root is: 
1.0597804633025896291682772499885
 The third root is: 
- 0.34508839784665403032666523448675 - 1.0778362954630176596831109269793*i
 The fourth root is: 
- 0.34508839784665403032666523448675 + 1.0778362954630176596831109269793*i
Numeric value of first root
    6.6304
Numeric value of second root
    1.0598
Numeric value of third root
  -0.3451 - 1.0778i
Numeric value of fourth root
  -0.3451 + 1.0778i

请注意,在过去的两个根是复数。

在 Octave求解高阶方程

下面的例子解决了四阶方程 x4 − 7x3 + 3x2 − 5x + 9 = 0.

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

v = [1, -7,  3, -5, 9];

s = roots(v);
% converting the roots to double type
disp('Numeric value of first root'), disp(double(s(1)));
disp('Numeric value of second root'), disp(double(s(2)));
disp('Numeric value of third root'), disp(double(s(3)));
disp('Numeric value of fourth root'), disp(double(s(4)));

运行该文件,返回以下结果:

Numeric value of first root
 6.6304
Numeric value of second root
-0.34509 + 1.07784i
Numeric value of third root
-0.34509 - 1.07784i
Numeric value of fourth root
 1.0598

在MATLAB中求解方程组

solve 命令也可以用于生成涉及一个以上的变量的方程系统的解决方案。

我们求解方程:

5x + 9y = 5

3x – 6y = 4

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

s = solve([5*x + 9*y = 5],[3*x - 6*y = 4]);
s.x
s.y

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

ans =
 22/19
ans =
-5/57

用同样的方法,可以解决大型线性系统。

请考虑以下的方程组:

x + 3y -2z = 5

3x + 5y + 6z = 7

2x + 4y + 3z = 8

Octave方程求解系统

我们有一点点不同的方法来解决系统 ‘n’ 的 ‘n’ 未知数的线性方程组。

让我们求解方程:

5x + 9y = 5

3x – 6y = 4

这样的系统中的线性方程组的单一的矩阵方程可写为 Ax = b, 其中 A 是系数矩阵,b 是含有线性方程组右侧的列向量,x 是列向量,代表在下面的程序中所示

创建一个脚本文件,并键入下面的代码:

A = [5, 9; 3, -6];
b = [5;4];
A  b

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

ans =

   1.157895
  -0.087719

用同样的方法,可以解决大型线性系统给出如下:

x + 3y -2z = 5

3x + 5y + 6z = 7

2x + 4y + 3z = 8

MATLAB扩大和收集方程

MATLAB中 expand 和 collect 命令用于扩展,并分别收集一个方程。下面的示例演示的概念:

当工作中有许多象征性的函数,你应当声明你的变量是象征意义的。

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

syms x %symbolic variable x
syms y %symbolic variable x
% expanding equations
expand((x-5)*(x+9))
expand((x+2)*(x-3)*(x-5)*(x+7))
expand(sin(2*x))
expand(cos(x+y))
 
% collecting equations
collect(x^3 *(x-7))
collect(x^4*(x-3)*(x-5))

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

ans =
 x^2 + 4*x - 45
 ans =
 x^4 + x^3 - 43*x^2 + 23*x + 210
 ans =
 2*cos(x)*sin(x)
 ans =
cos(x)*cos(y) - sin(x)*sin(y)
 ans =
 x^4 - 7*x^3
 ans =
 x^6 - 8*x^5 + 15*x^4 

Octave扩展和收集方程

你需要 symbolic 包,它提供了expand 和 collect 命令来扩大和收集方程。下面的示例演示的概念:

当工作中有许多象征意义的函数,应该声明变量是象征性的,但八度有不同的方法来定义符号变量。注意使用 sin 和 cos,他们还象征意义性的包中定义。

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

% first of all load the package, make sure its installed.
pkg load symbolic

% make symbols module available
symbols

% define symbolic variables
x = sym ('x');
y = sym ('y');
z = sym ('z');

% expanding equations
expand((x-5)*(x+9))
expand((x+2)*(x-3)*(x-5)*(x+7))
expand(Sin(2*x))
expand(Cos(x+y))
 
% collecting equations
collect(x^3 *(x-7), z)
collect(x^4*(x-3)*(x-5), z)

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

ans =

-45.0+x^2+(4.0)*x
ans =

210.0+x^4-(43.0)*x^2+x^3+(23.0)*x
ans =

sin((2.0)*x)
ans =

cos(y+x)
ans =

x^(3.0)*(-7.0+x)
ans =

(-3.0+x)*x^(4.0)*(-5.0+x)

分解和简化代数表达式

factor 命令表达式 factorizes 是一个简化命令的简化表达。

具体例子

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

syms x
syms y
factor(x^3 - y^3)
factor([x^2-y^2,x^3+y^3])
simplify((x^4-16)/(x^2-4))

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

ans =
(x - y)*(x^2 + x*y + y^2)
 ans =
 [ (x - y)*(x + y), (x + y)*(x^2 - x*y + y^2)]
 ans =
 x^2 + 4

MATLAB微积分

MATLAB计算限制

在 MATLAB 中如果要限制计算就要使用 limit 命令。其最基本的形式是将表达 limit 命令作为参数,并作为独立变量变为零发现极限的表达。

例如,让我们计算一个函数的极限 f(x) = (x3 + 5)/(x4 + 7), 当 x 趋于零。

syms x
limit((x^3 + 5)/(x^4 + 7))

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

ans =
 5/7 

limit 命令属于符号计算的境界中,你需要使用 SYMS 命令告诉 MATLAB 您使用的符号变量。

limit 命令也可以计算一个函数的限制,作为变量趋于零以外的一些数字。

为了计算 lim x->a(f(x)),我们使用 limit 命令参数,其中,第一个是表达式,第二个是数量,x 趋向,在这里它是a。

例如,让我们计算函数极限 f(x) = (x-3)/(x-1), x 无限接近于 1.

limit((x - 3)/(x-1),1)

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

ans =
 NaN

继续执行另外的实例,

limit(x^2 + 5, 3)

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

ans =
 14 

使用Octave计算限制

以下是上面的例子中使用 symbolic 包 Octave 版本,尝试执行和比较的结果:

pkg load symbolic
symbols
x=sym("x");

subs((x^3+5)/(x^4+7),x,0)

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

ans =
0.7142857142857142857

核查的基本性质限制

代数极限定理提供了一些基本的性能限制。

如下所示:

limx->p ( f(x) + g(x)) = limx->p f(x) + limx->p g(x)

limx->p (f(x)- g(x)) = limx->p f(x) - limx->p g(x)

limx->p (f(x)· g(x)) = limx->p f(x)· limx->p g(x)

limx->p (f(x)/g(x)) = limx->p f(x)/ limx->p g(x)

我们考虑两个函数:

  1. f(x) = (3x + 5)/(x - 3)
  2. g(x) = x2 + 1.

让我们计算为 x 的函数的限制的倾向 5,这两个函数和验证限制使用这两个函数和MATLAB的基本属性。

详细例子

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

syms x
f = (3*x + 5)/(x-3);
g = x^2 + 1;
l1 = limit(f, 4)
l2 = limit (g, 4)
lAdd = limit(f + g, 4)
lSub = limit(f - g, 4)
lMult = limit(f*g, 4)
lDiv = limit (f/g, 4)

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

l1 =
 17
  
l2 =
17
  
lAdd =
 34
 
lSub =
 0
  
lMult =
289
  
lDiv =
1

限制使用的基本性质的验证Octave

以下是上面的例子中使用 symbolic 包 Octave 版本,尝试执行和比较的结果:

pkg load symbolic
symbols

x = sym("x");
f = (3*x + 5)/(x-3);
g = x^2 + 1;

l1=subs(f, x, 4)
l2 = subs (g, x, 4)
lAdd = subs (f+g, x, 4)
lSub = subs (f-g, x, 4)
lMult = subs (f*g, x, 4)
lDiv = subs (f/g, x, 4)

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

l1 =

17.0
l2 =

17.0
lAdd =

34.0
lSub =

0.0
lMult =

289.0
lDiv =

1.0

MATLAB 左,右侧限制

当一个函数具有某些特定变量的值的不连续性,限制在这一点上不存在。换句话说,限制具有不连续的函数f(x)在x = a ,当不相等的值的限制,当 x 趋向 x 从左侧的值限制为 x 的方法。

这导致的概念左手侧 和右手侧 限制。a限值定为左手侧 x > a 限制,从左侧,即 X 接近的值的 xa 。当是不相等的左手系的限制和右手限制,该限制不存在。

让我们考虑一个函数:

f(x) = (x - 3)/|x - 3|

我们将证明 limx->3 f(x) 不存在。 MATLAB帮助我们建立这个事实在两个方面:

  • 通过绘制的函数的曲线图,并示出了不连续
  • 通过计算的限制和显示,两者是不同的。

左手侧和右手侧限制,计算传递字符串 ‘左’ 和 ‘右’ limit 命令的最后一个参数。

具体示例

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

f = (x - 3)/abs(x-3);
ezplot(f,[-1,5])
l = limit(f,x,3,'left')
r = limit(f,x,3,'right')

显示下面的输出:

l =
 -1
  
r =
1

MATLAB多项式

在 MATLAB 中,多项式用一个行向量表示,行向量的元素值为多项式系数按幂次的降序排列。

例如,方程 P(x) = x4 + 7x3 - 5x + 9 可以表示为:

p = [1 7 0 -5 9];

MATLAB计算多项式

MATLAB中 polyval 函数用于将指定的值 - 计算多项式。例如,要计算我们本节开始时举例的多项式 p, x = 4,输入:

p = [1 7 0  -5 9];
polyval(p,4)

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

ans =
   693

MATLAB 还提供了计算矩阵多项式 polyvalm 函数。矩阵多项式一个多项式矩阵变量。

例如,我们建立一个正方形矩阵 X 并计算多项式 p:

p = [1 7 0  -5 9];
X = [1 2 -3 4; 2 -5 6 3; 3 1 0 2; 5 -7 3 8];
polyvalm(p, X)

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

ans =
        2307       -1769        -939        4499
        2314       -2376        -249        4695
        2256       -1892        -549        4310
        4570       -4532       -1062        9269

查找多项式的根

根函数可以计算多项式的根。

例如,要计算多项式 p,输入根:

p = [1 7 0  -5 9];
r = roots(p)

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

r =
  -6.8661 + 0.0000i
  -1.4247 + 0.0000i
   0.6454 + 0.7095i
   0.6454 - 0.7095i

poly 函数是根函数,并返回多项式的系数的倒数。

例如:

p2 = poly(r)

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

p2 =
    1.0000    7.0000    0.0000   -5.0000    9.0000

多项式曲线拟合

polyfit 函数找到一个多项式的系数,适合采用最小二乘意义上的一组中的数据。

如果 x 和 y 是两个向量含有的 x 和 y 被拟合数据的一个 n 次多项式,那么我们得到的多项式拟合的数据通过写入

p = polyfit(x,y,n)

详细例子

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

x = [1 2 3 4 5 6]; y = [5.5 43.1 128 290.7 498.4 978.67];  %data
p = polyfit(x,y,4)   %get the polynomial
% Compute the values of the polyfit estimate over a finer range, 
% and plot the estimate over the real data values for comparison:
x2 = 1:.1:6;          
y2 = polyval(p,x2);
plot(x,y,'o',x2,y2)
grid on

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

p =
    4.1056  -47.9607  222.2598 -362.7453  191.1250

MATLAB变换

MATLAB中提供了命令与转换,如拉普拉斯和傅里叶变换。

MATLAB中变换是一种用来从另一个角度简化数据分析科学和工程。

傅立叶变换实现了时间与频率的转换;拉普拉斯变换可以将时域函数变换复频域函数,简化微积分方程计算。

MATLAB提供的拉普拉斯,傅里叶和FFT命令拉普拉斯,傅里叶和快速傅里叶变换工作。

MATLAB拉普拉斯变换

时间函数 f(t)的拉普拉斯变换的函数,通过下式给出下面的积分:

拉普拉斯变换的变换函数 f(t)也表示为,F(次)。可以看到这种变换或一体化进程的符号变量t的函数,F(T),转换成另一个函数F(s)和另一个变量s。

拉普拉斯变换将微分方程转化为代数。要计算一个函数 f(t)的拉普拉斯变换,这样写:

laplace(f(t))

具体示例

接下来,我们会计算一些常用函数的拉普拉斯变换。

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

syms s t a b w
laplace(a)
laplace(t^2)
laplace(t^9)
laplace(exp(-b*t))
laplace(sin(w*t))
laplace(cos(w*t))

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

ans =
 1/s^2

 ans =
 2/s^3

 ans =
 362880/s^10

 ans =
 1/(b + s)
  
ans =
 w/(s^2 + w^2)
  
ans =
 s/(s^2 + w^2)

MATLAB逆拉普拉斯变换

MATLAB中使用命令 ilaplace 计算拉普拉斯逆变换。

例如:

ilaplace(1/s^3)

MATLAB执行上述语句,并显示结果:

ans =
 t^2/2

详细例子

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

syms s t a b w
ilaplace(1/s^7)
ilaplace(2/(w+s))
ilaplace(s/(s^2+4))
ilaplace(exp(-b*t))
ilaplace(w/(s^2 + w^2))
ilaplace(s/(s^2 + w^2))

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

ans =
t^6/720

 ans =
 2*exp(-t*w)

 ans =
 cos(2*t)

 ans =
 ilaplace(exp(-b*t), t, x)

 ans =
 sin(t*w)

 ans =
 cos(t*w)

MATLAB傅立叶变换

傅立叶变换,常用的时间变换的数学函数,函数 f(t),进入一个新的功能,有时记为或F组,其参数是频率与周期/秒(赫兹)或每秒弧度的单位。新的函数,然后被称为傅里叶变换和/或函数f的频谱。

详细例子

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

syms x 
f = exp(-2*x^2);  %our function
ezplot(f,[-2,2])  % plot of our function
FT = fourier(f)	% Fourier transform

并显示以下结果:

FT =
 (2^(1/2)*pi^(1/2)*exp(-w^2/8))/2

折线图的傅里叶变换为:

ezplot(FT)

MATLAB傅立叶逆变换

MATLAB提供的 ifourier 命令,用于计算一个函数的傅立叶逆变换。

例如:

f = ifourier(-2*exp(-abs(w)))

MATLAB执行上述语句,并显示如下结果:

f =
-2/(pi*(x^2 + 1))

本教程总结参考https://www.w3cschool.cn/matlab/

结语

如果你发现文章有什么问题,欢迎留言指正。
如果你觉得这篇文章还可以,别忘记点个赞加个关注再走哦。
如果你不嫌弃,还可以关注微信公众号———梦码城(持续更新中)。
梦码在这里感激不尽!!

你可能感兴趣的:(数学建模,数学建模,美国大学生数学建模竞赛,workflow,epoll,log4net)