matlab如何快速的学,MATLAB - 快速指南

MATLAB - 快速指南

MATLAB - Overview

MATLAB(矩阵实验室)是第四代高级编程语言和交互式环境,用于数值计算,可视化和编程。MATLAB由MathWorks开发。

它允许矩阵操作; 绘制功能和数据; 算法的实现; 创建用户界面; 与用其他语言编写的程序连接,包括C,C ++,Java和FORTRAN; 分析数据; 开发算法; 并创建模型和应用程序。

它具有许多内置命令和数学函数,可帮助您进行数学计算,生成绘图和执行数值方法。

MATLAB的计算数学的力量

MATLAB用于计算数学的各个方面。 以下是一些常用的数学计算,它最常用 -处理矩阵和数组

二维和三维绘图和图形

Linear Algebra

代数方程

非线性函数

Statistics

数据分析

微积分和微分方程

数值计算

Integration

Transforms

Curve Fitting

各种其他特殊功能

MATLAB的特点

以下是MATLAB的基本功能 -它是数值计算,可视化和应用程序开发的高级语言。

它还为迭代探索,设计和解决问题提供了交互式环境。

它为线性代数,统计,傅立叶分析,滤波,优化,数值积分和求解常微分方程提供了大量的数学函数库。

它提供了内置图形,用于可视化数据和工具,用于创建自定义图。

MATLAB的编程接口提供了用于提高代码质量可维护性和最大化性能的开发工具。

它提供了使用自定义图形界面构建应用程序的工具

它提供了将基于MATLAB的算法与外部应用程序和语言(如C,Java,.NET和Microsoft Excel)集成的功能。

MATLAB的用途

MATLAB被广泛用作科学和工程中的计算工具,包括物理,化学,数学和所有工程流。 它用于一系列应用,包括 -信号处理和通信

图像和视频处理

控制系统

测试和测量

计算金融

计算生物学

MATLAB - Environment Setup

本地环境设置 (Local Environment Setup)

设置MATLAB环境只需点击几下。 安装程序可以从here下载。

MathWorks还提供许可产品,试用版和学生版。 您需要登录该站点并等待一点他们的批准。

下载安装程序后,只需点击几下即可安装软件。

46fb68b7d5671aace532351909d7d66f.png

cda226e07961d8041f122ac37ad5c057.png

了解MATLAB环境

可以从桌面上创建的图标启动MATLAB开发IDE。 MATLAB中的主要工作窗口称为桌面。 启动MATLAB时,桌面将以默认布局显示 -

d0124778e94ebdc602f13d34763b7a23.png

桌面有以下面板 -Current Folder - 此面板允许您访问项目文件夹和文件。

b0bdf3588c791aad09bb7b3d21db77ec.png

Command Window - 这是可以在命令行输入命令的主要区域。 它由命令提示符(“”)表示。

ccf5ade1a3ca859351e990a51f92efae.png

Workspace - 工作空间显示从文件创建和/或导入的所有变量。

dafb17ce749a3b76caca4ffefee11afa.png

Command History - 此面板显示或返回在命令行输入的命令。

9983e5b5cde1cbab64acd05ea8401c7f.png

设置GNU Octave

如果您愿意在您的机器上使用Octave(Linux,BSD,OS X或Windows),请从下载GNU Octave下载最新版本。 您可以查看机器的给定安装说明。

MATLAB - Basic Syntax

MATLAB环境就像一个超级复杂的计算器。 您可以在>>命令提示符下输入命令。

MATLAB是一个解释环境。 换句话说,你给出一个命令,MATLAB立即执行它。

动手实践

输入有效的表达式,例如,5 + 5

然后按ENTER键

单击“执行”按钮或键入Ctrl + E时,MATLAB立即执行它,返回的结果为 -ans = 10

让我们再举几个例子 -3 ^ 2 % 3 raised to the power of 2

单击“执行”按钮或键入Ctrl + E时,MATLAB立即执行它,返回的结果为 -ans = 9

另一个例子,sin(pi /2) % sine of angle 90o

单击“执行”按钮或键入Ctrl + E时,MATLAB立即执行它,返回的结果为 -ans = 1

另一个例子,7/0 % Divide by zero

单击“执行”按钮或键入Ctrl + E时,MATLAB立即执行它,返回的结果为 -ans = Inf

warning: division by zero

另一个例子,732 * 20.3

单击“执行”按钮或键入Ctrl + E时,MATLAB立即执行它,返回的结果为 -ans = 1.4860e+04

MATLAB为一些数学符号提供了一些特殊的表达式,例如pi表示π,Inf表示∞,i(和j)表示√-1等Nan表示“非数字”。

在MATLAB中使用分号(;)

分号(;)表示结束语句。 但是,如果要抑制和隐藏表达式的MATLAB输出,请在表达式后添加分号。

例如,x = 3;

y = x + 5

单击“执行”按钮或键入Ctrl + E时,MATLAB立即执行它,返回的结果为 -y = 8

添加评论

百分比符号(%)用于表示注释行。 例如,x = 9 % assign the value 9 to x

您还可以使用块注释运算符%{和%}编写注释块。

MATLAB编辑器包含工具和上下文菜单项,可帮助您添加,删除或更改注释的格式。

常用的操作符和特殊字符

MATLAB支持以下常用运算符和特殊字符 -操作者目的

+ 加; 加法运算符。

- 减去; 减法运算符。

* 标量和矩阵乘法运算符。

.* 数组乘法运算符。

^ 标量和矩阵求幂运算符。

.^ 数组取幂运算符。

\ 左分区算子。

/ 右分算子。

.\ 数组左除运算符。

./ 数组右分算子。

: 结肠; 生成规则间隔的元素并表示整个行或列。

( ) 括弧; 包含函数参数和数组索引; 覆盖优先权。

[ ] 括号; 附件数组元素。

. 小数点。

… 省略; 线继续运算符

, 逗号; 分隔行中的语句和元素

; 分号; 分隔列并抑制显示。

% 百分号; 指定注释并指定格式。

_ 引用标志和转置运算符。

._ 非共轭转置算子。

= 分配运算符。

特殊变量和常量

MATLAB支持以下特殊变量和常量 -名称含义

ans 最近的回答。

eps 浮点精度的准确性。

i,j 假想单位√-1。

Inf Infinity.

NaN 未定义的数值结果(不是数字)。

pi 数字π

命名变量 (Naming Variables)

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

MATLAB case-sensitive 。

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

拯救你的工作

save命令用于将当前目录中工作空间中的所有变量保存为扩展名为.mat的文件。

例如,save myfile

您可以稍后使用load命令重新加载文件。load myfile

MATLAB - Variables

在MATLAB环境中,每个变量都是一个数组或矩阵。

您可以以简单的方式分配变量。 例如,x = 3 % defining x and initializing it with a value

MATLAB将执行上述语句并返回以下结果 -x = 3

它创建一个名为x的1 x 1矩阵,并将值3存储在其元素中。 让我们看另一个例子,x = sqrt(16) % defining x and initializing it with an expression

MATLAB将执行上述语句并返回以下结果 -x = 4

请注意 -将变量输入系统后,您可以稍后再参考。

变量在使用前必须具有值。

当表达式返回未分配给任何变量的结果时,系统会将其分配给名为ans的​​变量,该变量可在以后使用。

例如,sqrt(78)

MATLAB将执行上述语句并返回以下结果 -ans = 8.8318

你可以使用这个变量ans -sqrt(78);

9876/ans

MATLAB将执行上述语句并返回以下结果 -ans = 1118.2

让我们看看另一个例子 -x = 7 * 8;

y = x * 7.89

MATLAB将执行上述语句并返回以下结果 -y = 441.84

多项任务

您可以在同一行上进行多项分配。 例如,a = 2; b = 7; c = a * b

MATLAB将执行上述语句并返回以下结果 -c = 14

我忘记了变量!

who命令显示您使用的所有变量名称。who

MATLAB将执行上述语句并返回以下结果 -Your variables are:

a ans b c

whos命令显示有关变量的更多信息 -变量目前在内存中

每个变量的类型

分配给每个变量的内存

它们是否是复杂的变量whos

MATLAB将执行上述语句并返回以下结果 -Attr Name Size Bytes Class

==== ==== ==== ==== =====

a 1x1 8 double

ans 1x70 757 cell

b 1x1 8 double

c 1x1 8 double

Total is 73 elements using 781 bytes

clear命令从内存中删除所有(或指定的)变量。clear x % it will delete x, won't display anything

clear % it will delete all variables in the workspace

% peacefully and unobtrusively

长期任务

通过使用省略号(...),可以将长分配扩展到另一行。 例如,initial_velocity = 0;

acceleration = 9.8;

time = 20;

final_velocity = initial_velocity + acceleration * time

MATLAB将执行上述语句并返回以下结果 -final_velocity = 196

The format Command

默认情况下,MATLAB显示带有四个小数位值的数字。 这称为short format 。

但是,如果需要更高的精度,则需要使用format命令。

format long命令显示十进制后的16位数。

例如 -format long

x = 7 + 10/3 + 5 ^ 1.2

MATLAB将执行上述声明并返回以下结果 -x = 17.2319816406394

另一个例子,format short

x = 7 + 10/3 + 5 ^ 1.2

MATLAB将执行上述语句并返回以下结果 -x = 17.232

format bank命令将数字四舍五入到小数点后两位。 例如,format bank

daily_wage = 177.45;

weekly_wage = daily_wage * 6

MATLAB将执行上述语句并返回以下结果 -weekly_wage = 1064.70

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

format short 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 = 34177/1491

创建矢量

向量是一维数字数组。 MATLAB允许创建两种类型的向量 -行向量

列向量

通过将元素集括在方括号中,使用空格或逗号分隔元素来创建Row vectors 。

例如,r = [7 8 9 10 11]

MATLAB将执行上述语句并返回以下结果 -r =

7 8 9 10 11

另一个例子,r = [7 8 9 10 11];

t = [2, 3, 4, 5, 6];

res = r + t

MATLAB将执行上述语句并返回以下结果 -res =

9 11 13 15 17

通过将元素集括在方括号中来创建Column vectors ,使用分号(;)来分隔元素。c = [7; 8; 9; 10; 11]

MATLAB将执行上述语句并返回以下结果 -c =

7

8

9

10

11

创建矩阵

矩阵是二维数字数组。

在MATLAB中,通过将每一行输入为空格序列或逗号分隔元素来创建矩阵,并以分号划分行的末尾。 例如,让我们创建一个3乘3的矩阵 -m = [1 2 3; 4 5 6; 7 8 9]

MATLAB将执行上述语句并返回以下结果 -m =

1 2 3

4 5 6

7 8 9

MATLAB - Commands

MATLAB是一个用于数值计算和数据可视化的交互式程序。 您可以在Command Window的MATLAB提示符“>>”中键入命令来输入Command Window 。

在本节中,我们将提供常用的常规MATLAB命令列表。

用于管理会话的命令

MATLAB提供了用于管理会话的各种命令。 下表提供了所有这些命令 -命令目的

clc清除命令窗口。

clear从内存中删除变量。

exist检查文件或变量是否存在。

global声明变量是全局变量。

help搜索帮助主题。

lookfor搜索关键字的帮助条目。

quit停止MATLAB。

who列出当前变量。

whos列出当前变量(长显示)。

使用系统的命令

MATLAB提供了各种用于处理系统的有用命令,例如将工作空间中的当前工作保存为文件并稍后加载文件。

它还为其他与系统相关的活动提供各种命令,如显示日期,列出目录中的文件,显示当前目录等。

下表显示了一些常用的系统相关命令 -命令目的

cd更改当前目录。

date显示当前日期。

delete删除文件。

diary打开/关闭日记文件记录。

dir列出当前目录中的所有文件。

load从文件加载工作空间变量。

path显示搜索路径。

pwd显示当前目录。

save将工作空间变量保存在文件中。

type显示文件的内容。

what列出当前目录中的所有MATLAB文件。

wklread读取.wk1电子表格文件。

Input and Output Commands

MATLAB提供以下输入和输出相关命令 -命令目的

disp显示数组或字符串的内容。

fscanf从文件中读取格式化数据。

format控制屏幕显示格式。

fprintf执行格式化写入屏幕或文件。

input显示提示并等待输入。

;禁止丝网印刷。

