Math-Modeling-gitea/高等数学/高等数学.ipynb

1185 lines
174 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 1 动手学高等数学"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.1 关于导数的最优解问题\n",
"\n",
"* 引入GitModel 公司发明了一种专用于数值计算的平板电脑 GitNum 考虑到员工生产效率的问题 GitNum 的生产成本是与生产台数相关的. 函数关系为:\n",
"$$C(n) = 1250n(2-e^{-(n-5000)^2}).$$ \n",
"\n",
"问如何确定这批 GitNum 的生产台数$n$使得每台的**平均生产成本最小**经济效益最大呢?\n",
"* 分析:该问题的本质即如何权衡生产台数使生产成本之间的关系。由平均成本的定义知平均成本$\\bar{C}(n) = \\frac{C(n)}{n}$。因此,$\\bar{C(n)}$既是要寻找的目标函数。接下来,只要找到合适的$n$,解出$min(\\bar{C}(n))$,即返回该问题的答案。\n",
"* 引出:由分析可知,该问题是一元函数极值问题。\n",
"\n",
"**命题1.1.1**[一阶最优化必要条件] 设函数$f(x)$在其定义域$\\bf{R}$上可导,且$x_{0}\\in \\bf{R}$是函数$f$的极值点,则\n",
"$$f^{'}(x_{0}) = 0.$$ \n",
"其中,$f^{'}$和$f^{''}$分别表示函数f的一阶导数和二阶导数。\n",
"\n",
"**命题1.1.2**[二阶最优化必要条件]设函数$f(x)$在其定义域$\\bf{R}$上可导,$x_{0}\\in \\bf{R}$是函数$f$的极值点,且函数$f$二阶可导,则\n",
"\n",
"$$若x_{0}是函数f的极小值点 f^{''} \\ge 0.$$\n",
"$$若x_{0}是函数f的极大值点 f^{''} \\le 0.$$\n",
"\n",
"**命题1.1.3**[二阶最优化充分条件]设函数$f(x)$在其定义域$\\bf{R}$上二阶可导,且$f^{'}(x_{0})=0$,若$x_{0}\\in \\bf{R}$满足\n",
"$$f^{''} > 0, 则x_{0}是函数f(x)的极小值点。$$\n",
"$$f^{''} < 0, 则x_{0}是函数f(x)的极大值点。$$\n",
"\n",
"python代码"
]
},
{
"cell_type": "code",
"execution_count": 308,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-1250*(10000 - 2*n)*exp(-(n - 5000)**2)\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"from sympy import *\n",
"import numpy as np\n",
"\n",
"n = symbols('n') # 将 n 定义为一个变量\n",
"# 定义平均成本函数\n",
"def avg_c(x):\n",
" return 1250 * (2 - exp(-(x - 5000) ** 2))\n",
"\n",
"# 求一阶导\n",
"df1 = diff(avg_c(n), n)\n",
"print(df1)"
]
},
{
"cell_type": "code",
"execution_count": 309,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[5000]\n"
]
}
],
"source": [
"# 求驻点, 令 df1 = 0\n",
"x0 = solve(df1, n)\n",
"print(x0)"
]
},
{
"cell_type": "code",
"execution_count": 310,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2500.00000000000\n",
"True\n"
]
}
],
"source": [
"# 求二阶导判断df2(x0) >=? 0即x0是否是函数avg_c的极小值\n",
"df2 = diff(df1, n)\n",
"print(df2.evalf(subs={n:x0[0]}))\n",
"print(df2.evalf(subs={n:x0[0]}) >= 0)"
]
},
{
"cell_type": "code",
"execution_count": 311,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"当生产台数为5000 台时平均成本最小1250 ¥\n"
]
}
],
"source": [
"# 可以看出avg_c的二阶导数在驻点x0处的取值是大于0的即avg_c在此处取得极小值\n",
"min_c = avg_c(x0[0])\n",
"print(\"当生产台数为:{} 台时,平均成本最小,为:{} ¥\".format(x0[0], min_c))"
]
},
{
"cell_type": "code",
"execution_count": 312,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# 接下来通过画出函数avg_c图像可以直观地看出极小值的大概位置\n",
"x = np.linspace(4980, 5020, 10000)\n",
"y = 1250 * (2 - np.exp(- (x - 5000) ** 2))\n",
"plt.plot(x, y)\n",
"plt.xlabel('n')\n",
"plt.ylabel('average cost')\n",
"plt.title('avg_c')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**推广** :由一元最优解问题可以推广到多元最优解问题。此外,不难想到还有*带约束条件*的最优解问题,可以应用拉格朗日乘数法进行求解。\n",
"* 实例GitModel 公司通过 GitNum 的发售赚到第一桶金后马不停蹄地投入到 GitNum 的改良研制中 经市场调查后 GitModel 公司发现根据用户需求可推出轻便版以及高性能版的 GitNum. 三种 GitNum:\n",
"<style>\n",
"table\n",
"{\n",
" margin: auto;\n",
"}\n",
"</style>\n",
"\n",
"|型号|售价|成本函数|\n",
"|:---:|:---:|:---:|\n",
"|GitNum Mini|$q_{1} = 2000$|$C_{1}(n)=750n(2-e^{-(n-6000)**2})$|\n",
"|GitNum 标准版|$q_{2} = 3000$|$C_{2}(n)=1250n(2-e^{-(n-5000)**2})$|\n",
"|GitNum Pro|$q_{2} = 4500$|$C_{3}(n)=2000n(2-e^{-(n-3000)**2})$|\n",
"\n",
"问在这一批生产中 GitModel 公司应该如何计划三种 GitNum 的生产台数才能使得利润与成本的比值最大化?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 分析:由题意可以,解决该问题需要求出生产三种不同型号的台数,从而得出最大的利润与成本比值。设$R$为总收入,$Q$为利润,$C$为成本,$n_{i}, i \\in {1,2,3}$分别为对应型号的生产台数。目标函数为:$f=\\frac{Q}{C}$, 其中\n",
"$$R=q_{1}n_{1}+q_{2}n_{2}+q_{3}n_{3}\\\\\n",
"C=C_{1}(n_{1})+C_{2}(n_{2})+C_{3}(3)\\\\\n",
"Q=R-C$$\n",
"只要找到合适的$n_{1}, n_{2}, n_{2}$, 解出$max(f)$,即可解决问题。\n",
"\n",
"* 引出:显然,这是一个多元函数的最优解问题。\n",
"\n",
"**Hesse矩阵定义**:设$f:\\bf{R}^{n} \\longrightarrow \\bf{R}$是$n$元函数,$x_{i}, i=1,2,3,\\cdots,n$是变量,记$f$对变量$x_{i}$方向的偏导数$f_{i}^{'}$,称所有偏导数组成的列向量$[f_{1}^{'}, f_{2}^{'}, \\cdots, f_{n}^{'}]^{T}:=\\bigtriangledown f$,为函数$f$的全导数,亦称**梯度**,记偏导数$f_{i}^{'}$对变量$x_{j}$方向的二阶偏导数为$f_{ij}^{''}$。则称\n",
"\n",
"$$\\left[\\begin{array}{cccc}\n",
"f_{11}^{\\prime \\prime} & f_{12}^{\\prime \\prime} & \\cdots & f_{1 n}^{\\prime \\prime} \\\\\n",
"f_{21}^{\\prime \\prime} & f_{22}^{\\prime \\prime} & \\cdots & f_{1 n}^{\\prime \\prime} \\\\\n",
"\\vdots & \\vdots & \\ddots & \\vdots \\\\\n",
"f_{n 1}^{\\prime \\prime} & f_{n 2}^{\\prime \\prime} & \\cdots & f_{n n}^{\\prime \\prime}\n",
"\\end{array}\\right]:=\\nabla^{2} f$$\n",
"\n",
"为函数$f$的**Hesse矩阵**。\n",
"\n",
"**命题1.1.4**[多元无约束问题一阶最优化必要条件]设函数$f(x)$是 $\\bf{R}^{n}$ 上的$n$元可导函数,若 $x^{*}$ 是$f$的极值点,则\n",
"$$\\bigtriangledown f(x^{*})=0.$$\n",
"其中,$\\bigtriangledown f$ 是$f$的梯度。\n",
"\n",
"**命题1.1.5**[多元无约束问题二阶最优化必要条件]设函数$f(x)$是$\\bf{R}^{n}$上的$n$元二阶可导函数,可得\n",
"$$若x^{*}是f的极大值则\\bigtriangledown f(x^{*})=0\\bigtriangledown ^{2} f(x^{*})半负定。$$\n",
"$$若x^{*}是f的极小值则\\bigtriangledown f(x^{*})=0\\bigtriangledown ^{2} f(x^{*})半正定。$$\n",
"其中,$\\bigtriangledown ^{2} f$为$f$的$Hesse$矩阵。\n",
"\n",
"**命题1.1.6**[多元无约束问题二阶最优化充分条件]设函数$f(x)$是 $\\bf{R}^{n}$ 上的$n$元可导函数,若 $x^{*}$满足\n",
"$$\\bigtriangledown f(x^{*})=0\\bigtriangledown ^{2} f(x^{*})半负定则x^{*}是f的极大值。$$\n",
"$$\\bigtriangledown f(x^{*})=0\\bigtriangledown ^{2} f(x^{*})半正定则x^{*}是f的极小值。$$\n",
"\n",
"python代码"
]
},
{
"cell_type": "code",
"execution_count": 313,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(-750*n1*(2 - exp(-(n1 - 6000)**2)) + 2000*n1 - 1250*n2*(2 - exp(-(n2 - 5000)**2)) + 3000*n2 - 2000*n3*(2 - exp(-(n3 - 3000)**2)) + 4500*n3)/(750*n1*(2 - exp(-(n1 - 6000)**2)) + 1250*n2*(2 - exp(-(n2 - 5000)**2)) + 2000*n3*(2 - exp(-(n3 - 3000)**2)))\n"
]
}
],
"source": [
"# 设变量,建立目标函数\n",
"n1, n2, n3 = symbols('n1, n2, n3')\n",
"n = []\n",
"n.append(n1)\n",
"n.append(n2)\n",
"n.append(n3)\n",
"q1, q2, q3 = 2000, 3000, 4500\n",
"R = n[0]*q1 + n[1]*q2 + n[2]*q3\n",
"C1 = 750*n[0]*(2-exp(-(n[0]-6000) ** 2))\n",
"C2 = 1250*n[1]*(2-exp(-(n[1]-5000) ** 2))\n",
"C3 = 2000*n[2]*(2-exp(-(n[2]-3000) ** 2))\n",
"C = C1 + C2 + C3\n",
"Q = R - C\n",
"f = Q / C\n",
"print(f)"
]
},
{
"cell_type": "code",
"execution_count": 314,
"metadata": {},
"outputs": [],
"source": [
"# 令各偏导数等于0求驻点n_1,n_2,n_3\n",
"dfn1 = diff(f, n[0])\n",
"dfn2 = diff(f, n[1])\n",
"dfn3 = diff(f, n[2])\n",
"# 千万不要运行以下代码,不然你会后悔,时间究极究极长。。。\n",
"# 这时候通过高数知识直接求解过于困难,不过不要烦恼,近似解来帮助你\n",
"#n_1 = solve(dfn1, n[0], n[1], n[2])"
]
},
{
"cell_type": "code",
"execution_count": 315,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" fun: 0.126003403677694\n",
" hess_inv: <3x3 LbfgsInvHessProduct with dtype=float64>\n",
" jac: array([ 0.00062412, 0.00037126, -0.00000804])\n",
" message: 'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'\n",
" nfev: 64\n",
" nit: 15\n",
" njev: 16\n",
" status: 0\n",
" success: True\n",
" x: array([ 1. , 1. , 123.5759835])"
]
},
"execution_count": 315,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 近似解由scipy.optimize 包提供,\n",
"import scipy.optimize as opt\n",
"\n",
"def func0(cost, x, a):\n",
" return cost*x*(2 - exp(-(x - a)**2))\n",
"func = lambda x: (2000*x[0] + 3000*x[1] + 4500*x[2]) / (func0(750, x[0], 6000) + func0(1250, x[1], 5000) + func0(2000, x[2], 3000)) - 1 \n",
"bnds = ((1, 10000), (1, 10000), (1, 10000))\n",
"res = opt.minimize(fun=func, x0=np.array([2, 1, 1]), bounds=bnds)\n",
"res"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.2 关于插值方法的数据处理\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 引入GitModel 公司工作室刚刚建完准备安装宽带以及路由基于传输数据要求GitModel 需要的宽带运营商网速越快越好,而由于网速是一个随时间变化的非固定量,简单衡量平均网速也并非一个好的评价手段, GitModel 准备收集在同一个地点各个运营商的宽带一天内的网速数据以做接下来的建模分析, 出于人力考虑,网速监视每小时汇报一次数据. A运营商的宽带24小时网速如下表:\n",
"<div align=center> \n",
"\n",
"![](figures/01.JPG) \n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 316,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# 将表格转换为图片\n",
"time_gap = np.linspace(1, 24, 24)\n",
"band_speed = np.array([66, 66, 65, 64, 63, 63, 62, 61, 60, 59, 58, 58, 58, 58, 58, 57, 57, 57, 57, 58, 60, 64, 67, 68])\n",
"plt.scatter(time_gap, band_speed)\n",
"plt.xlabel('time')\n",
"plt.ylabel('band_speed')\n",
"plt.title('A enterprise')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 问题:注意到图片中离散的数据点无法完美体现网速的整体性质 我们需要通过仅有的数据点还原宽带一天内的实时网速. 以A运营商为例 请问 GitModel 公司应如何模拟出网速曲线呢?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 分析:要将该离散点拟合成一条连续的曲线,需要用到插值方法。拟合包括一次拟合(又称直线拟合)和$nn > 1$次拟合。其中3次曲线拟合是最常用的拟合方法因为它使得最终拟合成的曲线2次可导即有利于后面的求解分析。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**插值定义**:设$(x_{i}, y_{i}), i=1,2, \\cdots, n$是$\\bf{R}^{2}$的n个点$f:\\bf{r} \\longrightarrow \\bf{R}$是一条满足$y_{i}=f(x_{i}), i=1,2, \\cdots, n$的函数曲线,则$f$称为$(x_{i}, y_{i})$的插值曲线。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**三次样条插值定义**:设 $(x_i,y_i),i=1,2,\\cdots,n$ 是 $\\mathbf{R}^2$ 上的 $n$ 个点$,$ 其三次样条插值函数为\n",
"$$f_i(t)=s_{i,0}+s_{i,1}t+s_{i,2}t^2+s_{i,3}t^3,i=1,2,\\\\cdots, n-1,$$\n",
"满足\n",
"\\begin{align*}\n",
"f_{i}(x_i)&=y_i,i=1,2,\\cdots,n-1,f_{n-1}(x_{n})=y_{n}\\\\\n",
"f_{i}(x_{i+1})&=y_{i+1}(x_{i+1}),i=1,2,\\cdots,n-2\\\\\n",
"f_{i}'(x_{i+1})&=y_{i+1}'(x_{i+1}),i=1,2,\\cdots,n-2\\\\\n",
"f_{i}''(x_{i+1})&=y_{i+1}''(x_{i+1}),i=1,2,\\cdots,n-2.\n",
"\\end{align*}\n",
"<div align=center>\n",
"\n",
"![](figures/02.JPG)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 引出scipy.interpolate包提供了各种插值函数。\n",
"\n",
"python代码"
]
},
{
"cell_type": "code",
"execution_count": 317,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import scipy.interpolate as inter\n",
"\n",
"f1 = inter.interp1d(time_gap, band_speed) # 一次插值拟合\n",
"f3 = inter.interp1d(time_gap, band_speed, kind='cubic') # 三次样条插值\n",
"xnew = np.linspace(1,24, 48)\n",
"plt.plot(time_gap, band_speed, 'o', xnew, f1(xnew), '-', xnew, f3(xnew), '--')\n",
"plt.legend(['data', 'linear', 'cubic'], loc='best')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.3 关于积分的求解问题\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 引入:鉴于 GitModel 公司刚上市$,$ 承接了许多数学建模相关业务. 有一家工程企业给出了这样一个任务 : 该企业准备制造一批抽水机$,$ 需要得到其各种数据来决定抽水机的性能参数. 企业首先对圆柱形的储水桶进行了抽水测试$,$ 需要求出将桶内的水全部抽出需要做多少功?储水桶的数据如下 : 高 $5\\mathrm{m}$ $,$ 底面圆半径 $3\\mathrm{m}$:\n",
"\n",
"<div align=center>\n",
"\n",
"![](figures/03.JPG)\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 问题:问将桶内的全部抽出抽水机做了多少功?\n",
"\n",
"* 分析:根据大学学过的高数知识可知,利用微元法可轻松对问题进行求解。\n",
"\n",
"<div align=center>\n",
"\n",
"![](figures/04.JPG)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**第一型曲线积分的计算方式**:设平面曲线 $L$ 的参数方程为 $x=x(t),z=z(t),t\\in [a,b],$ $\\rho(x,z)$ 为定义在 $L$ 上的连续函数$,$ 则\n",
"$$\\displaystyle\\int_{L}\\rho(x,z)d s=\\displaystyle\\int_{a}^b\\rho(x(t),z(t))\\sqrt{(x'(t))^2+(z'(t))^2}d t.$$\n",
"除了直线积分和曲线积分, 还有平面积分以及曲面积分,事实上,由于我们还会接触变力曲线做功 ,这代表在每个点上的分布函数不再是标量函数而是向量函数! 分析学还给出了第二类曲线积分以及曲面积分.\n",
"<div align=center>\n",
"\n",
"![](figures/05.JPG)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 引出scipy.integrate包提供了计算积分的各种函数。\n",
"\n",
"python代码"
]
},
{
"cell_type": "code",
"execution_count": 318,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3463.605900582747, 3.8453750190545164e-11)"
]
},
"execution_count": 318,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import scipy.integrate as inte\n",
"\n",
"def x(h):\n",
" return 88.2*pi*(5 - h)\n",
"\n",
"result = inte.quad(x, 0, 5)\n",
"result # 返回的结果为积分值和被积分区间"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.4 实战:人口增长问题\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 问题GitModel 公司对面试的实习生给出了这样一个问题 : 搜集 $1950\\sim 2020$ 年间美国人口数据$,$ 猜测其满足的函数关系$,$ 并综合数据预测美国 $2030$ 年的人口数.公司希望实习生就以下的<strong>开放性</strong>问题给出自己的想法,公司要求实习生<strong>提交预测的思路$,$ 模型$,$ 算法以及结果</strong>.\n",
"面试官给出了如下提示 : 预测值与真实值存在误差$,$ 该问题如何转化为可用上述所学的知识解决的问题呢?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 数据收集:通过上网搜索,获取美国人$1950到2020年$的人口数据如下表所示。\n",
"<style>\n",
"table\n",
"{\n",
" margin: auto;\n",
"}\n",
"</style>\n",
"|$\\bf{年份}$|$\\bf{人口数}$|$\\bf{年份}$|$\\bf{人口数}$|$\\bf{年份}$|$\\bf{人口数}$|$\\bf{年份}$|$\\bf{人口数}$|\n",
"|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|\n",
"|1950|151,684,000|1971|207,661,000|1992|256,514,000|2013|316,060,000|\n",
"|1951|154,287,000|1972|209,896,000|1993|259,919,000|2014|318,386,000|\n",
"|1952|156,954,000|1973|211,909,000|1994|263,126,000|2015|320,739,000|\n",
"|1953|159,565,000|1974|213,854,000|1995|266,278,000|2016|323,072,000|\n",
"|1954|162,391,000|1975|215,973,000|1996|269,394,000|2017|325,122,000|\n",
"|1955|165,275,000|1976|218,035,000|1997|272,657,000|2018|326,838,000|\n",
"|1956|168,221,000|1977|220,239,000|1998|275,854,000|2019|328,330,000|\n",
"|1957|171,274,000|1978|222,585,000|1999|279,040,000|2020|329,484,000|\n",
"|1958|174,141,000|1979|225,055,000|2000|282,162,000|||\n",
"|1959|177,622,000|1980|227,225,000|2001|284,969,000|||\n",
"|1960|180,671,000|1981|229,466,000|2002|287,625,000|||\n",
"|1961|183,691,000|1982|231,664,000|2003|290,108,000|||\n",
"|1962|186,538,000|1983|233,792,000|2004|292,805,000|||\n",
"|1963|189,242,000|1984|235,825,000|2005|295,517,000|||\n",
"|1964|191,889,000|1985|237,924,000|2006|298,380,000|||\n",
"|1965|194,303,000|1986|240,133,000|2007|301,231,000|||\n",
"|1966|196,560,000|1987|242,289,000|2008|304,094,000|||\n",
"|1967|198,712,000|1988|244,499,000|2009|306,772,000|||\n",
"|1968|200,706,000|1989|246,819,000|2010|309,327,000|||\n",
"|1969|202,677,000|1990|249,623,000|2011|311,583,000|||\n",
"|1970|205,052,000|1991|252,981,000|2012|313,878,000|\n",
"\n",
"\n",
"> 数据来源:\n",
"> - [美国人口历年数据](https://population.gotohui.com/pdata-3410)\n",
"> - [20 世纪 50 年代以来美国人口变化特征及其对中国的启示](extension://bfdogplmndidlpjfhoijckpakkdjkkil/pdf/viewer.html?file=http%3A%2F%2Fwww.shehui.pku.edu.cn%2Fupload%2Feditor%2Ffile%2F20220330%2F20220330104520_1460.pdf)\n",
"> - [United Stated Census](https://www.census.gov/data/tables/time-series/dec/density-data-text.html)\n",
"> - [美国历年人口](https://www.bilibili.com/read/cv16279064)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 数据分析:单从表格来看,只能看出美国每年的人口都在增加,但其服从何种规律,肉眼很难看出,因此,首先将数据可视化以寻求人口增长规律。"
]
},
{
"cell_type": "code",
"execution_count": 319,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 320,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>年份</th>\n",
" <th>人口数量</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2020</td>\n",
" <td>329484000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2019</td>\n",
" <td>328330000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2018</td>\n",
" <td>326838000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2017</td>\n",
" <td>325122000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2016</td>\n",
" <td>323072000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>66</th>\n",
" <td>1954</td>\n",
" <td>162391000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>67</th>\n",
" <td>1953</td>\n",
" <td>159565000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>68</th>\n",
" <td>1952</td>\n",
" <td>156954000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>69</th>\n",
" <td>1951</td>\n",
" <td>154287000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>70</th>\n",
" <td>1950</td>\n",
" <td>151684000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>71 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" 年份 人口数量\n",
"0 2020 329484000\n",
"1 2019 328330000\n",
"2 2018 326838000\n",
"3 2017 325122000\n",
"4 2016 323072000\n",
".. ... ...\n",
"66 1954 162391000\n",
"67 1953 159565000\n",
"68 1952 156954000\n",
"69 1951 154287000\n",
"70 1950 151684000\n",
"\n",
"[71 rows x 2 columns]"
]
},
"execution_count": 320,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"population = pd.read_excel('美国人口.xlsx', sheet_name='Sheet1')\n",
"population"
]
},
{
"cell_type": "code",
"execution_count": 321,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"years = population['年份']\n",
"people_num = population['人口数量']\n",
"plt.scatter(years, people_num)\n",
"plt.xlabel('Year')\n",
"plt.ylabel('People Number')\n",
"plt.title('American Census from 1950 to 2020')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 模型建立:从上面美国人口与年份的关系可以做简单假设,美国的人口数与年份满足线性关系,然后为美国人口和年份建立线性模型。\n",
"\n",
"设线性方程 $y_{i} = wx_{i}+b+\\epsilon, i \\in [0, 2020-1950], \\epsilon \\sim N(0, 1)$,其中,$y_{i}$表示美国第$x_{i}$年的人口总数。$\\epsilon$表示预测误差。则美国第$x_{i}$年的人口预测为\n",
"$$\\hat{y}_{i} = wx_{i}+b, i \\in [0, 2020-1950]$$\n",
"预测误差为:\n",
"$$\\epsilon = y_{i}-\\hat{y}_{i}$$\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 模型求解:对于建立的线性方程,只需要拟合出最优的 $w^{*}和b^{*}$,使得$\\bf{\\epsilon}=\\bf{y} - \\bf{\\hat{y}}$(预测误差)的值最小,即可得出模型的解。数学表述为:\n",
"\n",
"\\begin{aligned}\n",
"\\mathop{\\mathbb{argmin}}_{w^{*},b^{*}}|\\bf{y} - \\bf{\\hat{y}}| & \n",
"=\\mathop{\\mathbb{argmin}}_{w^{*},b^{*}}(\\bf{y} - \\bf{\\hat{y}})^{2} \\\\\n",
"&=\\mathop{\\mathbb{argmin}}_{w^{*},b^{*}}\\sum_{i} (y_{i} - \\hat{y}_{i})^{2} \\\\\n",
"&= \\mathop{\\mathbb{argmin}}_{w^{*},b^{*}}\\sum_{i} (y_{i} - wx_{i}-b)^{2}\n",
"\\end{aligned}\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"取目标函数:$\\epsilon = \\sum (y_{i}-wx_{i}-b)^{2}$\n",
"该问题便转化为关于导数的最优化问题(二元函数)。\n",
"根据多元微分知识,令$\\frac{\\partial \\epsilon}{\\partial w}$和$\\frac{\\partial \\epsilon}{\\partial b}$为 0。求出驻点然后计算函数的Hssen矩阵找出函数取极小值时的驻点。最后求出 $w, b$,并将求解好的模型应用到新数据,测试结果。\n",
"* 计算过程:\n",
"令\n",
"$$\\frac{\\partial \\epsilon}{\\partial w} = -2 \\sum(y_{i} - wx_{i} -b)x_{i}=0$$\n",
"$$\\frac{\\partial \\epsilon}{\\partial b} = -2 \\sum(y_{i} - wx_{i} -b)=0$$\n",
"解得\n",
"\n",
" $$w = 2563602.590816, b = -4846523452.723654$$\n",
"\n",
"所求模型为:\n",
"$$y = 2563602.590816x-4846523452.723654$$\n",
"\n",
"python 代码"
]
},
{
"cell_type": "code",
"execution_count": 322,
"metadata": {},
"outputs": [],
"source": [
"# w = x[0], b = x[1]\n",
"def epsilons(x):\n",
" return sum((yi- x[0] * xi -x[1]) ** 2 for yi, xi in zip(people_num, years))"
]
},
{
"cell_type": "code",
"execution_count": 323,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"w:2563602.587207, b:-4846523445.458313\n"
]
}
],
"source": [
"# 为方便直接使用scipy.optimize包中的minimize函数求该函数的近似解\n",
"res = opt.minimize(epsilons, x0=np.array([0, 0]), method=\"nelder-mead\")\n",
"print(\"w:{:f}, b:{:f}\".format(res.x[0], res.x[1]))"
]
},
{
"cell_type": "code",
"execution_count": 324,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 2563602.58720681 x - 4846523445.45831$"
],
"text/plain": [
"2563602.58720681*x - 4846523445.45831"
]
},
"execution_count": 324,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 根据计算结果得出模型的解\n",
"x = symbols('x')\n",
"y = res.x[0] * x + res.x[1]\n",
"y"
]
},
{
"cell_type": "code",
"execution_count": 325,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\13541\\AppData\\Local\\Temp\\ipykernel_26680\\2009934315.py:9: DeprecationWarning: Calling np.sum(generator) is deprecated, and in the future will give a different result. Use np.sum(np.fromiter(generator)) or the python sum builtin instead.\n",
" z = np.sum((yi- W * xi -B) ** 2 for yi, xi in zip(people_num, years))\n",
"C:\\Users\\13541\\AppData\\Local\\Temp\\ipykernel_26680\\2009934315.py:13: MatplotlibDeprecationWarning: Calling gca() with keyword arguments was deprecated in Matplotlib 3.4. Starting two minor releases later, gca() will take no keyword arguments. The gca() function should only be used to get the current axes, or if no axes exist, create new axes with default keyword arguments. To create a new axes with non-default arguments, use plt.axes() or plt.subplot().\n",
" ax = plt.gca(projection='3d')\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# 绘制出3-D图像可以更直观地看出结果。\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"w = np.linspace(20000, 3000000, 1000)\n",
"b = np.linspace(-5000000000, -400000000, 1000)\n",
"W,B = np.meshgrid(w,b)\n",
"\n",
"z = np.sum((yi- W * xi -B) ** 2 for yi, xi in zip(people_num, years))\n",
"\n",
"#绘制曲面图\n",
"fig = plt.figure()\n",
"ax = plt.gca(projection='3d')\n",
"ax.plot_surface(W,B,z,cmap='jet')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 326,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# 最后,将拟合的模型对应到真实的数据中\n",
"def y__(x):\n",
" return res.x[0] * x + res.x[1]\n",
"y_pre = y__(years)\n",
"plt.plot(years, people_num, '-', years, y_pre, '--')\n",
"plt.xlabel('Year')\n",
"plt.ylabel('People Number')\n",
"plt.title('American Census from 1950 to 2020')\n",
"plt.legend(['real data', 'predict data'])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最后将模型用于新数据的预测,测试模型的预测效果.\n",
"**这里给出2021年和2022年的美国人口数据未被拟合的数据331761000332213000**"
]
},
{
"cell_type": "code",
"execution_count": 327,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"331953780.699434\n",
"331761000\n",
"美国2020年的人口总数预测结果为为331953781与实际值的误差为192781\n",
"美国2021年的人口总数预测结果为为334517383与实际值的误差为2304383\n",
"美国2030年的人口总数预测结果为为357589807。\n"
]
}
],
"source": [
"# 预测2020年和2021年的美国人口\n",
"year_2020 = y.evalf(subs={x:2020})\n",
"year_2021 = y.evalf(subs={x:2021})\n",
"print(year_2020)\n",
"print(331761000)\n",
"print(\"美国2020年的人口总数预测结果为为{:.0f},与实际值的误差为:{:.0f}\".format(year_2020, np.abs(year_2020-331761000.0)))\n",
"print(\"美国2021年的人口总数预测结果为为{:.0f},与实际值的误差为:{:.0f}\".format(year_2021, np.abs(year_2021-332213000)))\n",
"# 预测美国2030年人口总数\n",
"year_2030 = y.evalf(subs={x:2030})\n",
"print(\"美国2030年的人口总数预测结果为为{:.0f}。\".format(year_2030))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* 结果分析从结果来看误差达到了10w级说明该方法确实过于简单。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> 参考资料\n",
"> - [如何理解最小二乘法](https://blog.csdn.net/ccnt_2012/article/details/81127117)\n",
"> - [最小二乘公式推导](https://blog.csdn.net/qq_45717425/article/details/120665970)\n",
"> - [scipy参考文档](https://docs.scipy.org/doc/scipy/tutorial/optimize.html#)\n",
"> - [sympy参考文档](https://docs.sympy.org/latest/tutorial/intro.html)\n",
"> - [numpy参考文档](https://numpy.org/doc/stable/user/quickstart.html)\n",
"> - [matplotlib参考文档](https://matplotlib.org/stable/tutorials/introductory/pyplot.html)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1.4 扩展"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"显然,只要稍微动一下脑袋,便可知道上述方法的模型假设是不够严谨地,因为年份只是一种表示年的方法,它与人口数没有必然的联系。那么,就是说,该模型稳定度不高。那么,我们就需要对模型进行改进,仔细考虑一下,当年的人口数应该和前一年或者前几年的人口基数是相关的。\n",
"\n",
"为简单,我们假设当年的人口数与上一年的人口数满足线性关系。\n",
"\n",
"于是,我们便有了一个新的人口预测模型:\n",
"设$y_{i}$表示第$i$个年份的人口总数,$y_{i-1}$表示第$(i-1)$个年份的人口总数。且$y_{i}$和$y_{i-1}$满足\n",
"\\begin{aligned}\n",
"y_{i} = wy_{i-1} + b + \\epsilon\n",
"\\end{aligned}\n",
"其中 $i \\in [1, 2020-1950], \\epsilon \\sim N(0, 1)$。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"取目标函数:\n",
"$$\\epsilon = \\sum_{i} {(y_{i} - wy_{i-1} - b)^{2}}$$\n",
"求解方法和上一个模型类似。\n",
"\n",
"这里直接给出python代码"
]
},
{
"cell_type": "code",
"execution_count": 328,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 329484000\n",
"1 328330000\n",
"2 326838000\n",
"3 325122000\n",
"4 323072000\n",
" ... \n",
"66 162391000\n",
"67 159565000\n",
"68 156954000\n",
"69 154287000\n",
"70 151684000\n",
"Name: 人口数量, Length: 71, dtype: int64"
]
},
"execution_count": 328,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"people_num"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"people_num是按照年份逆序存储在dataframe中的需要将其顺序反转一下以便于模型参数提供。"
]
},
{
"cell_type": "code",
"execution_count": 329,
"metadata": {},
"outputs": [],
"source": [
"before_year = people_num[1:]\n",
"this_year = people_num[0:-1] \n",
"b_year = np.zeros(len(before_year))\n",
"t_year = np.zeros(len(this_year))"
]
},
{
"cell_type": "code",
"execution_count": 330,
"metadata": {},
"outputs": [],
"source": [
"for i in range(len(before_year)):\n",
" b_year[i] = before_year[len(before_year) -i]\n",
" t_year[i] = this_year[len(this_year) - i - 1]"
]
},
{
"cell_type": "code",
"execution_count": 331,
"metadata": {},
"outputs": [],
"source": [
"def discrepance(x):\n",
" return sum((yi - x[0]*yi_1 - x[1]) ** 2 for yi, yi_1 in zip(this_year, before_year))"
]
},
{
"cell_type": "code",
"execution_count": 332,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"w: 0.9983868941977458, b: 2928728.1157275736\n"
]
}
],
"source": [
"res = opt.minimize(discrepance, x0=[0, 0], method='nelder-mead')\n",
"print(\"w: {}, b: {}\".format(res.x[0], res.x[1]))"
]
},
{
"cell_type": "code",
"execution_count": 333,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 0.998386894197746 yi_{1} + 2928728.11572757$"
],
"text/plain": [
"0.998386894197746*yi_1 + 2928728.11572757"
]
},
"execution_count": 333,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 得出模型\n",
"yi_1 = symbols('yi_1')\n",
"y_p = res.x[0] * yi_1 + res.x[1]\n",
"y_p"
]
},
{
"cell_type": "code",
"execution_count": 335,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"美国2021年的人口预测为331881236 与真实人口的误差为120236\n",
"美国2022年的人口预测为334274604 与真实人口的误差为2061604\n",
"美国2023年的人口预测为336664112。\n",
"美国2024年的人口预测为339049765。\n",
"美国2025年的人口预测为341431570。\n",
"美国2026年的人口预测为343809533。\n",
"美国2027年的人口预测为346183660。\n",
"美国2028年的人口预测为348553957。\n",
"美国2029年的人口预测为350920431。\n",
"美国2030年的人口预测为353283087。\n"
]
}
],
"source": [
"# 验证2021年和2022年并预测2030年\n",
"y_2021 = y_p.evalf(subs={yi_1:people_num[0]})\n",
"print(\"美国2021年的人口预测为{:.0f} 与真实人口的误差为:{:.0f}\".format(y_2021, np.abs(y_2021 - 331761000.0)))\n",
"y_2022 = y_p.evalf(subs={yi_1:y_2021})\n",
"print(\"美国2022年的人口预测为{:.0f} 与真实人口的误差为:{:.0f}\".format(y_2022, np.abs(y_2022 - 332213000)))\n",
"temp = y_2022\n",
"for i in range(8):\n",
" temp = y_p.evalf(subs={yi_1:temp})\n",
" print(\"美国{}年的人口预测为:{:.0f}。\".format((2022+i+1),temp))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"从结果看出该模型较之前的模型有一定的改进误差从192781降到120236。还可以通过指定更多参数来优化模型。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.12 ('base')",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.12"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "556252ed2b30100194919bfe593632fd2dd65e409994795bc766e8182bd20b5d"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}