插值与拟合 (二) : 曲线拟合的线性最小二乘法

目录

1  线性最小二乘法 

最小二乘准则                           系数  \large a_{k} 的确定

1.2  函数 \large r_{k}\left ( x \right ) 的选取 

常用的拟合曲线:直线、多项式曲线、双曲线、指数曲线

2 最小二乘法的 Matlab 实现 

2.1  解方程组方法  

2.2  多项式拟合方法 

        a=polyfit(x0,y0,m)           用数据x0,y0拟合m 次多项式

y=polyval(a,x)      计算多项式在 x 处的值 y

3 最小二乘优化 

3.1  lsqlin 函数                    3.2  lsqcurvefit 函数 

3.3  lsqnonlin 函数              3.4  lsqnonneg 函数 

 3.5  曲线拟合的用户图形界面求法 

4 曲线拟合与函数逼近 

函数逼近                最小平方逼近准则

正交多项式

勒让得(Legendre)多项式

第一类切比雪夫(Chebyshev)多项式 、拉盖尔(Laguerre)多项式 

例:求最佳平方逼近多项式

建模分析: 黄河小浪底调水调沙问题 

1  问题的提出 

2  模型的建立与求解   

插值与拟合习题


1  线性最小二乘法 

曲线拟合问题的提法是,已知一组(二维)数据,即平面上的n个点  \left ( x_{i} \, ,y_{i}\right )\: ,i=1,2,...,n  , x_{i} 互不相同,寻求一个函数(曲线)y=f\left ( x \right ) ,使 f\left ( x \right ) 在某种准则下与所有数据点最为接近,即曲线拟合得最好。 

最小二乘准则

系数  a_{k}  的确定

 

1.2  函数 r_{k}\left ( x \right ) 的选取 

常用的拟合曲线:直线、多项式曲线、双曲线、指数曲线

已知一组数据,用什么样的曲线拟合最好,可以在直观判断的基础上,选几种曲线 分别拟合,然后比较,看哪条曲线的最小二乘指标J 最小。 

2 最小二乘法的 Matlab 实现 

2.1  解方程组方法  

 例 4  用最小二乘法求一个形如 y=a+bx^{2} 的经验公式,使它与表 4 所示的数据 拟合。 

解  编写程序如下 

x=[19     25    31     38    44]'; 
y=[19.0   32.3   49.0   73.3   97.8]'; 
r=[ones(5,1),x.^2]; 
ab=r\y 
x0=19:0.1:44; 
y0=ab(1)+ab(2)*x0.^2; 
plot(x,y,'o',x0,y0,'r') 

2.2  多项式拟合方法 

       a=polyfit(x0,y0,m)           用数据x0,y0拟合m 次多项式

y=polyval(a,x)      计算多项式在 x 处的值 y

 

例 5   某乡镇企业 1990-1996 年的生产利润如表 5。 试预测 1997 年和 1998 年的利润。 

解  作已知数据的的散点图, 

x0=[1990  1991  1992  1993  1994  1995  1996]; 
y0=[70   122   144   152   174   196   202]; 
plot(x0,y0,'*')

发现该乡镇企业的年生产利润几乎直线上升。因此,我们可以用  y=a_{1}x+a_{0} 作为 拟合函数来预测该乡镇企业未来的年利润。编写程序如下: 

x0=[1990  1991  1992  1993  1994  1995  1996]; 
y0=[70   122   144   152   174   196   202]; 
a=polyfit(x0,y0,1) 
y97=polyval(a,1997) 
y98=polyval(a,1998) 

3 最小二乘优化 

在无约束最优化问题中,有些重要的特殊情形,比如目标函数由若干个函数的平方和构成。这类函数一般可以写成: 

最小二乘优化是一类比较特殊的优化问题,在处理这类问题时,Matlab 也提供了 一些强大的函数。在 Matlab 优化工具箱中,用于求解最小二乘优化问题的函数有:lsqlin、 lsqcurvefit、lsqnonlin、lsqnonneg,用法介绍如下。 

