《用 Python 学微积分》原文见参考资料 1。

16、优化

用一个给定边长 4 的正方形来折一个没有盖的纸盒,设纸盒的底部边长为 l,则纸盒的高为 (4-l)/2,那么纸盒的体积为:

$$V(l)=l^2\frac{4-l}{2}$$

怎样才能使纸盒的容积最大?也就是在 l>0,4-l>0 的限制条件下,函数 V(l) 的最大值是多少?

优化问题关心的就是这样的问题,在满足限制条件的前提下,怎么才能使目标函数最大(或最小)?

先来看下 V(l) 的函数图形:

import numpy as np
import matplotlib.pyplot as pltl = np.linspace(0,4,100)
V = lambda l: 0.5*l**2*(4-l)
plt.plot(l,V(l))plt.show()

View Code

看得出来,V(l) 在大约 2.5 处最大。

如果给定一个函数,知道它在点 x=a 处的函数导数为 0,或者该点的导数不存在,则称该点为关键点。要想知道 f(a) 是局部最大值还是局部最小值,可以使用二次导数测试。

如果 f''(a)>0,则函数 f 在 a 处的函数值是局部最小值。

如果 f''(a)<0,则函数 f 在 a 处的函数值是局部最大值。

如果 f''(a)=0,则测试无法告诉我们结论。

上述二次导数测试可以从泰勒级数中推导出来。f(x) 在 x=a 处的泰勒级数为:

$$f(x)=f(a)+f'(a)(x-a)+\frac{1}{2}f''(a)(x-a)^2+\dots$$

因为 a 为关键点,f'(a)=0,所以:

$$f(x)=f(a)+\frac{1}{2}f''(a)(x-a)^2+O(x^3)$$

当 f''(a)≠0 时,f(x) 在 x=a 附近的表现近似于二次函数,二次项的系数 0.5f''(a) 决定了抛物线的开口朝向,因而决定了函数值在该点是怎样的。

回到之前求最大盒子体积的问题,解法如下:

import sympy
from sympy.abc import l
V = 0.5*l**2*(4-l)
# 看看一次导函数:
print V.diff(l)
# output is : -0.5*l**2 + 1.0*l*(-l + 4)
# 一次导函数的定义域为(-oo,oo),因此关键点为V'(l)=0的根
cp = sympy.solve(V.diff(l),l)
print cp
# output is: [0.0, 2.66666666666667]
# 找到关键点后,使用二次导数测试:
for p in cp:print V.diff(l,2).subs(l,p)
# output is: 4, -4
# 因此知道在l=2.666666处时,纸盒的体积最大

17、线性回归

二维平面上有 n 个数据点,pi=(xi,yi),现尝试找到一条经过原点的直线,y=ax,使得所有数据点到该直线的残差的平方和最小。

import numpy as np
import matplotlib.pyplot as plt# 设定好随机函数种子,确保模拟数据的可重现性
np.random.seed(123)# 随机生成一些带误差的数据
x = np.linspace(0,10,10)
res = np.random.randint(-5,5,10)
y = 3*x + res# 求解回归线的系数
a = sum(x*y)/sum(x**2)# 绘图
plt.plot(x,y,'o')
plt.plot(x,a*x,'red')
for i in range(len(x)):plt.axvline(x[i],min((a*x[i]+5)/35.0,(y[i]+5)/35.0),\max((a*x[i]+5)/35.0,(y[i]+5)/35.0),linestyle = '--',\color = 'black')plt.show()

View Code

要找到这样一条直线,实际上是一个优化问题:

$$\underset{a}{min}Err(a)=\sum_{i}{(y_i-ax_i)}^2$$

要找出函数 Err(a) 的最小值,首先计算一次导函数:

$$\frac{dErr}{da}=\sum_{i}2(y_i-ax_i)(-x_i)$$

$$\qquad = -2\sum_{i}x_iy_i + 2a\sum_{i}x_i^2$$

令该函数为 0,求解出关键点:

