法线方程实现最小二乘拟合(Matlab)

2024-06-01 11:44

本文主要是介绍法线方程实现最小二乘拟合(Matlab),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题描述

利用法线方程实现最小二乘拟合。

二、实验目的

掌握法线方程方法的原理,能够利用法线方程完成去一组离散数据点的拟合。

三、实验内容及要求

  1. 对于下面的不一致系统,构造法线方程,计算最小二乘以及2-范数误差。
    [ 3 − 1 2 4 1 0 − 3 2 1 1 1 5 − 2 0 3 ] [ x 1 x 2 x 3 ] = [ 10 10 − 5 15 0 ] \left[\begin{array}{rrr} 3 & -1 & 2 \\ 4 & 1 & 0 \\ -3 & 2 & 1 \\ 1 & 1 & 5 \\ -2 & 0 & 3 \end{array}\right] \left[\begin{array}{r} x_1 \\ x_2 \\ x_3 \end{array}\right] = \left[\begin{array}{r} 10 \\ 10 \\ -5 \\ 15 \\ 0 \end{array}\right] 343121121020153 x1x2x3 = 10105150

    % 系数矩阵
    A = [3, -1, 2;4, 1, 0;-3, 2, 1;1, 1, 5;-2, 0, 3];% 右侧的常数矩阵
    B = [10; 10; -5; 15; 0];% 使用最小二乘法求解
    X = lsqlin(A, B);% 计算法线方程的系数
    a = X(1);
    b = X(2);
    c = X(3);fprintf('构造的法线方程: %.2fx + %.2fy + %.2fz\n', a, b, c);
    fprintf('最小二乘解: x1 = %.2f, x2 = %.2f, x3 = %.2f\n', X(1), X(2), X(3));% 计算2-范数误差
    error = norm(A * X - B, 2);
    fprintf('2-范数误差为: %.2f\n', error);
    
  2. 如下为日本2023 年的每月石油消耗数据。
    利用周期模型y = c1 + c2 * cos2𝜋 + c3 * sin2𝜋 + c4 * cos4𝜋进行拟合,并计算RMSE。

    monthoil use (10^6 bbl/day)
    Jan6.224
    Feb6.665
    Mar6.241
    Apr5.302
    May5.073
    Jun5.127
    Jul4.994
    Aug5.012
    Sep5.108
    Oct5.377
    Nov5.510
    Dec6.372
    % 输入数据
    month = 1:12;
    oil_use = [6.224, 6.665, 6.241, 5.302, 5.073, 5.127, 4.994, 5.012, 5.108, 5.377, 5.51, 6.372];% 构造周期模型
    A = [ones(12, 1), cos(2 * pi * month'/12), sin(2 * pi * month'/12), cos(4 * pi * month'/12)];% 使用最小二乘法求解
    c = lsqlin(A, oil_use);% 构造法线方程
    y_fit = c(1) + c(2) * cos(2 * pi * month/12) + c(3) * sin(2 * pi * month/12) + c(4) * cos(4 * pi * month/12);% 计算RMSE
    rmse = sqrt(mean((oil_use - y_fit).^2));fprintf('构造的法线方程: y = %.4f + %.4f * cos(2*pi*x/12) + %.4f * sin(2*pi*x/12) + %.4f * cos(4*pi*x/12)\n', c(1), c(2), c(3), c(4));
    fprintf('最小二乘解: c1 = %.4f, c2 = %.4f, c3 = %.4f, c4 = %.4f\n', c(1), c(2), c(3), c(4));
    fprintf('RMSE: %.4f\n', rmse);
    

四、算法原理

给出法线方程进行数据拟合的过程。

背景:
数据拟合是一种通过数学模型来近似描述和预测现有数据的方法。法线方程(Normal Equation)是一种常用于最小二乘法(Least Squares)的工具,用于找到最优拟合参数,以最小化观测数据与模型预测之间的误差。

法线方程的基本形式:
对于一个线性模型,假设我们有一个包含m个样本的矩阵X(设计矩阵)和一个包含目标变量的列向量y,线性模型可以表示为:

y = X β + ε y = X \beta + \varepsilon y=+ε

其中, y y y 是目标变量, X X X 是设计矩阵, β \beta β 是待求参数向量, ε \varepsilon ε 是误差向量。最小二乘法的目标是找到最优的 β \beta β,使得误差的平方和最小。

法线方程的推导:
法线方程通过对最小二乘问题的偏导数为零的条件进行求解而得到。对于线性回归问题,法线方程可以写作:

X T X β = X T y X^T X \beta = X^T y XT=XTy

其中, X T X^T XT 表示矩阵 X X X 的转置。解这个方程可以得到最优的参数向量 β \beta β

法线方程的拟合过程:

  1. 构造设计矩阵 (X): 将样本数据按照模型的形式构造成设计矩阵。每一行对应一个样本,每一列对应一个特征。

  2. 构造目标变量向量 (y): 将观测到的目标变量按照样本顺序构造成列向量。

  3. 计算法线方程: 使用法线方程 X T X β = X T y X^T X \beta = X^T y XT=XTy 求解参数向量 β \beta β。这可以通过直接求解方程或者使用矩阵运算库中的函数来完成。

  4. 得到最小二乘解: 将得到的参数向量 β \beta β 代入线性模型,得到最小二乘拟合的结果。

  5. 评估拟合效果: 可以使用各种评估指标,如均方根误差(RMSE)、残差分析等,来评估拟合模型与实际数据之间的拟合质量。

优势和注意事项:

  • 优势: 法线方程提供了一种解决最小二乘问题的直观数学方法,具有简单、清晰的数学推导过程。

  • 注意事项: 在实际应用中,需要确保模型假设的合理性,避免过拟合或欠拟合。此外,若设计矩阵 X T X X^T X XTX 不可逆,可能需要考虑正则化方法。

总结:
法线方程作为最小二乘法的数学基础,为数据拟合提供了可靠的理论支持。通过构造法线方程,我们能够得到最优参数,实现对数据的准确拟合。在实际应用中,理解法线方程的原理对于建立有效的拟合模型至关重要。

五、测试数据及结果
1.给出构造的法线方程、最小二乘解、2-范数误差;
请添加图片描述

2.给出构造的法线方程、最小二乘解、RMSE.
请添加图片描述

六、总结与思考

法线方程作为最小二乘法的数学基础,为数据拟合提供了可靠的理论支持。通过构造法线方程,我们能够得到最优参数,实现对数据的准确拟合。在实际应用中,理解法线方程的原理对于建立有效的拟合模型至关重要。

这篇关于法线方程实现最小二乘拟合(Matlab)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020920

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测