法线方程实现最小二乘拟合(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.
请添加图片描述

六、总结与思考

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SQL学习进阶】从入门到高级应用(九)

文章目录 子查询什么是子查询where后面使用子查询from后面使用子查询select后面使用子查询exists、not existsin和exists区别 union&union alllimit 🌈你好呀!我是 山顶风景独好 💕欢迎来到我的博客,很高兴能够在这里和您见面…

计算机网络——如何保证 TCP 传输的可靠性

TCP 是传输层上的协议,它是可靠的,面向连接的。 概括 1. 设置传输格式,包括分为 TCP 段、使用校验和、使用序列号 2. 数据丢失之后的重传,超时重传、快速重传、SACK 选择确认、D-SACK 重复选择确认 3. 流量控制,控…

研发效能DevOps: Ubuntu 部署 JFrog 制品库

目录 一、实验 1.环境 2.Ubuntu 部署 JFrog 制品库 3.Ubuntu 部署 postgresql数据库 4.Ubuntu 部署 Xray 5. 使用JFrog 增删项目 二、问题 1.Ubuntu 如何通过apt方式部署 JFrog 制品库 2.Ubuntu 如何通过docker方式部署 JFrog 制品库 3.安装jdk报错 4.安装JFrog Ar…

Jenkins常用插件与应用详解

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Jenkins是一个平台我们通过安装插件来解决我们想要完成的任务 1、Jenkins常用插件 Allure&#…

如何用ChatGPT上热门:完整使用教程与写作技巧

1. ChatGPT概述修订 ChatGPT是一款基于深度神经网络的语言生成技术,能够协助用户创造出各类高品质的文字材料,适宜广泛的应用场景,如编撰文章、文学创作及社交媒体内容生成。 2. 利用ChatGPT生成热门内容的基本步骤 为了有效利用ChatGPT创作…

python实现——综合类型数据挖掘任务(无监督的分类任务)

综合类型数据挖掘任务 航空公司客户价值分析。航空公司客户价值分析。航空公司客户价值分析。航空公司已积累了大量的会员档案信息和其乘坐航班记录(air_data.csv),以2014年3月31日为结束时间抽取两年内有乘机记录的所有客户的详细数据。利用…

苍穹外卖数据可视化

文章目录 1、用户统计2、订单统计3、销量排名Top10 1、用户统计 所谓用户统计,实际上统计的是用户的数量。通过折线图来展示,上面这根蓝色线代表的是用户总量,下边这根绿色线代表的是新增用户数量,是具体到每一天。所以说用户统计…

关系数据库:关系运算

文章目录 关系运算并(Union)差(Difference)交(Intersection)笛卡尔积(Extended Cartesian Product)投影(projection)选择(Selection)除…

鹤城杯 2021 流量分析

看分组也知道考http流量 是布尔盲注 过滤器筛选http流量 将流量包过滤分离 http tshark -r timu.pcapng -Y "http" -T json > 1.json这个时候取 http.request.uri 进一步分离 http.request.uri字段是我们需要的数据 tshark -r timu.pcapng -Y "http&quo…

C++ 混合运算的类型转换

一 混合运算和隐式转换 257 整型2 浮点5 行吗?成吗?中不中? C 中允许相关的数据类型进行混合运算。 相关类型。 尽管在程序中的数据类型不同,但逻辑上进行这种运算是合理的相关类型在混合运算时会自动进行类型转换,再…

【会议征稿】2024年无人驾驶与智能传感技术国际学术会议(ADIST 2024)

2024年无人驾驶与智能传感技术国际学术会议(ADIST 2024)将于2024年6月28-30日在珠海召开。ADIST 2024旨在搭建学术资源共享平台,加强中外学术合作,促进自动驾驶和智能传感技术的发展,促进全球研究人员、开发人员、工程…

免费实现网站HTTPS访问

HTTPS(Hypertext Transfer Protocol Secure)是一种基于SSL协议的HTTP安全协议,旨在为客户端(浏览器)与服务器之间的通信提供加密通道,确保数据在传输过程中的保密性、完整性和身份验证。与传统的HTTP相比&a…

《云原生监控》-prometheus监测技术方案

部署环境 A主机: 系统: CentOS 7 应用: Docker( Prometheus Grafana Alertmanager CAdvisor ) 主机( Node Exporter Consul Confd ) B主机: 系统: CentOS 7 应用: Docker( CAdvisor ) 主机( Node Exporter ) 总体图 下载: Confd链接(0.16.0)…

【C++】数据结构:哈希桶

哈希桶(Hash Bucket)是哈希表(Hash Table)实现中的一种数据结构,用于解决哈希冲突问题。哈希表是一种非常高效的数据结构,它通过一个特定的函数(哈希函数)将输入数据(通常…

jenkins插件之plot

plot是一个生成图表的插件,这里我用于可视化phploc统计的数据 插件安装 进入 Dashboard --> 系统管理 --> 插件管理 --> Available plugins 搜索plot安装生成phploc分析数据 Dashboard --> 您的项目 --> Configuration点击 Build Steps点击 增加构…

一文读懂存内计算与近存计算的分类与应用

存内计算与近存计算-基础理论及分类 技术基础知识和分类 "近存计算"与"存内计算"易混淆,本章明晰其分类,并比较各内存驱动方法的独特优势。可计算存储器设备可作分立加速器或替代现有存储模块。我们深入剖析每种方法的利弊&#xf…

ctfshow web 月饼杯II

web签到 <?php //Author:H3h3QAQ include "flag.php"; highlight_file(__FILE__); error_reporting(0); if (isset($_GET["YBB"])) {if (hash("md5", $_GET["YBB"]) $_GET["YBB"]) {echo "小伙子不错嘛&#xff…

App自动化测试_Python+Appium使用手册

一、Appium的介绍 Appium是一款开源的自动化测试工具&#xff0c;支持模拟器和真机上的原生应用、混合应用、Web应用&#xff1b;基于Selenium二次开发&#xff0c;Appium支持Selenium WebDriver支持的所有语言&#xff08;java、 Object-C 、 JavaScript 、p hp、 Python等&am…

thinkphp6 自定义的查询构造器类

前景需求&#xff1a;在查询的 时候我们经常会有一些通用的&#xff0c;查询条件&#xff0c;但是又不想每次都填写一遍条件&#xff0c;这个时候就需要重写查询类&#xff08;Query&#xff09; 我目前使用的thinkphp版本是6.1 首先自定义CustomQuery类继承于Query <?p…