数学建模-1:对变化建模
文章目录
- 对变化建模
- 比例性
- 1.1用差分方程对变化建模
- 1.2 利用差分方程近似描述变化
- 1.3 动力系统解法
- 1.4 差分方程组
- 定义与一般形式
- 求解方法
对变化建模
比例性
定义:两个变量y
和x
是互成比例的,如果一个变量是另一个变量的常数倍,即,y=kx
【测试比例性】
考虑弹簧-小球系统。
质量 m m m | 伸长量 e e e |
---|---|
50 | 1.000 |
100 | 1.875 |
150 | 2.750 |
200 | 3.250 |
250 | 4.375 |
300 | 4.875 |
350 | 5.675 |
400 | 6.500 |
450 | 7.250 |
500 | 8.000 |
550 | 8.750 |
首先,可视化数据:
注意到,数据貌似呈现线性关系:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
x = [50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550]
y = [1.000, 1.875, 2.750, 3.250, 4.375, 4.875, 5.675, 6.500, 7.250, 8.000, 8.750]
# 线性拟合
coefficients = np.polyfit(x, y, 1)
a = coefficients[0]
b = coefficients[1]
y_fit = a * np.array(x) + b
# 打印直线方程
equation = f"y = {a:.4f}x + {b:.4f}"
print("直线方程为:", equation)
plt.scatter(x, y, color="c", label="散点图")
plt.plot(x, y_fit, color='red', label='最佳拟合曲线')
# 在图中添加直线方程文本
plt.text(0.05, 0.9, equation, transform=plt.gca().transAxes, fontsize=12)
plt.xlabel("小球质量")
plt.ylabel("伸长量")
plt.title("弹簧 - 小球系统数据可视化")
plt.legend()
plt.show()
分析原因,为什么不符合胡克定律呢?可能是弹簧自重对弹簧原场伸长量的影响。
1.1用差分方程对变化建模
定义1:数列
A
=
{
a
0
,
a
1
,
a
2
,
a
3
,
.
.
.
}
A=\{a_0,a_1,a_2,a_3,...\}
A={a0,a1,a2,a3,...}的第
n
n
n个一阶差分为:
Δ
a
n
=
a
n
+
1
−
a
n
\Delta a_n=a_{n+1}-a_n
Δan=an+1−an
一阶差分表示该序列两个相邻值的增加或者减少,即在一个周期里序列图中的垂直变化。
定义2:用于描述从一个周期到下一个周期的变化的无穷多个代数方程的递推方程,称动力系统
1.2 利用差分方程近似描述变化
Δ a n = f ( a i , 外 来 项 ) \Delta a_n=f(a_i,外来项) Δan=f(ai,外来项)
1.3 动力系统解法
1.4 差分方程组
差分方程组是由多个差分方程组成的方程组,用于描述多个相关序列之间的关系。以下是关于差分方程组的详细介绍:
定义与一般形式
差分方程组是包含多个差分方程,且这些方程相互关联,共同描述多个离散变量之间动态关系的方程组。设
x
n
x_n
xn、
y
n
y_n
yn等是关于
n
n
n的离散序列,一般形式可以表示为:
{
Δ
x
n
=
f
1
(
x
n
,
y
n
,
⋯
)
Δ
y
n
=
f
2
(
x
n
,
y
n
,
⋯
)
⋯
\begin{cases}\Delta x_n = f_1(x_n,y_n,\cdots)\\\Delta y_n = f_2(x_n,y_n,\cdots)\\\cdots\end{cases}
⎩⎪⎨⎪⎧Δxn=f1(xn,yn,⋯)Δyn=f2(xn,yn,⋯)⋯
其中
Δ
x
n
=
x
n
+
1
−
x
n
\Delta x_n = x_{n + 1}-x_n
Δxn=xn+1−xn,
Δ
y
n
=
y
n
+
1
−
y
n
\Delta y_n = y_{n + 1}-y_n
Δyn=yn+1−yn,
f
1
f_1
f1、
f
2
f_2
f2等是关于
x
n
x_n
xn、
y
n
y_n
yn等序列的函数。
求解方法
- 迭代法:已知初始条件 x 0 x_0 x0、 y 0 y_0 y0等,根据差分方程组依次计算出 x 1 x_1 x1、 y 1 y_1 y1, x 2 x_2 x2、 y 2 y_2 y2等后续的值。例如,对于方程组: { x n + 1 = x n + 2 y n y n + 1 = 3 x n − y n \begin{cases}x_{n + 1}=x_n + 2y_n\\y_{n + 1}=3x_n - y_n\end{cases} {xn+1=xn+2ynyn+1=3xn−yn,给定 x 0 = 1 x_0 = 1 x0=1, y 0 = 2 y_0 = 2 y0=2,可以先计算 x 1 = x 0 + 2 y 0 = 1 + 2 × 2 = 5 x_1 = x_0 + 2y_0=1 + 2\times2=5 x1=x0+2y0=1+2×2=5, y 1 = 3 x 0 − y 0 = 3 × 1 − 2 = 1 y_1 = 3x_0 - y_0=3\times1 - 2=1 y1=3x0−y0=3×1−2=1,然后继续计算 x 2 x_2 x2、 y 2 y_2 y2等。
- 矩阵法:对于线性差分方程组,可以将其表示为矩阵形式
X
n
+
1
=
A
X
n
\mathbf{X}_{n + 1}=\mathbf{A}\mathbf{X}_n
Xn+1=AXn,其中
X
n
=
(
x
n
y
n
⋯
)
\mathbf{X}_n=\begin{pmatrix}x_n\\y_n\\\cdots\end{pmatrix}
Xn=⎝⎛xnyn⋯⎠⎞是向量,
A
\mathbf{A}
A是系数矩阵。
通过对矩阵 A \mathbf{A} A进行特征值分解
等操作来求解。
例如对于方程组 { x n + 1 = 2 x n + y n y n + 1 = x n + 3 y n \begin{cases}x_{n + 1}=2x_n + y_n\\y_{n + 1}=x_n + 3y_n\end{cases} {xn+1=2xn+ynyn+1=xn+3yn,可以写成矩阵形式 ( x n + 1 y n + 1 ) = ( 2 1 1 3 ) ( x n y n ) \begin{pmatrix}x_{n + 1}\\y_{n + 1}\end{pmatrix}=\begin{pmatrix}2&1\\1&3\end{pmatrix}\begin{pmatrix}x_n\\y_n\end{pmatrix} (xn+1yn+1)=(2113)(xnyn),然后利用矩阵的特征值和特征向量来求解。