数模【数据的拟合方法-总结】【温度与电阻的关系模型、农业生产实验模型、血药浓度模型、化工氯气生产等级模型、人口预测模型】

前提文章:数学建模【数据处理方法(一维、二维插值方法;数据拟合方法;插值and拟合的MATLAB实现)】

目   录

拟合原理、 拟合模型的分类与方法

一、拟合原理

二、拟合模型的分类与方法

选择何种曲线拟合最好呢?

问题一【温度与电阻的关系模型】

一、模型假设

二、模型建立与分析

三、模型求解

regress()函数与polyfit()函数的区别

扫描二维码关注公众号,回复: 11477623 查看本文章

问题二【农业生产实验模型】 

一、模型假设

二、模型建立与分析

三、模型求解

问题三【血药浓度模型】

一、模型假设

二、模型建立与分析

三、模型求解

解法一:将其线性化处理

解法二:非线性拟合函数nlinfit()

模型求解【解法一、解法二】对比

nlinfit函数的用法

问题四【化工氯气生产等级模型】

一、模型假设

二、模型建立与分析

三、模型求解

问题五【人口预测模型】

一、模型假设

二、模型建立与分析

三、模型求解


  • 数据插值:对已知的数据点 找一个函数,经过这些数据点(必须经过所有数据点),求未知点(预测、分析)。【准确、无误差】
  • 数据拟合:拟合模型通过寻找简单的因果变量之间的数量关系,对未知的情形作出预测与预报。不必要求近似函数的曲线或曲面通过所有的数据点。一般数据量较大。存在一定误差,数据不是很敏感。整体上,找到一个函数,误差不要太大。多个函数,误差最小的函数,即为所求。不要求经过函数模型数据点,甚至不经过任何一个数据点。
  • 评价预测问题 --> 插值、拟合

数学建模 包含很多的算法、思想

  1. 模型假设(不能过于较真)
  2. 在模型假设的前提下,对数据进行分析,建立模型,进行模型求解
  3. 将数据点与拟合函数,在图形上作比较。
  4. 数据比较。误差大小,是否符合要求
  5. 模型评价(优缺点;几种拟合,哪个拟合函数是需要的)
  6. 采用较好的拟合函数

将所学知识(高数、线代...)进行转化,进行对接(能够解决的现实问题)

  1. 数学建模
  2. 模型求解
  3. 现实的硬件or软件

没有绝对的对与错,多个模型...

解决数学问题,往往要实验好几个模型。对模型进行求解、分析、比较,得出结果,进行对比,对结果进行评价、总结。

解决不了问题,返回来 完善、求解、评价,直到找到一个合适的、满意的模型。

拟合原理、 拟合模型的分类与方法

问题:已知n个数据点(xi, yi)i=1,2,…,nxi互不相同,如何寻求函数 y=f(x) ,使f(x)在某种准则下与这n个点最接近?

一、拟合原理

拟合模型通过寻找简单的因果变量之间的数量关系,对未知的情形作出预测与预报.

Remark 不必要求近似函数的曲线或曲面通过所有的数据点.

二、拟合模型的分类与方法

1. 直线拟合:一次函数或称线性函数拟合数据。

2. 曲线拟合:若直线拟合效果不佳,可提高拟合精度,用曲线拟合数据. 常用的是二次函数三次函数等高次多项式,有时也会用到指数函数对数函数三角函数等。

3. 观察数据修匀:根据数据分布的总趋势去剔除观察数据中的偶然误差【剔除异常数据】,即数据修匀(或称数据光滑)问题。

4. 分段拟合:不同段上用不同的低次多项式进行拟合。

遇到数据之后,如何进行选择,使用什么样的拟合函数?

  1. 有规律图像:根据经验(常见的函数图像)。
  2. 无规律图像:分段插值,选择合适的曲线(误差小的)。

选择何种曲线拟合最好呢?

选择何种曲线拟合最好呢?

首先可在坐标轴上画出数据的散点图,通过观察选择几种合适的曲线分别拟合,通过比较,哪条曲线的最小二乘指标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

氮肥量(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

请根据表 9.2 的数据,给出土豆产量与氮肥施肥量之间的关系。

一、模型假设

假设实验数据为抽样数据。假设其他化肥用量不变。

氮肥量、土豆产量 满足 连续关系。抽要数据:只是一部分代表数据,可能会有误差。

二、模型建立与分析

先用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画出散点图,看看是不是常见的函数模型。   整体趋势 类似 抛物线。

可以看出散点图呈二次曲线图形,可取如下拟合函数

y = ax^{2} + bx + c

其中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)。

一、模型假设

  1. 假设 t=0 时,y=0.       没有注射药物的时候,血液中没有药物。
  2. 假设实验数据为抽样数据,能反映血药浓度与时间的关系.      假设整体上,满足一定的函数关系。

二、模型建立与分析

利用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)')

由图可见,散点图大致呈负指数函数形态,可令

y=a·e^{-bt}

其中a, b>0 为待定系数.

三、模型求解

解法一:将其线性化处理

将等式y=a·e^{-bt}两边同时取对数,得

,则方程变为

Y=b_{1}+b_{2}t

用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 = e^{b1} = e^{2.9943} = 19.9709,b = -b2 = -(-0.2347) = 0.2347

则血药浓度与时间的关系为 Y = 19.9709e^{-0.2347t}

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迭代初值。若所给初值离最优解比较近,则迭代求出该最优解的概率就很高。

如何估计初值,暂无确切方法。可以在得到解后画出函数图形,看看实验点是否都在曲线附近。若相差太大,可以考虑重新给出初值重新计算。

问题四【化工氯气生产等级模型】

题目中给出了模型:y=a+(0.49-a)e^{-b(x-8)}

一、模型假设

假设氯气与生产时间之间满足y=a+(0.49-a)e^{-b(x-8)}其中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.   所以模型函数为 y=0.3904+0.0996e^{-0.1028(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];
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)')

用两个模型分别计算相应年度的人口数及其误差见下表.

分别计算两个模型的最小二乘指标得

       J_{1}=0.2915<0.7437=J_{2}

从而线性模型更适合中国人口的增长。

  • U :使用下划线标识的文字 --> 老师说的话。
  • 没有标下划线的文字:PPT文字。
  • 可能,有些地方,没有标下划线,也是老师说的话。

猜你喜欢

转载自blog.csdn.net/weixin_44949135/article/details/107499042