3.1  lsqlin 函数 

          Matlab 中的函数为:

x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0) 

例 6  用 lsqlin 命令求解例 4。

解  编写程序如下: 

x=[19     25    31     38    44]'; 
y=[19.0   32.3   49.0   73.3   97.8]'; 
r=[ones(5,1),x.^2]; 
ab=lsqlin(r,y) 
x0=19:0.1:44; 
y0=ab(1)+ab(2)*x0.^2; 
plot(x,y,'o',x0,y0,'r') 

3.2  lsqcurvefit 函数 

Matlab 中的函数为

X=LSQCURVEFIT(FUN,X0,XDATA,YDATA,LB,UB,OPTIONS)

其中 FUN 是定义函数 F( x, xdata ) 的 M 文件。 

 function f=fun1(x,tdata); 
f=x(1)+x(2)*exp(-0.02*x(3)*tdata);  %其中 x(1)=a,x(2)=b,x(3)=k 

(2)调用函数 lsqcurvefit,编写程序如下: 

td=100:100:1000; 
cd=[4.54  4.99  5.35  5.65  5.90  6.10  6.26  6.39  6.50  6.59]; 
x0=[0.2 0.05 0.05]; 
x=lsqcurvefit(@fun1,x0,td,cd) 

3.3  lsqnonlin 函数 

Matlab 中的函数为

X=LSQNONLIN(FUN,X0,LB,UB,OPTIONS) 

其中 FUN 是定义向量函数F( x)的 M 文件。 

 

例 8  用 lsqnonlin 函数求解例 7。 

解  这里 

(1)编写 M 文件 fun2.m 如下: 

function f=fun2(x); 
td=100:100:1000; 
cd=[4.54  4.99  5.35  5.65  5.90  6.10  6.26  6.39  6.50  6.59]; 
f=x(1)+x(2)*exp(-0.02*x(3)*td)-cd; 

(2)调用函数 lsqnonlin,编写程序如下: 

x0=[0.2 0.05 0.05];  %初始值是任意取的 
x=lsqnonlin(@fun2,x0) 

3.4  lsqnonneg 函数 

Matlab 中的函数为

X = LSQNONNEG(C,d,X0,OPTIONS) 

解  编写程序如下: 

c=[0.0372 0.2869;0.6861 0.7071;0.6233 0.6245;0.6344 0.6170]; 
d=[0.8587;0.1781;0.0747;0.8405]; 
x=lsqnonneg(c,d) 

 3.5  曲线拟合的用户图形界面求法 

Matlab 工具箱提供了命令 cftool,该命令给出了一维数据拟合的交互式环境。具体 执行步骤如下:  

(1)把数据导入到工作空间;  

(2)运行 cftool,打开用户图形界面窗口;  

(3)对数据进行预处理;  

(4)选择适当的模型进行拟合;  

(5)生成一些相关的统计量,并进行预测。  

可以通过帮助(运行 doc cftool)熟悉该命令的使用细节。 

 

4 曲线拟合与函数逼近 

函数逼近 

最小平方逼近准则

 

正交多项式

 

勒让得(Legendre)多项式

 

第一类切比雪夫(Chebyshev)多项式 、拉盖尔(Laguerre)多项式 

例:求最佳平方逼近多项式

 解  编写程序如下: 

syms x 
base=[1,x^2,x^4]; 
y1=base.'*base 
y2=cos(x)*base.' 
r1=int(y1,-pi/2,pi/2) 
r2=int(y2,-pi/2,pi/2) 
a=r1\r2 
xishu1=double(a)  %系数
digits(8),xishu2=vpa(a) 

 

建模分析: 黄河小浪底调水调沙问题 

1  问题的提出 

