最小二乘法C#实现,简单代码

线性函数模型
典型的一类函数模型是线性函数模型。最简单的线性式是,写成矩阵式,为


直接给出该式的参数解:

 和 
其中,为t值的算术平均值。也可解得如下形式:


b1为斜率,b0为截距,可以先根据x,y数组,以及上面的公式先计算出斜率,再计算截距。
因为原来参考代码中,返回为一个数组,根据与原来代码的兼容性,调用LinearResult(double[],double[])方法返回是一个数组。result[0]为斜率,result[1]为截距。

 class Linear
    {
        public double[] LinearResult(double[] arrayX, double[] arrayY)
        {
            double[] result = { 0, 0 };
 
            if (arrayX.Length == arrayY.Length)
            {
                double averX = arrayX.Average();
                double averY = arrayY.Average();
                result[0] = Scale(averX, averY, arrayX, arrayY);
                result[1] = Offset(result[0],averX,averY);
            }
 
            return result;
        }
 
        private double Scale(double averX, double averY, double[] arrayX, double[] arrayY)
        {
            double scale = 0;
            if (arrayX.Length == arrayY.Length)
            {
                double Molecular = 0;
                double Denominator = 0;
                for (int i = 0; i < arrayX.Length; i++)
                {
                    Molecular += (arrayX[i] - averX) * (arrayY[i] - averY);
                    Denominator += Math.Pow((arrayX[i] - averX), 2);
                }
                scale = Molecular / Denominator;
            }
 
            return scale;
        }
 
        private double Offset(double scale, double averX,double averY)
        {
            double offset = 0;
            offset = averY - scale * averX;
            return offset;
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值