最小二乘法算法

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

拟合

在实际问题中,常常给定一组测定的离散数据, xi,yix_i, y_ixi​,yi​, 欲求自变量和因变量的近似表达式. 由于测量值本身就带有误差,并且测量数据往往数据量很大,因此使用插值法工作量会很大,效果也往往不好,解决该类问题最常用的方法就是最小二乘法. 下面通过一个简单的例题进行说明.









综上对于给定的拟合数据x和yx和yx和y我们只需要构造出他们对应的矩阵,那么我们便可以通过矩阵的逆运算得到系数矩阵aaa

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100;
double x[maxn][maxn],y[maxn][maxn],maze[maxn][maxn],w[maxn],inv[maxn][maxn];
double yy[maxn],a[maxn];
//按第一行展开计算|A|
double getA(double arcs[maxn][maxn],int n)
{if(n==1){return arcs[0][0];}double ans = 0;double temp[maxn][maxn]={0.0};int i,j,k;for(i=0;i<n;i++){for(j=0;j<n-1;j++){for(k=0;k<n-1;k++){temp[j][k] = arcs[j+1][(k>=i)?k+1:k];}}double t = getA(temp,n-1);if(i%2==0){ans += arcs[0][i]*t;}else{ans -=  arcs[0][i]*t;}}return ans;
}
//计算每一行每一列的每个元素所对应的余子式,组成A*
void  getAStart(double arcs[maxn][maxn],int n,double ans[maxn][maxn])
{if(n==1){ans[0][0] = 1;return;}int i,j,k,t;double temp[maxn][maxn];for(i=0;i<n;i++){for(j=0;j<n;j++){for(k=0;k<n-1;k++){for(t=0;t<n-1;t++){temp[k][t] = arcs[k>=i?k+1:k][t>=j?t+1:t];}}ans[j][i]  =  getA(temp,n-1);if((i+j)%2 == 1){ans[j][i] = - ans[j][i];}}}
}
//得到给定矩阵src的逆矩阵保存到des中。
bool GetMatrixInverse(double src[maxn][maxn],int n,double des[maxn][maxn])
{double flag=getA(src,n);double t[maxn][maxn];if(flag==0){return false;}else{getAStart(src,n,t);for(int i=0;i<n;i++){for(int j=0;j<n;j++){des[i][j]=t[i][j]/flag;}}}return true;
}
int main()
{int m,n;// freopen("txt/li4-1.txt","r",stdin);// freopen("txt/li4-1_out.txt","w+",stdout);//freopen("txt/ti4-1.txt","r",stdin);//freopen("txt/ti4-1_out.txt","w+",stdout);freopen("txt/li4-2.txt","r",stdin);freopen("txt/li4-2_out.txt","w+",stdout);while(~scanf("%d",&m)) {for(int i=0;i<m;i++) x[i][0] = 1;for(int i=0;i<m;i++) y[i][0] = 1;for(int i=0;i<m;i++) scanf("%lf",&x[i][1]);for(int i=0;i<m;i++) scanf("%lf",&y[i][1]);for(int i=0;i<m;i++) scanf("%lf",&w[i]);//printf("Weidu :\n");scanf("%d",&n);for(int i=2;i<2*n-1;i++) {for(int j=0;j<m;j++) {x[j][i] = x[j][i-1]*x[j][1];y[j][i] = y[j][i-1]*y[j][1];}}printf("矩阵 X[][]\n");for(int i=0;i<n;i++) {for(int j=0;j<n;j++) {maze[i][j] = 0;for(int k=0;k<m;k++) {maze[i][j] += w[k]*x[k][i+j];}printf("%.2f ",maze[i][j]);}printf("\n");}printf("矩阵 Y[][]\n");for(int i=0;i<n;i++) {yy[i] = 0;for(int j=0;j<m;j++) {yy[i] += w[j]*x[j][i]*y[j][1];}printf("%.2f\n",yy[i]);}printf("矩阵 X[][]的逆\n");if(GetMatrixInverse(maze,n,inv)) {for(int i=0;i<n;i++) {for(int j=0;j<n;j++) printf("%.2f ",inv[i][j]);printf("\n");}}printf("系数矩阵 a[][]\n");for(int i=0;i<n;i++) {a[i] = 0;for(int j=0;j<n;j++) {a[i] += inv[i][j] * yy[j];}printf("%.2f\n",a[i]);}}return 0;
}