fscanf和fprintf命令的行为类似于C scanf和printf函数。 它们支持以下格式代码 -格式代码目的

%s 格式化为字符串。

%d 格式为整数。

%f 格式化为浮点值。

%e 格式化为科学计数法中的浮点值。

%g 格式最紧凑:%f或%e。

\n 在输出字符串中插入新行。

\t 在输出字符串中插入选项卡。

格式化功能具有以下用于数字显示的形式 -格式功能显示最多

格式短四位十进制数字(默认)。

格式长16位十进制数。

格式短e五位加指数。

格式长e16位数加上指数。

格式银行两位小数。

格式+正面,负面或零。

格式鼠理性近似。

格式紧凑抑制一些换行。

格式松散重置为不太紧凑的显示模式。

矢量,矩阵和数组命令

下表显示了用于处理数组,矩阵和向量的各种命令 -命令目的

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标识单元格数组。

Plotting Commands

MATLAB提供了许多用于绘制图形的命令。 下表显示了一些常用的绘图命令 -命令目的

axis设置轴限制。

fplot智能绘图功能。

grid显示网格线。

plot生成xy图。

print打印绘图或将绘图保存到文件。

title将文字放在图的顶部。

xlabel将文本标签添加到x轴。

ylabel将文本标签添加到y轴。

axes创建轴对象。

close关闭当前的情节。

关闭所有关闭所有情节。

figure打开一个新的数字窗口。

gtext通过鼠标启用标签放置。

hold冻结当前的情节。

legend通过鼠标放置图例。

refresh重绘当前图形窗口。

set指定轴等对象的属性。

subplot在子窗口中创建绘图。

text在图中放置字符串。

bar创建条形图。

loglog创建对数日志图。

polar创造极地情节。

semilogx创建semilog图。 (对数横坐标)。

semilogy创建semilog图。 (对数坐标)。

stairs创建楼梯情节。

stem创建词干图。

MATLAB - M-Files

到目前为止,我们已经使用MATLAB环境作为计算器。 但是,MATLAB也是一种功能强大的编程语言,也是一种交互式计算环境。

在前面的章节中,您学习了如何从MATLAB命令提示符输入命令。 MATLAB还允许您将一系列命令写入文件并将文件作为完整单元执行,如编写函数并调用它。

M档案

MATLAB允许编写两种程序文件 -Scripts - 脚本文件是.m extension程序文件。 在这些文件中,您可以编写一系列要一起执行的命令。 脚本不接受输入,也不返回任何输出。 它们对工作空间中的数据进行操作。

Functions - 函数文件也是.m extension程序文件。 函数可以接受输入和返回输出。 内部变量是函数的本地变量。

您可以使用MATLAB编辑器或任何其他文本编辑器来创建.m文件。 在本节中,我们将讨论脚本文件。 脚本文件包含多个MATLAB命令和函数调用的连续行。 您可以通过在命令行键入其名称来运行脚本。

创建和运行脚本文件

要创建脚本文件,您需要使用文本编辑器。 您可以通过两种方式打开MATLAB编辑器 -使用命令提示符

使用IDE

如果使用命令提示符,请在命令提示符下键入edit 。 这将打开编辑器。 您可以直接输入edit ,然后输入文件名(扩展名为.m)edit

Or

edit

上面的命令将在默认的MATLAB目录中创建该文件。 如果要将所有程序文件存储在特定文件夹中,则必须提供整个路径。

让我们创建一个名为progs的文件夹。 在命令提示符下键入以下命令(>>) -mkdir progs % create directory progs under default directory

chdir progs % changing the current directory to progs

edit prog1.m % creating an m file named prog1.m

如果您是第一次创建文件,MATLAB会提示您确认。 单击是。

5d182a7b033d1a83667f48a5aef86b75.png

或者,如果您使用的是IDE,请选择NEW - > Script。 这也会打开编辑器并创建一个名为Untitled的文件。 输入代码后,您可以命名并保存文件。

在编辑器中键入以下代码 -NoOfStudents = 6000;

TeachingStaff = 150;

NonTeachingStaff = 20;

Total = NoOfStudents + TeachingStaff ...

+ NonTeachingStaff;

disp(Total);

创建并保存文件后,您可以通过两种方式运行它 -单击编辑器窗口上的“ Run按钮或

只需在命令提示符下键入文件名(不带扩展名):>> prog1

命令窗口提示显示结果 -6170

例子 (Example)

创建一个脚本文件,然后键入以下代码 -a = 5; b = 7;

c = a + b

d = c + sin(b)

e = 5 * d

f = exp(-d)

编译并执行上述代码时,会产生以下结果 -c = 12

d = 12.657

e = 63.285

f = 3.1852e-06

MATLAB - Data Types

MATLAB不需要任何类型声明或维度语句。 每当MATLAB遇到一个新的变量名时,它就会创建变量并分配适当的内存空间。

如果变量已经存在,则MATLAB用新内容替换原始内容,并在必要时分配新的存储空间。

例如,Total = 42

上面的语句创建了一个名为“Total”的1×1矩阵,并将值42存储在其中。

MATLAB中可用的数据类型

MATLAB提供15种基本数据类型。 每种数据类型都存储矩阵或数组形式的数据。 该矩阵或数组的大小最小为0乘0,这可以增长到任何大小的矩阵或数组。

下表显示了MATLAB中最常用的数据类型 -Sr.No.数据类型和描述

1int8

8位有符号整数

2uint8

8位无符号整数

3int16

16位有符号整数

4uint16

16位无符号整数

5int32

32位有符号整数

6uint32

32位无符号整数

7int64

64位有符号整数

8uint64

64位无符号整数

9single

单精度数值数据

10double

双精度数值数据

11logical

逻辑值为1或0,分别表示true和false

12char

字符数据(字符串存储为字符向量)

13cell array

索引单元阵列,每个单元能够存储不同维度和数据类型的数组

14structure

类似C的结构,每个结构具有能够存储不同维度和数据类型的数组的命名字段

15function handle

指向函数的指针

16user classes

从用户定义的类构造的对象

17java classes

从Java类构造的对象

例子 (Example)

使用以下代码创建脚本文件 -str = 'Hello World!'

n = 2345

d = double(n)

un = uint32(789.50)

rn = 5678.92347

c = int32(rn)

编译并执行上述代码时,会产生以下结果 -str = Hello World!

n = 2345

d = 2345

un = 790

rn = 5678.9

c = 5679

数据类型转换

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对于Handle Graphics对象句柄为True

isinteger确定输入是否为整数数组

isjava确定输入是否为Java对象

islogical确定输入是否为逻辑数组

isnumeric确定输入是否为数字数组

isobject确定输入是否为MATLAB对象

isreal检查输入是否为实数组

isscalar确定输入是否是标量

isstr确定输入是否为字符数组

isstruct确定输入是否为结构数组

isvector确定输入是否为矢量

class确定对象的类

validateattributes检查数组的有效性

whos列出工作空间中的变量,包括大小和类型

例子 (Example)

使用以下代码创建脚本文件 -x = 3

isinteger(x)

isfloat(x)

isvector(x)

isscalar(x)

isnumeric(x)

x = 23.54

isinteger(x)

isfloat(x)

isvector(x)

isscalar(x)

isnumeric(x)

x = [1 2 3]

isinteger(x)

isfloat(x)

isvector(x)

isscalar(x)

x = 'Hello'

isinteger(x)

isfloat(x)

isvector(x)

isscalar(x)

isnumeric(x)

运行该文件时,它会产生以下结果 -x = 3

ans = 0

ans = 1

ans = 1

ans = 1

ans = 1

x = 23.540

ans = 0

ans = 1

ans = 1

ans = 1

ans = 1

x =

1 2 3

ans = 0

ans = 1

ans = 1

ans = 0

x = Hello

ans = 0

ans = 0

ans = 1

ans = 0

ans = 0

MATLAB - Operators

运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。 MATLAB主要用于整个矩阵和数组。 因此,MATLAB中的运算符同时处理标量和非标量数据。 MATLAB允许以下类型的基本操作 -算术运算符

关系运算符

逻辑运算符

按位操作

设置操作

算术运算符 (Arithmetic Operators)

MATLAB允许两种不同类型的算术运算 -矩阵算术运算

数组算术运算

矩阵算术运算与线性代数中定义的相同。 数组操作在一维和多维数组上逐个元素地执行。

矩阵运算符和数组运算符由句点(。)符号区分。 但是,由于矩阵和数组的加法和减法操作相同,因此两种情况下的运算符相同。 下表给出了运算符的简要说明 -Sr.No.操作符和说明

1+

加或一元加。 A + B添加存储在变量A和B中的值.A和B必须具有相同的大小,除非一个是标量。 标量可以添加到任何大小的矩阵中。

2-

减法或一元减号。 AB从A中减去B的值.A和B必须具有相同的大小,除非一个是标量。 可以从任何大小的矩阵中减去标量。

3*

矩阵乘法。 C = A * B是矩阵A和B的线性代数乘积。更准确地说,

668f277376c71427137eff77e325f915.png

对于非标量A和B,A的列数必须等于B的行数。标量可以乘以任意大小的矩阵。

4.*

数组乘法。 A. * B是数组A和B的逐元素乘积.A和B必须具有相同的大小,除非其中一个是标量。

5/

斜线或矩阵右划分。 B/A与B * inv(A)大致相同。 更准确地说,B/A =(A'\ B')'。

6./

数组右分裂。 A./B是具有元素A(i,j)/ B(i,j)的矩阵。 A和B必须具有相同的大小,除非其中一个是标量。

7\

反斜杠或矩阵左分裂。 如果A是方阵,则A\B与inv(A)* B大致相同,除非它以不同的方式计算。 如果A是n×n矩阵,B是具有n个分量的列向量,或者是具有多个这样的列的矩阵,则X = A\B是等式AX = B的解。 如果A严重缩放或几乎是单数,则会显示警告消息。

8.\

数组左分裂。 A.\B是具有元素B(i,j)/ A(i,j)的矩阵。 A和B必须具有相同的大小,除非其中一个是标量。

9^

矩阵功率。 如果p是标量,则X ^ p是幂p的X. 如果p是整数,则通过重复平方来计算功率。 如果整数为负,则首先反转X. 对于p的其他值,计算涉及特征值和特征向量,使得如果[V,D] = eig(X),则X ^ p = V * D. ^ p/V.

10.^

阵列功率。 A. ^ B是具有元素A(i,j)到B(i,j)幂的矩阵。 A和B必须具有相同的大小,除非其中一个是标量。

11'

矩阵转置。 A'是A的线性代数转置。对于复数矩阵,这是复共轭转置。

12.'

数组转置。 一个。' 是A的数组转置。对于复数矩阵,这不涉及共轭。

关系运算符 (Relational Operators)

关系运算符也可以处理标量和非标量数据。 数组的关系运算符执行两个数组之间的逐个元素比较,并返回相同大小的逻辑数组,其中元素设置为逻辑1(true),其中关系为true,元素设置为逻辑0(false),其中不。

下表显示了MATLAB中可用的关系运算符 -Sr.No.操作符和说明

1<

Less than

2《=

小于或等于

3>

Greater than

4》=

大于或等于

5==

等于

6~=

不等于

逻辑运算符 (Logical Operators)

MATLAB提供两种类型的逻辑运算符和函数 -元素 - 这些运算符在逻辑数组的相应元素上运行。

短路 - 这些运算符以标量和逻辑表达式运行。

元素逻辑运算符在逻辑数组上逐个元素地操作。 符号&,|和〜是逻辑数组运算符AND,OR和NOT。

短路逻辑运算符允许逻辑运算短路。 符号&&和|| 是逻辑短路运算符AND和OR。

按位操作

按位运算符处理位并执行逐位运算。 &,|和^的真值表如下 -pqp&qp | qp ^ q

00000

01011

11110

10011

假设A = 60; 和B = 13; 现在采用二进制格式,它们如下 -

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A | B = 0011 1101

A ^ B = 0011 0001

~A = 1100 0011

MATLAB为逐位操作提供了各种功能,如“按位和”,“按位”或“按位非”操作,移位操作等。

下表显示了常用的按位操作 -功能目的

bitand(a, b)按位和整数a和b

bitcmp(a)a逐位补充

bitget(a,pos)在整数数组a获取指定位置pos位

bitor(a, b)整数a和b位OR

bitset(a, pos)在a的特定位置pos处设置位

