# 【Matlab】基础教程

@[TOC](https://github.com/UnderTurrets/notes/blob/master/matlab/%E6%96%87%E7%AB%A0%E7%9B%AE%E5%BD%95/README.md)

***

## 基本操作命令

### 1.设置计算显示结果的格式

| 指令                  | 含义                                                       | 举例                                             |
| ------------------- | -------------------------------------------------------- | ---------------------------------------------- |
| format、format short | 通常保证小数点后四位有效，最多不超过 7 位；对于大于 1000 的实数，用 5 位有效数字的科学记数形式显示。 | 314.159 被显示为 314.1590；3141.59 被显示为 3.1416e+003 |
| format long         | 15位数字表示                                                  | 3.14159265358979                               |
| format short e      | 5 位科学记数表示                                                | 3.1416e+00                                     |
| format long e       | 15位科学记数表示                                                | 3.14159265358979e+00                           |
| format short g      | 从 format short 和 format short e 中自动选择最佳记数方式              | 3.1416                                         |
| format long g       | 从 format long 和 format long e 中自动选择最佳记数方式                | 3.14159265358979                               |
| format rat          | 近似有理数表示                                                  | 355/113                                        |
| format hex          | 十六进制表示                                                   | 400921fb54442d18                               |
| format +            | 显示大矩阵用。正数、负数、零 分别用+ , - , 空格表示。                          | +                                              |
| format bank         | （金融）元、角、分表示                                              | 3.14                                           |
| format compact      | 显示变量之间没有空行                                               |                                                |
| format loose        | 在显示变量之间有空行                                               |                                                |

* format short 显示格式是默认的显示格式 。

### 2. 常用指令

| 指令名                                  | 含义                                   |
| ------------------------------------ | ------------------------------------ |
| who                                  | 查询工作区变量名                             |
| whos                                 | 查询工作区某个或所有变量及其具体信息                   |
| clear                                | 从工作区删除某个或所有变量和函数                     |
| pack                                 | 整理工作区内存碎片                            |
| save\<FileName> v1 v2                | 把变量 v1, v2 保存为 FileName.mat 文件       |
| save\<FileName> v1 v2 -append        | 把变量v1, v添加到 FileName.mat 文件中         |
| save\<FileName> v1 v2 -ascii -double | 把变量 v1, v2 保存为 FileName 16 位ASCII 文件 |
| load\<FileName>                      | 把 FileName.mat 文件中的全部变量装入内存          |
| load\<FileName> v1 v2                | 把 FileName.mat 文件中的 v1,v2 变量装入内存     |
| load\<FileName> v1 v2                | 把 FileName ASCII 文件中的 v1, v2 变量装入内存  |

### 3. 数据类型

![在这里插入图片描述](https://cdn.jsdelivr.net/gh/UnderTurrets/ImageHosting/matlab/assets%E3%80%90Matlab%E3%80%91%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/bc4053d0cb0a455bb14d72639e3bfee6.png)

* MATLAB的构造型数据基本上与C++的构造型数据相衔接，但它的数组却有更加广泛的含义和不同于一般语言的运算方法。**符号对象**是MATLAB所特有的一类为符号运算而设置的数据类型。严格地说，它不是某一类型的数据，它可以是数组、矩阵、字符等多种形式及其组合，但它在MATLAB的工作区中的确又是另类的一种数据类型。

### 4. 数学运算

#### 4.1 取整函数

| 函数       | 说明                            | 举例                            |
| -------- | ----------------------------- | ----------------------------- |
| round(a) | 向最接近的整数取整，小数部分是0.5时向绝对值大的方向取整 | round(4.3)结果为4，round(4.5)结果为5 |
| fix(a)   | 向0方向取整                        | fix(4.3)结果为4，fix(4.5)结果为4     |
| floor(a) | 向不大于a的最接近的整数取整                | floor(4.3)结果为4，floor(4.5)结果为4 |
| ceil(a)  | 向不小于a的最接近的整数取整                | ceil(4.3)结果为5，ceil(4.5)结果为5   |

#### 4.2 复数函数

| 函数           | 说明             |
| ------------ | -------------- |
| real(z)      | 返回复数z的实部       |
| imag(z)      | 返回复数z的虚部       |
| abs(z)       | 返回复数z的幅度       |
| angle(z)     | 返回复数z的幅角       |
| 返回复数z的共轭复数   | 返回复数z的共轭复数     |
| complex(a,b) | 以a为实部，b为虚部创建复数 |

#### 4.3 符号常量

| 常量（特殊函数）        | 含义                             |
| --------------- | ------------------------------ |
| ans             | 用于存储计算结果的默认变量名                 |
| pi              | 圆周率的双精度表示                      |
| i或j             | 用于复数单位                         |
| Inf或 inf        | 无穷大，前面可加+或－                    |
| NaN             | 非数值量，产生于0/0、无穷/无穷              |
| eps             | 容错量，非常接近于0，计算机上的值为             |
| date            | 当前日期                           |
| Realmin或realmin | Matlab所能表示实数的最小绝对值             |
| Realmax或realmax | Matlab所能表示实数的最大绝对值             |
| version         | Matlab版本信息，如8.3.0.532 (R2014a) |

### 5. 函数

#### 5.1 匿名函数（lemba表达式）

匿名函数通常是简单的函数，不需要编写m文件。匿名函数是面向命令行代码的函数形式，通常是由一句简单的声明语句组成。创建的标准形式是：

* fhandle=@(arglist)expr
* arglist为参数列表，指出了函数的参数列表，用“，”分隔
* expr为关于参数列表的表达式形式，前缀@是固定的，等号右边表示将该函数句柄赋值到变量fhandle。

下面这个例子定义了一个匿名函数来计算x^3^ +y^3^的值

```matlab
fhandle=@(x, y)(x.\^3+y.^3)
```

此处定义了一个匿名函数来计算x3+y3的值，其中x和y可以是矩阵。运行如下：

```matlab
fhandle=@(x, y)(x.\^3+y.^3);
a=5; b=8;
fhandle(a,b)
ans =
637
```

#### 5.2 内联函数

内联函数是MATLAB中的另一种可以实现函数功能的对象，它的创建形式非常简单。其调用格式如下所示：

* inline(‘string’,arg1,arg2,…)
* ‘string’必须是不带赋值号“=”的字符串，arg1, arg2等是函数的输入变量。

下面这个例子创建内联函数实现f(x,y)=cos(x)e^xy^

```matlab
f =inline('cos(x)*exp(x*y)','x','y')
f=
inline function;
f(x,y)=cos(x)*exp(x*y)
```

如果输入变量设置为x=1，y=2，即输入形式和结果如下所示：

```matlab
Z=f(1,2)
Z=
3.9923
```

#### 5.3 函数指针（函数句柄）

函数句柄实际上提供了一种函数调用的间接方法，创建函数句柄要用到操作符@。前面所讲的匿名函数实际上创建了一种函数句柄。MATLAB中的各种函数都可以创建函数句柄。创建函数句柄的方法如下：

* fhandle=@filename;
* filename就是所对应的m函数文件名或者是库函数名
* fhandle保存了该m文件或者库函数的句柄，通过句柄fhandle即可调用相应的m文件或者库函数。

下面这个例子创建函数cos的句柄

```matlab
a=@cos;
a(pi)
ans =
-1
```

该例中，将内置函数cos(x)的句柄赋值到变量a，然后通过a可以实现对函数cos的间接调用。

下面这个例子在SumMax.m文件中自定义SumMax函数

```matlab
function [a,b] = SumMax(X)
m=max(size(X));
a=0;
for n=1:m
a=a+X(n);
end
b=max(X);
end
```

将上述程序保存为SumMax.m。采用函数句柄的方法来实现

```matlab
b=@SumMax;
y=[3,2,10,12,6];
 [c,d]=b(y)
c =
33
d =
12
```
