MATLAB基础与应用:从棒球轨迹模拟到常用指令详解
1. 棒球轨迹模拟分析
1.1 无空气阻力情况
当设置空气阻力系数
c
为 0,且初始速度设为
[80, 80]
时,球会遵循常见的抛物线轨迹。球在落地前大约飞行 400 英尺,这在大多数棒球场中接近本垒打的距离。通过另外两个示波器,我们可以读取飞行时间和最终速度,球在空中停留约 5 秒,落地时的速度约为 115 英尺/秒。
1.2 考虑空气阻力(c = 0.0017)
当考虑空气阻力,且
c = 0.0017
时,轨迹发生了巨大变化。球仅飞行约 270 英尺,其最高点约为 80 英尺,大约 4.5 秒后落地,最终速度仅约为 80 英尺/秒,这对中外野手的接球手来说比无空气阻力的情况要温和得多。
1.3 不同空气阻力系数(c = 0.0014,丹佛)
当
c = 0.0014
(对应在丹佛打球)时,球飞行约 285 英尺,比在海平面打球远约 15 英尺。对于一些大力击球,这额外的 15 英尺可能决定是出局还是本垒打。飞行时间有非常小的增加,最终速度稍快,约为 83 英尺/秒。根据美国职业棒球大联盟的统计数据,在丹佛的击球率通常会更高。
下面是不同情况的对比表格:
| 空气阻力系数(c) | 飞行距离(英尺) | 飞行时间(秒) | 最终速度(英尺/秒) |
| — | — | — | — |
| 0 | 400 | 5 | 115 |
| 0.0017 | 270 | 4.5 | 80 |
| 0.0014 | 285 | 稍增加 | 83 |
1.4 模拟流程
graph LR
A[设置初始条件] --> B[无空气阻力模拟]
A --> C[考虑空气阻力模拟(c = 0.0017)]
A --> D[考虑空气阻力模拟(c = 0.0014)]
B --> E[记录飞行距离、时间和速度]
C --> E
D --> E
E --> F[对比分析结果]
2. MATLAB常用对象概述
MATLAB 中的常用对象可分为六类:运算符、内置常量、内置函数、命令、图形命令和 MATLAB 编程结构。虽然 MATLAB 不区分命令和函数,但我们可以将 MATLAB 函数看作数学函数,它可以被求值或绘图;而命令则用于操作数据、表达式或启动某个过程。
2.1 MATLAB运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
\
|
左矩阵除法,
X = A\B
是方程
A*X = B
的解
|
A = [1 0; 2 1]; B = [3; 5]; A\B
|
/
|
普通标量除法或右矩阵除法,对于矩阵,
A/B
本质上等同于
A*inv(B)
| - |
*
| 标量或矩阵乘法 | - |
.
| 与算术运算符结合使用,强制对数组进行逐元素操作,也用于访问结构体数组的字段 |
a = [1 2 3]; b = [4 -6 8]; a.*b
|
.*
| 数组的逐元素乘法 | - |
^
| 标量或矩阵幂运算 | - |
.^
| 数组的逐元素幂运算 | - |
:
| 范围运算符,用于定义向量和矩阵 |
X = 0:0.1:30;
|
'
| 矩阵的复共轭转置,也用于界定字符串的开始和结束 | - |
;
| 抑制 MATLAB 命令的输出,可用于分隔命令行上的命令,也用于分隔矩阵或列向量的行 |
[1; 2; 3]
|
,
| 分隔矩阵行的元素或命令的参数,也可用于分隔命令行上的命令 | - |
.'
| 矩阵的转置 | - |
...
| 行继续运算符,不能在引号字符串内使用 |
1 + 3 + 5 + 7 + 9 + 11 ... + 13 + 15 + 17
|
!
| 从操作系统运行命令 |
!C:\Programs\program.bat
|
%
| 注释,MATLAB 将忽略同一行的其余部分 | - |
@
| 创建函数句柄 |
fminbnd(@cos, 0, 2*pi)
|
2.2 内置常量
-
eps:大约是计算机浮点舍入误差的大小,在大多数计算机上约为2 × 10−16。 -
exp(1):e = 2.71828 ...,注意e没有特殊含义。 -
i:i = √−1,这个赋值可以被覆盖,例如在for循环中使用i作为索引时,可使用j作为虚数单位。 -
Inf:∞,也可以用小写inf。 -
NaN:非数字,用于不确定的表达式,如0/0。 -
pi:π = 3.14159 ...。
2.3 内置函数
以下是一些常见的内置函数:
-
abs
:
|x|
-
acos
:
arccos x
-
asin
:
arcsin x
-
atan
:
arctan x
,如果需要点
(x, y)
的角坐标
θ
,请使用
atan2
-
bessel
:贝塞尔函数,
besselj(n, x)
和
bessely(n, x)
是
n
阶贝塞尔方程的线性无关解
-
conj
:给出复数的复共轭,例如
conj(1 - 5*i)
-
cos
:
cos x
-
cosh
:
cosh x
-
cot
:
cot x
-
erf
:误差函数
erf(x) = (2/√π) ∫₀ˣ e⁻ᵗ² dt
-
exp
:
eˣ
-
expm
:矩阵指数
-
gamma
:伽马函数
Γ(x) = ∫₀^∞ e⁻ᵗtˣ⁻¹dt
(当
Re x > 0
时),对于非负整数
k
,
Γ(k + 1) = k!
有时很有用
-
imag
:
imag(z)
,复数的虚部
-
log
:自然对数
ln x = logₑ x
-
real
:
real(z)
,复数的实部
-
sec
:
sec x
-
sech
:
sech x
-
sign
:根据参数为负、零或正返回
-1
、
0
或
1
-
sin
:
sin x
-
sinh
:
sinh x
-
sqrt
:
√x
-
tan
:
tan x
-
tanh
:
tanh x
2.4 MATLAB命令
MATLAB 命令用于操作数据和执行各种任务,以下是一些常见命令及其示例:
-
addpath
:将指定目录添加到 MATLAB 的文件搜索路径,例如
addpath C:\my--mfiles
-
ans
:一个变量,保存最近未赋值输出的值
-
cd
:将指定目录设置为当前(工作)目录,例如
cd C:\mydocs\mfiles
-
char
:将符号表达式转换为字符串,用于定义内联函数,例如:
syms x y
f = inline(char(sin(x)*sin(y)))
-
clear:清除变量和函数的值和定义,如果指定一个或多个变量,则仅清除这些变量,例如clear或clear f g -
collect:收集指定符号变量的幂的系数,例如:
syms x y
collect(x^2 - 2*x^2 + 3*x + x*y, x)
-
compose:函数组合,例如:
syms x y; f = exp(x); g = sin(y); h = compose(f, g)
-
ctranspose:矩阵的共轭转置,通常使用'运算符调用,对于实矩阵等同于transpose,例如:
A = [1 3 i]
A'
-
D:用于dsolve中表示微分,例如dsolve('x*Dy + y = sin(x)', 'x') -
delete:删除文件,例如delete <filename> -
det:矩阵的行列式,例如det([1 3; 4 5]) -
diag:创建具有指定对角向量的方阵,或提取方阵的对角线元素,例如:
V = [2 3 4 5]; diag(V)
X = [2 3; 4 5]; diag(X)
-
diary:将 MATLAB 会话的记录写入文件,例如diary <filename>和diary off -
diff:符号微分运算符(也是差分运算符),例如:
syms x; diff(x^3)
diff('x*y^2', 'y')
-
dir:列出当前工作目录中的文件,类似于ls -
disp:显示输出而不先给出其名称,例如:
x = 5.6; disp(x)
syms x; disp(x^2)
disp('This will print without quotes.')
-
double:为数值或符号量提供双精度值,应用于字符串时,返回字符串中字符的 ASCII 码向量,例如:
z = sym('pi'); double(z)
double('think')
-
dsolve:符号常微分方程求解器,默认独立变量是t,但可以在最后一个参数中指定不同的变量,例如:
dsolve('D2y - x*y = 0', 'x')
dsolve('Dy + y^2 = 0', 'y(0) = 1', 'x')
[x, y] = dsolve('Dx = 2x + y', 'Dy = - x')
-
echo:打开或关闭脚本 M 文件中命令的回显 -
edit:在编辑器/调试器中打开指定的 M 文件,例如edit mymfile -
eig:计算方阵的特征值和特征向量,例如:
eig([2, 3; 4, 5])
[e, v] = eig([1, 0, 0; 1, 1, 1; 1, 2, 4])
-
end:向量的最后一个元素,也是一个编程命令,例如v(end)或v(3:end) -
eval:用于将字符串作为 MATLAB 表达式求值,在 M 文件中很有用,例如eval('cos(x)') -
expand:展开代数表达式,例如:
syms x y; expand((x - y)^2)
-
eye:创建指定大小的单位矩阵,例如eye(5) -
factor:分解多项式,例如:
syms x y; factor(x^4 - y^4)
-
feval:计算由字符串指定的函数,在函数 M 文件中很有用,例如feval('exp', 1) -
find:查找向量或矩阵中非零元素的索引,例如X = [2 0 5]; find(X) -
fminbnd:在区间上找到函数的最小(近似)值,例如:
fminbnd('x^4 - x^2 + 1', 0, 1)
f = inline('x^3 - 7*x^2 - 5*x + 2', 'x'); fminbnd(f, 4, 6)
-
format:指定数值变量的输出格式,例如format long -
fzero:尝试在给定起始点附近或指定区间上找到指定函数的零点,例如:
fzero(inline('cos(x) - x'), 1)
fzero(@cos, [-pi 0])
-
guide:打开 GUI 设计环境,例如guide mygui -
help:请求 MATLAB 命令的文档,例如help factor -
inline:从字符串表达式构造 MATLAB 内联函数,例如:
f = inline('x^5 - x'); f(3)
sol = dsolve('Dy = x^2 + y', 'y(0) = 2', 'x');
fsol = inline(vectorize(sol), 'x')
-
int:积分运算符,用于定积分和不定积分,例如:
int('1/(1 + x^2)', 'x')
syms x; int(exp(-x), x, 0, Inf)
-
inv:方阵的逆,例如inv([1 2; 3 5]) -
jacobian:计算雅可比矩阵,对于标量函数,计算符号梯度,例如:
syms x y; f = x^2*y^3; jacobian(f)
-
length:返回向量或字符串的元素个数,例如length('abcde') -
limit:求双侧极限,如果存在的话,使用'right'或'left'求单侧极限,例如:
syms x; limit(sin(x)/x, x, 0)
syms x; limit(1/x, x, Inf, 'left')
-
linspace:生成线性间隔的点的向量,例如linspace(0, 2*pi, 30) -
load:从磁盘文件加载工作区变量,例如load filename -
lookfor:在 MATLAB 路径中找到的所有 M 文件的第一行中搜索指定字符串,例如lookfor ode -
ls:列出当前工作目录中的文件,类似于dir -
maple:通过字符串访问 Maple 内核,通常以maple('function', 'arg')的形式使用,学生版不可用,例如maple('help', 'csgn') -
max:计算向量元素的算术最大值,例如X = [3 5 1 -6 23 -56 100]; max(X) -
mean:计算向量元素的算术平均值,例如:
X = [3 5 1 -6 23 -56 100]; mean(X)
syms x y z; X = [x y z]; mean(X)
-
median:计算向量元素的算术中位数,例如X = [3 5 1 -6 23 -56 100]; median(X) -
min:计算向量元素的算术最小值,例如X = [3 5 1 -6 23 -56 100]; min(X) -
more:打开或关闭 MATLAB 输出的逐页滚动,使用空格键前进到下一页,回车键逐行前进,Q 键中止输出,例如more on和more off -
notebook:打开 M 书(仅适用于 Windows),例如notebook problem1.doc和notebook -setup -
num2str:将数字转换为字符串,在编程中很有用,例如constant = ['a' num2str(1)] -
ode45:一阶常微分方程的数值求解器,例如:
f = inline('t^2 + y', 't', 'y')
[x, y] = ode45(f, [0 10], 1);
plot(x, y)
-
ones:创建全为 1 的矩阵,例如ones(3)或ones(3, 1) -
open:打开文件,具体方式取决于文件名扩展名,例如open myfigure.fig -
path:不带参数时,显示搜索路径;带参数时,设置搜索路径,例如path或path(...) -
pretty:以更易读的格式显示符号表达式,例如:
syms x y; expr = x/(x - 3)/(x + 2/y)
pretty(expr)
-
prod:计算向量元素的乘积,例如X = [3 5 1 -6 23 -56 100]; prod(X) -
pwd:显示当前(工作)目录的名称 -
quadl:数值积分命令,在 MATLAB 5.3 或更早版本中使用quad8,例如:
format long; quadl('sin(exp(x))', 0, 1)
g = inline('sin(exp(x))'); quad8(g, 0, 1)
-
quit:终止 MATLAB 会话 -
rand:随机数生成器,生成 0 到 1 之间的随机数 -
rank:矩阵的秩,例如A = [2 3 5; 4 6 8]; rank(A) -
roots:找到多项式的根,多项式的系数由向量参数的元素给出,例如roots([1 2 2]) -
round:将数字四舍五入到最接近的整数 -
save:将工作区变量保存到指定文件,例如save filename -
sim:运行 SIMULINK 模型,例如sim('model') -
simple:尝试使用多种方法简化表达式,例如:
syms x y;[expression, how] = simple(sin(x)*cos(y) + cos(x)*sin(y))
-
simplify:尝试符号简化表达式,例如:
syms x; simplify(1/(1 + x)^2 - 1/(1 - x)^2)
-
simulink:打开 SIMULINK 库 -
size:返回矩阵的行数和列数,例如:
A = [1 3 2; 4 1 5]
[r, c] = size(A)
-
solve:求解方程或方程组,如果省略方程的右侧,则默认为0,例如:
solve('2*x^2 - 3*x + 6')
[x, y] = solve('x + 3*y = 4', '-x - 5*y = 3', 'x', 'y')
-
sound:通过计算机扬声器播放向量,例如sound(sin(0:0.1*pi:1000*pi)) -
strcat:连接两个或多个字符串,例如strcat('This ', 'is ', 'a ', 'long ', 'string.') -
str2num:将字符串转换为数字,在编程中很有用,例如:
constant = 'a7'
index = str2num(constant(2))
-
subs:替换表达式的部分内容,例如:
subs('x^3 - 4*x + 1', 'x', 2)
subs('sin(x)^2 + cos(x)', 'sin(x)', 'z')
-
sum:对向量求和,或对矩阵的列求和,例如k = 1:10; sum(k) -
sym:创建符号变量或数字,例如sym pi或x = sym('x')或constant = sym('1/2') -
syms:创建符号变量的快捷方式,syms x等同于x = sym('x'),例如syms x y z -
symsum:对向量进行符号求和,可能有无限多个元素,例如:
syms x k n; symsum(x^k, k, 0, n)
syms n; symsum(n^(-2), n, 1, Inf)
-
taylor:给出指定阶数(默认是 5)在指定点(默认是 0)的泰勒多项式逼近,例如:
syms x; taylor(cos(x), 8, 0)
taylor(exp(1/x), 10, Inf)
-
transpose:矩阵的转置(与ctranspose比较),将列向量转换为行向量,反之亦然,通常使用.'运算符调用,例如:
A = [1 3 4]
A.'
-
type:显示指定文件的内容,例如type myfile.m -
vectorize:向量化符号表达式,用于定义内联函数,例如f = inline(vectorize('x^2 - 1/x')) -
vpa:使用可变精度算术将表达式求值到指定的精度,例如vpa('1/3', 20) -
whos:列出工作区中所有变量的当前信息 -
zeros:创建全为 0 的矩阵,例如zeros(10)或zeros(3, 1)
3. MATLAB 图形命令详解
MATLAB 的图形命令可以帮助我们直观地展示数据和函数,下面详细介绍一些常见的图形命令。
3.1 图形命令列表
| 命令 | 描述 | 示例 |
|---|---|---|
area
| 生成 x 轴和曲线之间区域的阴影图 |
X = 0:0.1:4*pi; Y = sin(X); area(X, Y)
|
axes
| 创建一个空的图形窗口 | - |
axis
| 设置坐标轴的缩放和外观 |
axis([xmin xmax ymin ymax])
:设置坐标轴范围;
axis tight
:将坐标轴限制设置为数据的全范围;
axis equal
:使水平和垂直刻度相等;
axis square
:使坐标轴框为正方形;
axis off
:隐藏坐标轴和刻度标记
|
bar
| 绘制条形图 |
bar([2, 7, 1.5, 6])
|
cla
| 清除坐标轴 | - |
close
|
关闭当前图形窗口;
close all
关闭所有图形窗口
| - |
colormap
|
设置当前图形的颜色映射;可通过
help graph3d
查看颜色映射示例
|
X = 0:0.1:4*pi; Y = sin(X); colormap cool
|
comet
| 显示动画参数化绘图 |
t = 0:0.1:4*pi; comet(t.*cos(t), t.*sin(t))
|
contour
|
绘制二元函数的等高线图,通常与
meshgrid
一起使用
|
[X, Y] = meshgrid(-3:0.1:3, -3:0.1:3); contour(X, Y, X.^2 - Y.^2)
|
contourf
|
填充等高线图,常与
colormap
一起使用
|
[X,Y] = meshgrid(-2:0.1:2, -2:0.1:2); contourf(X, Y, X.^2 - Y.^3); colormap autumn
|
ezcontour
| 轻松绘制等高线或水平曲线 |
ezcontour('x^2 - y^2')
;
syms x y; ezcontour(x - y^2)
|
ezmesh
| 轻松绘制曲面的网格视图 |
ezmesh('x^2 + y^2')
;
syms x y; ezmesh(x*y)
|
ezplot
| 轻松绘制符号表达式的图形 |
ezplot('exp(-x^2)', [-5, 5])
;
syms x; ezplot(sin(x))
|
ezplot3
| 轻松绘制三维参数曲线 |
ezplot3('cos(t)', 'sin(t)', 't')
;
syms t; ezplot3(1 - cos(t), t - sin(t), t, [0 4*pi])
|
ezsurf
| 轻松绘制曲面的标准阴影视图 |
ezsurf('(x^2 + y^2)*exp(-(x^2 + y^2))')
;
syms x y; ezsurf(sin(x*y), [-pi pi -pi pi])
|
figure
| 创建一个新的图形窗口 | - |
fill
|
创建填充多边形,也可参考
patch
|
fill([0 1 1 0], [0 0 1 1], 'b'); axis equal tight
|
3.2 图形绘制流程
graph LR
A[定义数据] --> B[选择图形类型]
B --> C[设置图形属性]
C --> D[绘制图形]
D --> E[显示图形]
4. MATLAB 使用示例总结
4.1 综合示例:求解并绘制微分方程
以下是一个综合使用 MATLAB 命令求解并绘制微分方程的示例:
% 定义微分方程
f = inline('t^2 + y', 't', 'y');
% 求解微分方程
[x, y] = ode45(f, [0 10], 1);
% 绘制解的图形
plot(x, y);
xlabel('t');
ylabel('y');
title('Solution of the differential equation');
4.2 操作步骤总结
-
定义微分方程
:使用
inline函数定义微分方程。 -
求解微分方程
:使用
ode45函数求解微分方程,指定时间范围和初始条件。 -
绘制图形
:使用
plot函数绘制解的图形,并使用xlabel、ylabel和title函数添加坐标轴标签和标题。
4.3 MATLAB 常用对象总结
| 类别 | 示例对象 |
|---|---|
| 运算符 |
\
,
/
,
*
,
.
,
.*
,
^
,
.^
,
:
,
'
,
;
,
,
,
.'
,
...
,
!
,
%
,
@
|
| 内置常量 |
eps
,
exp(1)
,
i
,
Inf
,
NaN
,
pi
|
| 内置函数 |
abs
,
acos
,
asin
,
atan
,
bessel
,
conj
,
cos
,
cosh
,
cot
,
erf
,
exp
,
expm
,
gamma
,
imag
,
log
,
real
,
sec
,
sech
,
sign
,
sin
,
sinh
,
sqrt
,
tan
,
tanh
|
| 命令 |
addpath
,
ans
,
cd
,
char
,
clear
,
collect
,
compose
,
ctranspose
,
D
,
delete
,
det
,
diag
,
diary
,
diff
,
dir
,
disp
,
double
,
dsolve
,
echo
,
edit
,
eig
,
end
,
eval
,
expand
,
eye
,
factor
,
feval
,
find
,
fminbnd
,
format
,
fzero
,
guide
,
help
,
inline
,
int
,
inv
,
jacobian
,
length
,
limit
,
linspace
,
load
,
lookfor
,
ls
,
maple
,
max
,
mean
,
median
,
min
,
more
,
notebook
,
num2str
,
ode45
,
ones
,
open
,
path
,
pretty
,
prod
,
pwd
,
quadl
,
quit
,
rand
,
rank
,
roots
,
round
,
save
,
sim
,
simple
,
simplify
,
simulink
,
size
,
solve
,
sound
,
strcat
,
str2num
,
subs
,
sum
,
sym
,
syms
,
symsum
,
taylor
,
transpose
,
type
,
vectorize
,
vpa
,
whos
,
zeros
|
| 图形命令 |
area
,
axes
,
axis
,
bar
,
cla
,
close
,
colormap
,
comet
,
contour
,
contourf
,
ezcontour
,
ezmesh
,
ezplot
,
ezplot3
,
ezsurf
,
figure
,
fill
|
通过以上介绍,我们对 MATLAB 的常用对象、命令和图形绘制有了更深入的了解。在实际应用中,我们可以根据具体需求选择合适的对象和命令来完成各种任务。同时,多进行实践和尝试,不断探索 MATLAB 的强大功能。
超级会员免费看

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



