当前位置:   article > 正文

matlab中离开网格的流量,数学建模【数据处理方法(一维、二维插值方法;数据拟合方法;插值and拟合的MATLAB实现)】...

matlab一维插值绘制温度曲线的实验总结及知识点

【学习网址:MOOC---郑州轻工业大学---数学建模与实验】数学建模专栏

笔记01【第1、2章】【概述、软件介绍】

笔记02【第3章】【数据处理方法】

笔记03【第4章】【规划模型】

笔记04【第5章】【图与网络模型】

各个章节---作业题解析

目   录

3.1 一维插值方法

1、数据处理的应用背景

2、插值的基本原理

插值思想简介

3、引例

3.1、引例演示

3.2、引例1、函数查表问题

3.2、引例2、绘制地图

3.3、引例3:机床加工

4、一维插值定义

5、一维插值原理

6、一维插值方法

6.1、拉格朗日(Lagrange)插值

6.2、分段线性插值

6.3、分段三次埃尔米特插值

6.4、三次样条插值

3.2 二维插值方法

1、高维插值的应用背景

2、二维插值的基本原理

2.1、规则网格下 二维插值

2.2、散乱节点网格下 二维插值

3、插值方法

3.1、最邻近插值法

3.2、分片线性插值

3.3、双线性插值

3.3 数据拟合方法

1、拟合的应用背景

2、拟合的问题描述

3、拟合模型分类

4、拟合模型常用解法

4.1、最小二乘法

5、最小二乘法

6、线性最小二乘法:预备知识

7、线性最小二乘法求解

7.1、化为二次型的形式

7.2、正规方程的矩阵形式

7.3、算法说明

7.4、关于基函数的选择

3.4 数据插值的MATLAB实现

1、MATLAB作一维插值函数

2、MATLAB作二维插值函数

3、MATLAB作高维插值函数

例 气旋变化情况的可视化

3.5 数据拟合的MATLAB实现

1、MATLAB作线性最小二乘拟合

2、MATLAB作非线性最小二乘拟合

2.1、lsqcurvefit

2.2、lsqnonlin

3.6 数据插值的案例分析与实践

1、一维插值的应用

例1、推测24h内,每一秒的温度,绘制温度曲线

例1.1、推测13h的温度

0、代码汇总

1、nearest(最近插值)

2、linear(线性插值)

3、spline(三次样条插值)

4、cubic(三次插值)

例2、1-12h内,估计每隔1/10h的温度值

引例3、机床加工

2、二维插值的应用

例3 平板表面温度分布图

1、散点温度分布图

2、温度分布曲面图

例4 海域中哪些地方,船要避免进入?

1、海底曲面图(考察的海域范围)

2、水深小于5的海域范围

3.6节---代码汇总

3.7 数据拟合的案例分析与实践

例1 预测人口的增长情况

1、模型(线性增长模型、指数增长模型)

2、Matlab程序and计算结果

3、拟合结果与实际结果比较

4、结果比较与分析

例2 假设有一组实测数据...

建模实例 估计水塔的水流量

1、问题的提出

2、问题分析

3、模型假设

4、模型建立与求解

5、模型的稳定性分析与检验

3.1 一维插值方法

数据处理方法 数据处理 任务数据化 数学建模

数值算法、非数值算法

一维插值、二维插值、三维插值...

数据处理方法---比如:对未来做预测的数据处理方法。

数据查找方法、数据拟合、聚类分析、回值分析、数据逼近...

1、数据处理的应用背景

fa5af74d70a4fcac3f4a80adb7cd47e0.png

数据正确(准确)

函数通过数据点:插值法;

不要求目标函数经过所有的数据点(或者 所有的数据点都不经过!):拟合。

2、插值的基本原理

问题: 给定一批数据点,需确定满足特定要求的函数( 曲线或曲面 )。

解决方案: 若要求所求曲线(面)通过所给所有数据点,就是插值问题。

插值思想简介

e832019219cb81e5a716e1b2c890f9bf.png

yi:函数;                  列表、作图

利用 已知数据(已知点及其函数值) 估算 未知数据(未知点及其函数值):

函数f(x)的产生办法因观测数据与要求的不同而异 --> 2种方法:曲线拟合、插值

