最小二乘法

参考地址:http://zh.wikipedia.org/wiki/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95

今晚杨大神挂的那套Ural的题可把我们给坑坏了,就这道数学题YY了很久最后的结果是我无法求解.赛后给说了一下是最小二乘法,立即维基百科之,顿时恍然大悟, 最小二乘法求解的目标线性函数正好对应于我们要求的等差数列,真是坑爹啊.更坑爹的是照着最小二乘的方法去求解竟然还WA了几次.题目很是简单,但是通过这体现了自己数学知识储备的严重不足,今年暑假还是去我家旁边那大学去学数学去吧.苦逼的孩子啊...

#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 10010;
int arr[maxn], n;

int main() {

    double avert, avery;
    double b1, b0;
    scanf("%d", &n);
    avert = avery = 0.0;
    for(int i = 1; i <= n; ++i) {
        scanf("%d", &arr[i]);
        avert += i;
        avery += arr[i];
    }
    avert /= n; avery /= n;
    b1 = 0;
    double a, b;
    a = b = 0;
    for(int i = 1; i <= n; ++i) {
        a += (i - avert) * (arr[i] - avery);
        b += (i - avert) * (i - avert);
    }
    b1 = a * 1.0 / b;
    b0 = avery - b1 * avert;
    printf("%.7lf %.7lf\n", b0 + b1, b1);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值