| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1399 人关注过本帖
标题:请问求方差的程序怎么写啊(难在个数是未知的),越简单越好哦
只看楼主 加入收藏
ingprince
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-5-2
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:8 
请问求方差的程序怎么写啊(难在个数是未知的),越简单越好哦
求方差的程序怎么写啊(难在个数是未知的),请各位大侠不吝赐教
2011-05-02 11:40
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:7 
..
  sigma((xn-avg(x)) ^ 2)
= sigma(xn^2 - xn*avg(x) + avg(x) ^ 2)
= sigma(xn^2)*n - avg(x)*n * sigma(xn) + avg(xn)^2*n
= sum(xn^2) + sum(xn)^2 - sum(xn) * sum(xn) / n

不知道有没有推导错

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2011-05-02 11:52
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:7 
(a - b)^2 = a^2 - 2ab + b^2
御坂姐是不是差了一个系数?

这个概率论里有公式呀:
DX = EX^2 - (EX)^2
就是 x^2 的均值减去 x 均值的平方。

符号推法是:
DX = E(X-EX)^2 = E( X^2 - 2XEX + (EX)^2 ) = EX^2 - 2(EX)^2 + (EX)^2 = EX^2 - (EX)^2
和式推法是:(我用 a 表示 x 的平均值)
1/n * Σ(x - a)^2 = 1/n * Σ(x^2 - 2ax + a^2) = 1/n * Σ(x^2 - ax - a(x-a)) = (Σx^2)/n - a * (Σx)/n - 1/n * aΣ(x-a)
= (Σx^2)/n - a^2 - a/n * Σ(x-a)
最里用了 a = (Σx)/n 。另外 Σ(x-a) = Σx - Σa = Σx - na = 0
所以 方差 = (Σx^2)/n - a^2
2011-05-02 12:38
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
个数是未知的情况是不可能的,方差是已知样本的数字特征之一。
只能说是个数不是个定值呗。既可能是 3 也可能是 8。函数多传个参数过去就行了。循环次数用参数限定住。
2011-05-02 12:44
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
一种写法可能是这样:
程序代码:
#include <stdio.h>

double variance(double x[], int n)
{
    double sum = 0.0;
    double sos = 0.0;    // sum of square
    int i;

    for (i = 0; i < n; i++) {
        sum += x[i];
        sos += x[i] * x[i];
    }

    return sos/n - (sum/n * sum/n);
}

int main(int argc, char* argv[])
{
    double x[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    double y[5] = { 2, 4, 6, 8, 10 };
    double var_x = variance(x, 10);
    double var_y = variance(y, 5);

    printf("%lf\n%lf\n", var_x, var_y);

    return 0;
}
2011-05-02 13:10
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
没办法,偶的数学比较菜嘛

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2011-05-02 13:17
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:7 
#include <stdlib.h>
typedef int numType;
numType randNum()
{
    return rand();
}
main(int argc, char* argv[])
{
    int i, N = atoi(argv[1]);
    float m1 = 0.0, m2 = 0.0;
    numType x;

    for (i = 0; i < N; i++)
    {
        x = randNum();
        m1 += ((float) x) / N;
        m2 += ((float) x * x) / N;
    }
    printf("Std. deviation: %f\n", sqrt(m2 - m1 * m1));
}

一种实现可能是这样的 ,。

我就是真命天子,顺我者生,逆我者死!
2011-05-05 17:01
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用pangding在2011-5-2 13:10:18的发言:

一种写法可能是这样:
以前看书的时候都没有留意这样的题目,
不是楼主这道题,方差我还不会求呢。

还有,我完全看不懂某些人推导的是什么东西。

[ 本帖最后由 BlueGuy 于 2011-5-5 17:32 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2011-05-05 17:03
以中
Rank: 3Rank: 3
来 自:长沙
等 级:论坛游侠
帖 子:108
专家分:129
注 册:2010-4-13
收藏
得分:0 
方差好像是高一的内容。

道之所存,师之所存。
2011-05-09 10:52
快速回复:请问求方差的程序怎么写啊(难在个数是未知的),越简单越好哦
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025244 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved