- 论坛徽章:
- 780
|
本帖最后由 Herowinter 于 2014-06-25 12:55 编辑
回复 1# wpd0508
不知道结果对不对,有错请指出,把大神提供的最小2乘法封装了下,
用来求数组a中a[1],..a[n]对应的系数a0,a1- #!/bin/bash
- awk -vl=5 '
- function least_square(a,n,a0,a1){
- for(x=1;x<=n;x++)
- s += a[x];
- avg = s/n;
- for(x=1; x<=n; x++)
- {
- y = a[x] - avg
- sx += x
- sy += y
- sxy += x * y
- sx2 += x * x
- }
- a0 = (sx2 * sy - sx * sxy) / (n * sx2 - sx * sx)
- a1 = (n * sxy - sx * sy) / (n * sx2 - sx * sx)
- }
-
- {
- sum = 0
- count = 0
- k = 0
- for(i=1;i<=NF;i++){
- a[++count]=$i
- if(count==l){
- least_square(a,l,a0,a1);
- sum=0;
- count=0;
- for(j=1;j<=l;j++){
- sum += a[j]-(a1*j+a0)^2
- }
- E[++k]=sqrt(sum);
-
- }
- }
- if(count>0){
- least_square(a,count,a0,a1);
- sum=0;
- for(j=1;j<=count;j++){
- sum += a[j]-(a1*j+a0)^2
- }
- E[++k]=sqrt(sum);
- }
- sum=0;
- for(i in E)
- sum += E[i]
- print sum/k
- }
-
- ' i
复制代码- cat i
- 1 2 4 5 6 13 141 3 11 13 44 11
- 1 2 4 5 6 7 8 9 10
复制代码 结果 |
|