2004 年 6 月至 7 月黄河进行了第三次调水调沙试验,特别是首次由小浪底、三门峡和万家寨三大水库联合调度,采用接力式防洪预泄放水,形成人造洪峰进行调沙试验获得成功。整个试验期为 20 多天,小浪底从 6 月 19 日开始预泄放水,直到 7 月 13 日 恢复正常供水结束。小浪底水利工程按设计拦沙量为 75.5 亿 \large m^{3} ,在这之前,小浪底共积泥沙达 14.15 亿 t。这次调水调沙试验一个重要目的就是由小浪底上游的三门峡和万家寨水库泄洪,在小浪底形成人造洪峰,冲刷小浪底库区沉积的泥沙,在小浪底水库开闸泄洪以后,从 6 月 27 日开始三门峡水库和万家寨水库陆续开闸放水,人造洪峰于 29日先后到达小浪底,7 月 3 日达到最大流量 2700 \large m^{3}/s ,使小浪底水库的排沙量也不断地增加。

表 7 是由小浪底观测站从 6 月 29 日到 7 月 10 检测到的试验数据。 

现在,根据试验数据建立数学模型研究下面的问题:

(1)给出估计任意时刻的排沙量及总排沙量的方法;

(2)确定排沙量与水流量的关系。 

 

2  模型的建立与求解 

对于问题(1),根据所给问题的试验数据,要计算任意时刻的排沙量,就要确定出排沙量随时间变化的规律,可以通过插值来实现。考虑到实际中的排沙量应该是时间的连续函数,为了提高模型的精度,我们采用三次样条函数进行插值。

clc,clear 
load data.txt    %data.txt 按照原始数据格式把水流量和排沙量排成 4 行,12 列 
liu=data([1,3],:); %水流量
liu=liu';liu=liu(:); 
sha=data([2,4],:);  
sha=sha';sha=sha(:);  %排沙量
y=sha.*liu;y=y'; 
i=1:24; 
t=(12*i-4)*3600; 
t1=t(1);t2=t(end); 
pp=csape(t,y); 
xsh=pp.coefs  %求得插值多项式的系数矩阵,每一行是一个区间上多项式的系数。 
TL=quadl(@(tt)ppval(pp,tt),t1,t2) 

对于问题(2),研究排沙量与水流量的关系,从试验数据可以看出,开始排沙量是随着水流量的增加而增长,而后是随着水流量的减少而减少。显然,变化规律并非是线性的关系,为此,把问题分为两部分,从开始水流量增加到最大值 2720 \large m^{3}/s(即增长的过程)为第一阶段,从水流量的最大值到结束为第二阶段,分别来研究水流量与排沙量的关系。 

画散点图的程序如下: 

load data.txt     
liu=data([1,3],:); 
liu=liu';liu=liu(:); 
sha=data([2,4],:); 
sha=sha';sha=sha(:); 
y=sha.*liu; 
subplot(1,2,1), plot(liu(1:11),y(1:11),'*') 
subplot(1,2,2), plot(liu(12:24),y(12:24),'*') 

   计算的 Matlab 程序如下: 

clc, clear 
load data.txt    %data.txt 按照原始数据格式把水流量和排沙量排成 4 行,12 列 
liu=data([1,3],:); 
liu=liu'; liu=liu(:); 
sha=data([2,4],:); 
sha=sha'; sha=sha(:); 
y=sha.*liu;%以下是第一阶段的拟合 
format long e 
nihe1_1=polyfit(liu(1:11),y(1:11),1)   %拟合一次多项式,系数排列从高次幂到低次幂 
nihe1_2=polyfit(liu(1:11),y(1:11),2) 
yhat1_1=polyval(nihe1_1,liu(1:11));  %求预测值 
yhat1_2=polyval(nihe1_2,liu(1:11)); %以下求误差平凡和与剩余标准差 
cha1_1=sum((y(1:11)-yhat1_1).^2); rmse1_1=sqrt(cha1_1/9) 
cha1_2=sum((y(1:11)-yhat1_2).^2); rmse1_2=sqrt(cha1_2/8) 
%以下是第二阶段的拟合 
for j=1:3     str1=char(['nihe2_' int2str(j) '=polyfit(liu(12:24),y(12:24),' int2str(j+1) ')']);eval(str1)     str2=char(['yhat2_' int2str(j) '=polyval(nihe2_' int2str(j) ',liu(12:24));']);eval(str2)     str3=char(['cha2_' int2str(j) '=sum((y(12:24)-yhat2_' int2str(j) ').^2);'...         'rmse2_' int2str(j) '=sqrt(cha2_' int2str(j) '/(11-j))']);     eval(str3) 
end 
format 

 

