数学建模算法-day[13]
5.5 函数逼近
如果已知一个较为复杂的连续函数y(x),x∈[a,b]y(x),x\in [a,b]y(x),x∈[a,b],要求选择一个较简单的函数f(x)f(x)f(x),在一定准则下最接近y(x)y(x)y(x),就是所谓函数逼近。
与曲线拟合的最小二乘准则对应,函数逼近常用的一种准则是最小平方逼近,即
J=∫ab[f(x)−y(x)]2dx(5.15)
J=\int_a^b [f(x)-y(x)]^2dx\tag{5.15}
J=∫ab[f(x)−y(x)]2dx(5.15)
达到最小。与曲线拟合一样,选一组函数{rk(x),k=1,2,⋯ ,m}\{r_k(x),k=1,2,\cdots,m\}{rk(x),k=1,2,⋯,m}构造f(x)f(x)f(x),即令
f(x)=a1r1(x)+a2r2(x)+⋯+amrm(x),
f(x)=a_1r_1(x)+a_2r_2(x)+\cdots+a_mr_m(x),
f(x)=a1r1(x)+a2r2(x)+⋯+amrm(x),
代入式(5.15),求a1,a2,⋯ ,ama_1,a_2,\cdots,a_ma1,a2,⋯,am使JJJ达到极小。利用极值必要条件可得
[(r1,r1)(r1,r2)⋯(r1,rm)(r2,r1)(r2,r2)⋯(r2,rm)⋮⋮⋱⋮(rm,r1)(rm,r2)⋯(rm,rm)][a1a2⋮am]=[(y,r1)(y,r2)⋮(y,rm)],(5.16)
\left[\begin{array}{cccc}
\left(r_1, r_1\right) & \left(r_1, r_2\right) & \cdots & \left(r_1, r_m\right) \\
\left(r_2, r_1\right) & \left(r_2, r_2\right) & \cdots & \left(r_2, r_m\right) \\
\vdots & \vdots & \ddots & \vdots \\
\left(r_m, r_1\right) & \left(r_m, r_2\right) & \cdots & \left(r_m, r_m\right)
\end{array}\right]\left[\begin{array}{c}
a_1 \\
a_2 \\
\vdots \\
a_m
\end{array}\right]=\left[\begin{array}{c}
\left(y, r_1\right) \\
\left(y, r_2\right) \\
\vdots \\
\left(y, r_m\right)
\end{array}\right],\tag{5.16}
(r1,r1)(r2,r1)⋮(rm,r1)(r1,r2)(r2,r2)⋮(rm,r2)⋯⋯⋱⋯(r1,rm)(r2,rm)⋮(rm,rm)a1a2⋮am=(y,r1)(y,r2)⋮(y,rm),(5.16)
这里 (g,h)=∫abg(x)h(x)dx(g, h)=\int_a^b g(x) h(x) \mathrm{d} x(g,h)=∫abg(x)h(x)dx 。当方程组(5.16)的系数矩阵非奇异时,有唯一解。
最简单的当然是用多项式逼近函数,即选 r1(x)=1,r2(x)=x,r3(x)=x2,⋯r_1(x)=1, r_2(x)=x, r_3(x)=x^2, \cdotsr1(x)=1,r2(x)=x,r3(x)=x2,⋯ 。并且如果能使 ∫abri(x)rj(x)dx=0(i≠j)\int_a^b r_i(x) r_j(x) \mathrm{d} x=0(i \neq j)∫abri(x)rj(x)dx=0(i=j) ,方程组(5.16)的系数矩阵将是对角阵,计算大大简化。满足这种性质的多项式称为正交多项式。
勒让得(Legendre)多项式是在 [−1,1][-1,1][−1,1] 区间上的正交多项式,它的表达式为
P0(x)=1,Pk(x)=12kk!dkdxk(x2−1)k,k=1,2,⋯ P_0(x)=1, \quad P_k(x)=\frac{1}{2^k k!} \frac{d^k}{d x^k}\left(x^2-1\right)^k, k=1,2, \cdots P0(x)=1,Pk(x)=2kk!1dxkdk(x2−1)k,k=1,2,⋯
可以证明
∫−11Pi(x)Pj(x)dx={0,i≠j,22i+1,i=j,Pk+1(x)=2k+1k+1xPk(x)−kk+1Pk−1(x),k=1,2,⋯ \begin{gathered} \int_{-1}^1 P_i(x) P_j(x) \mathrm{d} x= \begin{cases}0, & i \neq j, \\ \frac{2}{2 i+1}, & i=j,\end{cases} \\ P_{k+1}(x)=\frac{2 k+1}{k+1} x P_k(x)-\frac{k}{k+1} P_{k-1}(x), k=1,2, \cdots \end{gathered} ∫−11Pi(x)Pj(x)dx={0,2i+12,i=j,i=j,Pk+1(x)=k+12k+1xPk(x)−k+1kPk−1(x),k=1,2,⋯
常用的正交多项式还有第一类切比雪夫(Chebyshev)多项式
Tn(x)=cos(narccosx),x∈[−1,1],n=0,1,2,⋯ T_n(x)=\cos (n \arccos x), x \in[-1,1], n=0,1,2, \cdots Tn(x)=cos(narccosx),x∈[−1,1],n=0,1,2,⋯
和拉盖尔(Laguerre)多项式
Ln(x)=ex dn dxn(xne−x),x∈[0,+∞),n=0,1,2,⋯ L_n(x)=\mathrm{e}^x \frac{\mathrm{~d}^n}{\mathrm{~d} x^n}\left(x^n \mathrm{e}^{-x}\right), x \in[0,+\infty), n=0,1,2, \cdots Ln(x)=ex dxn dn(xne−x),x∈[0,+∞),n=0,1,2,⋯
例 5.21 求 f(x)=cosx,x∈[−π2,π2]f(x)=\cos x, x \in\left[-\frac{\pi}{2}, \frac{\pi}{2}\right]f(x)=cosx,x∈[−2π,2π] 在 H=Span{1,x2,x4}H=\operatorname{Span}\left\{1, x^2, x^4\right\}H=Span{1,x2,x4} 中的最佳平方逼近多项式。
matlab程序
% 最佳平方逼近
clc;clear
syms x;
base=[1,x^2,x^4];
A=base'*base;
A=int(A,-pi/2,pi/2);
b=cos(x)*base';
b=int(b,-pi/2,pi/2);
a=double(A\b)
所求的最佳平方逼近多项式为
y=0.9996−0.4964x2+0.0372x4.
y=0.9996-0.4964x^2+0.0372x^4.
y=0.9996−0.4964x2+0.0372x4.
其实这章书上还有最后一个比较大的题,就是黄河小浪底跳水调沙问题,额,这个我们在学数值分析的时候做探索型实验做过这个例子,不过当时主播不是负责代码的,主播是负责做ppt的,当时这个例子我们汇报的时候还遭到了老师的疑惑,因为我们第二题弄错了似乎,唉,这个要是主播去做的话那必定是会得到老师的肯定的。那有空再更这个吧,(似乎欠的有点多了…)
6 微分方程
微分方程一般来说都是出现在A题的,且都是非常难的,不仅要列方程,而且还要会解和稳定性分析等等。这类问题对数学和物理能力要求较高,对编程能力则要求不是较高。
微分方程建模是数学建模的重要方法,因为许多实际问题的数学描述将导致求解微分方程的定解问题。把形形色色的实际问题化成微分方程的定解问题,大体上可以按以下步骤进行:
- 根据实际要求确定要研究的量(自变量、未知函数、必要的参数等)并确定坐标系。
- 找出这些量所满足的基本规律(物理的、几何的、化学的或生物学的等)。
- 运用这些规律列出方程和定解条件。
列方程常见的方法有以下几种:
- 按规律直接列方程。在数学、力学、物理、化学等学科中,许多自然现象所满足的规律已为人们所熟悉,并直接由微分方程所描述,如牛顿第二定律、放射性物质的放射性规律等。我们常利用这些规律对某些实际问题列出微分方程。
- 微元分析法与任意区域上取积分的方法。自然界中也有许多现象所满足的规律是通过变量的微元之间的关系式来表达的,对于这类问题,我们不能直接列出自变量和未知函数及其变化率之间的关系式,而是通过微元分析法,利用已知的规律建立一些变量(自变量与未知函数)的微元之间的关系式,然后再通过取极限的方法得到微分方程,或等价地通过任意区域上取积分的方法来建立微分方程。
- 模拟近似法。在生物、经济等学科中,许多现象所满足的规律并不很清楚而且相当复杂,因而需要根据实际资料或大量的实验数据,提出各种假设。在一定的假设下,给出实际现象所满足的规律,然后利用适当的数学方法列出微分方程。
在实际的微分方程建模过程中,也往往是上述方法的综合应用。不论应用哪种方法,通常要根据实际情况,做出一定的假设与简化,并把模型的理论或计算结果与实际情况进行对照验证,以修改模型使之更准确地描述实际问题并进而达到预测预报的目的。
6.1 常微分方程问题的数学模型
例6.1 建立物体冷却过程的数学模型。将物体放置于空气中,在时刻t=0t=0t=0时,测得它的温度为u0=100∘Cu_0=100^\circ Cu0=100∘C,20min后测得它的温度为u1=60∘Cu_1=60^\circ Cu1=60∘C。要求建立此物体的温度uuu和时间ttt的关系,并计算经过多长时间此物体的温度将达到30∘C30^\circ C30∘C,其中假设空气的温度保持为20∘C20^\circ C20∘C。
解 牛顿冷却定理是温度高于周围环境的物体向周围媒质传递热量逐渐冷却时所遵循的规律;当物体表面与周围存在温度差时,单位时间从单位面积散失的热量与温度差成正比,比例系数称为热传递系数,记为kkk.
假设该物体在时刻ttt时的温度为u=u(t)u=u(t)u=u(t),则由牛顿冷却定律,得
dudt=−k(u−20),(6.1)
\frac{du}{dt}=-k(u-20),\tag{6.1}
dtdu=−k(u−20),(6.1)
式中:k>0k>0k>0。方程(6.1)就是物体冷却过程的数学模型。
可将方程(6.1)(6.1)(6.1)改写为
d(u−20)u−20=−kdt,
\frac{d(u-20)}{u-20}=-kdt,
u−20d(u−20)=−kdt,
两边积分,得
∫100ud(u−20)u−20=∫0t−kdt,
\int_{100}^u \frac{d(u-20)}{u-20}=\int_0^t -kdt,
∫100uu−20d(u−20)=∫0t−kdt,
化简,得
u=20+80e−kt.(6.2)
u=20+80e^{-kt}.\tag{6.2}
u=20+80e−kt.(6.2)
将条件t=20,u=u1=60t=20,u=u_1=60t=20,u=u1=60代入式(6.2)(6.2)(6.2),得k=ln220k=\frac{\ln 2}{20}k=20ln2,所以此物体的温度uuu和时间ttt的关系为u=20+80e−ln220tu=20+80e^{-\frac{\ln 2}{20}t}u=20+80e−20ln2t.令30=20+80e−ln220t30=20+80e^{-\frac{\ln 2}{20}t}30=20+80e−20ln2t,解之得t=60t=60t=60,即60min后物体的温度为30∘C30^\circ C30∘C。
例6.2 目标追踪问题。设位于坐标原点的甲舰向位于xxx轴上点Q0(1,0)Q_0(1,0)Q0(1,0)处的乙舰发射导弹,导弹始终对准乙舰。如果乙舰以最大的速度v0(v0是常数)v_0(v_0是常数)v0(v0是常数)沿平行于yyy轴的直线行驶,导弹的速度是5v05v_05v0,求导弹运行的曲线。又乙舰形式多远时,导弹将它击中?
解 设导弹的轨迹曲线为y=y(x)y=y(x)y=y(x),并设经过时间为ttt,导弹位于点P(x,y)P(x,y)P(x,y),乙舰位于点Q(1,v0t)Q(1,v_0t)Q(1,v0t)。由于导弹头始终对准乙舰,故此时直线PQPQPQ就是导弹的轨迹曲线弧OPOPOP在点PPP处的切线,如图6.1所示
图6.1
则有
dydx=v0t−y1−x.(6.3)
\frac{dy}{dx}=\frac{v_0t-y}{1-x}.\tag{6.3}
dxdy=1−xv0t−y.(6.3)
由于模型中含有参变量ttt,故要求解该模型应增加附加条件。解决这个问题可从我们没有用到的条件5v05v_05v0下手。
方法1:相同时间的条件下,导弹运动的路程=5*乙舰运动的路程。
故由弧长计算公式可得:
∫0x1+(dydx)2dx=5v0t.(6.4)
\int_0^x \sqrt{1+(\frac{dy}{dx})^2} dx=5v_0t.\tag{6.4}
∫0x1+(dxdy)2dx=5v0t.(6.4)
方法2:利用速度分量合成的概念。
(dxdt)2+(dydt)2=5v0,(6.5)
\sqrt{(\frac{dx}{dt})^2+(\frac{dy}{dt})^2}=5v_0,\tag{6.5}
(dtdx)2+(dtdy)2=5v0,(6.5)
注意到,式(6.5)即式(6.4).
之后要求此问题的定解,还需要给出两个初始条件。事实上,初始时刻轨迹曲线通过坐标顶点,即x=0,y(0)=0x=0,y(0)=0x=0,y(0)=0;此外在该点的切线平行于xxx轴,因此有y′(0)=0y'(0)=0y′(0)=0。
对式(6.4)两边求导,得
1+(dydx)2=5v0dtdx.(6.6)
\sqrt{1+(\frac{dy}{dx})^2}=5v_0\frac{dt}{dx}.\tag{6.6}
1+(dxdy)2=5v0dxdt.(6.6)
为了消去中间变量ttt,把方程(6.3)改写为
(1−x)dydx=v0t−y(6.7)
(1-x)\frac{dy}{dx}=v_0t-y\tag{6.7}
(1−x)dxdy=v0t−y(6.7)
然后两边关于xxx求导,整理得
(1−x)d2ydx2=v0dtdx,(6.8)
(1-x)\frac{d^2y}{dx^2}=v_0\frac{dt}{dx},\tag{6.8}
(1−x)dx2d2y=v0dxdt,(6.8)
故联立方程得到:
{(1−x)d2ydx2=v0dtdx1+(dydx)2=5v0dtdx.y(0)=0,y′(0)=0.
\left\{\begin{aligned}& (1-x)\frac{d^2y}{dx^2}=v_0\frac{dt}{dx}\\& \sqrt{1+(\frac{dy}{dx})^2}=5v_0\frac{dt}{dx}.\\& y(0)=0,y'(0)=0.
\end{aligned}\right.
⎩⎨⎧(1−x)dx2d2y=v0dxdt1+(dxdy)2=5v0dxdt.y(0)=0,y′(0)=0.
消去中间变量dtdx\frac{dt}{dx}dxdt,得关于轨迹曲线的二阶非线性常微分方程:
{(1−x)d2ydx2=151+(dydx)2,0<x≤1y(0)=0,y′(0)=0.(6.9)
\left\{\begin{aligned}& (1-x)\frac{d^2y}{dx^2}=\frac{1}{5}\sqrt{1+(\frac{dy}{dx})^2},0<x\leq 1\\& y(0)=0,y'(0)=0.
\end{aligned}\right.\tag{6.9}
⎩⎨⎧(1−x)dx2d2y=511+(dxdy)2,0<x≤1y(0)=0,y′(0)=0.(6.9)
用mathematica软件求得轨迹曲线
y(x)=524(1−3(1−x)4/5+2(1−x)6/5)(6.10)
y(x)=\frac{5}{24} (1 - 3 (1 - x)^{4/5} + 2 (1 - x)^{6/5})\tag{6.10}
y(x)=245(1−3(1−x)4/5+2(1−x)6/5)(6.10)
何处击中乙舰?在式(6.10)中,令x=1x=1x=1,得y=524y=\frac{5}{24}y=245,,即在(1,524)(1,\frac{5}{24})(1,245)处击中乙舰。
何时击中乙舰?击中乙舰时,乙舰航行距离y=524y=\frac{5}{24}y=245,由y=v0ty=v_0ty=v0t,得t=524v0t=\frac{5}{24v_0}t=24v05时击中乙舰。
mathematica程序
DSolve[{(1 - x)*y''[x] == (1/5)*Sqrt[1 + (y'[x])^2], y[0] == 0, y'[0] == 0}, y[x], x]
参考文献
[1] 司守奎,孙玺青 数学建模算法与应用第3版[M]
唉,主播晚上看到了一个热点,看的难受的,唉。