插值(精确):认为数据准确,没有误差,函数经过点;曲线拟合:存在误差,寻找误差小的函数。

3、引例

4d8494346e64c96461c7b3582a023b17.png

3.1、引例演示

由 下图可以看出:3条线的光滑程度 不同,

可以看出:最临近插值 光滑程度最差;线性插值 次之;样条插值 最光滑。

e02f72ae3843299082170e8cf109fc66.png

3.2、引例1、函数查表问题

5d6a6d9bd8de69ed83513f0ec6ce67a3.png

最邻近插值(与哪个点接近,就用哪个点的函数值):【缺陷:误差大。】

3.2、引例2、绘制地图

99af45f82ac4e6079f7a80c6133ef782.png

3.3、引例3:机床加工

69e7d598d6987ba14539f18d81783886.png

光滑性:导数阶数

4、一维插值定义

各个x*不同。            某函数【y*】:经过所有插值节点--->构造函数!!!

799f71510e6206c665a565d1448b0097.png

5、一维插值原理

求解插值问题的基本思路

862c8d4dc8d12aa800c07c53d3468c0f.png

先找到 近似函数f(x)

f(x*):插入到x0、x1、x2...xn之间的x*所对应的函数值。

构造不同的f(x),得到不同的y*。

构造什么样的函数:根据客户(题目)要求。满足客户要求。

插值:利用已知点的函数值 求 未知点的函数值。

6、一维插值方法

6.1、拉格朗日(Lagrange)插值

求一个经过n+1个插值节点的n次多项式函数。

各个Xi的值都不同,Li(X)存在,且唯一。

观察 公式:分子、分母---X、Xi。

4937b5830966e6e7402a6741f08e92a1.png

一维:一元函数 y=f(x)

牛顿插值:略。

多项式:幂函数、常数 线性组合。【四则运算】

常数项、1次...n次:n+1个常数 --> n+1个方程

Li(xi) = 1

Pn(x) 是 n+1个多项式的和,是 n次多项式,并经过n+1个点。

ef912d10ac6c6dec573a3548870bf9e4.png

function y = lagr1(x0, y0, x)

n = length(x0); m = length(x); % n=length() 长度

for k = 1:m

z = x(k); % 对x中第k个分量 进行求解,将其值赋给z

s = 0;    % 初始化s

for i = 1:n

p = 1.0;

for j = 1:n

if j~=i % j!=i时

p = p*(z-x0(j))/(x0(i)-x0(j)); % 累乘 计算p函数(第i个拉格朗日函数)

end

end

s = p*y0(i) + s; % 累加

end

y(k) = s;

end

e1162519f765675cdee34eee5f458dc5.png

x0:n+1个点(x0、x1...xn);   y0:n+1个点对应的纵坐标(y0、y1...yn);   x:需要进行插值的点(未知点,可能不止一个,x1...xn;插值:根据实际要求进行处理)

输出结果(y1...ym):在已知点x0、y0(插值节点),n个点的情况下,对x进行插值 得到的输出结果。

98a828c5feac92d7e72e48b630fa1786.png

x0 = [0 3 5 7 9 11 12 13 14 15];

y0 = [0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6];

x = 0:0.05:15;

y = lagr1(x0, y0, x);

plot(x, y, x0, y0, ''r*)

axis([0, 15, -17, 3])

bc0d82175aa78725f1dd2b527322308f.png

acff2d53a514ba84c0b722f0240b5662.png

% 逼近函数 y = 1/(1+x^2)

n = 3; % 3:2次多项式   9   15

x0 = linspace(-5, 5, n);

y0 = 1./(1+x0.^2);

x = -7:0.4:7;

y_L = lagr1(x0, y0, x);

y_R = 1./(1+x.^2);

plot(x, y_R, 'r*', x, y_L);

axis([-6, 6, -1.5 2])

fe22ec7df620ef88e0d7fba41b07e268.pngdd84b8bfbcc274d3f024002b281445b3.png4954bb9662830d8d753ab2e0ea0f065e.png

高次插值多项式:剧烈震荡(误差很大)

n=2:两点确定一条直线。

446c41bcf4e0609f169c7be93189f4fa.png

n=3:经过三点,存在一个二次函数。

随着 插值节点的增多,拉格朗日函数的次数会越来越高。--> 振荡现象(剧烈震荡)--> 误差增大 --> 分段插值方法

6.2、分段线性插值

458e6535d0f42dff5030a96f9e5b458a.png

n越大,插值函数越高。

0a18b88d3c361a00147415c472d9af58.png

c60e945bab161def68cf728253be8535.png

一维分段线性插值:每两个相邻节点,确定一个一次函数(两点确定一条直线);存在一条折线,连接n+1个点。

每个点的左右导数不相等,光滑度低,不能满足实际的工程需要->寻找 光滑性好、次数低的、误差低的插值函数->三次样条插值

466b3d2cbae471d9a88b9ab95092be53.png

6.3、分段三次埃尔米特插值

2a853edde15b728bbd2b8d3878653a9b.png

比如:【每个区间:三次函数】

任意相邻点之间,找一个 三次多项式,使其满足要求。

6.4、三次样条插值

f16843ed6e79f2fc665b05c8a36a5141.png

三次样条插值---插值函数

1)在每一个小区间ad921ec5a1def1433e667a8462529518.png,都是一个三次函数;

一阶导数值、二阶导数值 相等;

70da95a312b64643e8752d33cbb4f3c0.png端点处的二阶导数值 为 0。

69fe2fa39e202c5e772ba403841b8013.png

1af6e7ed57aaa53822cf31e5d463e47b.png

c9871d4c1ba1f7803263938d2b5cbdb5.png

满足的条件。每个小区间,都有一个三次,n个小区间,n+1个点,4n个常数。

3c50b380a59640bacee755f6b4373571.png

三次样条插值精度 比较高

6f4dbd07aa9cf689215d0176227f9827.png

3.2 二维插值方法

1、高维插值的应用背景

在实际的应用领域中,人们经常面临寻求一个多元解析函数描述并通过高维空间中多维数据(通常是测量值)的任务。

如:天气预报风云高压图、山川河流的等高线测量 等。对此类问题多采用高维插值方法,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况,以解决实际生产、生活中遇到的问题。其中,最常用的高维插值是二维插值。

2、二维插值的基本原理

二元函数 z=f(x, y)

b0b954cd6bfb021621070e15ea79c9e4.png

2.1、规则网格下 二维插值

空间点 (x1, y1, z1)、(x2, y2, z2)、 ...、(xn, yn, zn) 在xOy平面投影 得来的散点图(定义域)。

投影方向 沿x、y轴方向 等距离地 画出,得到的网格,即为规则网格(容易寻找规律)。

9e69c7739509a2bb41f6af679fb1a1a1.png

xi:列;      yj:行;      第i列 第j行

2.2、散乱节点网格下 二维插值

不规则网格查找:仅要求各个节点互不相同。散乱节点无规律,插值难度较大。

c70605da2c46b910c30ccfa9c5576d95.png

3、插值方法

二维插值方法 包括 最邻近插值法、分片线性插值、双线性插值、样条插值等一系列类似的方法,常用于图像处理、温度场计算、气压等压线和地图等高线的绘制、计算机模拟和数字信号处理等多种方面。

具体插值方法和应用参考数值逼近,本课采用matlab自带函数进行计算。

3.1、最邻近插值法

黑色点:插值节点。

最邻近插值法:按照 被插值节点 到 各插值节点的距离,最小的插值节点 所对应的函数值,就是 要求的插值结果。

离 被插值节点最近的插值节点 所对应的函数值,即为 插值。

采用 分片常值函数,一般不连续。

658a12e897944e61e6323574052db210.png

3.2、分片线性插值

分片线性插值:满足连续性。(整体连续)

将 方格的对角线 连到一块,分割 方格 为 2个三角形。

每个方格都这样处理 --> 可以看作:多个三角形拼接而成。

3个点 分别对应 空间中的3个点的投影。【这3个点不同;空间中的三个点也不同。】

空间中,不共线的3个点 可以唯一确定一个平面 --> 空间曲面可以看成多个三角形空间平面拼接而成。

每个平面对应一个二元线性函数 --> 所以 称之为分片线性插值。

b045856a7c0b113819b3447f2944225d.png