插值与拟合习题

4 . (水箱水流量问题)许多供水单位由于没有测量流入或流出水箱流量的设备,而 只能测量水箱中的水位。试通过测得的某时刻水箱中水位的数据,估计在任意时刻(包括水泵灌水期间)t 流出水箱的流量 \large f\left ( t \right ) 。  给出原始数据表 11,其中长度单位为 E(1E=30.24cm)。水箱为圆柱体,其直径 为 57E。  假设:  

(1)影响水箱流量的唯一因素是该区公众对水的普通需要;  

(2)水泵的灌水速度为常数;  

(3)从水箱中流出水的最大流速小于水泵的灌水速度;  

(4)每天的用水量分布都是相似的;  

(5)水箱的流水速度可用光滑曲线来近似;  

(6)当水箱的水容量达到 514×103g 时,开始泵水;达到 677.6×103g 时,便停止 泵水。

插值与拟合系列的两篇博文暂且更新到这里了,后面会再详细补充几个matlab拟合函数的参数信息。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/253458.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

最小二乘法多项式曲线拟合及其python实现

最小二乘法多项式曲线拟合及其python实现 多项式曲线拟合问题描述最小二乘法针对overfitting,加入正则项python实现运行结果 多项式曲线拟合问题描述 问题描述:给定一些数据点,用一个多项式尽可能好的拟合出这些点排布的轨迹,并给…

数值分析——曲线拟合的最小二乘法