bitshift(a, k)返回向左移位k位,相当于乘以2 k 。 k的负值对应于向右移位或除以2 | k | 并舍入到最接近负整数的整数。 任何溢出位都被截断。

bitxor(a, b)整数a和b逐位异或

swapbytes交换字节顺序

设置操作

MATLAB为集合操作提供了各种功能,例如联合,交集和集合成员资格的测试等。

下表显示了一些常用的集合操作 -Sr.No.功能说明

1intersect(A,B)

设置两个数组的交集; 返回A和B共有的值。返回的值按排序顺序排列。

2intersect(A,B,'rows')

将A的每一行和B的每一行视为单个实体,并返回A和B共同的行。返回矩阵的行按排序顺序排列。

3ismember(A,B)

返回一个与A大小相同的数组,包含1(true),其中A的元素在B中找到。在其他地方,它返回0(false)。

4ismember(A,B,'rows')

将A的每一行和B的每一行视为单个实体,并返回包含1(true)的向量,其中矩阵A的行也是B的行。否则,它返回0(false)。

5issorted(A)

如果A的元素按排序顺序返回逻辑1(true),否则返回逻辑0(false)。 输入A可以是矢量或N×1或1×N的字符串数组。 A is considered to be sorted if A和sort(A)的输出相等, A is considered to be sorted if A 。

6issorted(A, 'rows')

如果二维矩阵A的行按排序顺序返回逻辑1(真),否则返回逻辑0(假)。 Matrix A is considered to be sorted if A和sortrows(A)的输出相等, Matrix A is considered to be sorted if A 。

7setdiff(A,B)

设置两个数组的差异; 返回A中不在B中的值。返回数组中的值按排序顺序排列。

8setdiff(A,B,'rows')

将A的每一行和B的每一行视为单个实体,并返回A中不在B中的行。返回矩阵的行按排序顺序排列。

'rows'选项不支持单元格数组。

9setxor

设置两个数组的异或

10union

设置两个数组的并集

11unique

数组中的唯一值

MATLAB - Decision Making

决策结构要求程序员应指定程序要评估或测试的一个或多个条件,以及在条件被确定为真时要执行的语句,以及可选的其他语句,如果条件被确定为假。

以下是大多数编程语言中常见决策结构的一般形式 -

33c5bca12b132fee86ed688d1b7be3cb.png

MATLAB提供以下类型的决策制定声明。 点击以下链接查看其详细信息 -Sr.No.声明和说明

1if ... end statement

if ... end statement由一个布尔表达式后跟一个或多个语句组成。

2if...else...end statement

if statement后面可以跟一个可选的else statement ,该else statement在布尔表达式为false时执行。

3如果... elseif ... elseif ... else ...结束语句

if语句后面可以跟一个(或多个)可选的elseif...和else语句,这对于测试各种条件非常有用。

4嵌套if语句

您可以在另一个if或elseif语句中使用if或elseif语句。

5switch 语句

switch语句允许测试变量与值列表的相等性。

6嵌套的switch语句

您可以在另一个switch语句中使用一个switch语句。

MATLAB - Loop Types

可能存在需要多次执行代码块的情况。 通常,语句按顺序执行。 首先执行函数中的第一个语句,然后执行第二个语句,依此类推。

编程语言提供各种控制结构,允许更复杂的执行路径。

循环语句允许我们多次执行语句或语句组,以下是大多数编程语言中循环语句的一般形式 -

4c9b2f9588918f5944d7b0f82f87afa2.png

MATLAB提供以下类型的循环来处理循环要求。 点击以下链接查看其详细信息 -Sr.No.循环类型和描述

1循环

在给定条件为真时重复语句或语句组。 它在执行循环体之前测试条件。

2for循环

多次执行一系列语句,并缩写管理循环变量的代码。

3嵌套循环

您可以在任何其他循环中使用一个或多个循环。

循环控制语句 (Loop Control Statements)

循环控制语句将执行从其正常序列更改。 当执行离开作用域时,将销毁在该作用域中创建的所有自动对象。

MATLAB支持以下控制语句。 单击以下链接以检查其详细信息。Sr.No.控制声明和描述

1break statement

终止loop语句并将执行转移到loop语句。

2continue statement

导致循环跳过其身体的其余部分,并在重复之前立即重新测试其状态。

MATLAB - Vectors

向量是一维数字数组。 MATLAB允许创建两种类型的向量 -行向量

列向量

行向量

通过将元素集括在方括号中,使用空格或逗号分隔元素来创建Row vectors 。r = [7 8 9 10 11]

MATLAB将执行上述语句并返回以下结果 -r =

7 8 9 10 11

列向量

通过将元素集括在方括号中来创建Column vectors ,使用分号来分隔元素。c = [7; 8; 9; 10; 11]

MATLAB将执行上述语句并返回以下结果 -c =

7

8

9

10

11

引用向量的元素

您可以通过多种方式引用向量的一个或多个元素。 矢量v的第i 个分量称为v(i)。 例如 -v = [ 1; 2; 3; 4; 5; 6];% creating a column vector of 6 elements

v(3)

MATLAB将执行上述语句并返回以下结果 -ans = 3

当您引用带冒号的向量(例如v(:))时,会列出向量的所有组件。v = [ 1; 2; 3; 4; 5; 6];% creating a column vector of 6 elements

v(:)

MATLAB将执行上述语句并返回以下结果 -ans =

1

2

3

4

5

6

MATLAB允许您从矢量中选择一系列元素。

例如,让我们创建一个包含9个元素的行向量rv ,然后我们将通过编写rv(3:7)来引用元素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 - Matrix

矩阵是二维数字数组。

在MATLAB中,您可以通过以逗号或空格分隔的数字输入每行中的元素并使用分号标记每行的结尾来创建矩阵。

例如,让我们创建一个4乘5的矩阵a -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

引用矩阵的元素

为了引用矩阵mx 第 m行和第 n列中的元素,我们写 -mx(m, n);

例如,要引用矩阵a 第 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)。

让我们从矩阵的第 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

您也可以选择第m列到第 n列中的元素,为此我们写 -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

以同样的方式,您可以创建一个子矩阵,采用矩阵的子部分。

例如,让我们创建一个子矩阵sa取一个内部子部分 -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

删除矩阵中的行或列

您可以通过为该行或列分配一组空方括号[]来删除矩阵的整行或列。 基本上,[]表示一个空数组。

例如,让我们删除第四行 -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

例子 (Example)

在这个例子中,让我们创建一个3乘3的矩阵m,然后我们将复制该矩阵的第二行和第三行两次以创建一个4乘3的矩阵。

使用以下代码创建脚本文件 -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 - Arrays

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

一个魔术广场

magic square是一个正方形,当它的元素按行,列或对角添加时,它产生相同的总和。

magic()函数创建一个魔术方阵。 它需要一个单一的参数来给出正方形的大小。 参数必须是大于或等于3的标量。magic(4)

MATLAB将执行上述语句并返回以下结果 -ans =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

多维数组

具有两个以上维度的数组在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是3乘3阵列; 我们可以通过提供像 - 的值来为a添加第三个维度a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]

MATLAB将执行上述语句并返回以下结果 -a =

ans(:,:,1) =

0 0 0

0 0 0

0 0 0

ans(:,:,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...)

Where,B是创建的新数组

A1 , A2 ,...是要连接的数组

dim是连接数组的维度

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -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

Array 函数

MATLAB提供以下功能来排序,旋转,置换,重塑或移位数组内容。功能目的

length矢量长度或最大阵列尺寸

ndims数组维数

numel数组元素的数量

size数组尺寸

iscolumn确定输入是否为列向量

isempty确定数组是否为空

ismatrix确定输入是否为矩阵

isrow确定输入是否为行向量

isscalar确定输入是否是标量

isvector确定输入是否为矢量

blkdiag根据输入参数构造块对角矩阵

circshift循环移位阵列

ctranspose复共轭转置

diag矩阵的对角矩阵和对角线

flipdim沿指定维度翻转数组

fliplr从左到右翻转矩阵

flipud将矩阵翻转到最低点

ipermute逆变换ND阵列的尺寸

permute重新排列ND阵列的尺寸

repmat复制和平铺数组

reshape重塑阵列

rot90将矩阵旋转90度

shiftdim换档尺寸

issorted确定集合元素是否按排序顺序排列

sort按升序或降序对数组元素进行排序

sortrows按升序对行进行排序

squeeze删除单个尺寸

transposeTranspose

vectorize矢量化表达

例子 (Examples)

以下示例说明了上面提到的一些功能。

Length, Dimension and Number of elements −

创建一个脚本文件并在其中键入以下代码 -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

Circular Shifting of the Array Elements −

创建一个脚本文件并在其中键入以下代码 -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

排序数组

创建一个脚本文件并在其中键入以下代码 -v = [ 23 45 12 9 5 0 19 17] % horizontal 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

细胞阵列

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

cell函数用于创建单元格数组。 单元格函数的语法是 -C = cell(dim)

C = cell(dim1,...,dimN)

D = cell(obj)

Where,C是单元阵列;

dim是一个标量整数或整数向量,用于指定单元格数组C的维数;

dim1, ... , dimN是指定C的维数的标量整数;

obj是以下之一 -Java数组或对象

System.String或System.Object类型的.NET数组

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -c = cell(2, 5);

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

运行该文件时,它显示以下结果 -c =

{

[1,1] = Red

[2,1] = 1

[1,2] = Blue

[2,2] = 2

[1,3] = Green

[2,3] = 3

[1,4] = Yellow

[2,4] = 4

[1,5] = White

[2,5] = 5

}

访问单元格数组中的数据

有两种方法可以引用单元格数组的元素 -将索引括在第一个括号()中,以引用单元格集

将索引括在大括号{}中,以引用单个单元格中的数据

将索引括在第一个括号中时,它指的是一组单元格。

平滑括号中的单元阵列索引指的是单元组。

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

c(1:2,1:2)

MATLAB将执行上述语句并返回以下结果 -ans =

{

[1,1] = Red

[2,1] = 1

[1,2] = Blue

[2,2] = 2

}

您还可以通过使用花括号索引来访问单元格的内容。

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

c{1, 2:4}

MATLAB将执行上述语句并返回以下结果 -ans = Blue

ans = Green

ans = Yellow

MATLAB - Colon Notation

colon(:)是MATLAB中最有用的运算符之一。 它用于创建向量,下标数组和specify for iterations 。

如果你想创建一个包含1到10整数的行向量,你可以写 -1:10

MATLAB执行该语句并返回一个包含从1到10的整数的行向量 -ans =

1 2 3 4 5 6 7 8 9 10

如果要指定除1之外的增量值,例如 -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,:) 是第i排A.

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相同数量的元素。

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -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 - Numbers

MATLAB支持各种数字类,包括有符号和无符号整数以及单精度和双精度浮点数。 默认情况下,MATLAB将所有数值存储为双精度浮点数。

您可以选择将任意数字或数字数组存储为整数或单精度数字。

所有数字类型都支持基本数组操作和数学运算。

转换为各种数字数据类型

MATLAB提供以下函数来转换为各种数字数据类型 -功能目的

double转换为双精度数

single转换为单精度数

int8转换为8位有符号整数

int16转换为16位有符号整数

int32转换为32位有符号整数

int64转换为64位有符号整数

uint8转换为8位无符号整数

uint16转换为16位无符号整数

uint32转换为32位无符号整数

uint64转换为64位无符号整数

例子 (Example)

创建一个脚本文件并键入以下代码 -x = single([5.32 3.47 6.28]) .* 7.5

x = double([5.32 3.47 6.28]) .* 7.5

x = int8([5.32 3.47 6.28]) .* 7.5

x = int16([5.32 3.47 6.28]) .* 7.5

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

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

运行该文件时,它显示以下结果 -x =

39.900 26.025 47.100

x =

39.900 26.025 47.100

x =

38 23 45

x =

38 23 45

x =

38 23 45

x =

38 23 45

例子 (Example)

让我们再扩展前面的例子。 创建一个脚本文件并键入以下代码 -x = int32([5.32 3.47 6.28]) .* 7.5

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

x = num2cell(x)

运行该文件时,它显示以下结果 -x =

38 23 45

x =

38 23 45

x =

{

[1,1] = 38

[1,2] = 23

[1,3] = 45

}

最小和最大的整数

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

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

例子 (Example)

