• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

matlab基本语法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

执行MATLAB命令

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 提供了一些特殊的一些数学符号的表达,像圆周率 π, Inf for ∞, i (and j) for √-1 etc. Nan 代表“不是一个数字”。

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

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

MATLAB中分号(;)表示语句结束;但是,如果想抑制和隐藏 MATLAB 输出表达,表达后添加一个分号。

例如,

x = 3;
y = x + 5

当点击“执行”按钮,或者按“Ctrl+ E”,MATLAB执行它立即返回的结果是:

y =  8

MATLAB添加注释

MATLAB的百分比符号(%)是用于表示一个注释行。例如:

x = 9	     % assign the value 9 to x

也可以写注释,使用一块块注释操作符%{%}。

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

每个MATLAB变量可以是数组或者矩阵。

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

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

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

x =
     3

上述的例子创建了一个1-1的矩阵名为x和的值存储在其元素中。我们可以看看另外的例子,

x = sqrt(16) 	% defining x and initializing it with an expression

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

x =
     4

MATLAB注意事项:

在使用变量之前,必须进行赋值。

当系统接收到一个变量之后,这个变量可以被引用。

例如:

x = 7 * 8;
y = x * 7.89

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

y =
  441.8400

当表达式返回一个结果,不分配给任何变量,系统分配给一个变量命名ans,以后可以继续使用。

例如:

sqrt(78)

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

ans =
    8.8318

变量 ans 可以被继续使用:

9876/ans

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

ans =
   1.1182e+03

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

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

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

c =
    14

MATLAB如何显示已经使用的变量名?

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

who

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

Your variables are:
a    ans  b    c    x    y   

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

当前内存中的变量

每个变量的类型

内存分配给每个变量

无论他们是复杂的变量与否

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

  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  ans       1x1                 8  double              
  b         1x1                 8  double              
  c         1x1                 8  double              
  x         1x1                 8  double              
  y         1x1                 8  double     

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

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

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

如果想更精确,需要使用 format 命令。

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

例如:

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

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

x =
  17.231981640639408

format short 例子:

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

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

x =
   17.2320

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

format bank
daily_wage = 177.45;
weekly_wage = daily_wage * 6

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

weekly_wage =
       1064.70

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]

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

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

另外一个例子,

r = [7 8 9 10 11];
t = [2, 3, 4, 5, 6];
res = r + t

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

res =
  Columns 1 through 4
       9             11             13             15       
  Column 5
      17

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

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

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

c =
       7       
       8       
       9       
      10       
      11  

MATLAB创建矩阵
矩阵是一个二维数字阵列。

在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命令

本节的内容将提供常用的一些MATLAB命令。

在之前的篇章中我们已经知道了MATLAB数值计算和数据可视化是一个交互式程序,在它的命令窗口中您可以在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 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 将不会被测试。

if... elseif...else...end 语法:

if <expression 1>
% Executes when the expression 1 is true 
<statement(s)>
elseif <expression 2>
% Executes when the boolean expression 2 is true
<statement(s)>
Elseif <expression 3>
% Executes when the boolean expression 3 is true 
<statement(s)>
else 
%  executes when the none of the above condition is true 
<statement(s)>
end

详细例子如下:
在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嵌套 if 语句语法:
详细语法如下:

if <expression 1>
% Executes when the boolean expression 1 is true 
   if <expression 2>
      % Executes when the boolean expression 2 is true    
  end
end

可以嵌套 elseif 或其他类似的方式,因为已经嵌套 if 语句。

详细例子如下:
在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 switch语句语法
在MATLAB 中 switch 语句的语法如下:

switch <switch_expression>
   case <case_expression>
     <statements>
   case <case_expression>
     <statements>
     ...
     ...
   otherwise
       <statements>
end

详细例子
在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 while循环

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

MATLAB while循环语法
在MATLAB 中 while循环的语法如下:

while <expression>
   <statements>
end

while 循环反复执行程序语句只要表达式为 true。

当结果不为空,并包含所有非零元素(逻辑或实际数字),表达式为 true ;否则,表达式为 false。

详细例子
在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 循环是一个重复的控制结构,可以有效地写一个循环,只是执行的次数是特定的。

MATLAB for 循环语法:
MATLAB中的 for循环的语法如下:

for index = values
  <program statements>
          ...
end

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中创建矩阵有以下规则:

矩阵元素必须在 “[ ]” 内;
矩阵的同行元素之间用空格(或 “,”)隔开;
矩阵的行与行之间用 “;”(或回车符)隔开;
矩阵的元素可以是数值、变量、表达式或函数;
矩阵的尺寸不必预先定义。
下面的例子中我们创建了一个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要计算对应矩阵行列式的值的指令为: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中,函数定义在单独的文件。文件函数的文件名应该是相同的。

函数是一组语句一起执行任务。

函数在自己的工作空间进行操作,被称为本地工作区,独立的工作区;在 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 中检测到的标题行数。
默认情况下,Octave 没有importdata() 函数的支持,所以要搜索并安装这个包下面的例子Octave 安装工作。
示例 1
该例中我们将加载和显示图像文件。

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

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

运行该文件,MATLAB显示出图像文件。

注意:该图像文件必须保存在当前目录。

示例 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

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

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

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

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

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

M = fscanf(fid, \'%*s %*s
%*s %*s %*s %*s
M=%d

\', 1);

缺省情况下,fscanf读取数据,直到它可以根据我们的格式说明描述的数据不匹配,或它到达文件末尾的。在这里,我们将使用for循环阅读3组数据,每一次,它会读取7行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

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi与DirectX之DelphiX(39):TDIB.Sharpen();发布时间:2022-07-18
下一篇:
delphi窗体的创建和释放发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap