Simulink与MATLAB:微分方程求解与应用
1. 测试解决方案
在解决问题时,我们可以将结果与MATLAB解决方案得到的结果进行比较。还可以修改模型,通过用simout块替换组合输出的示波器,将结果发送到MATLAB,如图16.13所示。simout块位于Sink库中。在运行模型之前,需要修改块参数(双击块以打开窗口),将保存格式从Structure更改为Array。重新执行模型,会观察到MATLAB工作区窗口中出现了两个新数组,simout和tout,它们都是101 * 1双精度数组。这些数组中的值现在可用于绘图或其他计算。
以下是操作步骤:
1. 找到Sink库中的simout块。
2. 双击simout块,打开参数窗口。
3. 将Save format从Structure改为Array。
4. 重新执行模型。
2. 用Simulink求解微分方程
到目前为止,我们在Simulink中创建模型解决的问题,在MATLAB中可能更容易解决。但Simulink真正擅长的是求解微分方程。一般来说,微分方程包含因变量、自变量以及因变量相对于自变量的导数。例如:
[
\frac{dy}{dt} = t^2 + y
]
这是一个微分方程,其中y是因变量,t是自变量,(\frac{dy}{dt})是关于t的导数。用函数表示为:
[
\frac{dy}{dt} = f(t, y)
]
为了找到y,我们可以进行积分:
[
y = \int \frac{dy}{dt} dt = \int f(t, y) dt
]
这个方程有无数个解,除非定义了y的初始值。对于这个问题,我们设y(0) = 0。
在Simulink中解决这个问题,需要创建一个模型,将适当的块拖到模型窗口并连接起来,如图16.14所示。这些块包括:
- 一个时钟,用于生成时间(Source库)
- 一个数学函数块,在参数窗口中修改为对块输入进行平方(Math Operations库)
- 一个求和块(Commonly Used Blocks库)
- 一个积分器块(Continuous库)
- 一个示波器块(Sink库)
调整积分器块的参数窗口,使初始条件为0。运行模型后,示波器的输出如图16.15所示。
也可以使用MATLAB的符号代数功能来解决这个问题,因为这是一个简单的微分方程,可以使用dsolve函数:
y = dsolve('Dy = t^2 + y','y(0) = 0')
fplot(y,[0,10])
微分方程的解在命令窗口中以解析形式显示为:
[
y = 2e^t - 2t - t^2 - 2
]
绘图结果如图16.15(b)所示。
以下是Simulink模型所需块的表格:
| 块名称 | 所在库 | 功能 |
| ---- | ---- | ---- |
| 时钟 | Source库 | 生成时间 |
| 数学函数块 | Math Operations库 | 对输入进行平方 |
| 求和块 | Commonly Used Blocks库 | 求和 |
| 积分器块 | Continuous库 | 积分 |
| 示波器块 | Sink库 | 显示结果 |
3. 落体速度问题
考虑一个物体向地面下落,描述其速度的微分方程为:
[
\frac{dv}{dt} = g - \frac{c}{m} v^2
]
其中g是重力加速度,v是速度,m是质量,c是二阶阻力系数。
求解这个方程,找到前15秒内速度随时间的变化。
1.
问题陈述
:使用Simulink找到落体的时间与速度关系。
2.
输入和输出描述
:
- 输入:(g = 9.81 m/s^2),(m = 70 kg),(c = 0.3 kg/m),(y(0) = 0 m/s)
- 输出:0到15秒内速度随时间的绘图。
3.
手动示例
:由于初始速度为0,我们预计速度会迅速增加,但最终会因空气阻力而趋于稳定,达到一个终端值。预期的绘图类似于图16.16所示。
4.
Simulink解决方案
:Simulink模型如图16.17所示,示波器上显示了结果图。模型由以下部分组成:
- 三个常数块
- 一个除法块和一个乘法块
- 一个加法块
- 一个积分器块
- 一个数学函数块,设置为对积分器块的输出进行平方
在构建模型时,会发现一些块的方向与标准方向相反。可以通过将块放入模型中,右键单击图标,从下拉菜单中选择Format来调整块的方向。特别是,数学函数块已被翻转以适应积分器块的数据流。同时,时间块已设置为15秒。如果使用simout块替换示波器块,输出数据将发送到MATLAB,可用于其他程序或按常规方式绘图。
5.
测试解决方案
:我们也可以使用MATLAB和符号代数工具箱中的工具来解决这个问题。
clear,clc
y = dsolve('Dv = g−c/m*v^2','v(0) = 0')
y = subs(y,{'g','c','m'},{9.81,0.30,70})
fplot(y,[0,15])
title('A falling object'), xlabel('time,s')
ylabel('velocity, m/s')
得到的绘图如图16.18所示,与Simulink模型的示波器输出相符。
以下是落体速度问题的Simulink模型构建步骤流程图:
graph TD;
A[开始] --> B[添加常数块、除法块、乘法块、加法块、积分器块、数学函数块];
B --> C[调整块方向和参数];
C --> D[连接块];
D --> E[设置时间块为15秒];
E --> F[运行模型];
F --> G[查看示波器结果或使用simout块输出到MATLAB];
G --> H[结束];
4. 落体位置问题
在之前的例子中,我们求解了速度随时间变化的微分方程:
[
\frac{dv}{dt} = g - \frac{c}{m} v^2
]
然而,速度也可以描述为位置随时间的变化率:
[
v = \frac{dx}{dt}
]
我们可以将速度方程用位置表示为:
[
\frac{d^2x}{dt^2} = g - \frac{c}{m} (\frac{dx}{dt})^2
]
使用Simulink求解这个二阶微分方程,创建一个绘图,显示物体下落的距离随时间的变化。
1.
问题陈述
:求解二阶微分方程(\frac{d^2x}{dt^2} = g - \frac{c}{m} (\frac{dx}{dt})^2),得到x随t的变化。
2.
输入和输出描述
:
- 输入:(g = 9.81 m/s^2),(m = 70 kg),(c = 0.3 kg/m),(y(0) = 0),(x(0) = 0),(t = 0 - 15)秒
- 输出:使用Simulink示波器创建一个绘图,显示x随时间的变化。同时将结果发送到MATLAB。
3.
手动示例
:随着物体下落,它最终会达到终端速度,此时x应该以稳定的速率增加。预期行为的草图如图16.19所示。
4.
Simulink解决方案
:在之前的例子中创建的模型基础上,添加一个积分块,并将输出分成两路,分别连接到示波器和simout块(见图16.20)。确保调整simout块以数组形式报告数据。示波器中创建的绘图如图16.21(a)所示。
5.
测试解决方案
:再次使用MATLAB的符号代数工具箱来解决这个二阶微分方程。
x = dsolve('D2x = g−c/m*Dx^2','x(0) = 0','Dx(0) = 0')
x = subs(x,{'g','c','m'},{9.81,0.30,70})
fplot(x,[0,15])
title('A falling object'), xlabel('time,s'),
ylabel('position, m')
得到的绘图(见图16.21(b))与示波器输出匹配,从而验证了我们的计算。
通过同时使用Simulink和符号代数方法,我们可以对Simulink的解决方案更有信心。并非所有问题都可以用符号方法解决,因此拥有这两种方法非常重要。特别是,大多数有趣的微分方程没有解析解。
以下是落体位置问题的Simulink模型扩展步骤表格:
| 步骤 | 操作 |
| ---- | ---- |
| 1 | 在之前模型基础上添加积分块 |
| 2 | 拆分输出连接到示波器和simout块 |
| 3 | 调整simout块以数组形式报告数据 |
| 4 | 运行模型并查看示波器结果 |
| 5 | 使用MATLAB符号代数方法验证结果 |
5. 总结
Simulink是MATLAB程序家族的一部分,它使用图形用户界面来方便开发代表真实系统的模型。Simulink特别适用于对动态系统进行建模,即那些可以用微分方程数学描述的系统。
Simulink依赖于大量的块库,这些块可以组合起来解决各种问题。它的可视化方法为使用早期章节中描述的数值技术构建M文件程序提供了另一种选择。不过,Simulink在执行模型时也使用了与MATLAB相同的技术(例如ode45)。
MATLAB的帮助函数包含了关于使用Simulink的广泛教程和许多示例。
6. 关键术语
- 模拟计算机
- 块
- 微分方程
- 动态系统
- 模型
7. 问题
-
sinc函数常用于电气工程应用,定义为:
[
\text{sinc}(x) = \frac{\sin(x)}{x}
]
使用Simulink对sinc函数在 -20到20秒内的行为进行建模,并使用Simulink的示波器块显示结果。要调整仿真时间,在模型窗口菜单栏中选择Simulation > Configuration Parameters。 -
正弦波是傅里叶变换原理的基本构建块。给定以下几个正弦波:
[
w(t) = \sin(t) + \cos(t)
]
[
w(t) = \sin^2(t) + \cos^2(t)
]
[
w(t) = 3 \sin(t) + \cos^2(t)
]
其中t从(2\pi)到(3\pi)变化。创建一个Simulink模型,对给定的波形进行参数化绘图。 - 乘积块位于Simulink的常用块中,可用于将两个输入信号相乘并输出结果。从源块中选取一个脉冲发生器和一个随机数块,将它们输入到乘积块中。将乘积块的输出输入到sinks部分的显示块中,以显示乘法的结果。
- 积分块用于计算输入信号曲线下的面积。创建一个Simulink模型,计算(y = x^2)的积分,并在示波器窗口中绘制x和(\int x^2 dx),x的值从1到7。需要一个时钟(时间)块、数学函数块、积分块和示波器块。
-
理想气体在给定温度范围内的内能变化(kJ/kmol)可以用以下方程表示:
[
\Delta u = \int_{T_1}^{T_2} (a - R + bT + cT^2 + dT^3) dT
]
其中T是开尔文温度。对于氮气,常数的值为:
(a = 28.90),(b = -0.1571 \times 10^{-2}),(c = 0.8081 \times 10^{-5}),(d = -2.873 \times 10^{-9}),(R = 8.31447 kJ/kmol K)。
使用Simulink绘制0 K到1000 K温度范围内内能变化((\Delta u))的值。(使用时间块模拟T的值) -
1908年,Blasius表明,平板层流边界层中不可压缩流场的解由以下三阶常非线性微分方程的解给出:
[
2 \frac{d^3f}{dh^3} + f \frac{d^2f}{dh^2} = 0
]
为了求解f,首先求解最高阶导数:
[
\frac{d^3f}{dh^3} = -0.5f \frac{d^2f}{dh^2}
]
现在使用Simulink创建一个模型。需要三个积分块、一个乘法器和一个增益块(增益块乘以一个常数),以及一个示波器块来查看输出。初始条件为:
[
\frac{d^2f(0)}{dt^2} = 0.332
]
[
\frac{df(0)}{dt} = 0
]
[
f(0) = 0
] -
如图P16.7所示的电路中,电流i可以用二阶微分方程描述:
[
L \frac{d^2i}{dt^2} + R \frac{di}{dt} + \frac{1}{C} i = 0
]
可重写为:
[
\frac{d^2i}{dt^2} = -\frac{R}{L} \frac{di}{dt} - \frac{1}{L \times C} i
]
该系统的行为取决于L、C和R(电感、电容和电阻)的相对值。当(R^2 > 4\frac{L}{C})时,系统是“过阻尼”的;当(R^2 < 4\frac{L}{C})时,系统是“欠阻尼”的;当(R^2 = 4\frac{L}{C})时,系统是“临界阻尼”的。
使用Simulink对系统响应进行建模,假设(R = 100,000 \Omega),(C = 1 \times 10^{-6} F)。选择L的值以满足上述每个阻尼条件。根据欧姆定律(V = iR),用施加到系统的恒定电压值5 V计算初始电流值。 -
牛顿冷却定律告诉我们,物体冷却的速率与物体和周围环境之间的温度差成正比。换句话说:
[
\frac{dT}{dt} = k(T - T_{surroundings})
]
其中k是比例常数。对于一杯热咖啡,周围环境温度为70°F,常数为(0.5 min^{-1}),初始温度为110°F,绘制物体温度随时间变化的曲线,时间为10分钟。 -
物体的转动惯量定义为物体抵抗其运动变化的度量。对于质量为m、回转半径为r的质点,转动惯量定义为(mr^2)。对于有一定面积的物体,需要使用积分来计算其转动惯量。例如,高度为y、宽度为x的矩形的转动惯量为:
[
I = k \int_{a}^{b} x^2 y dx
]
其中k是单位面积的质量。
使用Simulink对这个方程进行建模,取k的值为1,绘制转动惯量随矩形宽度的变化曲线。矩形的高度为2 m。 -
考虑如图P16.10所示的简单RC串联电路。在时间为零时,开关打开,允许电流流动。假设施加恒定电压,电路的响应可以用微分方程描述:
[
R \frac{di}{dt} + \frac{i}{C} = 0
]
可重写为:
[
\frac{di}{dt} = -\frac{1}{R \times C} i
]
使用Simulink对系统响应进行建模,假设(R = 100,000 \Omega),(C = 1 \times 10^{-6} F)。根据欧姆定律(V = iR),用施加到系统的恒定电压值5 V计算初始电流值。 -
如图P16.11所示的摆的运动可以用二阶常微分方程建模:
[
\frac{d^2\theta}{dt^2} = -\frac{g}{L} \sin(\theta)
]
其中(\theta)是垂直角度,(g)是重力加速度,(9.81 m/s^2),(L)是摆的长度,2 m。
使用Simulink对摆的行为(即角度随时间的变化)进行建模。假设初始角度(\theta)为30°((\frac{\pi}{6})弧度),初始角速度为0((\frac{d\theta}{dt} = 0))。 -
化学反应速率与反应物的浓度有关。例如,一级反应中反应物的变化速率与反应物浓度之间的关系为:
[
\frac{d[A]}{dt} = -k [A]
]
稍微复杂一些的反应可能取决于反应物浓度的平方:
[
\frac{d[A]}{dt} = -k [A]^2
]
使用Simulink对一级和二级反应问题中反应物浓度[A]随时间的变化进行建模。假设一级反应的(k = 0.1 min^{-1}),二级反应的(k = 0.1 l/mol min)。初始浓度([A])为(5 mol/l)。使用Simulink的示波器块显示结果。(根据中间结果选择合适的模拟时间长度)
6. 特殊字符、命令和函数
以下是MATLAB中一些特殊字符、命令和函数的介绍:
特殊字符
| 字符 | 用途 | 所属章节 |
|---|---|---|
| [ ] | 形成矩阵 | 第2章 |
| ( ) | 用于语句中分组操作;用于矩阵名称标识特定元素 | 第2章 |
| , | 分隔下标或矩阵元素 | 第2章 |
| ; | 分隔矩阵定义中的行;在命令中使用时抑制输出 | 第2章 |
| : | 用于生成矩阵;表示所有行或所有列 | 第2章 |
| { } | 用于创建单元数组 | 第11章 |
运算符
| 运算符 | 用途 | 所属章节 |
|---|---|---|
| = | 赋值运算符:将值赋给内存位置;不等于等式 | 第2章 |
| % | 表示M文件中的注释 | 第2章 |
| %% | 创建一个部分,用于组织代码 | 第2章 |
| + | 标量和数组加法 | 第2章 |
| - | 标量和数组减法 | 第2章 |
| * | 标量乘法和矩阵代数中的乘法 | 第2章 |
| .* | 数组乘法(点乘或点星) | 第2章 |
| / | 标量除法和矩阵代数中的除法 | 第2章 |
| ./ | 数组除法(点除或点斜杠) | 第2章 |
| ^ | 标量指数运算和矩阵代数中的矩阵指数运算 | 第2章 |
| .^ | 数组指数运算(点幂或点尖号) | 第2章 |
| … | 省略号:延续到下一行 | 第4章 |
| [] | 空矩阵 | 第4章 |
| \ | 左除,用于用矩阵实现高斯消元法 | 第10章 |
命令
| 命令 | 用途 | 所属章节 |
|---|---|---|
| format + | 将格式设置为仅显示正负号 | 第2章 |
| format compact | 将格式设置为紧凑形式 | 第2章 |
| format long | 将格式设置为14位小数 | 第2章 |
| format long e | 将格式设置为14位指数形式 | 第2章 |
| format long eng | 将格式设置为带14位小数的工程符号 | 第2章 |
| format long g | 允许MATLAB选择最佳格式(定点或浮点),使用14位小数 | 第2章 |
| format loose | 将格式设置回默认的非紧凑形式 | 第2章 |
| format short | 将格式设置回默认的4位小数 | 第2章 |
| format short e | 将格式设置为4位指数形式 | 第2章 |
| format short eng | 将格式设置为带4位小数的工程符号 | 第2章 |
| format short g | 允许MATLAB选择最佳格式(定点或浮点),使用4位小数 | 第2章 |
| format rat | 将格式设置为有理(分数)显示 | 第2章 |
| ans | MATLAB计算结果的默认变量名 | 第2章 |
| clc | 清除命令屏幕 | 第2章 |
| clear | 清除工作区 | 第2章 |
| diary | 将工作区中发出的命令和结果保存到文件中 | 第2章 |
| exit | 终止MATLAB | 第2章 |
| help | 调用帮助实用程序 | 第2章 |
| load | 从文件中加载矩阵 | 第2章 |
| quit | 终止MATLAB | 第2章 |
| save | 将变量保存到文件中 | 第2章 |
| who | 列出内存中的变量 | 第2章 |
| whos | 列出变量及其大小 | 第2章 |
| help | 打开帮助函数 | 第3章 |
| helpwin | 打开窗口化的帮助函数 | 第3章 |
| clock | 返回时间 | 第3章 |
| date | 返回日期 | 第3章 |
| intmax | 返回MATLAB中使用的最大可能整数值 | 第3章 |
| intmin | 返回MATLAB中使用的最小可能整数值 | 第3章 |
| realmax | 返回MATLAB中使用的最大可能浮点数值 | 第3章 |
| realmin | 返回MATLAB中使用的最小可能浮点数值 | 第3章 |
| ascii | 表示数据应以标准ASCII格式保存 | 第2章 |
| pause | 暂停程序执行,直到按下任意键 | 第5章 |
特殊函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| pi | π的数值近似值 | 第2章 |
| eps | 可识别的最小差值 | 第3章 |
| I | 虚数 | 第3章 |
| Inf | 无穷大 | 第3章 |
| j | 虚数 | 第3章 |
| NaN | 非数字 | 第3章 |
| clock | 返回时间 | 第3章 |
| date | 返回日期 | 第3章 |
基本数学函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| abs | 计算实数的绝对值或复数的模 | 第3章 |
| erf | 计算误差函数 | 第3章 |
| exp | 计算(e^x)的值 | 第3章 |
| factor | 查找质因数 | 第3章 |
| factorial | 计算阶乘 | 第3章 |
| gcd | 查找最大公约数 | 第3章 |
| isprime | 判断一个值是否为质数 | 第3章 |
| isreal | 判断一个值是实数还是复数 | 第3章 |
| lcn | 查找最小公倍数 | 第3章 |
| log | 计算自然对数,即(\log_e) | 第3章 |
| log10 | 计算常用对数,即(\log_{10}) | 第3章 |
| log2 | 计算以2为底的对数 | 第3章 |
| nthroot | 查找输入矩阵的实n次方根 | 第3章 |
| primes | 查找小于输入值的质数 | 第3章 |
| prod | 计算数组中值的乘积 | 第3章 |
| rats | 将输入转换为有理表示(即分数) | 第3章 |
| rem | 计算除法问题中的余数 | 第3章 |
| sign | 判断符号(正或负) | 第3章 |
| sqrt | 计算一个数的平方根 | 第3章 |
| sum | 计算数组中值的总和 | 第3章 |
三角函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| asin | 计算反正弦(arcsine) | 第3章 |
| asind | 计算反正弦并以度为单位报告结果 | 第3章 |
| cos | 计算余弦 | 第3章 |
| sin | 以弧度为输入计算正弦 | 第3章 |
| sind | 以度为输入计算正弦 | 第3章 |
| sinh | 计算双曲正弦 | 第3章 |
| tan | 以弧度为输入计算正切 | 第3章 |
| deg2rad | 将度转换为弧度 | 第3章 |
| rad2deg | 将弧度转换为度 | 第3章 |
复数函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| abs | 计算实数的绝对值或复数的模 | 第3章 |
| angle | 当复数用极坐标表示时计算角度 | 第3章 |
| complex | 创建复数 | 第3章 |
| conj | 创建复数的共轭复数 | 第3章 |
| imag | 提取复数的虚部 | 第3章 |
| isreal | 判断一个值是实数还是复数 | 第3章 |
| real | 提取复数的实部 | 第3章 |
舍入函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| ceil | 向正无穷方向舍入到最接近的整数 | 第3章 |
| fix | 向零方向舍入到最接近的整数 | 第3章 |
| floor | 向负无穷方向舍入到最接近的整数 | 第3章 |
| round | 舍入到最接近的整数 | 第3章 |
数据分析函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| cumprod | 计算数组中值的累积乘积 | 第3章 |
| cumsum | 计算数组中值的累积总和 | 第3章 |
| length | 确定数组的最大维度 | 第3章 |
| max | 查找数组中的最大值并确定存储最大值的元素 | 第3章 |
| mean | 计算数组中元素的平均值 | 第3章 |
| median | 查找数组中元素的中位数 | 第3章 |
| min | 查找数组中的最小值并确定存储最小值的元素 | 第3章 |
| mode | 查找数组中最常见的数字 | 第3章 |
| nchoosek | 计算从n个值中选择k个值的可能组合数 | 第3章 |
| numel | 确定数组中的元素总数 | 第3章 |
| size | 确定数组的行数和列数 | 第3章 |
| sort | 对向量的元素进行排序 | 第3章 |
| sortrows | 根据第一列的值对向量的行进行排序 | 第3章 |
| prod | 计算数组中值的乘积 | 第3章 |
| sum | 计算数组中值的总和 | 第3章 |
| std | 计算标准差 | 第3章 |
| var | 计算方差 | 第3章 |
随机数函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| rand | 计算均匀分布的随机数 | 第3章 |
| randn | 计算正态分布(高斯)随机数 | 第3章 |
| randi | 计算随机整数 | 第3章 |
矩阵函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| meshgrid | 将向量映射到二维数组 | 第4章和第5章 |
| diag | 提取矩阵的对角线 | 第4章 |
| fliplr | 将矩阵左右翻转 | 第4章 |
| flipud | 将矩阵上下翻转 | 第4章 |
| linspace | 生成线性间隔的向量 | 第2章 |
| logspace | 生成对数间隔的向量 | 第2章 |
| cross | 计算叉积 | 第10章 |
| det | 计算矩阵的行列式 | 第10章 |
| dot | 计算点积 | 第10章 |
| inv | 计算矩阵的逆 | 第10章 |
| rref | 使用简化行阶梯形式方案求解一系列线性方程 | 第10章 |
二维绘图函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| bar | 生成条形图 | 第5章 |
| barh | 生成水平条形图 | 第5章 |
| contour | 生成三维表面的等高线图 | 第5章 |
| contourf | 生成填充等高线图 | 第5章 |
| comet | 以伪动画序列绘制x - y图 | 第5章 |
| fplot | 根据函数创建x - y图 | 第5章 |
| histogram | 生成直方图 | 第5章 |
| histcounts | 返回每个区间中的项目数 | 第5章 |
| loglog | 生成两个轴都按对数缩放的x - y图 | 第5章 |
| pcolor | 创建类似于等高线图的伪彩色图 | 第5章 |
| pie | 生成饼图 | 第5章 |
| plot | 创建x - y图 | 第5章 |
| plotyy | 创建具有两个y轴的图 | 第5章 |
| polarplot | 创建极坐标图 | 第5章 |
| semilogx | 生成x轴按对数缩放的x - y图 | 第5章 |
| semilogy | 生成y轴按对数缩放的x - y图 | 第5章 |
三维绘图函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| bar3 | 生成三维条形图 | 第5章 |
| bar3h | 生成水平三维条形图 | 第5章 |
| comet3 | 以伪动画序列绘制三维线图 | 第5章 |
| mesh | 生成表面的网格图 | 第5章 |
| peaks | 创建用于演示绘图函数的示例三维矩阵 | 第5章 |
| pie3 | 生成三维饼图 | 第5章 |
| plot3 | 生成三维线图 | 第5章 |
| sphere | 用于演示绘图的示例函数 | 第5章 |
| surf | 生成表面图 | 第5章 |
| surfc | 生成表面和等高线组合图 | 第5章 |
绘图外观控制
| 指示符 | 用途 | 所属章节 |
|---|---|---|
| - | 实线 | 第5章 |
| : | 虚线 | 第5章 |
| -. | 点划线 | 第5章 |
| – | 破折线 | 第5章 |
| . | 点 | 第5章 |
| o | 圆圈 | 第5章 |
| x | x标记 | 第5章 |
| + | 加号 | 第5章 |
| * | 星号 | 第5章 |
| s | 正方形 | 第5章 |
| d | 菱形 | 第5章 |
| ▽ | 下三角形 | 第5章 |
| △ | 上三角形 | 第5章 |
| < | 左三角形 | 第5章 |
| > | 右三角形 | 第5章 |
| p | 五角星 | 第5章 |
| h | 六角星 | 第5章 |
| b | 蓝色 | 第5章 |
| g | 绿色 | 第5章 |
| r | 红色 | 第5章 |
| c | 青色 | 第5章 |
| m | 品红色 | 第5章 |
| y | 黄色 | 第5章 |
| k | 黑色 | 第5章 |
图形控制和注释函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| axis | 冻结当前轴缩放以便后续绘图或指定轴尺寸 | 第5章 |
| axis equal | 强制每个轴具有相同的比例间距 | 第5章 |
| colormap | 表面图中使用的颜色方案 | 第5章 |
| figure | 打开一个新的图形窗口 | 第5章 |
| gtext | 类似于text;框的位置由用户在图形窗口中交互式点击确定 | 第5章 |
| grid | 仅向当前绘图添加网格 | 第5章 |
| grid off | 关闭网格 | 第5章 |
| grid on | 向当前和当前图形中的所有后续图形添加网格 | 第5章 |
| hold off | 指示MATLAB在添加新信息之前擦除图形内容 | 第5章 |
| hold on | 指示MATLAB在添加新信息之前不擦除图形内容 | 第5章 |
| legend | 向图形添加图例 | 第5章 |
| shading flat | 用一种颜色对表面图的每个网格部分进行着色 | 第5章 |
| shading interp | 通过插值对表面图进行着色 | 第5章 |
| subplot | 将图形窗口划分为可用于绘图的部分 | 第5章 |
| text | 向图形添加文本框 | 第5章 |
| title | 向绘图添加标题 | 第5章 |
| xlabel | 向x轴添加标签 | 第5章 |
| ylabel | 向y轴添加标签 | 第5章 |
| zlabel | 向z轴添加标签 | 第5章 |
图形颜色方案
| 函数 | 用途 | 所属章节 |
|---|---|---|
| autumn | 表面图中使用的可选颜色图 | 第5章 |
| bone | 表面图中使用的可选颜色图 | 第5章 |
| colorcube | 表面图中使用的可选颜色图 | 第5章 |
| cool | 表面图中使用的可选颜色图 | 第5章 |
| copper | 表面图中使用的可选颜色图 | 第5章 |
| flag | 表面图中使用的可选颜色图 | 第5章 |
| hot | 表面图中使用的可选颜色图 | 第5章 |
| hsv | 表面图中使用的可选颜色图 | 第5章 |
| jet | 表面图中使用的可选颜色图 | 第5章 |
| parula | 表面图中使用的默认颜色图 | 第5章 |
| pink | 表面图中使用的可选颜色图 | 第5章 |
| prism | 表面图中使用的可选颜色图 | 第5章 |
| spring | 表面图中使用的可选颜色图 | 第5章 |
| summer | 表面图中使用的可选颜色图 | 第5章 |
| white | 表面图中使用的可选颜色图 | 第5章 |
| winter | 表面图中使用的可选颜色图 | 第5章 |
函数创建和使用
| 函数/字符 | 用途 | 所属章节 |
|---|---|---|
| addpath | 向MATLAB搜索路径添加目录 | 第9章 |
| function | 将M文件标识为函数 | 第9章 |
| nargin | 确定函数中的输入参数数量 | 第9章 |
| nargout | 确定函数中的输出参数数量 | 第9章 |
| pathtool | 打开交互式路径工具 | 第9章 |
| varargin | 表示函数可以接受可变数量的参数 | 第9章 |
| @ | 标识函数句柄,如匿名函数中使用的那些 | 第9章 |
| % | 注释 | 第9章 |
| matlabFunction | 将符号表达式转换为MATLAB函数 | 第13章 |
格式控制
| 字符 | 用途 | 所属章节 |
|---|---|---|
| ‘ | 开始和结束字符串 | 第8章 |
| % | fprintf命令中的占位符 | 第8章 |
| %f | 定点或十进制表示法 | 第8章 |
| %d | 十进制表示法 | 第8章 |
| %e | 指数表示法 | 第8章 |
| %g | 定点或指数表示法 | 第8章 |
| %s | 字符串表示法 | 第8章 |
| %% | 单元格分隔符 | 第8章 |
| \n | 换行符 | 第8章 |
| \r | 回车符(类似于换行符) | 第8章 |
| \t | 制表符 | 第8章 |
| \b | 退格符 | 第8章 |
输入/输出控制
| 函数 | 用途 | 所属章节 |
|---|---|---|
| disp | 在命令窗口中显示字符串或矩阵 | 第8章 |
| fprintf | 创建格式化输出,可发送到命令窗口或文件 | 第8章 |
| ginput | 允许用户从图形中选取值 | 第8章 |
| input | 允许用户输入值 | 第8章 |
| pause | 暂停程序 | 第8章 |
| sprintf | 类似于fprintf,创建格式化输出并分配给变量名,存储为字符数组 | 第8章 |
| uiimport | 启动导入屏幕 | 第8章 |
| xlsimport | 导入Excel数据文件 | 第8章 |
| xlswrite | 将数据导出为Excel文件 | 第8章 |
| load | 从文件中加载矩阵 | 第2章 |
| save | 将变量保存到文件中 | 第2章 |
| celldisp | 显示单元数组的内容 | 第11章 |
| imfinfo | 读取标准图形文件并确定其包含的数据类型 | 第14章 |
| imread | 读取图形文件 | 第14章 |
| mwrite | 写入图形文件 | 第14章 |
比较运算符
| 运算符 | 用途 | 所属章节 |
|---|---|---|
| < | 小于 | 第6章 |
| <= | 小于或等于 | 第6章 |
| > | 大于 | 第6章 |
| >= | 大于或等于 | 第6章 |
| == | 等于 | 第6章 |
| ~= | 不等于 | 第6章 |
逻辑运算符
| 运算符 | 用途 | 所属章节 |
|---|---|---|
| & | 与 | 第6章 |
| 或 | ||
| ~ | 非 | 第6章 |
| xor | 异或 | 第6章 |
控制结构函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| break | 终止循环的执行 | 第7章 |
| case | 对响应进行分类 | 第6章 |
| continue | 终止循环的当前遍历,但继续下一次遍历 | 第7章 |
| else | 定义if语句结果为false时的路径 | 第6章 |
| elseif | 定义if语句结果为false时的路径,并指定新的逻辑测试 | 第6章 |
| end | 标识控制结构的结束 | 第6章 |
| for | 生成循环结构 | 第7章 |
| if | 检查条件,结果为true或false | 第6章 |
| menu | 创建菜单作为输入工具 | 第6章 |
| otherwise | case选择结构的一部分 | 第6章 |
| switch | case选择结构的一部分 | 第6章 |
| while | 生成循环结构 | 第7章 |
逻辑函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| all | 检查数组中的所有元素是否满足某个标准 | 第6章 |
| any | 检查数组中的任何元素是否满足某个标准 | 第6章 |
| find | 确定矩阵中哪些元素满足输入标准 | 第6章 |
| isprime | 判断一个值是否为质数 | 第3章 |
| isreal | 判断一个值是实数还是复数 | 第3章 |
计时函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| clock | 确定CPU时钟的当前时间 | 第7章 |
| etime | 计算经过的时间 | 第7章 |
| tic | 开始计时序列 | 第7章 |
| toc | 停止计时序列 | 第7章 |
| date | 返回日期 | 第3章 |
特殊矩阵函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| eye | 生成单位矩阵 | 第10章 |
| magic | 创建“幻方”矩阵 | 第10章 |
| ones | 创建全为1的矩阵 | 第10章 |
| pascal | 创建帕斯卡矩阵 | 第10章 |
| zeros | 创建全为0的矩阵 | 第10章 |
| gallery | 包含示例矩阵 | 第10章 |
数据类型
| 字符/类型 | 用途 | 所属章节 |
|---|---|---|
| { } | 单元数组构造器 | 第11章和第12章 |
| “ | 字符串数据(字符信息) | 第11章和第12章 |
| 字符数组 | - | 第11章 |
| 数值数组 | - | 第11章 |
| 符号数组 | - | 第11章 |
| 逻辑数组 | - | 第11章 |
| 稀疏数组 | - | 第11章 |
| 单元数组 | - | 第11章 |
| 结构数组 | - | 第11章 |
数据类型操作函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| celldisp | 显示单元数组的内容 | 第11章 |
| char | 创建填充字符数组 | 第11章 |
| double | 将数组转换为双精度数组 | 第11章 |
| int16 | 16位有符号整数 | 第11章 |
| int32 | 32位有符号整数 | 第11章 |
| int64 | 64位有符号整数 | 第11章 |
| int8 | 8位有符号整数 | 第11章 |
| num2str | 将数值数组转换为字符数组 | 第11章 |
| single | 将数组转换为单精度数组 | 第11章 |
| sparse | 将全格式矩阵转换为稀疏格式矩阵 | 第11章 |
| string | 创建字符串数组 | 第11章 |
| str2num | 将字符数组转换为数值数组 | 第11章 |
| table | 创建表格数组 | 第4章和第11章 |
| uint16 | 16位无符号整数 | 第11章 |
| uint32 | 32位无符号整数 | 第11章 |
| uint64 | 64位无符号整数 | 第11章 |
| uint8 | 8位无符号整数 | 第11章 |
符号表达式操作函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| collect | 合并同类项 | 第12章 |
| diff | 求符号表达式的符号导数 | 第12章 |
| dsolve | 求解微分方程 | 第12章 |
| expand | 展开表达式或方程 | 第12章 |
| factor | 分解表达式或方程 | 第12章 |
| int | 求符号表达式的符号积分 | 第12章 |
| matlabFunction | 将符号表达式转换为匿名MATLAB函数 | 第12章 |
| mupad | 打开MuPad工作簿 | 第12章 |
| numden | 提取表达式或方程的分子和分母 | 第12章 |
| simplify | 使用MuPad的内置简化规则进行简化 | 第12章 |
| solve | 求解符号表达式或方程 | 第12章 |
| subs | 代入符号表达式或方程 | 第12章 |
| sym | 创建符号变量、表达式或方程 | 第12章 |
| syms | 创建符号变量 | 第12章 |
符号绘图函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| fcontour | 创建等高线图 | 第12章 |
| fcontourf | 创建填充等高线图 | 第12章 |
| fmesh | 根据符号表达式创建网格图 | 第12章 |
| fplot | 创建符号表达式的x - y图 | 第12章 |
| fplot3 | 创建三维线图 | 第12章 |
| ezpolar | 创建极坐标图 | 第12章 |
| fsurf | 根据符号表达式创建表面图 | 第12章 |
数值技术函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| bvp4c | 求解常微分方程的边值问题 | 第13章 |
| cftool | 打开曲线拟合图形用户界面 | 第13章 |
| diff | 如果输入是数组,计算数组中相邻值的差值;如果输入是符号表达式,求符号导数 | 第13章 |
| fminbnd | 接受函数句柄或函数定义作为输入,数值计算两个边界之间的函数最小值 | 第9章 |
| fzero | 接受函数句柄或函数定义作为输入,找到最接近指定值的零点 | 第9章 |
| gradient | 使用前向、后向和中心差分技术组合数值求导数 | 第13章 |
| interp1 | 使用默认的线性插值技术或指定的高阶方法近似中间数据 | 第13章 |
| interp2 | 二维插值函数 | 第13章 |
| interp3 | 三维插值函数 | 第13章 |
| interpn | 多维插值函数 | 第13章 |
| ode45 | 求解常微分方程 | 第13章 |
| ode23 | 求解常微分方程 | 第13章 |
| ode113 | 求解常微分方程 | 第13章 |
| ode15s | 求解常微分方程 | 第13章 |
| ode23s | 求解常微分方程 | 第13章 |
| ode23t | 求解常微分方程 | 第13章 |
| ode23tb | 求解常微分方程 | 第13章 |
| ode15i | 求解常微分方程 | 第13章 |
| polyfit | 计算最小二乘多项式的系数 | 第13章 |
| polyval | 在指定的x值处计算多项式的值 | 第13章 |
| integral | 计算曲线下的积分 | 第13章 |
示例数据集和图像函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| cape | MATLAB的海角示例图像文件 | 第14章 |
| clown | MATLAB的小丑示例图像文件 | 第14章 |
| detail | MATLAB的丢勒木雕部分示例图像文件 | 第14章 |
| durer | MATLAB的丢勒木雕示例图像文件 | 第14章 |
| earth | MATLAB的地球示例图像文件 | 第14章 |
| flujet | MATLAB显示流体行为的示例图像文件 | 第14章 |
| gatlin | MATLAB的照片示例图像文件 | 第14章 |
| mandrill | MATLAB的山魈示例图像文件 | 第14章 |
| mri | 示例MRI数据集 | 第14章 |
| peaks | 创建示例绘图 | 第14章 |
| seamount | MATLAB的海山示例数据文件 | 第5章 |
| spine | MATLAB的脊柱X光示例图像文件 | 第14章 |
| wind | MATLAB的风速信息示例数据文件 | 第14章 |
| sphere | 用于演示绘图的示例函数 | 第5章 |
| census | 用于演示数值技术的内置数据集 | 第13章 |
| handel | 用于演示声音函数的内置数据集 | 第3章 |
高级可视化函数
| 函数 | 用途 | 所属章节 |
|---|---|---|
| alpha | 设置当前绘图对象的透明度 | 第14章 |
| camlight | 打开相机灯光 | 第14章 |
| coneplot | 创建带有标记指示输入向量方向的绘图 | 第14章 |
| contourslice | 从数据切片创建等高线图 | 第14章 |
| drawnow | 强制MATLAB立即绘制绘图 | 第14章 |
| gca | 获取当前轴句柄 | 第14章 |
| gcf | 获取当前图形句柄 | 第14章 |
| get | 返回指定对象的属性 | 第14章 |
| getframe | 获取当前图形并将其保存为结构数组中的电影帧 | 第14章 |
| image | 创建二维图像 | 第14章 |
| imagesc | 通过缩放数据创建二维图像 | 第14章 |
| imfinfo | 读取标准图形文件并确定其包含的数据类型 | 第14章 |
| imread | 读取图形文件 | 第14章 |
| imwrite | 写入图形文件 | 第14章 |
| isosurface | 创建连接相同大小体积数据的表面 | 第14章 |
| movie | 播放存储为MATLAB结构数组的电影 | 第14章 |
| set | 为指定对象设置属性 | 第14章 |
| shading | 确定表面图和伪彩色图中使用的着色技术 | 第14章 |
通过了解这些特殊字符、命令和函数,我们可以更高效地使用MATLAB进行各种计算、绘图和数据分析。在实际应用中,根据具体需求选择合适的工具和方法,能够帮助我们更好地解决问题。
以上就是关于Simulink和MATLAB中特殊字符、命令和函数的详细介绍,希望对大家有所帮助。在后续的学习和实践中,不断探索和应用这些知识,将能提升我们在科学计算和工程应用方面的能力。
以下是一些常见函数的使用示例流程:
graph TD;
A[开始] --> B[选择合适的函数];
B --> C[确定输入参数];
C --> D[调用函数进行计算];
D --> E[处理函数输出结果];
E --> F[根据结果进行后续操作或绘图];
F --> G[结束];
同时,为了更好地理解不同类型函数的用途,我们可以参考以下简单的分类表格:
| 函数类型 | 示例函数 | 主要用途 |
| ---- | ---- | ---- |
| 基本数学函数 | abs, exp, sqrt | 进行基本的数学计算 |
| 绘图函数 | plot, bar,
Simulink与MATLAB:微分方程求解与应用
8. 常见问题解答
在使用Simulink和MATLAB解决问题的过程中,可能会遇到一些常见问题,以下是一些解答:
问题1:在Simulink中如何调整仿真时间?
在模型窗口菜单栏中选择“Simulation” -> “Configuration Parameters”,在弹出的窗口中可以设置仿真时间。
问题2:使用simout块时,为什么要将保存格式从Structure改为Array?
将保存格式改为Array后,输出的数据会以数组形式存储在MATLAB工作区,方便后续进行绘图或其他计算。具体操作如下:
1. 找到Sink库中的simout块。
2. 双击simout块,打开参数窗口。
3. 将Save format从Structure改为Array。
问题3:在Simulink模型中,如何调整块的方向?
可以通过将块放入模型中,右键单击图标,从下拉菜单中选择“Format”,里面有多种选项可供选择以调整块的方向。
9. 更多应用案例
除了前面提到的落体问题,Simulink和MATLAB还可以应用于更多领域,以下是一些具体案例:
9.1 电路分析
考虑一个简单的RLC串联电路,电流i可以用二阶微分方程描述:
[
L \frac{d^2i}{dt^2} + R \frac{di}{dt} + \frac{1}{C} i = 0
]
可重写为:
[
\frac{d^2i}{dt^2} = -\frac{R}{L} \frac{di}{dt} - \frac{1}{L \times C} i
]
该系统的行为取决于L、C和R(电感、电容和电阻)的相对值。当(R^2 > 4\frac{L}{C})时,系统是“过阻尼”的;当(R^2 < 4\frac{L}{C})时,系统是“欠阻尼”的;当(R^2 = 4\frac{L}{C})时,系统是“临界阻尼”的。
使用Simulink对系统响应进行建模,假设(R = 100,000 \Omega),(C = 1 \times 10^{-6} F)。选择L的值以满足上述每个阻尼条件。根据欧姆定律(V = iR),用施加到系统的恒定电压值5 V计算初始电流值。
以下是Simulink模型构建步骤:
1. 从相应库中添加积分器块、加法块、乘法块、常数块等。
2. 根据微分方程连接各个块。
3. 设置常数块的值,如(R)、(C)和不同的(L)值。
4. 运行模型并观察示波器结果。
graph TD;
A[开始] --> B[添加积分器、加法、乘法、常数块];
B --> C[根据方程连接块];
C --> D[设置常数块值];
D --> E[运行模型];
E --> F[观察示波器结果];
F --> G[结束];
9.2 化学反应动力学
化学反应速率与反应物的浓度有关。例如,一级反应中反应物的变化速率与反应物浓度之间的关系为:
[
\frac{d[A]}{dt} = -k [A]
]
稍微复杂一些的反应可能取决于反应物浓度的平方:
[
\frac{d[A]}{dt} = -k [A]^2
]
使用Simulink对一级和二级反应问题中反应物浓度[A]随时间的变化进行建模。假设一级反应的(k = 0.1 min^{-1}),二级反应的(k = 0.1 l/mol min)。初始浓度([A])为(5 mol/l)。使用Simulink的示波器块显示结果。
以下是具体步骤:
1. 从相应库中添加积分器块、乘法块、常数块等。
2. 对于一级反应,根据(\frac{d[A]}{dt} = -k [A])连接块;对于二级反应,根据(\frac{d[A]}{dt} = -k [A]^2)连接块。
3. 设置常数块的值,如(k)和初始浓度([A])。
4. 运行模型并观察示波器结果。
| 反应类型 | 微分方程 | 主要块连接 |
|---|---|---|
| 一级反应 | (\frac{d[A]}{dt} = -k [A]) | 常数块(k) -> 乘法块 -> 积分器块 |
| 二级反应 | (\frac{d[A]}{dt} = -k [A]^2) | 常数块(k)、积分器块输出 -> 乘法块(计算([A]^2)) -> 乘法块(乘以k) -> 积分器块 |
10. 总结与展望
Simulink和MATLAB为解决各种复杂问题提供了强大的工具。Simulink通过图形化界面方便地构建模型,尤其适用于处理微分方程描述的动态系统;而MATLAB则提供了丰富的函数库,可用于数值计算、符号运算、绘图等。
在实际应用中,我们可以结合两者的优势,先用Simulink构建模型进行仿真,再用MATLAB进行结果分析和验证。同时,对于一些没有解析解的微分方程,Simulink的数值求解能力显得尤为重要。
未来,随着技术的不断发展,Simulink和MATLAB可能会有更多的功能和应用场景。例如,在人工智能、机器学习等领域,它们可以用于模型的训练和验证。我们可以期待它们在更多领域发挥更大的作用,为解决复杂的科学和工程问题提供更有效的支持。
11. 实践建议
为了更好地掌握Simulink和MATLAB的使用,以下是一些实践建议:
建议1:多做练习
通过完成各种练习题,如前面提到的sinc函数建模、正弦波绘图等问题,加深对Simulink和MATLAB功能的理解。
建议2:参考示例
MATLAB的帮助函数包含了大量的示例,这些示例可以帮助我们学习如何使用不同的函数和工具。可以从简单的示例开始,逐步尝试更复杂的问题。
建议3:结合实际问题
将Simulink和MATLAB应用到实际问题中,如电路设计、化学反应分析等。通过解决实际问题,提高我们的应用能力和解决问题的能力。
以下是一个实践步骤的流程图:
graph TD;
A[学习基础知识] --> B[做练习题];
B --> C[参考示例];
C --> D[应用到实际问题];
D --> E[总结经验并改进];
E --> F[继续学习新内容];
F --> B;
通过不断地学习和实践,我们可以熟练掌握Simulink和MATLAB的使用,为解决各种科学和工程问题提供有力的支持。
超级会员免费看
2437

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