以下示例说明如何获取最小和最大的整数值。 创建一个脚本文件并在其中编写以下代码 -% displaying the smallest and largest signed integer data

str = 'The range for int8 is:\n\t%d to %d ';

sprintf(str, intmin('int8'), intmax('int8'))

str = 'The range for int16 is:\n\t%d to %d ';

sprintf(str, intmin('int16'), intmax('int16'))

str = 'The range for int32 is:\n\t%d to %d ';

sprintf(str, intmin('int32'), intmax('int32'))

str = 'The range for int64 is:\n\t%d to %d ';

sprintf(str, intmin('int64'), intmax('int64'))

% displaying the smallest and largest unsigned integer data

str = 'The range for uint8 is:\n\t%d to %d ';

sprintf(str, intmin('uint8'), intmax('uint8'))

str = 'The range for uint16 is:\n\t%d to %d ';

sprintf(str, intmin('uint16'), intmax('uint16'))

str = 'The range for uint32 is:\n\t%d to %d ';

sprintf(str, intmin('uint32'), intmax('uint32'))

str = 'The range for uint64 is:\n\t%d to %d ';

sprintf(str, intmin('uint64'), intmax('uint64'))

运行该文件时,它显示以下结果 -ans = The range for int8 is:

-128 to 127

ans = The range for int16 is:

-32768 to 32767

ans = The range for int32 is:

-2147483648 to 2147483647

ans = The range for int64 is:

0 to 0

ans = The range for uint8 is:

0 to 255

ans = The range for uint16 is:

0 to 65535

ans = The range for uint32 is:

0 to -1

ans = The range for uint64 is:

0 to 18446744073709551616

最小和最大浮点数

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

使用参数“single”调用时,这两个函数都返回可以用单精度数据类型表示的最大值和最小值,当使用参数“double”调用时,返回可以表示的最大值和最小值双精度数据类型。

例子 (Example)

以下示例说明如何获取最小和最大浮点数。 创建一个脚本文件并在其中编写以下代码 -% displaying the smallest and largest single-precision

% floating point number

str = 'The range for single is:\n\t%g to %g and\n\t %g to %g';

sprintf(str, -realmax('single'), -realmin('single'), ...

realmin('single'), realmax('single'))

% displaying the smallest and largest double-precision

% floating point number

str = 'The range for double is:\n\t%g to %g and\n\t %g to %g';

sprintf(str, -realmax('double'), -realmin('double'), ...

realmin('double'), realmax('double'))

运行该文件时,它显示以下结果 -ans = The range for single is:

-3.40282e+38 to -1.17549e-38 and

1.17549e-38 to 3.40282e+38

ans = The range for double is:

-1.79769e+308 to -2.22507e-308 and

2.22507e-308 to 1.79769e+308

MATLAB - Strings

在MATLAB中创建字符串非常简单。 事实上,我们已多次使用它。 例如,在命令提示符下键入以下内容 -my_string = 'IOWIKI'

MATLAB将执行上述语句并返回以下结果 -my_string = IOWIKI

MATLAB将所有变量视为数组,字符串被视为字符数组。 让我们使用whos命令检查上面创建的变量 -whos

MATLAB将执行上述语句并返回以下结果 -Name Size Bytes Class Attributes

my_string 1x16 32 char

有趣的是,您可以使用数字转换函数(如uint8或uint16将字符串中的字符转换为其数字代码。 char函数将整数向量转换回字符 -

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -my_string = 'Tutorial''s Point';

str_ascii = uint8(my_string) % 8-bit ascii values

str_back_to_char= char(str_ascii)

str_16bit = uint16(my_string) % 16-bit ascii values

str_back_to_char = char(str_16bit)

运行该文件时,它显示以下结果 -str_ascii =

84 117 116 111 114 105 97 108 39 115 32 80 111 105 110 116

str_back_to_char = Tutorial's Point

str_16bit =

84 117 116 111 114 105 97 108 39 115 32 80 111 105 110 116

str_back_to_char = Tutorial's Point

矩形字符数组

到目前为止我们讨论过的字符串是一维字符数组; 但是,我们需要存储更多。 我们需要在程序中存储更多的文本数据。 这是通过创建矩形字符数组来实现的。

创建矩形字符数组的最简单方法是通过根据需要垂直或水平连接两个或多个一维字符数组。

您可以通过以下任一方式垂直组合字符串 -使用MATLAB连接运算符[]并用分号(;)分隔每一行。 请注意,在此方法中,每行必须包含相同数量的字符。 对于具有不同长度的字符串,您应根据需要填充空格字符。

使用char函数。 如果字符串具有不同的长度,则char将较短的字符串填充为尾随空白,以便每行具有相同的字符数。

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -doc_profile = ['Zara Ali '; ...

'Sr. Surgeon '; ...

'R N Tagore Cardiology Research Center']

doc_profile = char('Zara Ali', 'Sr. Surgeon', ...

'RN Tagore Cardiology Research Center')

运行该文件时,它显示以下结果 -doc_profile =

Zara Ali

Sr. Surgeon

R N Tagore Cardiology Research Center

doc_profile =

Zara Ali

Sr. Surgeon

RN Tagore Cardiology Research Center

您可以通过以下任一方式水平组合字符串 -使用MATLAB连接运算符[]并用逗号或空格分隔输入字符串。 此方法保留输入数组中的任何尾随空格。

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

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -name = 'Zara Ali ';

position = 'Sr. Surgeon ';

worksAt = 'R N Tagore Cardiology Research Center';

profile = [name ', ' position ', ' worksAt]

profile = strcat(name, ', ', position, ', ', worksAt)

运行该文件时,它显示以下结果 -profile = Zara Ali , Sr. Surgeon , R N Tagore Cardiology Research Center

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

将字符串组合成单元阵列

从我们之前的讨论中可以清楚地看出,组合不同长度的字符串可能会很麻烦,因为数组中的所有字符串都必须具有相同的长度。 我们在字符串的末尾使用了空格来均衡它们的长度。

但是,组合字符串的更有效方法是将结果数组转换为单元数组。

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

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

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -name = 'Zara Ali ';

position = 'Sr. Surgeon ';

worksAt = 'R N Tagore Cardiology Research Center';

profile = char(name, position, worksAt);

profile = cellstr(profile);

disp(profile)

运行该文件时,它显示以下结果 -{

[1,1] = Zara Ali

[2,1] = Sr. Surgeon

[3,1] = R N Tagore Cardiology Research Center

}

MATLAB中的字符串函数

MATLAB提供了许多字符串函数,用于创建,组合,解析,比较和操作字符串。

下表提供了MATLAB中字符串函数的简要说明 -功能目的

用于在字符数组中存储文本,组合字符数组等的函数。

blanks创建空白字符串

cellstr从字符数组创建字符串的单元格数组

char转换为字符数组(字符串)

iscellstr确定输入是否是字符串的单元格数组

ischar确定项是否为字符数组

sprintf格式化数据到字符串

strcat水平连接字符串

strjoin将单元格数组中的字符串加入单个字符串

用于识别字符串部分,查找和替换子字符串的函数

ischar确定项是否为字符数组

isletter数组元素是字母

isspace数组元素是空格字符

isstrprop确定字符串是否为指定的类别

sscanf从字符串中读取格式化数据

strfind找到另一个字符串

strrep查找并替换子字符串

strsplit在指定的分隔符处拆分字符串

strtok字符串的选定部分

validatestring检查文本字符串的有效性

symvar确定表达式中的符号变量

regexp匹配正则表达式(区分大小写)

regexpi匹配正则表达式(不区分大小写)

regexprep使用正则表达式替换字符串

regexptranslate将字符串转换为正则表达式

字符串比较的函数

strcmp比较字符串(区分大小写)

strcmpi比较字符串(不区分大小写)

strncmp比较字符串的前n个字符(区分大小写)

strncmpi比较字符串的前n个字符(不区分大小写)

用于将字符串更改为大写或小写,创建或删除空格的函数

deblank从字符串末尾剥去尾随空格

strtrim从字符串中删除前导和尾随空格

lower将字符串转换为小写

upper将字符串转换为大写

strjust对齐字符数组

例子 (Examples)

以下示例说明了上述一些字符串函数 -

格式化字符串

创建一个脚本文件并在其中键入以下代码 -A = pi*1000*ones(1,5);

sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A)

运行该文件时,它显示以下结果 -ans = 3141.592654

3141.59

+3141.59

3141.59

000003141.59

加入字符串

创建一个脚本文件并在其中键入以下代码 -%cell array of strings

str_array = {'red','blue','green', 'yellow', 'orange'};

% Join strings in cell array into single string

str1 = strjoin(str_array, "-")

str2 = strjoin(str_array, ",")

运行该文件时,它显示以下结果 -str1 = red-blue-green-yellow-orange

str2 = red,blue,green,yellow,orange

查找和替换字符串

创建一个脚本文件并在其中键入以下代码 -students = {'Zara Ali', 'Neha Bhatnagar', ...

'Monica Malik', 'Madhu Gautam', ...

'Madhu Sharma', 'Bhawna Sharma',...

'Nuha Ali', 'Reva Dutta', ...

'Sunaina Ali', 'Sofia Kabir'};

% The strrep function searches and replaces sub-string.

new_student = strrep(students(8), 'Reva', 'Poulomi')

% Display first names

first_names = strtok(students)

运行该文件时,它显示以下结果 -new_student =

{

[1,1] = Poulomi Dutta

}

first_names =

{

[1,1] = Zara

[1,2] = Neha

[1,3] = Monica

[1,4] = Madhu

[1,5] = Madhu

[1,6] = Bhawna

[1,7] = Nuha

[1,8] = Reva

[1,9] = Sunaina

[1,10] = Sofia

}

比较字符串

创建一个脚本文件并在其中键入以下代码 -str1 = 'This is test'

str2 = 'This is text'

if (strcmp(str1, str2))

sprintf('%s and %s are equal', str1, str2)

else

sprintf('%s and %s are not equal', str1, str2)

end

运行该文件时,它显示以下结果 -str1 = This is test

str2 = This is text

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

MATLAB - 函数

函数是一组一起执行任务的语句。 在MATLAB中,函数在单独的文件中定义。 文件和函数的名称应该相同。

函数对自己工作空间中的变量进行操作,该工作空间也称为local workspace ,与您在MATLAB命令提示符(称为base workspace访问的工作local workspace分开。

函数可以接受多个输入参数,并且可以返回多个输出参数。

函数语句的语法是 -function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)

例子 (Example)

以下名为mymax函数应该写在名为mymax.m的文件中。 它需要五个数字作为参数并返回数字的最大值。

创建一个名为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函数有五个输入参数和一个输出参数。

函数语句后面的注释行提供帮助文本。 键入时会打印这些行 -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命令行或函数或脚本中定义匿名函数。

这样您就可以创建简单的函数,而无需为它们创建文件。

从表达式创建匿名函数的语法是f = @(arglist)expression

例子 (Example)

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

创建一个脚本文件并在其中键入以下代码 -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

主函数和子函数 (Primary and Sub-Functions)

必须在文件中定义除匿名函数之外的任何函数。 每个函数文件都包含一个首先出现的必需主函数和任何数量的可选子函数,它们位于主函数之后并由它使用。

可以从命令行或其他函数从定义它们的文件外部调用主函数,但不能从函数文件外部的命令行或其他函数调用子函数。

子函数仅对主函数和定义它们的函数文件中的其他子函数可见。

例子 (Example)

让我们编写一个名为二次的函数来计算二次方程的根。 该函数将采用三个输入,二次系数,线性系数和常数项。 它会回归根源。

函数文件quadratic.m将包含主函数quadratic函数和子函数disc ,它计算判别式。

创建一个函数文件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

嵌套函数

您可以在另一个函数的主体内定义函数。 这些被称为嵌套函数。 嵌套函数包含任何其他函数的任何或所有组件。

嵌套函数在另一个函数的范围内定义,并且它们共享对包含函数工作空间的访问。

嵌套函数遵循以下语法 -function x = A(p1, p2)

...

B(p2)

function y = B(p3)

...

end

...

end

例子 (Example)

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

创建一个函数文件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.73205

私有函数 (Private Functions)

私有函数是主要功能,仅对有限的一组其他函数可见。 如果您不想公开函数的实现,可以将它们创建为私有函数。

私有函数驻留在具有特殊名称private subfolders 。