6160f477420ad95fdc91ea633a9ca611.png

3.3、双线性插值

4个边界,都是 直线!

01ce38dde3ff966e20ca92f5f3b0e91d.png

3.3 数据拟合方法

数据插值:插值函数 经过 插值节点。插值节点过多 --> 数据插值误差可能较大 --> 数据拟合方法

1、拟合的应用背景

在大量的应用领域中,人们经常面临用一个解析函数描述数据(通常是测量值)的任务。对这个问题,人们设法找出某条光滑函数曲线,使它与实际数据误差尽可能地小,找出最佳拟合实际数据的函数,结果不要求目标函数经过任何数据点。这类方法统称为曲线拟合。

2、拟合的问题描述

问题:已知一组(二维)数据,即平面上 n个点(xi, yi) i=1,…,n, 寻求一个函数(曲线)y=f(x), 使 f(x) 在某种准则下与所有数据点最为接近,即曲线拟合得最好。

解决方案:若不要求曲线(面)通过所有数据点,而是要求它反映 对象整体的变化趋势,这就是数据拟合,又称曲线拟合或曲面拟合(三维)

数据量多 --> 数据拟合 --> 反映对象整体(数据)变化趋势

3、拟合模型分类

线性(直线或平面)拟合 用一次函数或线性函数拟合已知现有数据。

非线性(曲线或曲面)拟合 若线性拟合效果不佳,为提高精度,可采用曲线(曲面)拟合数据 。常用的非线性拟合函数是二次函数,三次函数等高次多项式函数, 有时也会用到对数、指数、三角函数等。

分段拟合 在不同的数据段上,采用不同的低次多项式进行拟合。

常值---拟合-->最为简单。

线性拟合:二维:直线;三维:平面。

分段拟合:误差较大的情况下,类似于 分段插值的方法,将数据进行分段,在不同的数据段上 采用 不同的低次多项式进行拟合。

4、拟合模型常用解法

4.1、最小二乘法

最小二乘法是一个非常有用的数学方法,它的直接应用是求矛盾线性方程组的最小二乘解。在工程中,它可用来求经验公式,对实验数据进行曲线拟合;在统计学中,它可用来求最小二乘估计,多元回归等;另外,在数值分析领域,它可用来进行误差分析。 可以说,随着我们将来知识的增多,最小二乘法的应用领域将愈来愈大。

求解 拟合多项式的参数、系数

5、最小二乘法

49da47ce226742b4b0574fb4575d0bfa.png

a1,a2,a3,...,am :线性组合

f(xi) - yi :点到曲线的距离。

求得结果 越小越好 --> 拟合结果越好。

6、线性最小二乘法:预备知识

超出定解条件的方程组。

7c89dd99451ab1094e7bd10289745473.png

7、线性最小二乘法求解

a889c3990857ce4bd4479278e0469f6f.png

转置矩阵R^T

7.1、化为二次型的形式

875e57ef7d0a38a5752013c24e8854a7.png

T:转置   列向量

7.2、正规方程的矩阵形式

cbd0d1a173ffc536373d3c784221440a.png

7.3、算法说明

567c16a95629b9e8f569b5ea5522dcf6.png

7.4、关于基函数的选择

4387e79027ca56451eaa31817877812e.png

3.4 数据插值的MATLAB实现

ba6d93d999465ef281afbe1fcbeebc5c.png

1、MATLAB作一维插值函数

d1a6ba4b4481fd578c54ef0e8a6aa1b9.png

7cc0e8a2c6c8b20ac31f75c3ec0a8124.png

x、y:数据点所构成的向量,插值节点对应的数值;

xi:被插值节点、插值向量

method:采用什么样的方法实现一维插值功能。

1ef1bbf2e355a0ad75145f8ea45d806c.png

x,y,z:已知的插值节点数据。zi:插值结果。

method:采用什么样的方法实现二维插值功能。

1ff2e5c230f20a3e4f3a734291ace2e1.png

77bdf0fd72e18d39d7c1a9229ecaa0ec.png

常用的4种插值方法。

2、MATLAB作二维插值函数

