最小平方法在直线拟合中怎么运用?

如题所述

  最小二乘法
  在我们研究两个变量(x, y)之间的相互关系时,通常可以得到一系列成对的数据(x1, y1、x2, y2... xm , ym);将这些数据描绘在x -y直角坐标系中(如图1), 若发现这些点在一条直线附近,可以令这条直线方程如(式1-1)。
  Y计= a0 + a1 X (式1-1)
  其中:a0、a1 是任意实数
  为建立这直线方程就要确定a0和a1,应用《最小二乘法原理》,将实测值Yi与利用(式1-1)计算值(Y计=a0+a1X)的离差(Yi-Y计)的平方和〔∑(Yi - Y计)2〕最小为“优化判据”。
  令: φ = ∑(Yi - Y计)2 (式1-2)
  把(式1-1)代入(式1-2)中得:
  φ = ∑(Yi - a0 - a1 Xi)2 (式1-3)
  当∑(Yi-Y计)平方最小时,可用函数 φ 对a0、a1求偏导数,令这两个偏导数等于零。
  (式1-4)
  (式1-5)
  亦即:
  m a0 + (∑Xi ) a1 = ∑Yi (式1-6)
  (∑Xi ) a0 + (∑Xi2 ) a1 = ∑(Xi, Yi) (式1-7)
  得到的两个关于a0、 a1为未知数的两个方程组,解这两个方程组得出:
  a0 = (∑Yi) / m - a1(∑Xi) / m (式1-8)
  a1 = [∑Xi Yi - (∑Xi ∑Yi)/ m] / [∑Xi2 - (∑Xi)2 / m)] (式1-9)
  这时把a0、a1代入(式1-1)中, 此时的(式1-1)就是我们回归的元线性方程即:数学模型。
  在回归过程中,回归的关联式是不可能全部通过每个回归数据点(x1, y1、 x2, y2...xm,ym),为了判断关联式的好坏,可借助相关系数“R”,统计量“F”,剩余标准偏差“S”进行判断;“R”越趋近于 1 越好;“F”的绝对值越大越好;“S”越趋近于 0 越好。
  R = [∑XiYi - m (∑Xi / m)(∑Yi / m)]/ SQR{[∑Xi2 - m (∑Xi / m)2][∑Yi2 - m (∑Yi / m)2]} (式1-10) *
  在(式1-1)中,m为样本容量,即实验次数;Xi、Yi分别任意一组实验X、Y的数值。微积分应用课题一 最小二乘法
  从前面的学习中, 我们知道最小二乘法可以用来处理一组数据, 可以从一组测定的数据中寻求变量之间的依赖关系, 这种函数关系称为经验公式. 本课题将介绍最小二乘法的精确定义及如何寻求 与 之间近似成线性关系时的经验公式. 假定实验测得变量之间的 个数据 , , …, , 则在 平面上, 可以得到 个点 , 这种图形称为“散点图”, 从图中可以粗略看出这些点大致散落在某直线近旁, 我们认为 与 之间近似为一线性函数, 下面介绍求解步骤.
  考虑函数 , 其中 和 是待定常数. 如果 在一直线上, 可以认为变量之间的关系为 . 但一般说来, 这些点不可能在同一直线上. 记 , 它反映了用直线 来描述 , 时, 计算值 与实际值 产生的偏差. 当然要求偏差越小越好, 但由于 可正可负, 因此不能认为总偏差 时, 函数 就很好地反映了变量之间的关系, 因为此时每个偏差的绝对值可能很大. 为了改进这一缺陷, 就考虑用 来代替 . 但是由于绝对值不易作解析运算, 因此, 进一步用 来度量总偏差. 因偏差的平方和最小可以保证每个偏差都不会很大. 于是问题归结为确定 中的常数 和 , 使 为最小. 用这种方法确定系数 , 的方法称为最小二乘法.
  由极值原理得 , 即
  解此联立方程得
  (*)
  问题 I 为研究某一化学反应过程中, 温度 ℃)对产品得率 (%)的影响, 测得数据如下:
  温度 ℃)
  100 110 120 130 140 150 160 170 180 190
  得率 (%)
  45 51 54 61 66 70 74 78 85 89
  (1) 利用“ListPlot”函数, 绘出数据 的散点图(采用格式: ListPlot[{ , , …, }, Prolog->AbsolutePointSize[3]] );
  (2) 利用“Line”函数, 将散点连接起来, 注意观察有何特征? (采用格式: Show[Graphics[Line[{ , , …, }]] , Axes->True ]) ;
  (3) 根据公式(*), 利用“Apply”函数及集合的有关运算编写一个小的程序, 求经验公式 ;
  (程序编写思路为: 任意给定两个集合A (此处表示温度)、B(此处表示得率), 由公式(*)可定义两个二元函数(集合A和B为其变量)分别表示 和 . 集合A元素求和: Apply[Plus,A] 表示将加法施加到集合A上, 即各元素相加, 例如Apply[Plus,{1,2,3}]=6;Length[A]表示集合A 元素的个数, 即为n; A.B表示两集合元素相乘相加;A*B表示集合A与B元素对应相乘得到的新的集合.)
  (4) 在同一张图中显示直线 及散点图;
  (5) 估计温度为200时产品得率.
  然而, 不少实际问题的观测数据 , , …, 的散点图明显地不能用线性关系来描叙, 但确实散落在某一曲线近旁, 这时可以根据散点图的轮廓和实际经验, 选一条曲线来近似表达 与 的相互关系.
  问题 II 下表是美国旧轿车价格的调查资料, 今以 表示轿车的使用年数, (美元)表示相应的平均价格, 求 与 之间的关系.
  使用年数
  1 2 3 4 5 6 7 8 9 10
  平均价格
  2651 1943 1494 1087 765 538 484 290 226 204
  (1) 利用“ListPlot”函数绘出数据 的散点图, 注意观察有何特征?
  (2) 令 , 绘出数据 的散点图, 注意观察有何特征?
  (3) 利用“Line”函数, 将散点 连接起来, 说明有何特征?
  (4) 利用最小二乘法, 求 与 之间的关系;
  (5) 求 与 之间的关系;
  (6) 在同一张图中显示散点图 及 关于 的图形.
  思考与练习
  1. 假设一组数据 : , , …, 变量之间近似成线性关系, 试利用集合的有关运算, 编写一简单程序: 对于任意给定的数据集合 , 通过求解极值原理所包含的方程组, 不需要给出 、 计算的表达式, 立即得到 、 的值, 并就本课题 I /(3)进行实验.
  注: 利用Transpose函数可以得到数据A的第一个分量的集合, 命令格式为:
  先求A的转置, 然后取第一行元素, 即为数据A的第一个分量集合, 例如
  (A即为矩阵 )
  = (数据A的第一个分量集合)
  = (数据A的第二个分量集合)
  B-C表示集合B与C对应元素相减所得的集合, 如 = .
  2. 最小二乘法在数学上称为曲线拟合, 请使用拟合函数“Fit”重新计算 与 的值, 并与先前的结果作一比较.
  注: Fit函数使用格式:
  
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-13
//最小二乘法直线拟合
BOOL CalculateLineKB(CFoldPointList *m_FoldList,double &k,double &b)
{
//最小二乘法直线拟合
//m_FoldList为关键点(x,y)的链表
//拟合直线方程(Y=kX+b)

if(m_FoldList==NULL)return FALSE;
long lCount=m_FoldList->GetCount();
if(lCount<2)return FALSE;
CFoldPoint *pFold;
double mX,mY,mXX,mXY,n;
mX=mY=mXX=mXY=0;
n=lCount;
POSITION pos=m_FoldList->GetHeadPosition();
while(pos != NULL)
{
pFold=m_FoldList->GetNext(pos);
mX+=pFold->X;
mY+=pFold->Y;
mXX+=pFold->X*pFold->X;
mXY+=pFold->X*pFold->Y;
}
if(mX*mX-mXX*n==0)return FALSE;
k=(mY*mX-mXY*n)/(mX*mX-mXX*n);
b=(mY-mX*k)/n;
return TRUE;
}本回答被网友采纳
第2个回答  2013-04-13
直线拟合中
相似回答