文章目录 一、曲线拟合的最小二乘原理1. 超定方程组的最小二乘解解题方法: 2. 直线拟合3. 多项式拟合 一、曲线拟合的最小二乘原理 拟合曲线定义:求近似函数 φ(x), 使之 “最好” 的逼近f(x) ,无需满足插值原则. 这就是曲线拟合问题。 (时间…

最小二乘法的曲线拟合方法在MATLAB中的实现

一、实验内容 已知一组实验数据如下表,求它的拟合曲线。 x(i)12345 f(i)44.5688.5 w(i)21311 二、程序清单与运行结果 M文件代码如下: function Smypolyfit(X,F,W,m,n) % mypolyfit输出通过最小二乘法求得的拟合曲线并绘图验证 % 例如: …

UFS 1-UFS架构简介1

UFS 1-UFS架构简介 1 UFS是什么?1.1 UFS1.2 一般特征1.2.1 Target performance1.2.2 Target host applications1.2.3 Target device types1.2.4 Topology1.2.5 UFS Layering 1.3 Interface Features1.3.1 Three power supplies1.3.2 Signaling as defined by [MIPI-…

最小二乘法线性拟合和2次曲线拟合算法

最近由于项目要求,应用了最小二乘法线性拟合和2次曲线拟合算法,现总结如下: 最小二乘法线性拟合应用已有的采样时间点,再现这些点所描述的线性变化,即求出一个线性方程yaxb(这个算法的主要问题也就是如何用给定的数据…

数值分析实验四 最小二乘法曲线拟合

一、实验目的 1.使用不同的模型对数据进行最小二乘拟合; 2.分析使用不同模型最小二乘法对数据进行拟合的RMSE(均方根误差); 3.根据分析结果求出最合理的拟合模型。 二、实验题目 1.用表1-1中的世界人口统计数值估计1980年的人口,求最佳最小…

最小二乘法的拟合原理

一. 最小二乘法的拟合原理 根据《数学指南》书中的解释: 图2 《数学指南》中对最小二乘法的解释 上面这段话,枯燥且无趣,大家不用厌恶,数学向来这个样子。 现在,我们来慢慢认识上面这段话的意思,这句话的意思是说&a…

最小二乘法拟合直线

曲线拟合中最基本和最常用的是直线拟合。设x和y之间的函数关系为: y=abx 式中有两个待定参数,a代表截距,b代表斜率。对于等精度测量所得到的N组数据(xi,yi),i=1&#xff…

多项式函数曲线拟合——最小二乘法

多项式函数拟合的任务是假设给定数据由M次多项式函数生成,选择最有可能产生这些数据的M次多项式函数,即在M次多项式函数中选择一个对已知数据以及未知数据都有很好预测能力的函数。 最小二乘法(又称最小平方法)是一种数学优化技术…

最小二乘法入门(Matlab直线和曲线拟合)

参考博客:https://blog.csdn.net/wokaowokaowokao12345/article/details/72850143 多的就不多说了,持续脱发中!!! 最小二乘法历史起源之类的:https://baike.baidu.com/item/%E6%9C%80%E5%B0%8F%E4%BA%8C%…

曲线拟合的最小二乘原理

文章目录 1 什么是最小二乘2 最小二乘原理3 最小二乘应用示例4 法方程到底是什么 1 什么是最小二乘 在科学实验的统计方法研究中,往往要从一组实验数据 ( x i , y i ) ( i 0 , 1 , 2 , … , m ) (x_i,y_i)(i0,1,2,…,m) (xi​,yi​)(i0,1,2,…,m) 中寻找自变量 …

最小二乘法曲线拟合原理

最小二乘法曲线拟合原理 一、最小二乘法原理 对于给定的一组数据(xi,yi),假定它满足n次多项式: 为了求取各阶参数的最优解,对于每个xi,通过n次多项式计算的值和yi之间的差值的平方和应该最小&#xff0c…

最小二乘法

1、概述 最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差(真实目标对象与拟合目标对象的差)的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数…

最小二乘法多项式曲线拟合原理与实现

概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线yf(x)的近似曲线y φ(x)。 原理 [原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] 给定数据点pi(xi,yi),其中i1,2,…,m…

最小二乘法曲线拟合以及Matlab实现

最小二乘法曲线拟合以及Matlab实现 在实际工程中,我们常会遇到这种问题:已知一组点的横纵坐标,需要绘制出一条尽可能逼近这些点的曲线(或直线),以进行进一步进行加工或者分析两个变量之间的相互关系。而获…

最小二乘法(least squares)的曲线拟合(curve fitting)

第三十八篇 最小二乘法的曲线拟合 如果我们想得到一个通过大量由实验或者计算机程序获得的数据点的函数,它实际是在寻找一个“最适合”数据的函数,而不是一个完全经过所有点。可以采用各种策略来最小化各个数据点之间的误差和逼近函数。其中最著名的是最小二乘法,它…

曲线拟合——最小二乘法( Ordinary Least Square,OLS)

文章目录 前言一、曲线拟合是什么?二、最小二乘法是什么?三、求解最小二乘法(包含数学推导过程)四、使用步骤1.引入库2.读入数据 总结 前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都…

最小二乘法进行曲线拟合

工作需求,这里记录一下数值插值和数值分析方面的算法,希望和大家一起进步。 曲线拟合的最小二乘定义 求一条曲线,使数据点均在离此曲线的上方或下方不远处,所求的曲线称为拟合曲线, 它既能反映数据的总体分布,又不至于出现局部较大的波动,更能反映被逼…

最小二乘法的曲线拟合

最小二乘法解决的问题:AxC 无解下的最优解 例子1: 一条过原点的直线OA,C是直线外一点,求C在OA上的投影点P 例子1 例子2: 已知三个不在一条直线上的点A,B,C,求一条直线,使A,B,C到直线的距离和最小…

最小二乘法曲线拟合

最小二乘法曲线拟合以及Matlab实现 在实际工程中,我们常会遇到这种问题:已知一组点的横纵坐标,需要绘制出一条尽可能逼近这些点的曲线(或直线),以进行进一步进行加工或者分析两个变量之间的相互关系。而获…