注意:二维插值中已知数据点集(x0,y0)必须是栅格格式,一般用meshgrid函数产生。interp2要求(x0,y0)必须是严格单调的并且是等间距的,如果(x0,y0)不是等间距的,会将且变换为等间距形式,如果已知是等间距的,可在method参数前加星号,例如:'*cubic' 。

3、MATLAB作高维插值函数

1968e8ddbb06301a064dd7aad4a6d2b1.png

例 气旋变化情况的可视化

4310fdc8dc8dd882741a94081b822789.png

axis([0 12 0 90 0 50]):坐标区间。

f71df1d914d90d6a040b723c8ed72c89.png

e132f0303d0dbabbdd0272da01e0b712.png

3ad8918846807c8dd756f56eded40701.png

b358034a15dd0b2677659e94060b2d74.png

dde1ba23e4f6fab05bec073246cb2e19.png

947d605061225308a73bdbc99684e110.png

Xi,Yi,Zi:向量组。

a60b403fa7b34ab665cd00654375f08e.png

3.5 数据拟合的MATLAB实现

1、MATLAB作线性最小二乘拟合

71536692bb940099dc1268e0d999b2b7.png

a:多项式系数。

eece712f222fe64e60ef6ae73fb0da25.png

x、y:拟合数据;n:拟合多项式的次数

s:误差预测结果,将数据代入后 与 实际的差值。

2、MATLAB作非线性最小二乘拟合

2.1、lsqcurvefit

dc67e2b1c6e2eb8832f9ddc745f39572.png

lsqcurvefit、lsqnonlin :curve 刻画;non 非;lin 线性。

a2c88786e2fc4b6a5897bdff31a0f1c6.png

调用格式

434a20c1503b2eed0d6196ab8e137c6f.png

c767f73c4111abd8cc2c8775795fea30.png

2.2、lsqnonlin

0dde5cf6d8b8282ff2231a336c58c46a.png

c4c42942cf18ad4bc83e6cf8fbb4c2b9.png

e2fe48db6c93dab1ec1cee838c71f62e.png

3.6 数据插值的案例分析与实践

1、一维插值的应用

例1、推测24h内,每一秒的温度,绘制温度曲线

4d50b1436bac9c74a0c88f921e252c7e.png

例1.1、推测13h的温度

bb1eb3d5b8287deab89374b1db4b3332.png

x = 0:2:24;            %时间:从0到24,增量为2

y = [12 9 9 10 18 24 28 27 25 20 18 15 13]; %温度

x1 = 13;

y1 = interp1(x, y, x1, 'spline')

xi = 0:1/3600:24;

yi = interp1(x, y, xi, 'spline');

plot(x, y, 'o', xi, yi)

b3f980b50f147a0be9e73ebd895e351c.png

0、代码汇总

x = 0:2:24; %时间:从0到24,增量为2

y = [12, 9, 12, 15, 23, 30, 36, 35, 31, 27, 20, 22, 24]; %温度

xi = 0:1/3600:24; %从0到24,增量为1/3600 24小时中的每一秒

yi = interp1(x, y, xi, 'nearest'); %interp1:一维多项式插值;x、y:插值数据(插值节点);nearest 最邻近插值

plot(xi, yi, 'r'); %plot():绘图命令;r:红色; 在xi时刻内所对应的插值结果记作yi

xlabel('时刻'), ylabel('温度'); %在x轴上标注‘时刻’

hold on %保留

x = 0:2:24;

y = [12, 9, 12, 15, 23, 30, 36, 35, 31, 27, 20, 16, 13];

xi = 0:1/3600:24;

yi = interp1(x, y, xi, 'linear');

plot(xi, yi, 'g');

hold on

x = 0:2:24;

y = [12, 9, 12, 15, 23, 30, 36, 35, 31, 27, 20, 16, 13];

xi = 0:1/3600:24;

yi = interp1(x, y, xi, 'spline');

plot(xi, yi, 'b');

hold on

x = 0:2:24;

y = [12, 9, 12, 15, 23, 30, 36, 35, 31, 27, 20, 16, 13];

xi = 0:1/3600:24;

yi = interp1(x, y, xi, 'cubic');

plot(xi, yi, 'y');

hold on

1、nearest(最近插值)

be3d77c8678258e4f405955548c17558.png

ff27e774e60068399c8a0700720f30f7.png

2、linear(线性插值)

