数值计算大作业:最小二乘法拟合(Matlab实现)

这篇具有很好参考价值的文章主要介绍了数值计算大作业:最小二乘法拟合(Matlab实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业。

     我把最小二乘算法在MATLAB中整合成了一个M函数文件least square fitting.m,直线拟合函数lsf_linear.m,以及抛物线拟合函数lsf_parabolic.m。程序放在文章最后了,需要的同学自取。下文为作业详解

题目:根据降雨量的数据拟合流速余降雨量函数

     在水资源工程学中,水库的大小与为了蓄水而拦截的河道中的水流速度密切相关。 对于某些河流来说,这种长时间的历史水流记录很难获得。然而通过容易得到过去若干年间关于降水量的气象资料。鉴于此,推导出流速与降水量之间的关系式往往特别有用。 只要获得那些年份的降水量数据,就可以利用这个关系式计算出水流速度。下表是在被水库拦截的某河道中测得的数据

数值计算大作业:最小二乘法拟合(Matlab实现)

数学原理:最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y=φ(x)。

   在实际运算过程中,给定数据点pi(xi,yi),其中i=1,2,…,m。求近似曲线y= φ(x)。并且使得近似曲线与y=f(x)的偏差最小。近似曲线在点pi处的偏差为δi= φ(xi)-y,i=1,2,...,m。按偏差平方和最小的原则选取拟合曲线,并且采取二项式方程为拟合曲线的方法,称为最小二乘法。

      本次大作业中,建立的两个一维向量RF(rainfall),FV(flow velocity)分别代表的是表中测量数据的降水量和流速。工作目录中建立的两个功能函数,

function f=lsf_parabolic(x)抛物线最小二乘拟合

function f=lsf_parabolic(x)
% 抛物线最小二乘拟合
f(1)=1;
f(2)=x;
f(3)=x^2;
end

function f=lsf_linear(x)直线最小二乘拟合

function f=lsf_linear(x)
% 直线最小二乘拟合
f(1)=1;
f(2)=x;
end

拟合过程:对于给定的一组数据{(x,y)}n假定拟合函数为

Φ(x)=a0Φ0(x)+a1Φ1(x)+......+anΦn(x)

   其中基函数为线性无关的函数系,最小二乘拟合问题就是求系数,使得所有拟合值和实际值的平方差去极小值。因此利用给定的两个一维向量构建系数矩阵和结果矩阵,再利用这两个矩阵构建法方程。

  如此最小二乘拟合问题就转化为超定线性方程组:

                        Ax=y

 因此本实验要点就在于构建法方程并解出相应拟合图像拟合出的拟合函数

实验过程及结果如下

1.绘制数据离散点图形

RF=[88.9 108.5 104.1 139.7 127 94 116.8 99.1];
FV=[14.6 16.7 15.3 23.2 19.5 16.1 18.1 16.6];
plot(RF,FV,'r.');
grid on;
xlabel('x');
ylabel('y');
数值计算大作业:最小二乘法拟合(Matlab实现)
标题降雨量与流速的离散图

2.利用直线进行最小二乘拟合,将拟合直线添加到离散点图形上  

程序在附录中,并给出具体注释

数值计算大作业:最小二乘法拟合(Matlab实现)
拟合直线图像

 结论:根据拟合过程,可知图像中所有离散点到拟合直线绝对距离之和比其他所有直线都小。

3.利用抛物线进行最小二乘拟合,将拟合抛物线添加到离散点图形上

程序在附录中,并给出具体注释

数值计算大作业:最小二乘法拟合(Matlab实现)
拟合抛物线图像

 结论:根据拟合过程,可知图像中所有离散点到拟合抛物线的绝对距离之和的比其他所有抛物线都小

4.若某年的降水量是120cm,利用拟合直线估计当年的水流速度

% 若某年的降水量是 120cm,利用拟合直线估计当年的水流速度,并展示
RF_4=120;
FV_4=C(1)*1+C(2)*RF_4;
disp(FV_4);

数值计算大作业:最小二乘法拟合(Matlab实现)

结论:利用第二问拟合直线方程,可直接计算出当降水量为120cm时水流速度为19.0673m2/s文章来源地址https://www.toymoban.com/news/detail-470652.html

% least square fitting.m
% 设置两个一维向量,降水量RF和流速FV
RF=[88.9 108.5 104.1 139.7 127 94 116.8 99.1]';
FV=[14.6 16.7 15.3 23.2 19.5 16.1 18.1 16.6]';
%单独绘制离散图形
% plot(RF,FV,'r.')
% 写最小二乘拟合基函数
% 形成线性方程的系数矩阵,若采用直线进行拟合a=zeros(m,2),拟合函数为lsf_linear;用抛物线则为a=zeros(m,3),拟合函数为lsf_parabolic
m=length(RF);
a=zeros(m,3);
for i=1:m
  a(i,:)=lsf_parabolic(RF(i));
end
 b=FV;
% 法方程,以及求解各系数放置于C中
A=a'*a;
B=a'*b;
C=A\B;
%画图拟合曲线图像以及原离散图形,直线拟合y_nh=C(1)*1+C(2)*plotx;抛物线拟合则为y_nh=C(1)*1+C(2)*plotx+C(3)*plotx.^2;
plotx=85:0.01:140;
y_nh=C(1)*1+C(2)*plotx+C(3)*plotx.^2;
plot(RF,FV,'r.',plotx,y_nh);
grid on
xlabel('降雨量');
ylabel('流速');
% 若某年的降水量是 120cm,利用拟合直线估计当年的水流速度,并展示
% RF_4=120;
% FV_4=C(1)*1+C(2)*RF_4;
% disp(FV_4);
    function f=lsf_linear(x)
   % 直线最小二乘拟合
    f(1)=1;
    f(2)=x;
    end
function f=lsf_parabolic(x)
% 抛物线最小二乘拟合
f(1)=1;
f(2)=x;
f(3)=x^2;
end

到了这里,关于数值计算大作业:最小二乘法拟合(Matlab实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MATLAB数值计算——矩阵运算乘法、除法、乘方

    矩阵是线性代数的基本单元 矩阵含有M行N列数值 矩阵中的元素可以是实数或复数 矩阵相关的基本运算:加、减、内积、逆矩阵、转置、线性方程式、特征值、特征向量、矩阵分解 运算符: 注:矩阵的乘法运算中没有乘法交换律 运算符: * 注: x=B/A是方程x A=B的解。即x=A的逆

    2024年01月16日
    浏览(32)
  • 拟合算法之最小二乘法

    与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是追求一个函数(曲线),使得该曲线在某种准测下与所有的数据点最为接近,即曲线拟合最好(最小化损失函数)。 插值算法中,得到的多项式f(x)要经过所有的样本点。但是如果样本点太多,

    2024年02月04日
    浏览(39)
  • 最小二乘法的几种拟合函数

    目录 1.最小二乘法的原理和解决的问题 2.最小二乘法的公式解法 2.1  拟合h(x) = a * x 2.2 拟合 h(x) = a0 + a1*x 2.3拟合 h(x) = a0 + a1 *x + a3 * x^3  因为采用矩阵法来进行最小二乘法的函数拟合时,会出现系数矩阵的逆矩阵不存在的情况有一定的局限性,所以本篇对公式法进行简单说明

    2024年02月13日
    浏览(25)
  • C语言编程:最小二乘法拟合直线

    本文研究通过C语言实现最小二乘法拟合直线。 最小二乘法,简单来说就是根据一组观测得到的数值,寻找一个函数,使得函数与观测点的误差的平方和达到最小。在工程实践中,这个函数通常是比较简单的,例如一次函数或二次函数。 汽车上的毫米波雷达可以探测到其他目

    2024年02月12日
    浏览(28)
  • 一文速学-最小二乘法曲线拟合算法详解+项目代码

    目录 前言 一、曲线拟合策略 二、最小二乘法理论基础 1.残差 原理 特征 选取策略 2.最小二乘原则 定义 解法总览 三、最小二乘解法 1.确定函数类 2.求解方程 极小值原理: 求解方程组 定理 特例 四、代码实现 点关注,防走丢,如有纰漏之处,请留言指教,非常感谢 我们知道

    2024年02月06日
    浏览(35)
  • chatgpt赋能python:Python如何拟合直线:使用最小二乘法

    在数据分析和机器学习领域,拟合一个最佳的直线是很常见和有用的。Python中有很多库可以拟合直线,但最小二乘法是其中最常用的一种方法。在本文中,我们将介绍最小二乘法的原理和如何在Python中实现。 最小二乘法是一种常用的回归分析方法,目的是找到一条直线来拟合

    2024年02月08日
    浏览(43)
  • 【数值计算方法】曲线拟合与插值:Lagrange插值、Newton插值及其python/C实现

    目录 一、近似表达方式 插值(Interpolation) 拟合(Fitting) 投影(Projection) 二、插值 1. Lagrange插值 Lagrange插值公式 线性插值(n=1) 抛物插值(n=2) python实现 C语言实现 2. Newton插值 python实现 C语言实现         插值、拟合和投影都是常用的近似表达方式,用于对数据或函数进

    2024年02月02日
    浏览(31)
  • 【数学建模笔记】【第四讲(1)】拟合算法之最小二乘算法及其MATLAB实现

    与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所 有的数据点最为接近,即曲线拟合的最好(最小化损失函数) 【插值和拟合的区别】 插值算法中,得到的多项式f(x)要经过所有样本点。但

    2024年02月09日
    浏览(27)
  • 3D点云处理:用SVD分解法和最小二乘法拟合平面点云,求解平面方程

    本文主要介如何用SVD分解法和最小二乘法拟合平面点云,包含原理推导和代码 将空间中的离散点拟合为一个平面,就是使离散点到某个平面距离和最小的问题,可以将求解过程看作最优化的过程。 一个先验知识为拟合平面一定经过离散点的质心(离散点坐标的平均值)。平

    2024年02月03日
    浏览(128)
  • 曲线拟合的数值方法——《数值计算方法》

    《数值计算方法》系列总目录 第一章 误差序列实验 第二章 非线性方程f(x)=0求根的数值方法 第三章 CAD模型旋转和AX=B的数值方法 第四章 插值与多项式逼近的数值计算方法 第五章 曲线拟合的数值方法 第六章 数值微分计算方法 第七章 数值积分计算方法 第八章 数值优化方法

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包