[数值分析]离散数据拟合-最小二乘法相关推荐

  1. 非线性最小二乘法 python_[数值计算] 数据拟合——非线性最小二乘法

    前面分析了 线性最小二乘 的解法YcoFlegs:[数值计算] 数据拟合--线性最小二乘法​zhuanlan.zhihu.com 现在来看另一个问题:非线性最小二乘法 1. 定义 首先是如何定义这里这 ...

  2. Matab拟合离散数据

    Matab拟合离散数据:给定多个离散点,进行曲线拟合并绘图. 方法一:曲线拟合工具箱 cftool 命令窗口输入,打开曲线拟合工具箱: // cftool 输入x,y坐标数值: 选取x,y数值,选取拟 ...

  3. 数据拟合的最小二乘法 python实现

    数据拟合的最小二乘法 <计算机科学计算>张宏伟 第二版 第五章习题13 用最小二乘法求拟合下列数据的二次多项式 xi yi 1 10 3 5 4 4 5 2 6 1 7 1 8 2 9 3 ...

  4. 工程数学(数值分析)第五讲:数据拟合

    文章目录 第五讲:数据拟合 最小二乘拟合直线 最小二乘拟合多项式 一般最小二乘拟合问题 最佳平方逼近 第五讲:数据拟合 最小二乘拟合直线 最小二乘拟合多项式 一般最小二乘拟合问题 最佳平方逼近 利用正 ...

  5. COMSOL离散数据的插值拟合,并对插值函数特定点求值求积分

    1[离散数据获取] a.首先先获得数据,我这里用的物理场中的一维绘图组的数据(注:虽然看似光滑曲线,但都是离散数据点组成的). b.右键单击线图结果图,[复制到表格] 现在我们就获得了一系列离散数据, ...

  6. 怎么用计算机拟合数据,数据拟合的几个应用实例-毕业论文.doc

    本科毕业设计(论文) 数据拟合的几个使用实例 燕 山 大 学 年 月 本科毕业设计(论文) 数据拟合的几个使用实例 学 院: 专 业: 学生姓名: 学 号: 指导教师: 答辩日期: 燕山大学毕业设计任 ...

  7. Python小白的数学建模课-23.数据拟合全集

    拟合是用一个连续函数(曲线)靠近给定的离散数据,使其与给定的数据相吻合. 数据拟合的算法相对比较简单,但调用不同工具和方法时的函数定义和参数设置有所差异,往往使小白感到困惑. 本文基于 Scipy 工 ...

  8. matlab数据拟合语句,Matlab数据拟合程序 - 范文中心

    课程设计名称: 设计二:数据拟合 指导教师: 张莉 课程设计时数: 6 课程设计设备:安装了Matlab .C ++软件的计算机 课程设计日期: 实验地点: 第五教学楼北902 课程设计目的: 1. ...

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

    [学习网址:MOOC---郑州轻工业大学---数学建模与实验]数学建模专栏 笔记01[第1.2章][概述.软件介绍] 笔记02[第3章][数据处理方法] 笔记03[第4章][规划模型] 笔记04[第5 ...

最新文章

  1. iOS 关于pods-frameworks.sh:permission denied报错的解决
  2. DeepMind让AI变身天才数学家!首次提出两大数学猜想,登Nature封面
  3. Spring JDBC最佳实践(2)
  4. 额外参数_Pytorch获取模型参数情况的方法
  5. blender教学记录
  6. ubuntu下chromium 安装flash player
  7. java placeholder_java swing JTextField设置PlaceHolder
  8. 谜题40:不情愿的构造器
  9. 远程连接ubuntu的MongoDB遇到的坑
  10. Octotree插件
  11. 网络渗透资料大全单——漏洞库篇
  12. 动态切换 web 报表中的统计图类型
  13. VSS(Visual SourceSafe)使用方法
  14. 各种欢喜怒笑表情符号,聊天时候用
  15. 简易2D横版RPG游戏制作
  16. 计算机中的正负数表示
  17. 51单片机与LCD1602接口电路与程序
  18. Ubuntu 16.04.3 LTS操作系统安全加固
  19. Karatsuba-Ofman乘法器
  20. 《评标专家和评标专家库管理暂行办法》(发改委第29号 )

热门文章

  1. ffmpegguitool下载不了_-非等宽unicode 点阵字库工具(GuiTool)下载1.06 -旋风软件园...
  2. 友链(欢迎加友链!)
  3. 天天团购--源码目录结构
  4. 软件工程学习(二)软件架构4+1视图
  5. ChatGPT技术原理 第十四章:未来发展方向
  6. 原来Python还有这样的骚操作
  7. IEEE期刊投稿页数限制及版面费说明等问题
  8. 印象笔记字体设置 Mac
  9. 高中数学数列错位相减压轴大题_错位相减法秒杀公式
  10. 空间滤波 - 锐化处理 - 一阶差分算法(Sobel、Scharr算子)