它们仅对父文件夹中的函数可见。

例子 (Example)

让我们重写quadratic函数。 然而,这次计算判别式的disc函数将是私有函数。

在工作目录中创建一个名为private的子文件夹。 将以下功能文件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-efficient 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.73205

全局变量 (Global Variables)

全局变量可以由多个函数共享。 为此,您需要在所有函数中将变量声明为全局变量。

如果要从基础工作空间访问该变量,请在命令行声明该变量。

全局声明必须在变量实际用于函数之前发生。 最好使用大写字母表示全局变量的名称,以便将它们与其他变量区分开来。

例子 (Example)

让我们创建一个名为average.m的函数文件,并在其中键入以下代码 -function avg = average(nums)

global TOTAL

avg = sum(nums)/TOTAL;

end

创建一个脚本文件并在其中键入以下代码 -global TOTAL;

TOTAL = 10;

n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];

av = average(n)

运行该文件时,它将显示以下结果 -av = 35.500

MATLAB - Data Import

在MATLAB中导入数据意味着从外部文件加载数据。 importdata函数允许加载不同格式的各种数据文件。 它有以下五种形式 -Sr.No.功能说明

1A = importdata(filename)

将数据从filename表示的filename加载到数组A.

2A = importdata('-pastespecial')

从系统剪贴板而不是从文件加载数据。

3A = importdata(___, delimiterIn)

将delimiterIn解释为ASCII文件,文件名或剪贴板数据中的列分隔符。 您可以将delimiterIn与上述语法中的任何输入参数一起使用。

4A = importdata(___, delimiterIn, headerlinesIn)

从ASCII文件,文件名或剪贴板加载数据,从行headerlinesIn+1开始读取数字数据。

5[A, delimiterOut, headerlinesOut] = importdata(___)

使用先前语法中的任何输入参数,返回检测到的delimiterOut中输入ASCII文件的delimiterOut符字符以及headerlinesOut检测到的标题行数。默认情况下,Octave不支持importdata()函数,因此您必须搜索并安装此软件包,以使以下示例与您的Octave安装一起使用。

例子1 (Example 1)

让我们加载并显示图像文件。 创建一个脚本文件并在其中键入以下代码 -filename = 'smile.jpg';

A = importdata(filename);

image(A);

运行该文件时,MATLAB显示图像文件。 但是,您必须将其存储在当前目录中。

6892000e760eaab7aab3ee747ca13aa8.png

例子2 (Example 2)

在此示例中,我们导入文本文件并指定分隔符和列标题。 让我们创建一个带有列标题的空格分隔的ASCII文件,名为weeklydata.txt 。

我们的文本文件weeklydata.txt看起来像这样 -SunDay MonDay TuesDay WednesDay ThursDay FriDay SaturDay

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

创建一个脚本文件并在其中键入以下代码 -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

SaturDay

81.5300

74.6800

74.5100

93.1800

46.6000

例子3 (Example 3)

在此示例中,让我们从剪贴板导入数据。

将以下行复制到剪贴板 -

Mathematics is simple

创建一个脚本文件并键入以下代码 -A = importdata('-pastespecial')

运行该文件时,它显示以下结果 -A =

'Mathematics is simple'

低级文件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函数以字节或位级别读取数据流。

例子 (Example)

我们在工作目录中保存了一个文本数据文件'myfile.txt'。 该文件存储了三个月的降雨量数据; 2012年6月,7月和8月。

myfile.txt中的数据包含五个地方的重复时间,月份和降雨量测量集。 标题数据存储月数M; 所以我们有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

我们将从此文件导入数据并显示此数据。 采取以下步骤 -使用fopen函数打开文件并获取文件标识符。

使用format specifiers描述文件中的数据,例如字符串的' %d ',整数的' %d '或浮点数的' %f '。

要跳过文件中的文字字符,请将它们包含在格式说明中。 要跳过数据字段,请在说明符中使用星号('*')。

例如,要读取标题并返回M的单个值,我们写 -M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1);

默认情况下, fscanf根据我们的格式描述读取数据,直到找不到数据的任何匹配,或者它到达文件的末尾。 这里我们将使用for循环来读取3组数据,每次读取7行和5列。

我们将在工作空间中创建一个名为mydata的结构,以存储从文件中读取的数据。 此结构有三个字段 - time , month和raindata数组。

创建一个脚本文件并在其中键入以下代码 -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\n%*s %*s %*s %*s\nM=%d\n\n', 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 - Data Output

MATLAB中的数据导出(或输出)意味着写入文件。 MATLAB允许您在另一个读取ASCII文件的应用程序中使用您的数据。 为此,MATLAB提供了几种数据导出选项。

您可以创建以下类型的文件 -来自数组的矩形,分隔的ASCII数据文件。

击键日记(或日志)文件以及生成的文本输出。

使用fprintf等低级函数的专用ASCII文件。

MEX文件,用于访问写入特定文本文件格式的C/C ++或Fortran例程。

除此之外,您还可以将数据导出到电子表格。

有两种方法可以将数值数组导出为分隔的ASCII数据文件 -使用save函数并指定-ascii限定符

使用dlmwrite函数

使用保存功能的语法是 -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是分隔符。

例子 (Example)

以下示例演示了该概念。 创建一个脚本文件并键入以下代码 -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执行上述语句并显示以下结果。 这是8位ASCII格式的字符串'hello'的字符。1.0400000e+02 1.0100000e+02 1.0800000e+02 1.0800000e+02 1.1100000e+02

写日记文件

日记文件是MATLAB会话的活动日志。 日记功能在磁盘文件中创建会话的精确副本,不包括图形。

要打开日记功能,请键入 -diary

或者,您可以提供日志文件的名称,例如 -diary logdata.out

要关闭日记功能 -diary off

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

使用低级I/O将数据导出到文本数据文件

到目前为止,我们已经导出了数字数组。 但是,您可能需要创建其他文本文件,包括数字和字符数据的组合,非矩形输出文件或具有非ASCII编码方案的文件。 出于这些目的,MATLAB提供了低级fprintf函数。

与低级I/O文件活动一样,在导出之前,您需要使用fopen函数打开或创建文件并获取文件标识符。 默认情况下,fopen打开一个文件以进行只读访问。 您应该指定写入或附加的权限,例如“w”或“a”。

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

以下示例演示了该概念 -

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -% 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\n\n');

% print values in column order

% two values appear on each row of the file

