MATLAB 绘图与运算功能详解
1. 子图绘制
MATLAB 提供了
subplot(m,n,p)
命令,可在图形窗口中同时显示多达四个不同的绘图窗口。该命令将窗口划分为一个
m × n
的绘图区域矩阵,并选择第
p
个区域作为活动区域。三个整数
m
、
n
和
p
之间无需空格或逗号。以下是可能的组合示例:
| 组合示例 | 说明 |
| ---- | ---- |
| 111 | 全屏显示,默认状态 |
| 211、212 | 将窗口分为上下两个区域 |
| 221、222、223、224 | 将窗口分为 2×2 的四个区域 |
| 121、122 | 将窗口分为左右两个区域 |
例如,后续示例会详细展示该命令的使用。
2. 乘法、除法和幂运算
MATLAB 识别两种类型的乘法、除法和幂运算:矩阵运算和逐元素运算。
2.1 向量类型
-
行向量
:由一行多列组成,元素用空格分隔,如
a = [1 2 3]。 -
列向量
:由一列多行组成,元素用分号分隔,如
b = [1; 2; 3]。也可先写成行向量,再用单引号'转置得到,如b = [1 2 3]'。
2.2 矩阵乘法(行向量与列向量相乘)
设
A = [a1 a2 ... an]
为行向量,
B = [b1 b2 ... bn]'
为列向量,矩阵乘法使用
*
运算符,结果为一个标量:
[A * B = a_1b_1 + a_2b_2 + … + a_nb_n]
例如:
A = [1 2 3 4 5];
B = [-2 6 -3 8 7]';
result = A * B;
disp(result); % 输出 68
若
A
和
B
均为行向量,使用矩阵乘法运算符
*
会报错,因为 MATLAB 期望
B
为列向量。
2.3 逐元素乘法(行向量与行向量相乘)
设
C = [c1 c2 ... cn]
和
D = [d1 d2 ... dn]
为两个行向量,逐元素乘法使用
.*
运算符,结果为一个行向量:
[C .* D = [c_1d_1 c_2d_2 … c_nd_n]]
例如:
C = [1 2 3 4 5];
D = [-2 6 -3 8 7];
result = C .* D;
disp(result); % 输出 [-2 12 -9 32 35]
类似地,除法
/
和幂运算
^
用于矩阵运算,而点除
./
和点幂
.^
用于逐元素运算。
2.4 示例
示例 A.13
绘制波形 (y = 3e^{-4t}\cos(5t) - 2e^{-3t}\sin(2t) + \frac{t^2}{t + 1}) 在 (0 \leq t \leq 5) 区间的图形。
t = 0:0.01:5;
y = 3 .* exp(-4 .* t) .* cos(5 .* t) - 2 .* exp(-3 .* t) .* sin(2 .* t) + t .^ 2 ./ (t + 1);
plot(t, y);
grid;
xlabel('t');
ylabel('y=f(t)');
title('Plot for Example A.13');
若时间区间包含
t = -1
,会出现 “Divide by zero” 警告,可使用
eps
避免。
示例 A.14
绘制函数 (y = \sin^2(x))、(z = \cos^2(x))、(w = \sin^2(x)\cos^2(x)) 和 (v = \frac{\sin^2(x)}{\cos^2(x)}) 在 (0 \leq x \leq 2\pi) 区间的图形,并使用
subplot
命令在同一图形中显示四个窗口。
x = linspace(0, 2*pi, 100);
y = (sin(x).^2);
z = (cos(x).^2);
w = y .* z;
v = y ./ (z + eps); % 加 eps 避免除零
subplot(221);
plot(x, y);
axis([0 2*pi 0 1]);
title('y=(sinx)^2');
subplot(222);
plot(x, z);
axis([0 2*pi 0 1]);
title('z=(cosx)^2');
subplot(223);
plot(x, w);
axis([0 2*pi 0 0.3]);
title('w=(sinx)^2*(cosx)^2');
subplot(224);
plot(x, v);
axis([0 2*pi 0 400]);
title('v=(sinx)^2/(cosx)^2');
示例 A.15
考虑一个电路,其阻抗 (Z) 与角频率 (\omega) 的关系为:
[Z = 10 + \frac{10^4 - j\frac{10^6}{\omega + \epsilon}}{10 + j(0.1\omega - \frac{10^5}{\omega + \epsilon})}]
绘制 (Re{Z})、(Im{Z}) 与 (\omega) 的关系图,以及 (Z) 的极坐标图。
w = 0:1:2000;
z = (10 + (10 .^ 4 - j .* 10 .^ 6 ./ (w + eps)) ./ (10 + j .* (0.1 .* w - 10.^5 ./ (w + eps))));
% 绘制实部
real_part = real(z);
plot(w, real_part);
grid;
xlabel('radian frequency w');
ylabel('Real part of Z');
% 绘制虚部
imag_part = imag(z);
plot(w, imag_part);
grid;
xlabel('radian frequency w');
ylabel('Imaginary part of Z');
% 绘制极坐标图
mag = abs(z);
rndz = round(abs(z));
theta = angle(z);
polar(theta, rndz);
grid;
ylabel('Polar Plot of Z');
3. 脚本文件和函数文件
MATLAB 识别两种类型的文件:脚本文件和函数文件,均需
.m
扩展名。
3.1 脚本文件
由两个或多个内置函数组成,如前面示例的脚本即为脚本文件。通常使用 MATLAB 的编辑器/调试器生成并保存为
.m
文件。
3.2 函数文件
是用户使用 MATLAB 定义的函数,用于重复任务。第一行必须包含
function
关键字,后跟输出参数、等号和括号内的输入参数。函数名和文件名必须相同,但文件名需有
.m
扩展名。
例如:
function y = myfunction(x)
y = x.^3 + cos(3.*x);
该函数文件需保存为
myfunction.m
。
3.3 相关 MATLAB 函数
-
fzero(f,x)
:尝试找到单变量函数的零点,
f是包含实值单变量函数名称的字符串。 -
fmin(f,x1,x2)
:最小化单变量函数,返回在区间
[x1, x2]内函数取最小值时的x值。 -
fplot(fcn,lims)
:绘制指定函数在指定
x轴范围的图形,lims可指定y轴范围。
3.4 示例 A.16
求函数 (f(x) = \frac{1}{(x - 0.1)^2 + 0.01} - \frac{1}{(x - 1.2)^2 + 0.04} - 10) 的零点、最大值和最小值。
% 初步绘图观察
x = -1.5:0.01:1.5;
y = 1./((x - 0.1).^2 + 0.01) - 1./((x - 1.2).^2 + 0.04) - 10;
plot(x, y);
grid;
% 定义函数文件 funczero01.m
function y = funczero01(x)
y = 1/((x - 0.1)^2 + 0.01) - 1/((x - 1.2)^2 + 0.04) - 10;
% 使用 fplot 绘图
fplot('funczero01', [-1.5 1.5]);
grid;
% 计算零点
x1 = fzero('funczero01', -0.2);
x2 = fzero('funczero01', 0.3);
fprintf('The roots (zeros) of this function are r1= %3.4f', x1);
fprintf(' and r2= %3.4f \n', x2);
% 计算最小值
min_val = fmin('funczero01', 0, 1.5);
x = min_val;
y = 1 / ((x - 0.1) ^ 2 + 0.01) - 1 / ((x - 1.2) ^ 2 + 0.04) - 10;
fprintf('The minimum value occurs at x = %3.4f, y = %3.4f \n', min_val, y);
% 定义新函数求最大值
function y = minusfunczero01(x)
y = -(1/((x - 0.1)^2 + 0.01) - 1/((x - 1.2)^2 + 0.04) - 10);
max_val = fmin('minusfunczero01', 0, 1);
x = max_val;
y = 1 / ((x - 0.1) ^ 2 + 0.01) - 1 / ((x - 1.2) ^ 2 + 0.04) - 10;
fprintf('The maximum value occurs at x = %3.4f, y = %3.4f \n', max_val, y);
4. 显示格式
MATLAB 默认以整数格式显示整数结果,以四位小数的短浮点格式显示小数结果。可使用
format
命令更改输出格式,可用
help format
查看可用格式:
| 格式命令 | 说明 | 示例 |
| ---- | ---- | ---- |
| format | 默认,同
format short
| |
| format short | 5 位缩放定点格式 | 33.3335 |
| format long | 15 位缩放定点格式 | 33.33333333333334 |
| format short e | 5 位浮点格式 | 3.3333e+01 |
| format long e | 15 位浮点格式 | |
| format short g | 5 位定点或浮点的最佳格式 | 33.333 |
| format long g | 15 位定点或浮点的最佳格式 | |
| format hex | 十六进制格式 | |
| format + | 正、负和零元素分别用
+
、
-
和空格表示,忽略虚部 | |
| format bank | 美元和美分的固定格式 | 33.33 |
| format rat | 小整数比近似 | 100/3 |
| format compact | 抑制额外换行符 | |
| format loose | 恢复额外换行符 | |
此外,
disp(X)
命令可显示数组
X
而不打印数组名,
fprintf(format,array)
命令可显示和打印文本及数组。
综上所述,MATLAB 在绘图、运算和文件处理等方面功能强大,通过合理运用这些功能,能高效解决各种数学和工程问题。
5. 操作步骤总结
5.1 子图绘制操作步骤
-
确定
m、n和p的值,m表示行数,n表示列数,p表示活动区域的序号。 -
使用
subplot(m,n,p)命令将图形窗口划分为m × n的矩阵区域,并选择第p个区域作为活动区域。 -
在活动区域进行绘图操作,如使用
plot函数。 - 可重复步骤 2 和 3 绘制多个子图。
5.2 矩阵和逐元素运算操作步骤
矩阵乘法
- 定义行向量和列向量。
-
使用
*运算符进行矩阵乘法。
逐元素乘法
- 定义两个行向量。
-
使用
.*运算符进行逐元素乘法。
除法和幂运算
-
矩阵运算使用
/和^运算符。 -
逐元素运算使用
./和.^运算符。
5.3 脚本文件和函数文件操作步骤
脚本文件
- 编写包含两个或多个内置函数的脚本。
-
使用 MATLAB 的编辑器/调试器将脚本保存为
.m文件。
函数文件
-
在第一行使用
function关键字,后跟输出参数、等号和括号内的输入参数。 - 编写函数体。
-
将函数文件保存为与函数名相同的
.m文件,扩展名为.m。
5.4 显示格式设置操作步骤
-
使用
format命令设置输出格式,如format short、format long等。 -
可使用
help format查看可用的格式选项。 -
使用
disp(X)命令显示数组而不打印数组名。 -
使用
fprintf(format,array)命令显示和打印文本及数组。
6. 流程图展示
6.1 子图绘制流程图
graph TD;
A[开始] --> B[确定 m, n, p 值];
B --> C[使用 subplot(m,n,p) 划分区域];
C --> D[在活动区域绘图];
D --> E{是否还有子图};
E -- 是 --> C;
E -- 否 --> F[结束];
6.2 矩阵和逐元素运算流程图
graph TD;
A[开始] --> B{选择运算类型};
B -- 矩阵乘法 --> C[定义行向量和列向量];
C --> D[使用 * 运算符进行乘法];
D --> E[结束];
B -- 逐元素乘法 --> F[定义两个行向量];
F --> G[使用 .* 运算符进行乘法];
G --> E;
B -- 除法或幂运算 --> H{选择运算方式};
H -- 矩阵运算 --> I[使用 / 或 ^ 运算符];
I --> E;
H -- 逐元素运算 --> J[使用 ./ 或 .^ 运算符];
J --> E;
6.3 脚本文件和函数文件创建流程图
graph TD;
A[开始] --> B{选择文件类型};
B -- 脚本文件 --> C[编写包含内置函数的脚本];
C --> D[使用编辑器保存为 .m 文件];
D --> E[结束];
B -- 函数文件 --> F[使用 function 关键字定义函数];
F --> G[编写函数体];
G --> H[保存为与函数名相同的 .m 文件];
H --> E;
6.4 显示格式设置流程图
graph TD;
A[开始] --> B[使用 format 命令设置格式];
B --> C{是否需要帮助};
C -- 是 --> D[使用 help format 查看选项];
D --> B;
C -- 否 --> E{是否需要显示数组};
E -- 是 --> F[使用 disp(X) 或 fprintf(format,array) 显示];
F --> G[结束];
E -- 否 --> G;
7. 总结与建议
7.1 总结
MATLAB 作为一款强大的数学和工程计算软件,在绘图、运算、文件处理和显示格式设置等方面提供了丰富的功能。通过
subplot
命令可以方便地在同一图形窗口中显示多个子图;矩阵和逐元素运算为不同类型的计算提供了灵活的选择;脚本文件和函数文件的区分使得代码的组织和复用更加高效;显示格式的设置则满足了不同用户对输出结果的需求。
7.2 建议
- 在进行矩阵运算时,要特别注意向量的类型(行向量或列向量),避免因使用错误的运算符而导致错误。
- 对于复杂的函数,建议使用函数文件进行封装,提高代码的可读性和可维护性。
- 在设置显示格式时,根据实际需求选择合适的格式,避免因格式设置不当而影响结果的查看。
-
在处理可能出现除零错误的情况时,及时使用
eps避免错误的发生。
希望通过本文的介绍,读者能够更好地掌握 MATLAB 的这些功能,提高解决实际问题的能力。
超级会员免费看

被折叠的 条评论
为什么被折叠?



