最小二乘法拟合原理及代码的实现资料

上传人:f****u 文档编号:128305818 上传时间:2020-04-20 格式:PDF 页数:8 大小:160.92KB
返回 下载 相关 举报
最小二乘法拟合原理及代码的实现资料_第1页
第1页 / 共8页
最小二乘法拟合原理及代码的实现资料_第2页
第2页 / 共8页
最小二乘法拟合原理及代码的实现资料_第3页
第3页 / 共8页
最小二乘法拟合原理及代码的实现资料_第4页
第4页 / 共8页
最小二乘法拟合原理及代码的实现资料_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《最小二乘法拟合原理及代码的实现资料》由会员分享,可在线阅读,更多相关《最小二乘法拟合原理及代码的实现资料(8页珍藏版)》请在金锄头文库上搜索。

1、最小二乘法拟合原理及代码实现最小二乘法拟合原理及代码实现 1 最小二乘法定义 已知一组实验数据 xi yi i 0 1 2 m 且观测数据有误差 求自变量 x 与因变量 y 之间的函数关系 y F x 不要求 y F x 经过 所有点 而只要求在给定点的误差 i F xi yi i 0 1 2 m 按某种标准最小 度量的标准不同 将导致不同的结果 常用的准则有如下三 种 a 残差的最大绝对值为最小 00 min maxmaxiii i mi m yF x b 残差的绝对值之和最小 00 min mm iii ii yF x c 残差的平方和最小 22 00 min mm iii ii yF x

2、 其中 c 被称为最小二乘法原则 具体定义 已知一组数据 xi yi i 0 1 2 m 在函数类 1 n spanxx 中找到一个函数 ySx 是误差平方和最小 即 2 22 000 min mmm iii S x iii SxyS xy 这里 01 n n S xaa xa x n m 求最小二乘解 ySx 的方法 现要求一 0 n k nk k Sxa x 使得 22 000 min mmn k nikii iik ISxya xy 显然 2 00 mn k kii ik Ia xy 为 01 n a aa的多元函数 因此上述问题 即为求 01 n II a aa 的极值问题 多元函数的

3、求极值的必要条件 设函数 z f x y 在点 x0 y0 具有 偏导数 且在点 x0 y0 有极值 则它在该点的偏导数必然为零 由上述定理得 00 2 0 mn kk kiii ik j I a xy x a j 0 1 2 n 即 000 nmm kjj ikii kii xax y j 0 1 2 n 上式是关于 01 n a aa的线性方程组 用矩阵表示为 000 0 21 1 0000 12 0000 1 mmm n iii iii mmmm n iiiii iiii n mmmm nnnn iiiii iiii mxxy a xxxax y a xxxx y 可以证明 方程组的系数

4、矩阵式一个对称正定矩阵 故存在唯一解 令 00 21 000 12 000 1 mm n ii ii mmm n iii iii mmm nnn iii iii mxx xxx X xxx 0 1 n a a A a 0 0 0 m i i m ii i m n ii i y x y Y x y 则 1111 XAYXXAX YEAX YAX Y 可以算出 01 n a aa 其中 1 X 是X的逆矩阵 E是单位矩阵 还可以用消元法算出 01 n a aa 程序代码一般是用消元法算出 系数的 2 直线拟合 曲线拟合中最基本和最常用的是直线拟合 设x和y之间的 函数关系由直线方程 y a0 a1

5、x 给出 式中有两个待定参数 a0代表截距 a1代表斜率 对于等精 度测量所得到的 m 组数据 xi yi i 1 2 m xi值被认为 是准确的 所有的误差只联系着 yi 下面利用最小二乘法把观测数据拟合为直线 要求残差的平方 和最小 即 2 01 0 m ii i yaa x 应有 2 0101 00 0 2 0101 00 1 20 20 mm iiii ii mm iiii ii yaa xyaa x a yaa xyaa x a 整理得 01 2 01 ii iiii a maxy axaxx y 解方程 得 2 02 2 1 2 2 iiii i ii iii i ii xyxx

6、y a mxx mx yxy a mxx C 程序代码的实现 bool fnCalculateLineKB ref List mapFoldList ref double fk ref double fb double fmX 0 0 double fmY 0 0 double fmXX 0 0 double fmXY 0 0 double fn 0 0 if 0 mapFoldList Count return false long lCount mapFoldList Count if lCount 2 return false fn lCount foreach sAD PWR iter

7、 in mapFoldList fmX iter fAD fmY iter fPWR fmXX iter fAD iter fAD fmXY iter fAD iter fPWR if Math Abs fmX fmX fmXX fn 0 000001 return false fk fmY fmX fmXY fn fmX fmX fmXX fn fb fmY fmX fk fn return true 3 曲线拟合 三阶及以上曲线 代码实现 根据XAY 得出 我们需要算出矩阵X和矩阵Y 再对X进行矩阵 变换 得到消元后的矩阵 算出 01 n a aa 代码的实现 Function fnCur

8、veSimulate double n double T int M int N int xi ParaIn n 自变量数据数组 T 因变量数据数组 M 拟合公式的最高阶数 N 数据组数 xi 所返回系数值的对应参数 ParaOut 无 Return double Description 用于最小二乘法曲线拟合 public static double fnCurveSimulate double n double T int M int N int xi double b new double 10 20 double A new double 10 10 double B new doub

9、le 10 double x new double 10 double y new double 10 double t 0 0 int i 0 int j 0 int k 0 int l 0 算出X矩阵 for i 0 i M i for j 0 j N j t 1 for l 0 l i l t t n j b i j t for i 0 i M i for k 0 k M k t 0 for j 0 j N j t b i j b k j A i k t 算出Y矩阵 for i 0 i M i t 0 for j 0 j N j t T j b i j B i t 开始进行消元运算 for i 1 i M i A i 0 A i 0 A 0 0 for i 1 i M i for j i j M j t 0 for k 0 k i k t A k j A i k A i j A i j t if j 1 M t 0 for k 0 k i k t A k i A j 1 k A j 1 i A j 1 i t A i i y 0 B 0 for i 1 i M i t 0 for j 0 j 0 i t 0 for j i 1 j M j t A i j x j x i y i t A i i return x xi

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号