fprintf(fid, '%f %f\n', 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 - Plotting

要绘制函数的图形,您需要执行以下步骤 -通过指定要为其绘制函数的变量x range of values定义x

定义函数, y = f(x)

调用plot命令,如plot(x, y)

以下示例将演示该概念。 让我们绘制简单函数y = x , y = x的值范围从0到100,增量为5。

创建一个脚本文件并键入以下代码 -x = [0:5:100];

y = x;

plot(x, y)

运行该文件时,MATLAB显示以下图表 -

1f561063004ca6765ed9dac787bc124b.png

让我们再举一个例子来绘制函数y = x 2 。 在这个例子中,我们将绘制两个具有相同功能的图形,但在第二次,我们将减少增量的值。 请注意,随着我们减少增量,图表变得更加平滑。

创建一个脚本文件并键入以下代码 -x = [1 2 3 4 5 6 7 8 9 10];

x = [-100:20:100];

y = x.^2;

plot(x, y)

运行该文件时,MATLAB显示以下图表 -

742c08100f6efa023792c73ccac48f11.png

稍微更改代码文件,将增量减少到5 -x = [-100:5:100];

y = x.^2;

plot(x, y)

MATLAB绘制更平滑的图形 -

1cc4774e25346b863f8f5a9d630b7fb4.png

在图表上添加标题,标签,网格线和缩放

MATLAB允许您添加标题,沿x轴和y轴的标签,网格线以及调整轴以使图形更加丰富。xlabel和ylabel命令沿x轴和y轴生成标签。

title命令允许您在图表上添加标题。

grid on命令允许您将网格线放在图形上。

axis equal命令允许生成具有相同比例因子和两个轴上的空间的图。

axis square命令生成方形图。

例子 (Example)

创建一个脚本文件并键入以下代码 -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生成以下图表 -

5d9406c145dd1ab79270cfbd738d4489.png

在同一图上绘制多个函数

您可以在同一个绘图上绘制多个图形。 以下示例演示了该概念 -

例子 (Example)

创建一个脚本文件并键入以下代码 -x = [0 : 0.01: 10];

y = sin(x);

g = cos(x);

plot(x, y, x, g, '.-'), legend('Sin(x)', 'Cos(x)')

MATLAB生成以下图表 -

0d573fafa053f2ec361bcc6b7cb13fe1.png

在图表上设置颜色

MATLAB为绘制图形提供了八种基本颜色选项。 下表显示了颜色及其代码 -码颜色

wWhite

kBlack

bBlue

rRed

cCyan

gGreen

mMagenta

yYellow

例子 (Example)

让我们绘制两个多项式的图f(x)= 3x 4 + 2x 3 + 7x 2 + 2x + 9和

g(x)= 5x 3 + 9x + 2

创建一个脚本文件并键入以下代码 -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会生成以下图表 -

2cf2057ce7dd7b559f196c9367b7d039.png

设置轴刻度

axis命令允许您设置轴刻度。 您可以使用axis命令以下列方式为x和y轴提供最小值和最大值 -axis ( [xmin xmax ymin ymax] )

以下示例显示了这一点 -

例子 (Example)

创建一个脚本文件并键入以下代码 -x = [0 : 0.01: 10];

y = exp(-x).* sin(2*x + 3);

plot(x, y), axis([0 10 -1 1])

运行该文件时,MATLAB会生成以下图表 -

2f8854d792e6f2b2370bc8ce6c535dc1.png

Generating Sub-Plots

在同一图中创建绘图数组时,每个绘图都称为子绘图。 subplot命令用于创建子图。

该命令的语法是 -subplot(m, n, p)

其中, m和n是绘图数组的行数和列数, p指定放置特定绘图的位置。

使用subplot命令创建的每个绘图都可以具有自己的特征。 以下示例演示了这一概念 -

例子 (Example)

让我们生成两个图 -

y = e -1.5x sin(10x)

y = e -2x sin(10x)

创建一个脚本文件并键入以下代码 -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会生成以下图表 -

0d802d83d74dafa9f9b0be887d0dfb54.png

MATLAB - Graphics

本章将继续探索MATLAB的绘图和图形功能。 我们将讨论 -绘制条形图

绘制轮廓

三维图

绘图条形图

bar命令绘制二维条形图。 让我们举一个例子来证明这个想法。

例子 (Example)

让我们有一个有10名学生的虚构教室。 我们知道这些学生获得的分数百分比是75,58,90,87,50,85,92,75,60和95.我们将绘制这些数据的条形图。

创建一个脚本文件并键入以下代码 -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显示以下条形图 -

667243aaca30f8f4916d2aac24902662.png

绘制轮廓

两个变量的函数的等高线是曲线,函数具有恒定值。 轮廓线用于通过连接高于给定水平的相等高度的点(例如平均海平面)来创建等高线图。

MATLAB提供了用于绘制等高线图的contour功能。

例子 (Example)

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

meshgrid命令用于生成元素矩阵,该矩阵给出x和y上的范围以及每种情况下的增量规范。

让我们绘制函数g = f(x,y),其中-5≤x≤5,-3≤y≤3。让我们对这两个值取0.1的增量。 变量设置为 -[x,y] = meshgrid(–5:0.1:5, –3:0.1:3);

最后,我们需要分配功能。 让我们的函数为:x 2 + y 2

创建一个脚本文件并键入以下代码 -[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

运行该文件时,MATLAB显示以下等高线图 -

ce9f5ae3a81f57e010e6259806bb41ad.png

让我们稍微修改一下代码以修饰地图[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显示以下等高线图 -

0044ecd60632b2e154c3afbc73fe5081.png

三维图

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

和以前一样,为了定义g,我们首先使用meshgrid命令在函数域上创建一组(x,y)点。 接下来,我们分配函数本身。 最后,我们使用surf命令创建表面图。

以下示例演示了该概念 -

例子 (Example)

让我们为函数g = xe创建一个3D表面图- (x 2 + y 2 )

创建一个脚本文件并键入以下代码 -[x,y] = meshgrid(-2:.2:2);

g = x .* exp(-x.^2 - y.^2);

surf(x, y, g)

print -deps graph.eps

运行该文件时,MATLAB显示以下三维地图 -

1e5db6bd18d9bc324e8ac81a2fd0d148.png

您还可以使用mesh命令生成三维曲面。 但是, surf命令以颜色显示连接线和曲面的面,而mesh命令创建一个线框曲面,其中彩色线连接定义点。

MATLAB - Algebra

到目前为止,我们已经看到所有示例都在MATLAB以及GNU中工作,或者称为Octave。 但是对于求解基本代数方程,MATLAB和Octave都没什么不同,所以我们将尝试在单独的部分中介绍MATLAB和Octave。

我们还将讨论代数表达式的分解和简化。

在MATLAB中求解基本代数方程

solve函数用于求解代数方程。 在最简单的形式中,solve函数将引号括起来的等式作为参数。

例如,让我们在等式x-5 = 0中求解xsolve('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 - 3t 2 = 0,对于v。在这种情况下,我们应该写 -solve('v-u-3*t^2=0', 'v')

MATLAB将执行上述语句并返回以下结果 -ans =

3*t^2 + u

求解Octave中的基本代数方程

roots函数用于求解Octave中的代数方程式,您可以按照以下方式编写上述示例 -

例如,让我们在等式x-5 = 0中求解xroots([1, -5])

Octave将执行上述声明并返回以下结果 -ans = 5

您也可以将求解函数称为 -y = roots([1, -5])

Octave将执行上述声明并返回以下结果 -y = 5

在MATLAB中求解二次方程

solve函数也可以求解高阶方程。 它通常用于求解二次方程。 该函数返回数组中方程的根。

以下示例解决了二次方程式x 2 -7x +12 = 0.创建脚本文件并键入以下代码 -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中求解二次方程x 2 -7x +12 = 0。 创建一个脚本文件并键入以下代码 -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)= 0solve('(x-3)^2*(x-7)=0')

MATLAB将执行上述语句并返回以下结果 -ans =

3

3

7

在高阶方程的情况下,根很长,包含许多项。 您可以通过将它们转换为double来获得此类根的数值。 以下示例解决了四阶方程x 4 - 7x 3 + 3x 2 - 5x + 9 = 0。

创建一个脚本文件并键入以下代码 -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中的高阶方程

以下示例解决了四阶方程x 4 - 7x 3 + 3x 2 - 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

创建一个脚本文件并键入以下代码 -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中扩展和收集方程

expand和collect功能分别扩展和收集方程。 以下示例演示了这些概念 -

使用许多符号函数时,应声明变量是符号的。

创建一个脚本文件并键入以下代码 -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功能,分别扩展和收集方程。 以下示例演示了这些概念 -

当您使用许多符号函数时,您应该声明您的变量是符号的,但Octave有不同的方法来定义符号变量。 注意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函数是表达式的factor , simplify函数简化了表达式。 以下示例演示了该概念 -

例子 (Example)

创建一个脚本文件并键入以下代码 -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 - Calculus

MATLAB提供了解决微分和积分微积分问题的各种方法,解决了任意度数的微分方程和极限的计算。 最重要的是,您可以通过求解原始函数及其导数,轻松绘制复杂函数的图形并检查图形上的最大值,最小值和其他文具点。

本章将讨论微积分问题。 在本章中,我们将讨论预演算概念,即计算函数的极限和验证极限的性质。

在下一章“ Differential ,我们将计算表达式的导数并在图形上找到局部最大值和最小值。 我们还将讨论求解微分方程。

最后,在Integration一章中,我们将讨论积分计算。

计算限制

MATLAB提供了计算限制的limit功能。 在最基本的形式中, limit函数将表达式作为参数,并在独立变量变为零时查找表达式的限制。

例如,让我们计算函数f(x)=(x 3 + 5)/(x 4 + 7)的极限 ,因为x趋于零。syms x

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

MATLAB将执行上述语句并返回以下结果 -ans =

5/7

限制函数属于符号计算领域; 你需要使用syms函数告诉MATLAB你正在使用哪些符号变量。 您还可以计算函数的限制,因为变量趋向于除零之外的某个数字。 要计算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

限制基本属性的验证

代数极限定理提供了极限的一些基本属性。 这些如下 -

e58e07ca3af873f378a3857e3fb86415.png

让我们考虑两个功能 -f(x)=(3x + 5)/(x - 3)

g(x)= x 2 + 1。

让我们计算两个函数中x趋于5的函数的极限,并使用这两个函数和MATLAB验证极限的基本属性。

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -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

左右两侧限制

当函数对某个特定的变量值具有不连续性时,该点上不存在该限制。 换句话说,函数f(x)的极限在x = a时具有不连续性,当x从左侧接近x时,极限值不等于x从右侧接近时的极限值。

这导致左手和右手限制的概念。 对于x a,从左边开始,即x接近a。 对于x> a的值,右手限制被定义为x - > a,从右边开始,即x接近a。 当左手限制和右手限制不相等时,限制不存在。

让我们考虑一个功能 -

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

我们将证明lim x-“3 f(x)不存在。 MATLAB帮助我们以两种方式建立这一事实 -通过绘制函数图并显示不连续性。

通过计算限制并显示两者都不同。

通过将字符串“left”和“right”作为最后一个参数传递给limit命令来计算左手和右手限制。

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -f = (x - 3)/abs(x-3);

ezplot(f,[-1,5])

l = limit(f,x,3,'left')

r = limit(f,x,3,'right')

运行该文件时,MATLAB绘制以下图表

f4309bce7d3b04538ff9f804330e38c3.png

在此之后显示输出 -l =

-1

r =

1

MATLAB - Differential

MATLAB提供了用于计算符号导数的diff命令。 在最简单的形式中,您将要区分为diff命令的函数作为参数传递。

例如,让我们计算函数f(t)= 3t 2 + 2t -2的导数

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -syms t

f = 3*t^2 + 2*t^(-2);

diff(f)

编译并执行上述代码时,会产生以下结果 -ans =

6*t - 4/t^3

以下是Octave相当于上面的计算 -pkg load symbolic

symbols

t = sym("t");

f = 3*t^2 + 2*t^(-2);

differentiate(f,t)

Octave执行代码并返回以下结果 -ans =

-(4.0)*t^(-3.0)+(6.0)*t

基本分化规则的验证

让我们简要说明用于区分函数的各种方程或规则并验证这些规则。 为此,我们将f'(x)表示为一阶导数,f“(x)表示二阶导数。

以下是差异化的规则 -

Rule 1

对于任何函数f和g以及任何实数a和b是函数的导数 -

h(x) = af(x) + bg(x)相对于x由下式给出 -

h'(x) = af'(x) + bg'(x)

Rule 2

sum规则表明如果f和g是两个函数,f'和g'分别是它们的导数,那么,

( f + g)' = f' + g'

(f - g)' = f' - g'

Rule 3

product规则规定如果f和g是两个函数,f'和g'分别是它们的导数,那么,

(fg)' = f'.g + g'.f

Rule 4

quotient规则指出如果f和g是两个函数,f'和g'分别是它们的导数,那么,

(f/g)' = (f'.g - g'.f)/g 2

Rule 5

polynomial或基本幂次规则表明,如果y = f(x) = x n ,则f' = n. x (n-1) f' = n. x (n-1)

该规则的直接结果是任何常数的导数为零,即,如果y = k ,则任何常数

f' = 0

Rule 6

chain规则指出函数h(x) = f(g(x))的函数相对于x的导数是,

h'(x)= f'(g(x)).g'(x)

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -syms x

syms t

f = (x + 2)*(x^2 + 3)

der1 = diff(f)

f = (t^2 + 3)*(sqrt(t) + t^3)

der2 = diff(f)

f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)

der3 = diff(f)

f = (2*x^2 + 3*x)/(x^3 + 1)

der4 = diff(f)

f = (x^2 + 1)^17

der5 = diff(f)

f = (t^3 + 3* t^2 + 5*t -9)^(-6)

der6 = diff(f)

运行该文件时,MATLAB显示以下结果 -f =

(x^2 + 3)*(x + 2)

der1 =

2*x*(x + 2) + x^2 + 3

f =

(t^(1/2) + t^3)*(t^2 + 3)

der2 =

(t^2 + 3)*(3*t^2 + 1/(2*t^(1/2))) + 2*t*(t^(1/2) + t^3)

f =

(x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)

der3 =

(2*x - 2)*(3*x^3 - 5*x^2 + 2) - (- 9*x^2 + 10*x)*(x^2 - 2*x + 1)

f =

(2*x^2 + 3*x)/(x^3 + 1)

der4 =

(4*x + 3)/(x^3 + 1) - (3*x^2*(2*x^2 + 3*x))/(x^3 + 1)^2

f =

(x^2 + 1)^17

der5 =

34*x*(x^2 + 1)^16

f =

1/(t^3 + 3*t^2 + 5*t - 9)^6

der6 =

-(6*(3*t^2 + 6*t + 5))/(t^3 + 3*t^2 + 5*t - 9)^7

以下是Octave相当于上面的计算 -pkg load symbolic

symbols

x = sym("x");

t = sym("t");

f = (x + 2)*(x^2 + 3)

der1 = differentiate(f,x)

f = (t^2 + 3)*(t^(1/2) + t^3)

der2 = differentiate(f,t)

f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)

der3 = differentiate(f,x)

f = (2*x^2 + 3*x)/(x^3 + 1)

der4 = differentiate(f,x)

f = (x^2 + 1)^17

der5 = differentiate(f,x)

f = (t^3 + 3* t^2 + 5*t -9)^(-6)

der6 = differentiate(f,t)

Octave执行代码并返回以下结果 -f =

(2.0+x)*(3.0+x^(2.0))

der1 =

3.0+x^(2.0)+(2.0)*(2.0+x)*x

f =

(t^(3.0)+sqrt(t))*(3.0+t^(2.0))

der2 =

(2.0)*(t^(3.0)+sqrt(t))*t+((3.0)*t^(2.0)+(0.5)*t^(-0.5))*(3.0+t^(2.0))

f =

(1.0+x^(2.0)-(2.0)*x)*(2.0-(5.0)*x^(2.0)+(3.0)*x^(3.0))

der3 =

(-2.0+(2.0)*x)*(2.0-(5.0)*x^(2.0)+(3.0)*x^(3.0))+((9.0)*x^(2.0)-(10.0)*x)*(1.0+x^(2.0)-(2.0)*x)

f =

(1.0+x^(3.0))^(-1)*((2.0)*x^(2.0)+(3.0)*x)

der4 =

(1.0+x^(3.0))^(-1)*(3.0+(4.0)*x)-(3.0)*(1.0+x^(3.0))^(-2)*x^(2.0)*((2.0)*x^(2.0)+(3.0)*x)

f =

(1.0+x^(2.0))^(17.0)

der5 =

(34.0)*(1.0+x^(2.0))^(16.0)*x

f =

(-9.0+(3.0)*t^(2.0)+t^(3.0)+(5.0)*t)^(-6.0)

der6 =

-(6.0)*(-9.0+(3.0)*t^(2.0)+t^(3.0)+(5.0)*t)^(-7.0)*(5.0+(3.0)*t^(2.0)+(6.0)*t)

指数,对数和三角函数的导数

下表提供了常用指数函数,对数函数和三角函数的导数 -功能衍生物

c ax c ax .ln ca(ln是自然对数)

e x e x

ln x 1/x

ln c x 1/x.ln c

x x x x 。(1 + ln x)

sin(x) cos(x)

cos(x) -sin(x)

tan(x) sec 2 (x),或1/cos 2 (x),或1 + tan 2 (x)

cot(x) -csc 2 (x),或-1/sin 2 (x),或 - (1 + cot 2 (x))

sec(x) sec(x).tan(x)

csc(x) -csc(x).cot(x)

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -syms x

y = exp(x)

diff(y)

y = x^9

diff(y)

y = sin(x)

diff(y)

y = tan(x)

diff(y)

y = cos(x)

diff(y)

y = log(x)

diff(y)

y = log10(x)

diff(y)

y = sin(x)^2

diff(y)

y = cos(3*x^2 + 2*x + 1)

diff(y)

y = exp(x)/sin(x)

diff(y)

运行该文件时,MATLAB显示以下结果 -y =

exp(x)

ans =

exp(x)

y =

x^9

ans =

9*x^8

y =

sin(x)

ans =

cos(x)

y =

tan(x)

ans =

tan(x)^2 + 1

y =

cos(x)

ans =

-sin(x)

y =

log(x)

ans =

1/x

y =

log(x)/log(10)

ans =

1/(x*log(10))

y =

sin(x)^2

ans =

2*cos(x)*sin(x)

y =

cos(3*x^2 + 2*x + 1)

ans =

-sin(3*x^2 + 2*x + 1)*(6*x + 2)

y =

exp(x)/sin(x)

ans =

exp(x)/sin(x) - (exp(x)*cos(x))/sin(x)^2

以下是Octave相当于上面的计算 -pkg load symbolic

symbols

x = sym("x");

y = Exp(x)

differentiate(y,x)

y = x^9

differentiate(y,x)

y = Sin(x)

differentiate(y,x)

y = Tan(x)

differentiate(y,x)

y = Cos(x)

differentiate(y,x)

y = Log(x)

differentiate(y,x)

% symbolic packages does not have this support

%y = Log10(x)

%differentiate(y,x)

y = Sin(x)^2

differentiate(y,x)

y = Cos(3*x^2 + 2*x + 1)

differentiate(y,x)

y = Exp(x)/Sin(x)

differentiate(y,x)

Octave执行代码并返回以下结果 -y =

exp(x)

ans =

exp(x)

y =

x^(9.0)

ans =

(9.0)*x^(8.0)

y =

sin(x)

ans =

cos(x)

y =

tan(x)

ans =

1+tan(x)^2

y =

cos(x)

ans =

-sin(x)

y =

log(x)

ans =

x^(-1)

y =

sin(x)^(2.0)

ans =

(2.0)*sin(x)*cos(x)

y =

cos(1.0+(2.0)*x+(3.0)*x^(2.0))

ans =

-(2.0+(6.0)*x)*sin(1.0+(2.0)*x+(3.0)*x^(2.0))

y =

sin(x)^(-1)*exp(x)

ans =

sin(x)^(-1)*exp(x)-sin(x)^(-2)*cos(x)*exp(x)

计算高阶导数

为了计算函数f的更高导数,我们使用语法diff(f,n) 。

让我们计算函数y = f(x)= x .e -3x的二阶导数f = x*exp(-3*x);

diff(f, 2)

MATLAB执行代码并返回以下结果 -ans =

9*x*exp(-3*x) - 6*exp(-3*x)

以下是Octave相当于上面的计算 -pkg load symbolic

symbols

x = sym("x");

f = x*Exp(-3*x);

differentiate(f, x, 2)

Octave执行代码并返回以下结果 -ans =

(9.0)*exp(-(3.0)*x)*x-(6.0)*exp(-(3.0)*x)

例子 (Example)

在这个例子中,让我们解决一个问题。 假设函数y = f(x) = 3 sin(x) + 7 cos(5x) 。 我们必须弄清楚等式f" + f = -5cos(2x)成立。

创建一个脚本文件并在其中键入以下代码 -syms x

y = 3*sin(x)+7*cos(5*x); % defining the function

lhs = diff(y,2)+y; %evaluting the lhs of the equation

rhs = -5*cos(2*x); %rhs of the equation

if(isequal(lhs,rhs))

disp('Yes, the equation holds true');

else

disp('No, the equation does not hold true');

end

disp('Value of LHS is: '), disp(lhs);

运行该文件时,它显示以下结果 -No, the equation does not hold true

Value of LHS is:

-168*cos(5*x)

以下是Octave相当于上面的计算 -pkg load symbolic

symbols

x = sym("x");

y = 3*Sin(x)+7*Cos(5*x); % defining the function

lhs = differentiate(y, x, 2) + y; %evaluting the lhs of the equation

rhs = -5*Cos(2*x); %rhs of the equation

if(lhs == rhs)

disp('Yes, the equation holds true');

else

disp('No, the equation does not hold true');

end

disp('Value of LHS is: '), disp(lhs);

Octave执行代码并返回以下结果 -No, the equation does not hold true

Value of LHS is:

-(168.0)*cos((5.0)*x)

找到曲线的最大值和最小值

如果我们正在搜索图的局部最大值和最小值,我们基本上是在特定位置的函数图上寻找最高点或最低点,或者是符号变量的特定值范围。

对于函数y = f(x),图形上具有零斜率的图上的stationary points称为stationary points 。 换句话说,静止点是f'(x)= 0的位置。

为了找到我们区分的函数的平稳点,我们需要将导数设置为零并求解方程。

例子 (Example)

让我们找到函数f(x)= 2x 3 + 3x 2 - 12x + 17的平稳点

采取以下步骤 -

First let us enter the function and plot its graph. syms x

y = 2*x^3 + 3*x^2 - 12*x + 17; % defining the function

ezplot(y)

MATLAB执行代码并返回以下图表 -

71a44dcf15ce494817f05cd8f0539719.png

以下是上述示例的Octave等效代码 -pkg load symbolic

symbols

x = sym('x');

y = inline("2*x^3 + 3*x^2 - 12*x + 17");

ezplot(y)

print -deps graph.eps

Our aim is to find some local maxima and minima on the graph, so let us find the local maxima and minima for the interval [-2, 2] on the graph. syms x

y = 2*x^3 + 3*x^2 - 12*x + 17; % defining the function

ezplot(y, [-2, 2])

MATLAB执行代码并返回以下图表 -

540f6ffb8a43e24015e145e9e3a99da6.png

以下是上述示例的Octave等效代码 -pkg load symbolic

symbols

x = sym('x');

y = inline("2*x^3 + 3*x^2 - 12*x + 17");

ezplot(y, [-2, 2])

print -deps graph.eps

Next, let us compute the derivative. g = diff(y)

MATLAB执行代码并返回以下结果 -g =

6*x^2 + 6*x - 12

这是Octave相当于上面的计算 -pkg load symbolic

symbols

x = sym("x");

y = 2*x^3 + 3*x^2 - 12*x + 17;

g = differentiate(y,x)

Octave执行代码并返回以下结果 -g =

-12.0+(6.0)*x+(6.0)*x^(2.0)

Let us solve the derivative function, g, to get the values where it becomes zero. s = solve(g)

MATLAB执行代码并返回以下结果 -s =

1

-2

以下是Octave相当于上面的计算 -pkg load symbolic

symbols

x = sym("x");

y = 2*x^3 + 3*x^2 - 12*x + 17;

g = differentiate(y,x)

roots([6, 6, -12])

Octave执行代码并返回以下结果 -g =

-12.0+(6.0)*x^(2.0)+(6.0)*x

ans =

-2

1

This agrees with our plot. So let us evaluate the function f at the critical points x = 1, -2. 我们可以使用subs命令替换符号函数中的值。subs(y, 1), subs(y, -2)

MATLAB执行代码并返回以下结果 -ans =

10

ans =

37

以下是Octave相当于上面的计算 -pkg load symbolic

symbols

x = sym("x");

y = 2*x^3 + 3*x^2 - 12*x + 17;

g = differentiate(y,x)

roots([6, 6, -12])

subs(y, x, 1), subs(y, x, -2)

ans =

10.0

ans =

37.0-4.6734207789940138748E-18*I

因此,函数f(x)= 2x 3 + 3x 2 - 12x + 17的最小值和最大值在区间[-2,2]中是10和37。

求解微分方程

MATLAB提供了用于象征性地求解微分方程的dsolve命令。

用于查找单个方程的解的dsolve命令的最基本形式是dsolve('eqn')

其中eqn是用于输入eqn的文本字符串。

它返回一个符号解决方案,其中包含一组MATLAB标记C1,C2等的任意常量。

您还可以指定问题的初始条件和边界条件,如下所示,以逗号分隔的列表为 -dsolve('eqn','cond1', 'cond2',…)

出于使用dsolve命令的目的,使用derivatives are indicated with a D 。 例如,输入f'(t)= -2 * f + cost(t)之类的等式作为 -

'Df = -2*f + cos(t)'

通过D导数的顺序表示更高的导数。

例如,方程f“(x)+ 2f'(x)= 5sin3x应输入 -

'D2y + 2Dy = 5*sin(3*x)'

让我们举一个简单的一阶微分方程的例子:y'= 5y。s = dsolve('Dy = 5*y')

MATLAB执行代码并返回以下结果 -s =

C2*exp(5*t)

让我们将二阶微分方程的另一个例子作为:y“ - y = 0,y(0)= -1,y'(0)= 2。dsolve('D2y - y = 0','y(0) = -1','Dy(0) = 2')

MATLAB执行代码并返回以下结果 -ans =

exp(t)/2 - (3*exp(-t))/2

MATLAB - Integration

集成处理两种本质上不同类型的问题。在第一种类型中,给出了函数的导数,我们想要找到函数。 因此,我们基本上扭转了分化的过程。 这种逆过程被称为反微分,或找到原始函数,或找到indefinite integral 。

第二类问题涉及累加非常大量的非常小的数量,然后随着数量的大小接近零而采取限制,而术语的数量倾向于无穷大。 这个过程导致了definite integral的定义。

定义积分用于寻找面积,体积,重心,转动惯量,由力完成的工作以及许多其他应用。

使用MATLAB查找不定积分

根据定义,如果函数f(x)的导数是f'(x),那么我们说f'(x)相对于x的不定积分是f(x)。 例如,由于x 2的导数(相对于x)是2x,我们可以说2x的不定积分是x 2 。

符号 -

f'(x 2 ) = 2x ,因此,

∫ 2xdx = x 2 .

不定积分不是唯一的,因为对于任何常数c的值,x 2 + c的导数也将是2x。

这用符号表示为 -

∫ 2xdx = x 2 + c 。

其中,c称为“任意常数”。

MATLAB提供了一个用于计算表达式积分的int命令。 为了得到一个函数的不定积分的表达式,我们写 -int(f);

例如,从我们之前的例子 -syms x

int(2*x)

MATLAB执行上述语句并返回以下结果 -ans =

x^2

例子1 (Example 1)

在这个例子中,让我们找到一些常用表达式的积分。 创建一个脚本文件并在其中键入以下代码 -syms x n

int(sym(x^n))

f = 'sin(n*t)'

int(sym(f))

syms a t

int(a*cos(pi*t))

int(a^x)

运行该文件时,它显示以下结果 -ans =

piecewise([n == -1, log(x)], [n ~= -1, x^(n + 1)/(n + 1)])

f =

sin(n*t)

ans =

-cos(n*t)/n

ans =

(a*sin(pi*t))/pi

ans =

a^x/log(a)

例子2 (Example 2)

创建一个脚本文件并在其中键入以下代码 -syms x n

int(cos(x))

int(exp(x))

int(log(x))

int(x^-1)

int(x^5*cos(5*x))

pretty(int(x^5*cos(5*x)))

int(x^-5)

int(sec(x)^2)

pretty(int(1 - 10*x + 9 * x^2))

int((3 + 5*x -6*x^2 - 7*x^3)/2*x^2)

pretty(int((3 + 5*x -6*x^2 - 7*x^3)/2*x^2))

请注意, pretty函数以更易读的格式返回表达式。

运行该文件时,它显示以下结果 -ans =

sin(x)

ans =

exp(x)

ans =

x*(log(x) - 1)

ans =

log(x)

ans =

(24*cos(5*x))/3125 + (24*x*sin(5*x))/625 - (12*x^2*cos(5*x))/125 + (x^4*cos(5*x))/5 - (4*x^3*sin(5*x))/25 + (x^5*sin(5*x))/5

2 4

24 cos(5 x) 24 x sin(5 x) 12 x cos(5 x) x cos(5 x)

----------- + ------------- - -------------- + ------------

3125 625 125 5

3 5

4 x sin(5 x) x sin(5 x)

------------- + -----------

25 5

ans =

-1/(4*x^4)

ans =

tan(x)

2

x (3 x - 5 x + 1)

ans =

- (7*x^6)/12 - (3*x^5)/5 + (5*x^4)/8 + x^3/2

6 5 4 3

7 x 3 x 5 x x

- ---- - ---- + ---- + --

12 5 8 2

使用MATLAB查找定积分

根据定义,定积分基本上是总和的极限。 我们使用定积分来找到诸如曲线和x轴之间的区域以及两条曲线之间的区域之类的区域。 定义积分也可用于其他情况,其中所需数量可表示为总和的极限。

通过传递要计算积分的限制, int函数可用于定积分。

计算

ecfd6595c56f1a5533ae002e9c3992aa.png

我们写,int(x, a, b)

例如,要计算值

7dd4800ff6011f61c1876be4e4571e30.png 我们写 -int(x, 4, 9)

MATLAB执行上述语句并返回以下结果 -ans =

65/2

以下是Octave相当于上面的计算 -pkg load symbolic

symbols

x = sym("x");

f = x;

c = [1, 0];

integral = polyint(c);

a = polyval(integral, 9) - polyval(integral, 4);

display('Area: '), disp(double(a));

Octave执行代码并返回以下结果 -Area:

32.500

可以使用Octave提供的quad()函数给出替代解决方案,如下所示 -pkg load symbolic

symbols

f = inline("x");

[a, ierror, nfneval] = quad(f, 4, 9);

display('Area: '), disp(double(a));

Octave执行代码并返回以下结果 -Area:

32.500

例子1 (Example 1)

让我们计算在x轴和曲线y = x 3 -2x + 5之间的区域,并且纵坐标x = 1和x = 2。

所需面积由 - 给出 -

687556d1cb9213300265e720d821a5b9.png

创建一个脚本文件并键入以下代码 -f = x^3 - 2*x +5;

a = int(f, 1, 2)

display('Area: '), disp(double(a));

运行该文件时,它显示以下结果 -a =

23/4

Area:

5.7500

以下是Octave相当于上面的计算 -pkg load symbolic

symbols

x = sym("x");

f = x^3 - 2*x +5;

c = [1, 0, -2, 5];

integral = polyint(c);

a = polyval(integral, 2) - polyval(integral, 1);

display('Area: '), disp(double(a));

Octave执行代码并返回以下结果 -Area:

5.7500

可以使用Octave提供的quad()函数给出替代解决方案,如下所示 -pkg load symbolic

symbols

x = sym("x");

f = inline("x^3 - 2*x +5");

[a, ierror, nfneval] = quad(f, 1, 2);

display('Area: '), disp(double(a));

Octave执行代码并返回以下结果 -Area:

5.7500

例子2 (Example 2)

求出曲​​线下面积:f(x)= x 2 cos(x)-4≤x≤9。

创建一个脚本文件并编写以下代码 -f = x^2*cos(x);

ezplot(f, [-4,9])

a = int(f, -4, 9)

disp('Area: '), disp(double(a));

运行该文件时,MATLAB绘制图形 -

d9b02e0bbc61189a0df7e15e265b394a.png

输出如下 -a =

8*cos(4) + 18*cos(9) + 14*sin(4) + 79*sin(9)

Area:

0.3326

以下是Octave相当于上面的计算 -pkg load symbolic

symbols

x = sym("x");

f = inline("x^2*cos(x)");

ezplot(f, [-4,9])

print -deps graph.eps

[a, ierror, nfneval] = quad(f, -4, 9);

display('Area: '), disp(double(a));

MATLAB - Polynomials

MATLAB将多项式表示为包含按降序幂排序的系数的行向量。 例如,等式P(x)= x 4 + 7x 3 - 5x + 9可表示为 -

p = [1 7 0 -5 9];

评估多项式

polyval函数用于评估指定值的多项式。 例如,要评估我们先前的多项式p ,在x = 4时,键入 -p = [1 7 0 -5 9];

polyval(p,4)

MATLAB执行上述语句并返回以下结果 -ans = 693

MATLAB还提供了用于评估矩阵多项式的polyvalm函数。 矩阵多项式是以矩阵为变量的polynomial 。

例如,让我们创建一个方矩阵X并在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

寻找多项式的根

roots函数计算多项式的根。 例如,要计算多项式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 =

Columns 1 through 3:

1.00000 + 0.00000i 7.00000 + 0.00000i 0.00000 + 0.00000i

Columns 4 and 5:

-5.00000 - 0.00000i 9.00000 + 0.00000i

多项式曲线拟合

polyfit函数找到以最小二乘意义拟合一组数据的多项式的系数。 如果x和y是包含要拟合为n次多项式的x和y数据的两个向量,那么我们通过写入得到拟合数据的多项式 -p = polyfit(x,y,n)

例子 (Example)

创建一个脚本文件并键入以下代码 -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

并绘制以下图表 -

1f03c0cb76862a4c43628a97ab4a233b.png

MATLAB - Transforms

MATLAB提供了使用变换的命令,例如拉普拉斯和傅里叶变换。 变换在科学和工程中用作简化分析和从另一个角度查看数据的工具。

例如,傅立叶变换允许我们将表示为时间函数的信号转换为频率函数。 拉普拉斯变换允许我们将微分方程转换为代数方程。

MATLAB提供laplace , fourier和fft命令,用于拉普拉斯,傅立叶和快速傅里叶变换。

拉普拉斯变换

时间f(t)函数的拉普拉斯变换由以下积分给出 -

1bb5925ab7b48d35521500b3a51a405f.png

拉普拉斯变换也表示为f(t)到F(s)的变换。 您可以看到此变换或积分过程将f(t)(符号变量t的函数)转换为另一个函数F(s),另一个变量为s。

拉普拉斯变换将微分方程转化为代数方程。 为了计算函数f(t)的拉普拉斯变换,写 -laplace(f(t))

例子 (Example)

在这个例子中,我们将计算一些常用函数的拉普拉斯变换。

创建一个脚本文件并键入以下代码 -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允许我们使用命令ilaplace计算逆拉普拉斯变换。

例如,ilaplace(1/s^3)

MATLAB将执行上述语句并显示结果 -ans =

t^2/2

例子 (Example)

创建一个脚本文件并键入以下代码 -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)

