目 录
- 数据插值:对已知的数据点 找一个函数,经过这些数据点(必须经过所有数据点),求未知点(预测、分析)。【准确、无误差】
- 数据拟合:拟合模型通过寻找简单的因果变量之间的数量关系,对未知的情形作出预测与预报。不必要求近似函数的曲线或曲面通过所有的数据点。一般数据量较大。存在一定误差,数据不是很敏感。整体上,找到一个函数,误差不要太大。多个函数,误差最小的函数,即为所求。不要求经过函数模型数据点,甚至不经过任何一个数据点。
- 评价预测问题 --> 插值、拟合
数学建模 包含很多的算法、思想
- 模型假设(不能过于较真)
- 在模型假设的前提下,对数据进行分析,建立模型,进行模型求解
- 将数据点与拟合函数,在图形上作比较。
- 数据比较。误差大小,是否符合要求
- 模型评价(优缺点;几种拟合,哪个拟合函数是需要的)
- 采用较好的拟合函数
将所学知识(高数、线代...)进行转化,进行对接(能够解决的现实问题)
- 数学建模
- 模型求解
- 现实的硬件or软件
没有绝对的对与错,多个模型...
解决数学问题,往往要实验好几个模型。对模型进行求解、分析、比较,得出结果,进行对比,对结果进行评价、总结。
解决不了问题,返回来 完善、求解、评价,直到找到一个合适的、满意的模型。
拟合原理、 拟合模型的分类与方法
问题:已知n个数据点(xi, yi),i=1,2,…,n,xi互不相同,如何寻求函数 y=f(x) ,使f(x)在某种准则下与这n个点最接近?
一、拟合原理
拟合模型通过寻找简单的因果变量之间的数量关系,对未知的情形作出预测与预报.
Remark :不必要求近似函数的曲线或曲面通过所有的数据点.
二、拟合模型的分类与方法
1. 直线拟合:用一次函数或称线性函数拟合数据。
2. 曲线拟合:若直线拟合效果不佳,可提高拟合精度,用曲线拟合数据. 常用的是二次函数、三次函数等高次多项式,有时也会用到指数函数、对数函数、三角函数等。
3. 观察数据修匀:根据数据分布的总趋势去剔除观察数据中的偶然误差【剔除异常数据】,即数据修匀(或称数据光滑)问题。
4. 分段拟合:在不同段上用不同的低次多项式进行拟合。
遇到数据之后,如何进行选择,使用什么样的拟合函数?
- 有规律图像:根据经验(常见的函数图像)。
- 无规律图像:分段插值,选择合适的曲线(误差小的)。
选择何种曲线拟合最好呢?
选择何种曲线拟合最好呢?
首先可在坐标轴上画出数据的散点图,通过观察选择几种合适的曲线分别拟合,通过比较,哪条曲线的最小二乘指标J 最小即为最好的拟合曲线。
二次函数、三次函数、指数函数... 分别进行拟合,选 J(误差)最小的函数。
f:拟合函数
问题一【温度与电阻的关系模型】
函数表示方法:解析法、图像法、表格法...
数学建模 第1步:模型假设。抽样数据:R为t的连续函数。
问题一【温度与电阻的关系模型】有一个对温度敏感的电阻,现测得一组温度t与电阻R的数据。见表9.1
表9.1
t
20.5
32.7
51.0
73
95.7
R
765
826
873
942
1032
试给出温度与电阻间的函数关系,并计算温度为60度时的电阻值。
一、模型假设
假设所测数据均为抽样数据.
二、模型建立与分析
先画出散点图,见下图.
观察上图不难发现:散点基本上在一条直线上,因此可假设电阻与温度满足一次函数(或称线性函数).
设拟合函数为
未知量:a1、a2 有可能存在不唯一的解 解出来的结果:一般称为最小二乘解(一般都存在;误差最小)
超定方程组是指方程个数大于未知量个数的方程组。对于方程组Ra=y,R为n×m矩阵,如果R列满秩,且n>m。则方程组没有精确解,此时称方程组为超定方程组。
三、模型求解
实际值与拟合图
t=[20.5 32.7 51 73 95.7];
R=[765 826 873 942 1032];
plot(t,R,'*')
xlabel('t');
ylabel('R')
hold on
t=20:0.1:100;
plot(t,702.0968+3.3987.*t)
regress()函数与polyfit()函数的区别
- regress() 函数主要用于线性拟合,在拟合时进行显著性检验,故称为回归函数。
- Polyfit() 函数主要是利用多项式拟合. 它可以是线性或非线性。
- Remark:polyfit(x, y, m)表示用m 次多项式拟合数据x, y。 x、y列向列;x:自变量;y:函数;m:拟合函数的次数
问题二【农业生产实验模型】
问题二【农业生产实验模型】在研究农业生产的试验中,为分析某地区土豆产量与化肥的关系,得到了每公顷地的氮肥的施肥量与土豆产量的对应关系,见表9.2
表9.2
请根据表 9.2 的数据,给出土豆产量与氮肥施肥量之间的关系。
氮肥量(kg)
0
34
67
101
135
202
259
336
404
471
土豆产量(kg)
15.18
21.36
25.72
32.29
34.03
39.45
43.15
43.46
40.83
30.75
一、模型假设
假设实验数据为抽样数据。假设其他化肥用量不变。
氮肥量、土豆产量 满足 连续关系。抽要数据:只是一部分代表数据,可能会有误差。
二、模型建立与分析
先用Matlab画出散点图。
x=[0 34 67 101 135 202 259 336 404 471];
y=[15.18 21.36 25.72 32.29 34.03 39.45 43.15 43.46 40.83 30.75];
plot(x,y,'+')
xlabel('x(dan fei liang)')
ylabel('y(tu dou chan liang)')1、先用matlab画出散点图,看看是不是常见的函数模型。 整体趋势 类似 抛物线。
可以看出散点图呈二次曲线图形,可取如下拟合函数
其中x表示氮肥量,y表示土豆产量。a,b,c为待定系数。
三、模型求解
x=[0 34 67 101 135 202 259 336 404 471];
y=[15.18 21.36 25.72 32.29 34.03 39.45 43.15 43.46 40.83 30.75];
abc=polyfit(x,y,2)
x1=0:471;
y1=polyval(abc,x1);
plot(x,y,'*',x1,y1)
xlabel('x(dan fei liang)')
ylabel('y(tu dou chan liang)')
问题三【血药浓度模型】
问题三【血药浓度模型】通过实验测得一次性快速静脉注射300mg药物后的血药浓度数据,见表9.3
表9.3
t(h)
0.25
0.5
1
1.5
2
3
4
6
8
y(ug/ml)
19.21
18.15
15.36
14.10
12.89
9.32
7.45
5.24
3.01
求血药深度随时间的变化规律y(t)。
一、模型假设
- 假设 t=0 时,y=0. 没有注射药物的时候,血液中没有药物。
- 假设实验数据为抽样数据,能反映血药浓度与时间的关系. 假设整体上,满足一定的函数关系。
二、模型建立与分析
利用Matlab画出散点图.
t=[0.25 0.5 1 1.5 2 3 4 6 8];
y=[19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01];
plot(t,y,'o')
xlabel('t(shi jian)')
ylabel('y(nong du)')由图可见,散点图大致呈负指数函数形态,可令
其中a, b>0 为待定系数.
三、模型求解
解法一:将其线性化处理
将等式两边同时取对数,得
令,则方程变为
用Matlab求解如下:
t=[0.25 0.5 1 1.5 2 3 4 6 8];
y=[19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01];
Y=log(y);
b=polyfit(t,Y,1)b1 = 2.9943,b2 = -0.2347
a = = = 19.9709,b = -b2 = -(-0.2347) = 0.2347
则血药浓度与时间的关系为
t=[0.25 0.5 1 1.5 2 3 4 6 8];
y=[19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01];
Y=log(y);
b=polyfit(t,Y,1);
a=exp(b(2));
b=-b(1);
plot(t,y,'*');
hold on
t=0:0.01:9;
plot(t,a.*exp(-b.*t),'r')
xlabel('t')
ylabel('y')
解法二:非线性拟合函数nlinfit()
在一定情况下,指数函数 转换成 多项式函数(对于一些特殊的函数);不能转换-->非线性拟合函数nlinfit( )。
解法2
使用非线性拟合函数nlinfit( ). 首先建立Fun7_1.m文件如下:n lin fit
function y=Fun7_1(a,t)
y=a(1)*exp(-a(2)*t);
不妨取a=20, 由t=1时,y=15.36算出b=0.264取
a0=[20 0.264]; 需要迭代初值
用Matlab求解如下:
t=[0.25 0.5 1 1.5 2 3 4 6 8];
y=[19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01];
a0=[20,0.264];
a=nlinfit(t,y,‘Fun7_1',a0)nlinfit():迭代,保证收敛。
模型求解【解法一、解法二】对比
t=[0.25 0.5 1 1.5 2 3 4 6 8];
y=[19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01];
plot(t,y,'*');hold on
a0=[20,0.264];
a=nlinfit(t,y,‘Fun7_1',a0);
t=0:0.01:9;
plot(t,a(1).*exp(-a(2).*t))
hold on
plot(t,19.9714.*exp(-0.2347.*t),'r')
xlabel('t');ylabel('y')
nlinfit函数的用法
nlinfit函数 采用的迭代法(需要初值),其中a0为迭代初值。若所给初值离最优解比较近,则迭代求出该最优解的概率就很高。
如何估计初值,暂无确切方法。可以在得到解后画出函数图形,看看实验点是否都在曲线附近。若相差太大,可以考虑重新给出初值重新计算。
问题四【化工氯气生产等级模型】
题目中给出了模型:
一、模型假设
假设氯气与生产时间之间满足,其中a, b为待定系数。
二、模型建立与分析
此问题实质上是确定待定系数a, b的值。
三、模型求解
首先定义非线性函数fun7_2.m文件:
function y = fun7_2(beta0, x)
a = beta0(1);
b = beta0(2);
y = a + (0.49-a) * exp(-b*(x - 8));
x=[8 8 10 10 10 10 12 12 12 12 14 14 14 16 16 16 18 18 20 20 20 20 22 22 24 24 24 26 26 26 28 28 30 30 30 32 32 34 36 36 38 38 40 42];
y=[0.49 0.49 0.48 0.47 0.48 0.47 0.46 0.46 0.45 0.43 0.45 0.43 0.43 0.44 0.43 0.43 0.46 0.45 0.42 0.42 0.43 0.41 0.41 0.4 0.42 0.4 0.4 0.41 0.4 0.41 0.41 0.4 0.4 0.4 0.38 0.41 0.4 0.4 0.41 0.38 0.4 0.4 0.39 0.39];
beta0=[0.30 0.20]; % 迭代数值
ab=nlinfit(x,y,'fun7_2',beta0)即a=0.3904, b=0.1028. 所以模型函数为
x = [8 8 10 10 10 10 12 12 12 12 14 14 14 16 16 16 18 18 20 20 20 20 22 22 24 24 24 26 26 26 28 28 30 30 30 32 32 34 36 36 38 38 40 42];
y = [0.49 0.49 0.48 0.47 0.48 0.47 0.46 0.46 0.45 0.43 0.45 0.43 0.43 0.44 0.43 0.43 0.46 0.45 0.42 0.42 0.43 0.41 0.41 0.4 0.42 0.4 0.4 0.41 0.4 0.41 0.41 0.4 0.4 0.4 0.38 0.41 0.4 0.4 0.41 0.38 0.4 0.4 0.39 0.39];
plot(x, y, '*');
hold on;
xlabel('x(生产时间)');
ylabel('y(获得的氯气等级)');
beta0 = [0.30 0.20]; % 迭代数值 a取0.30、b取0.20 代入函数,求结果
ab = nlinfit(x, y, 'fun7_2', beta0)
plot(x, ab(1) + (0.49 - ab(1)).*exp(-ab(2).*(x-8)))
ab(1) + (0.49 - ab(1)).*exp(-ab(2).*(x-8))
问题五【人口预测模型】
一、模型假设
假设中国人口的变化满足一定规律。
二、模型建立与分析
首先画出散点图。
x=1949:5:1994;
y=[5.4 6 6.7 7 8.1 9.1 9.8 10.3 11.3 11.8];
plot(x,y,'*')
xlabel('x(年份)')
ylabel('y(人口数)')
三、模型求解
模型一:用线性函数拟合. 设我国人口数量满足以下模型
y=a+bx
其中a, b为待定系数. 通过计算得
y=-283.232+0.148x
【y=-283.232+0.148x---a、b相差较大,敏感度不高,短时间内采用此函数可以,短时间内x对y影响不大!所以,考虑模型二!】
模型二:用指数函数拟合. 设我国人口数量满足以下模型
y=aebx
其中a, b为待定参数. 模型两边取对数得lny=lna+bx
y=4.1444*10-15e0.0179x
x = 1949:5:1994;
y = [5.4 6 6.7 7 8.1 9.1 9.8 10.3 11.3 11.8];
a = polyfit(x, y, 1);
x1 = 1949:0.1:1994;
y1 = a(2)+a(1)*x1;
b = polyfit(x, log(y), 1);
y2 = exp(b(2))*exp(b(1)*x1);
plot(x, y, '*')
hold on
plot(x1, y1)
hold on
plot(x1, y2, 'r')
xlabel('x(nian fen)')
ylabel('y(ren kou shu)')
用两个模型分别计算相应年度的人口数及其误差见下表.
分别计算两个模型的最小二乘指标得
从而线性模型更适合中国人口的增长。
- U :使用下划线标识的文字 --> 老师说的话。
- 没有标下划线的文字:PPT文字。
- 可能,有些地方,没有标下划线,也是老师说的话。