$$a = \frac{\sum_{i}x_iy_i}{\sum_{i}x_i^2}$$

使用二次导数测试:

$$\frac{d^2Err}{da^2}=2\sum_ix_i^2>0$$

因此

$$a = \frac{\sum_{i}x_iy_i}{\sum_{i}x_i^2}$$

是能够使函数值最小。这也是上面 Python 代码中,求解回归线斜率所用的计算公式。

如果不限定直线一定经过原点,即公式为 y=ax+b,则同样还是一个优化问题,只不过涉及的变量变成两个。

$$\underset{a}{min}Err(a,b)=\sum_i{(y_i-ax_i-b)}^2$$

这个问题是多元微积分里要分析的问题,这里先给出 Python 中的求解方法。红线为经过原点的直线,蓝线为不限定经过原点的直线。

import numpy as np
import matplotlib.pyplot as plt# 设定好随机函数种子,确保模拟数据的可重现性
np.random.seed(123)# 随机生成一些带误差的数据
x = np.linspace(0,10,10)
res = np.random.randint(-5,5,10)
y = 3*x + res# 求解回归线的系数
a = sum(x*y)/sum(x**2)slope, intercept = np.polyfit(x,y,1)# 绘图
plt.plot(x,y,'o')
plt.plot(x,a*x,'red')
plt.plot(x,slope*x+intercept, 'blue')
for i in range(len(x)):plt.axvline(x[i],min((a*x[i]+5)/35.0,(y[i]+5)/35.0),\max((a*x[i]+5)/35.0,(y[i]+5)/35.0),linestyle = '--',\color = 'black')plt.show()

18、不定积分

根据加速度 a(t) 求速度 v(t),可得:

$$\frac{dv}{dt}=a(t)$$

一旦找到了 v(t),那么

$$\forall C\in\mathbb{R}, v(t)+C$$

也都是方程的解,因此常微分方程的解是 v(t)+C 这样一系列函数。得出这一系列函数后,只需知道任一时刻汽车的速度,便可求出常数项 C。

Python 中积分的方法:

import sympyt = sympy.Symbol('t')
v = t**3-3*t-6
a = v.diff()
print a.integrate()
# result is : t**3 - 3*t
print sympy.integrate(sympy.E**t+3*t**2)
# result is : t**3 + exp(t)

参考资料:

[1] https://ryancheunggit.gitbooks.io/calculus-with-python/content/

转载于:https://www.cnblogs.com/NaughtyBaby/p/5427779.html

