张瑞
中国科学技术大学数学科学学院
rui@ustc.edu.cn |
模型特点:
例 1. 把椅子往不平的地面上一放,通常只有三只脚着地,放不稳。然而只需 稍挪动几次,就可以使四只脚同时着地,放稳了。用数学语言对此现象给以 描述,并用数学工具来验证此现象是否总是成立。
一定的假设:
模型: 椅子4个脚记为ABCD。ABCD的中心为O。以O为原点,OA为x轴。椅子变化后,绕O旋转了角度。 记为A,C两脚到地面的距离和,为C,D两脚到地面的距离和。
求解问题: , 为的连续函数,,且。证明:存在,使
证明: 令,则, 。因此,存在,使得
又
则有
两个变量之间呈现比例关系
延伸一下,
猜想有比例关系的量,然后获取数据,用最小二乘法确定数据,最后再检验模型
著名的比例性
例 2. (Kepler 第三定律) 得到的行星周期与行星到太阳的平均距离数据为:
行星 | 周期T | 平均距离(万公里)R |
---|---|---|
水星 | 88.0 | 5791 (0.38 天文单位) |
金星 | 224.7 | 10820(0.72个天文单位) |
地球 | 365.3 | 14960 (1.00 天文单位) |
火星 | 687.0 | 22794 (1.52 天文单位) |
木星 | 4331.8 | 77833 (5.20 天文单位) |
土星 | 10760.0 | 142940 (9.54 天文单位) |
天王星 | 30684 | 287099 (19.218 天文单位) |
海王星 | 60188.3 | 450400 (30.06 天文单位) |
确定T与R的关系
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> a=np.array([0.38, 0.72, 1.0, 1.52, 5.2, 9.54, 19.218, 30.06])
>>> b=np.array([88.0, 224.7, 365.3, 687.0,4331.8,10760.0,30684,60188.3])
>>> b/a
array([ 231.57894737, 312.08333333, 365.3 , 451.97368421,
833.03846154, 1127.88259958, 1596.6281611 , 2002.27212242])
>>> b/a**(1.5)
array([ 375.67065946, 367.79373549, 365.3 , 366.59906683,
365.31153154, 365.16547446, 364.20817565, 365.1981868 ])
Python中处理最小二乘法:可以使用 scipy库中的leastsq函数
参考: https://www.cnblogs.com/NanShan2016/p/5493429.html
有了预想的比例关系,和一些相应的数据,如何确定这个比例系数?
理论上,所有的数据应该契合这个比例关系,但实际上,得到的数据总有误差。
定义 1.
最小二乘法:若有数据集。找参数,使得
达到最小。
线性最小二乘
若,则找, , , ,使
达到最小。可得,
其中
由关于达到最小,有, 。即
。
非线性最小二乘法
若函数关于要求的参数是非线性的,
搜索算法的思路是:
以不同的规则选择参数值,即可构成不同的搜索算法。常用的方法有单纯形搜索法、复合形搜索法、随机搜索法等。
迭代算法是从参数的某一初始猜测值出发,然后产生一系列的参数点,如果这个参数序列收敛到使目标函数极小的参数点,那么经过足够步后,就可以认为得到了最小值。
迭代算法的一般步骤是:
典型的迭代算法有牛顿-拉夫森法、高斯迭代算法、麦夸特算法、变尺度法等。
非线性最小二乘法除可直接用于估计静态非线性模型的参数外,在时间序列建模、连续动态模型的参数估计中,也往往遇到求解非线性最小二乘问题。
Mathematica中的拟合函数为
Fit[data, funcs, vars]
其中data是二维数组,funcs是基函数列表,vars是变量名。如
Fit[data,{1,x},x] : 拟合y=a+bx
Exp[Fit[Log[data], {1,x}, x]] : 拟合 y=a*x^b
非线性最小二乘法可以用
FindFit[data,expr,pars,vars]
如
FindFit[data, a x Log[b + c x], {a, b, c}, x]
例 3. 利用数据,将行星周期与行星到太阳的平均距离拟合为
解. 对与作线性拟合,可以得到
mathematica:
data = {{0.38, 88.0}, {0.72, 224.7}, {1.0, 365.3}, {1.52,
687.0}, {5.2, 4331.8}, {9.54, 10760.0}, {19.218, 30684.0}, {30.06,
60188.3}};
f = Fit[Log[data], {1, x}, x]
fd = Plot[f, {x, -1.0, 4.0}];
pd = ListPlot[Log[data], PlotStyle -> Red];
Show[fd, pd]
结果
5.91013 + 1.49568 x
Python
Python中可以使用 scipy 库中的模块 optimize 的函数 leastsq() 作非线性的最小二乘法
import numpy as np
from scipy.optimize import leastsq
Yi=np.array([7.01,2.78,6.47,6.71,4.1,4.23,4.05])
xi=np.array([8.19,2.72,6.39,8.71,4.7,2.66,3.78])
def func(p,x):
k,b=p
return k*x+b
def error(p,x,y,s):
print(s)
return func(p,x)-y
#TEST
p0=[100,2]
#print( error(p0,Xi,Yi) )
s="Test the number of iteration"
Para=leastsq(error,p0,args=(xi,Yi,s)) #把error函数中除了p以外的参数打包到args中
k,b=Para[0]
print("k=",k,'\n',"b=",b)
例 4. 3秒法则: 在高速上,跟前车的距离要大于当前车速跑3秒的距离。 这个法则合理吗?
分析:
问题: 车的当前速度为,到车完全停止开了的长度,与的函数关系是什么?
分析: 距离()=司机反应距离()+刹车距离() 。
司机反应距离是司机反应时间与车速的函数,刹车距离是车速与车重的函数。
这样,有关系
其中, 为待定常数。 需要用实测数据来估计, 。
数据:实际测量。
结论:
3秒原则即要求。 可以看到,与相关,因此,3秒原则跟车速相关。也就是说,当车速较低时,可以用2秒原则;当车速较高时,可能需要4秒原则。
研究的对象是按比例放缩的。
例 5. 怎么估计鱼的重量?
假设:同一种类的鱼,它们的比例是一样,可以认为它们的重量与长度有关系。
模型:重量()跟体积()是比例关系,而体积()与长度()的3次方是比例关系。这样,可以有模型
模型二:若还测量鱼的最宽处的腰围(),则体积()与长度()和橫截面()相关,橫截面()与腰围()的平方是比例关系,则
例 6. 谢
6.