最小二乘法拟合任意次曲线

上传人:桔**** 文档编号:431493671 上传时间:2022-07-11 格式:DOCX 页数:4 大小:11.01KB
返回 下载 相关 举报
最小二乘法拟合任意次曲线_第1页
第1页 / 共4页
最小二乘法拟合任意次曲线_第2页
第2页 / 共4页
最小二乘法拟合任意次曲线_第3页
第3页 / 共4页
最小二乘法拟合任意次曲线_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《最小二乘法拟合任意次曲线》由会员分享,可在线阅读,更多相关《最小二乘法拟合任意次曲线(4页珍藏版)》请在金锄头文库上搜索。

1、最小二乘法拟合任意次曲线(C# )说明: 代码较为简洁没有过多的说明,如有不明白之处可查阅相关最小二 乘法计算步骤资料和求解线性方程组的资料。另外该方法只能实现 二元 N 次拟合,多元方程不适用。以下是最小二乘法类的实现:public class MatrixEquati onprivate double, gaussMatrix;private int coe;public MatrixEquation()public MatrixEquation(double arrX, double arrY, int n)coe = n;gaussMatrix= GetGauss(GetXPowSum

2、(arrX, n), GetXPowYSum(arrX, arrY, n), n);public double, GetGaussMatrix()return gaussMatrix;public double GetResult()return ComputeGauss(gaussMatrix, coe);/ /计算获取x散点的幕次和数组/ / x 散点序列 / 函数拟合次数/ protected double GetXPowSum(double arrX, int n)int m = arrX.Le ngth;/X 散点的个数double xPow = new double2 * n +

3、1; /存储 X 散点的幕次值for (int i = 0; i xPow.Length; i+)if (i = 0)xPowi = m;else/计算 x 的 i 次方和 double max = 0;for (int j = 0; j m; j+)if (arrXj = 0) max = max + 1;else max = max + Math.Pow(arrXj, i);xPowi =Math.Round( max,4);return xPow;/ Ill计算获取xy的幕次和序列/ Ill x散点序列Ill y散点序列/ 拟合曲线次 数lll protected double GetX

4、PowYSum(double arrX, double arrY, int n) int m = arrX.Le ngth;/X 散点的个数double xyPow = new doublen + 1; /仓储 X 散点的幕次值 for (int i = 0; i xyPow.Length; i+)/计算 xy 的 i 次方和 double max = 0; for (int j = 0; j m; j+) if (arrXj = 0)max = max + 1;elsemax = max + Math.Pow(arrXj, i) * arrYj;xyPowi =Math.Round( max

5、,4);return xyPow;/ /获取高斯矩阵(增广矩阵)/ / X 的幕次和 / XY 的幕次和 / 拟合曲线次 数/ protected double, GetGauss(double arrX, double arrXY, int n) double, gauss = new doublen+1, n + 2;for (int i = 0; i n + 1; i+)int j;int m = i;for (j = 0; j n + 1; j+)gaussi, j = arrXm;m+;gaussi,j = arrXYi;return gauss;/ /求解拟合曲线的系数/ / /

6、方程次数/ protected double ComputeGauss(double, gauss, int n) double a = new doublen + 1;double s;int matrixLine = n + 1;for (int i = 0; i n + 1; i+)ai = 0;/循环每列for (int j = 0; j matrixLine; j+)/每列 J 行以后的绝对值最大值double max = 0;int k = j;for (int i = j; i max)max = gaussi, j;k = i;/判断 j 行否为最大值行若不是将 j 行调换为最

7、大值行if (k != j)double temp;for (int m = j; m matrixLine+1; m+)temp = gaussj, m;gaussj, m = gaussk, m; gaussk, m = temp;if (max = 0)/奇异矩阵无解return a;/进行初等行变换 得到上三角矩阵for (int i = j + 1; i matrixLine; i+)s = gaussi, j;for (int m = j; m = 0; i-)s = 0;for (int j = i + 1; j matrixLine; j+)s += gaussi, j * aj;ai =Math.Round( (gaussi, matrixLine - s) / gaussi, i,6);/返回方程的解 即拟合曲线的系数 return a;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

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