《用 Python 学微积分》笔记 3相关推荐

  1. 有道笔记Markdown快捷键

    有道笔记Markdown快捷键 关闭当前页面(快捷键:ctrl+w) 删除该行 (ctrl+d) 复制并粘贴 (ctrl+shift+d) 跳转到指定行 (ctrl+l) 选中该行(快捷键:ctrl+ ...

  2. 基金经理研究所 | 从兴全合润看谢治宇的攻守道

    点击上方蓝字"知谦" 关注我们吧! 我们买一只基金,究竟买的是什么? 买基金,我们其实要买一个比较长的时间里,可能是3年.5年甚至10年,一只基金战胜同侪,获取超额收益的能力. 一 ...

  3. 如何获取公众号文章并保存有道笔记

    如何获取公众号文章并保存有道笔记 写作目的 1. 获取公众号文章链接 2. 解析公众号文章 3. 保存有道笔记 源代码 最后感想 写作目的 做这个程序是出于自己的学习目的.因为我有学习英语的习惯,每天 ...

  4. 有道笔记 android,随时随地,记录一切:有道笔记Android版体验

    有道搜索在相继推出有道笔记桌面版.网页版和iPhone版后,于今日发布了有道笔记Android版.有道笔记是网易旗下有道搜索推出的云笔记软件,支持多种附件格式,拥有1G容量的初始免费存储空间,能够实时 ...

  5. 为知笔记 印象笔记 有道笔记 OneNote选择

    今天想记录下代码片段,这个感觉不适合用博客记录,于是就想起了用笔记来记录. 之前选择了为知笔记,很久没用了,今天登陆上去才突然发现,变成要收费了. 所以重新纠结了一下,为知笔记 印象笔记 有道笔记 O ...

  6. android拓展笔记本,有道笔记Android版上线,拓展移动终端产品布局

    在大家的翘首企盼下,有道笔记Android版今天终于上线了!广大G粉从今天起也可以在Android系统手机上使用有道笔记获得高效的个人知识管理体验. 有道笔记Android版拥有和桌面版.网页版一致的 ...

  7. 有道笔记无法同步(笔录)

    当经常翻墙或代理时,有些软件或IE浏览器会自动修改一些配置项,导致有道笔记无法登录,具体修改了哪些配置已经不知道了,所以此时还原IE默认设置.因为我之前把IE功能关掉了,所以我现在把IE打开 到此为止 ...

  8. 有道笔记在Ubuntu上的安装

    1.进入有道笔记下载页,点击Linux版下载: 2. 进入Ubuntu 文件管理,找到下载的 有道云笔记.deb,双击打开: 3.根据提示安装即可: 4.安装好的样子:

  9. 6000字长文,详解黑色产业链的「攻守道」

    作者:独孤qiu败 全文共 5805 字 3 图,阅读需要 13 分钟 ---- / BEGIN / ---- 虽然过去了已经两三年,但是想起自己曾经经历过的一场跨度一年的促销活动,现在想起来依然受益 ...

  10. 《攻守道》:马云的人设与梦想

    20几分钟的小电影,我们仿佛看到马云的人设与梦想. 今年的11月属于马云. 大招一:自然是化身成马爸爸,剁尽天下妹子的双手.不出意外,今年的双11,天猫再创佳绩,最终成交额定格在1682亿元这个惊人数 ...

最新文章

  1. 查看sqlserver被锁的表以及如何解锁
  2. android 4.4 禁止下拉,Android开发中禁止下拉式的实现技巧
  3. Galaxy生物信息分析平台的数据集对象清理
  4. stl-优先队列priority_queue
  5. cocurrent包semaphore信号量
  6. BZOJ 4070 [Apio2015]雅加达的摩天楼 ——分块 SPFA
  7. leetcode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复
  8. Android项目实战欢迎界面
  9. 文本怎么换成html,编辑html格式文本可改成txt格式(可以替换或更换某文本)新手...
  10. mysql olap 函数_Mysql中的窗口函数
  11. Oracle误操作--被提交后的数据回退(闪回)
  12. 模拟SAP ALV下载XLSX文件
  13. 关于DNF的多媒体包NPK文件的那些事儿(4)- NPK文件操作流程
  14. android友盟分享最新,Android接入友盟统计(顺带多渠道打包)、友盟分享
  15. 计算机潮流算法一般采用,计算机潮流计算
  16. 网络规划设计师的参考资料和复习书籍
  17. android画廊无限轮播,ViewPager无限循环实现画廊式banner
  18. 色彩空间(一):色彩空间基础
  19. 超级万能计算机在线应用,超级万能计算器手机版
  20. 基于树莓派的流星雨监测系统(RMS)的搭建

热门文章

  1. 跨境电商运营 | 如何利用Instagram进行电子商务营销
  2. Android NDK入门教程之快速定位Crash问题
  3. python打包xp系统_python打包的exe为啥在XP上提示“不是有效的WIN32程序”
  4. 豆瓣9.8,它凭「少儿不宜」吊打所有美剧!脑洞大开必看神作!【内附资源】...
  5. 6个非常实用的 Python 代码块,适合收藏~
  6. linux绝育玩客云_玩机技巧 篇二:玩客云实用指南(真·无痛绝育),附玩物下载对比...
  7. 在Azure上建立Ubantu虚拟机
  8. Dreamweaver CS6 新建站点
  9. python里的英文歌叫什么_Python告诉你:从《入海》到《消愁》毛不易的歌里都在唱些什么?...
  10. dct图像压缩c语言实现,DCT变换在图像压缩中的实现