傅立叶变换

傅立叶变换通常将时间f(t)的数学函数变换为新函数,有时用F或F表示,其参数是频率,单位为周期/秒(赫兹)或每秒弧度。 然后,新函数被称为傅里叶变换和/或函数f的频谱。

例子 (Example)

创建一个脚本文件并在其中键入以下代码 -syms x

f = exp(-2*x^2); %our function

ezplot(f,[-2,2]) % plot of our function

FT = fourier(f) % Fourier transform

运行该文件时,MATLAB绘制以下图表 -

93b09cd0cdeddcc8ff48be13f581055d.png

显示以下结果 -FT =

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

将傅立叶变换绘制为 -ezplot(FT)

给出以下图表 -

fee70023e3e4b4d80d5f1d872805ece5.png

逆傅里叶变换

MATLAB提供了用于计算函数的逆傅立叶变换的ifourier命令。 例如,f = ifourier(-2*exp(-abs(w)))

MATLAB将执行上述语句并显示结果 -f =

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

MATLAB - GNU Octave Tutorial

GNU Octave是一种高级编程语言,如MATLAB,它主要与MATLAB兼容。 它也用于数值计算。

Octave与MATLAB具有以下共同特征 -矩阵是基本数据类型

它内置了对复杂数字的支持

它有内置的数学函数和库