7f7058c81d7e66c31d26f61f7b62b743.png

ee79e83b3e1d3171b2a4ee6c7bd44836.png

3、spline(三次样条插值)

8a01b87bc57a5a16fa622308213ff44c.png

66c3715edb62e05902fd2689f9544924.png

4、cubic(三次插值)

76bd7b2c82571282ab3908faf86ea10e.png

ee9bab0c2610116c106dcfc669837374.png

例2、1-12h内,估计每隔1/10h的温度值

clc; %清除变量

hours = 1:12; %分割时间

temps = [5 8 9 15 25 29 31 30 22 25 27 24];

h = 1:0.1:12;

t = interp1(hours, temps, h, 'spline');

plot(hours, temps,'+', h, t, hours, temps, 'r');

xlabel('Hour'), ylabel('Degrees Clesius')

323731b94801558ced11906c6fbd6340.png

ee3cad10fef857616e62e5bd83c61d10.png

9e9a93836d2f3e3a7e3735a15b66d6f6.png

引例3、机床加工

cd28fed4de9adb623cc0858919429178.png

x0 = [0 3 5 7 9 11 12 13 14 15];

y0 = [0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6];

x = 0:0.05:15;

y = lagr1(x0, y0, x);

y1 = interp1(x0, y0, x, 'spline')

subplot(2, 1, 1), plot(x, y, x0, y0, 'r*'), axis([0, 15, -17, 3])

subplot(2, 1, 2), plot(x, y1, x0, y0, 'r*')

7e8fd88a3f5483248ddada3004e6a75b.png

2196c6c4d35f14d581a0d1816197cf7a.png

2、二维插值的应用

例3 平板表面温度分布图

1、散点温度分布图

56b636b4f7c751602c34d8e4555f1a64.png

x = 1:5;

y = 1:3;

temps = [82 81 80 82 84; 79 63 61 65 81; 84 84 82 85 86];

mesh(x, y, temps)

729c82a39cf316bef2e14a7e73e16c3d.png

2、温度分布曲面图

c09d811fd76d0d4e956a0d91f879e905.png

x = 1:5;

y = 1:3;

temps = [82 81 80 82 84; 79 63 61 65 81; 84 84 82 85 86];

mesh(x, y, temps)

xi = 1:0.2:5;

yi = 1:0.2:3;

zi = interp2(x, y, temps, xi', yi, 'cubic');

mesh(xi, yi, zi)

5e7ad45d7c6805c3b59dd25f56c44c85.png

例4 海域中哪些地方,船要避免进入?

8bff0ed1651c6942a1762cf2f105fa01.png

598b829548ed0eef6345c768ecda1543.png

4e21c03924a80736c37b2542be0038d0.png

54aa86adc5347011d46fdba864dc4377.png

c131ad0c87523a77296932e8eef668ce.png

c3212f3bc6f57706166a623c5703bb3b.png

0779db322110ecafee92f0ce6fa7470a.png

1、海底曲面图(考察的海域范围)

问题分析(问题求解算法):

假设:该海域海底是平滑的。

1.输入插值基点数据;【由于测量点是散乱分布的,先作出测量点的分布图】

2.在矩形区域(75,200)x(-50,150)进行插值;【利用MATLAB中的二维插值方法求网格节点的水深】

3.作海底曲面图形和等高线图;

4.作出水深小于5的海域范围,即z=5的等高线。

%插值并作海底曲面图的程序

x = [129.0 140.0 103.5 88.0 185.5 195.0 105.5 157.5 107.5 77.0 81.0 162.0 162.0 117.5];

y = [7.5 141.5 23.0 147.0 22.5 137.5 85.5 -6.5 -81 3.0 56.5 -66.5 84.0 -33.5];

z = [4 8 6 8 6 8 8 9 9 8 8 9 4 9];

x1 = 75:1:200;

y1 = -50:1:150;

[x1, y1] = meshgrid(x1, y1); %点阵

z1 = griddata(x, y, z, x1, y1, 'v4');

meshc(x1, y1, z1)

f37445fede5c9d3319b2dc7019228f65.png

2、水深小于5的海域范围

%程序二:插值并作出水深小于5的海域范围。

x1 = 75:1:200;

y1 = -50:1:150;

[x1, y1] = meshgrid(x1, y1);

z1 = griddata(x, y, z, x1, y1, 'v4'); %插值

z1(z1 >= 5) = nan; %将水深大于5的置为nan,这样绘图就不会显示出来

meshc(x1, y1, z1)

98d834bb850d8405d8cc0be3a8e0ec87.png

3.6节---代码汇总

% x = 0:2:24; %时间:从0到24,增量为2

% y = [12, 9, 12, 15, 23, 30, 36, 35, 31, 27, 20, 22, 24]; %温度

% xi = 0:1/3600:24; %从0到24,增量为1/3600 24小时中的每一秒

% yi = interp1(x, y, xi, 'nearest'); %interp1:一维多项式插值;x、y:插值数据(插值节点);nearest 最邻近插值

% plot(xi, yi, 'r'); %plot():绘图命令;r:红色; 在xi时刻内所对应的插值结果记作yi

% xlabel('时刻'), ylabel('温度'); %在x轴上标注‘时刻’

% hold on %保留

% x = 0:2:24;

% y = [12, 9, 12, 15, 23, 30, 36, 35, 31, 27, 20, 16, 13];

% xi = 0:1/3600:24;

% yi = interp1(x, y, xi, 'linear');

% plot(xi, yi, 'g');

% hold on

% x = 0:2:24;

% y = [12, 9, 12, 15, 23, 30, 36, 35, 31, 27, 20, 16, 13];

% xi = 0:1/3600:24;

% yi = interp1(x, y, xi, 'spline');

% plot(xi, yi, 'b');

% hold on

% x = 0:2:24;

% y = [12, 9, 12, 15, 23, 30, 36, 35, 31, 27, 20, 16, 13];

% xi = 0:1/3600:24;

% yi = interp1(x, y, xi, 'cubic');

% plot(xi, yi, 'y');

% hold on

% clc; %清除变量

% hours = 1:12; %分割时间

% temps = [5 8 9 15 25 29 31 30 22 25 27 24];

% h = 1:0.1:12;

% t = interp1(hours, temps, h, 'spline');

% plot(hours, temps,'+', h, t, hours, temps, 'r');

% xlabel('Hour'), ylabel('Degrees Clesius')

% x = 1:5;

% y = 1:3;

% temps = [82 81 80 82 84; 79 63 61 65 81; 84 84 82 85 86];

% mesh(x, y, temps)

% xi = 1:0.2:5;

% yi = 1:0.2:3;

% zi = interp2(x, y, temps, xi', yi, 'cubic');

% mesh(xi, yi, zi)

%插值并作海底曲面图的程序

% x = [129.0 140.0 103.5 88.0 185.5 195.0 105.5 157.5 107.5 77.0 81.0 162.0 162.0 117.5];

% y = [7.5 141.5 23.0 147.0 22.5 137.5 85.5 -6.5 -81 3.0 56.5 -66.5 84.0 -33.5];

% z = [4 8 6 8 6 8 8 9 9 8 8 9 4 9];

% x1 = 75:1:200;

% y1 = -50:1:150;

% [x1, y1] = meshgrid(x1, y1); %点阵

% z1 = griddata(x, y, z, x1, y1, 'v4');

% meshc(x1, y1, z1)

%程序二:插值并作出水深小于5的海域范围。

x1 = 75:1:200;

y1 = -50:1:150;

[x1, y1] = meshgrid(x1, y1); %网格

z1 = griddata(x, y, z, x1, y1, 'v4'); %插值

z1(z1 >= 5) = nan; %将水深大于5的置为nan,这样绘图就不会显示出来

meshc(x1, y1, z1)

3.7 数据拟合的案例分析与实践

最小二乘法线性拟合的应用

例1 预测人口的增长情况

人口的增长是当前世界上引起普遍关注的问题,并且我们会发现在不同的刊物预报 同一时间的人口数字不相同,这显然是由于用了不同的人口模型计算的结果。我国是世界第一人口大国,基本上地球每九个人中就有一个中国人。有效地控制我国人口的增长是使我国全面进入小康社会、到21世纪中叶建成富强民主文明的社会主义国家的需要。而有效控制人口增长的前提是要认识人口数量的变化规律,建立人口模型,作出较准确的预报。

1949年——1994年,我国人口数据资料如下: 年份xi       1949    1954    1959    1964    1969    1974    1979    1984    1989    1994

人口数yi     5.4       6.0       6.7       7.0       8.1       9.1       9.8      10.3     11.3     11.8

[ 人口数 单位:亿!!! ]

建模分析我国人口增长的规律,预报1999年我国人口数。

1、模型(线性增长模型、指数增长模型)

d2289c81d4286eeaf46d5682f74ec787.png

22cbd2f82ac6048a82f3b7c0c819d204.png

2、Matlab程序and计算结果

% Matlab计算程序如下:

x=[1949 1954 1959 1964 1969 1974 1979 1984 1989 1994];

y=[5.4 6.0 6.7 7.0 8.1 9.1 9.8 10.3 11.3 11.8 ];

a=polyfit(x,y,1);

x1=[1949:10: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,'--r')

hold on

plot(x1,y2,'-k')

legend('原曲线','模型一曲线','模型二曲线')

7546c109264409411e8e755777fe312e.png

3、拟合结果与实际结果比较

81c8b278ec1f6f04979707605778bb9d.png

4、结果比较与分析

2dcb03af7a5a1b7fcfb7c0bd41628b2e.png

例2 假设有一组实测数据...

假设有一组实测数据

xi

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1.0

yi

2.3201

2.647

2.9707

3.2885

3.6008

3.909

4.2147

4.5191

4.8232

5.1275

模型假设:该数据满足的原型函数

db191cb25512d9080569552be1abbf19.png

试求出满足下面数据的最小二乘解的a,b,c,d的值。

采用最小二乘拟合:lsqcurvefit()

建立原型函数:

function y=f1(a,x)

y=a(1)*x+a(2)*x.^2.*exp(-a(3)*x)+a(4);

在命令窗口中输入:

function y=f1(a,x)

y=a(1)*x+a(2)*x.^2.*exp(-a(3)*x)+a(4);

x=[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0];

y=[2.3201 2.647 2.9707 3.2885 3.6008 3.909 4.2147 4.5191 4.8232 5.1275];

a=lsqcurvefit('f1',[1;2;2;2],x,y)

建模实例估计水塔的水流量

1、问题的提出

d33079215a275c17f7c1f19a5fd4721e.png

7f93c04845895d3c98d00679828d6010.png

2、问题分析

自动加水:自动压力器

水位升高:气压增大,停止加水。【8.2米,开始加水;10.8米,停止加水。】

高度变化 ——》水流变化、水流速度

3、模型假设

a7277c393de762bc4cc66b520228d8c5.png

假设1:忽略因素---水位越高,流速越快(重力影响)

假设4:一直有人在用水

e13d0f9abf4965bbab60af033d25599f.png

587fbb5499d8fc4f569bbd8aef98c39a.png

044c2843e7076e0eeaf908af917943a4.png

水流速:水流量的导数

01ef15f8e46f161db8092bdcc8d7d8ea.png向前差分 or 向后差分,求导数。   时刻变化 / 体积变化

利用 二阶差商公式 近似计算。。。

5324487d2afc4b3cf2f0c82f38755c89.png

4、模型建立与求解

8d812d352b3d1b13c86b25c3cd2d24f3.png

b4c7f5400e974cc8f751c83993bc3598.png

ddb0b36f23833381174ae9d785eb1835.png

x0:时间;y0:流速;x:被插结点;y:这些点所对应的函数值(插值结果)

8987f0ecc83053b173d8229badc5654c.png

7cd1681e93246deb1768017fe7d4e1df.png

数值积分

误差较小,结果可以接受。

5、模型的稳定性分析与检验

17925d7e0f7f312f1df6b7dc3a9b82bc.png

6d3a8dc8806ce93ee5f36b1747bf4a0d.png

可能:上午、下午、晚上,用水量不同。。。所以,进行分段。

误差较小,结果可以接受。

8a8d24d4160c247017cf8e7483e637e8.png

模型评价

插值:利用 已知数据 求得 未知数据 所对应函数的方法(必须经过所有已知点)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/193204
推荐阅读
相关标签
  

闽ICP备14008679号