它支持用户定义的功能

GNU Octave也是可自由再发行的软件。 您可以根据自由软件基金会发布的GNU通用公共许可证(GPL)的条款重新分发和/或修改它。

MATLAB与Octave

大多数MATLAB程序在Octave中运行,但是一些Octave程序可能无法在MATLAB中运行,因为Octave允许一些MATLAB没有的语法。

例如,MATLAB仅支持单引号,但Octave支持用于定义字符串的单引号和双引号。 如果您正在寻找关于Octave的教程,那么请从头开始阅读本教程,其中包括MATLAB和Octave。

兼容的例子

本教程中涉及的几乎所有示例都与MATLAB以及Octave兼容。 让我们在MATLAB和Octave中尝试以下示例,它可以产生相同的结果而无需任何语法更改 -

此示例为函数g = xe - (x 2 + y 2 )创建3D曲面图。 创建一个脚本文件并键入以下代码 -[x,y] = meshgrid(-2:.2:2);

g = x .* exp(-x.^2 - y.^2);

surf(x, y, g)

print -deps graph.eps

运行该文件时,MATLAB显示以下三维地图 -

1e5db6bd18d9bc324e8ac81a2fd0d148.png

Non-compatible Examples

虽然MATLAB的所有核心功能都可以在Octave中使用,但是有一些功能,例如差分和积分微积分,它们在两种语言中都不完全匹配。 本教程试图给出两种语法不同的示例。

考虑以下示例,其中MATLAB和Octave使用不同的函数来获得曲线的面积:f(x)= x 2 cos(x)对于-4≤x≤9。以下是MATLAB版本的代码 -f = x^2*cos(x);

ezplot(f, [-4,9])

a = int(f, -4, 9)

disp('Area: '), disp(double(a));

运行该文件时,MATLAB绘制图形 -

d9b02e0bbc61189a0df7e15e265b394a.png

显示以下结果a =

8*cos(4) + 18*cos(9) + 14*sin(4) + 79*sin(9)

Area:

0.3326

但是要在Octave中给出相同曲线的区域,你必须使用symbolic包如下 -pkg load symbolic

symbols

x = sym("x");

f = inline("x^2*cos(x)");

ezplot(f, [-4,9])

print -deps graph.eps

[a, ierror, nfneval] = quad(f, -4, 9);

display('Area: '), disp(double(a));

MATLAB - Simulink

Simulink是一个基于仿真和模型的动态和嵌入式系统设计环境,与MATLAB集成。 Simulink也是由MathWorks开发的,是一种用于建模,模拟和分析多域动态系统的数据流图形编程语言工具。 它基本上是一个图形化的框图工具,带有可自定义的块库集。

它允许您将MATLAB算法合并到模型中,并将仿真结果导出到MATLAB中以进行进一步分析。

Simulink支持 -系统级设计

simulation

自动代码生成

嵌入式系统的测试和验证

MathWorks提供了其他一些附加产品以及可与Simulink一起使用的第三方硬件和软件产品。

以下列表简要介绍了其中一些 -Stateflow允许开发状态机和流程图。

Simulink Coder允许自动生成C源代码以实时实现系统。

xPC Target与x86-based real-time systems提供了一个在物理系统上实时模拟和测试Simulink和Stateflow模型的环境。

Embedded Coder支持特定的嵌入式目标。

HDL Coder允许自动生成可合成的VHDL和Verilog。

SimEvents提供了一个用于对排队系统进行建模的图形构建块库。

Simulink能够通过建模样式检查,需求可追溯性和模型覆盖分析对系统进行系统验证和验证。

Simulink Design Verifier允许您识别设计错误并生成用于模型检查的测试用例场景。

使用Simulink

要打开Simulink,请输入MATLAB工作区 -simulink

Simulink使用Library Browser打开。 库浏览器用于构建仿真模型。

0cd44ba2e7d2b96363aff4e58be9007c.png

在左侧窗格中,您将找到基于各种系统分类的多个库,单击每个库将在右侧窗格中显示设计块。

建筑模型

要创建新模型,请单击“库浏览器”工具栏上的“ New按钮。 这将打开一个新的无标题模型窗口。

d0fb8fa99d65be697babbd624a26423d.png

Simulink模型是一个框图。

通过从库浏览器中选择适当的元素并将它们拖到“模型”窗口中,可以添加模型元素。

或者,您可以复制模型元素并将其粘贴到模型窗口中。

例子 (Examples)

从Simulink库中拖放项目以创建项目。

出于此示例的目的,将使用两个块进行模拟 - Source (信号)和Sink (范围)。 信号发生器(信号源)产生模拟信号,然后由示波器(接收器)以图形方式显示。

fbb04ed63c37242528be83edd44cb452.png

首先将所需的块从库拖动到项目窗口。 然后,将块连接在一起,这可以通过将连接器从一个块上的连接点拖动到另一个块上的连接点来完成。

让我们将“正弦波”块拖入模型中。

69b96fa7d457c978f30ffe8f62bd52cb.png

从库中选择“Sinks”并将“Scope”块拖到模型中。

80337b477204a23360720462120588b1.png

将信号线从正弦波块的输出拖动到Scope块的输入。

77e1b7a90e54990af0e509a2c5cce0a6.png

d4aa1ccb574119c5af4d4076eb0b5ca8.png

按“ Run ”按钮运行模拟,保持所有参数默认(您可以从“模拟”菜单更改它们)

您应该从范围获得以下图表。

699f9b9e3216037b47ccaa9b680e50a8.png

MATLAB - Simulink

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值