- 論壇徽章:
- 780
|
本帖最后由 Herowinter 于 2014-06-25 14:38 編輯
回復 20# ly5066113
多謝大神指點,現(xiàn)在(i i) i=1,2,...5,得到的結果是y=x了。- #!/bin/bash
- awk -vl=5 '
- function least_square(a,n,a0,a1){
- s=0;sx=0;sy=0;sxy=0;sx2=0;
- for(x=1;x<=n;x++)
- s += a[x];
- avg = s/n;
- for(x=1; x<=n; x++)
- {
- y = a[x]
- 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)
- printf "###y = %s + %sx\n" ,a0 ,a1
- }
-
- {
- 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=1;i<=k;i++)
- sum += E[i]
- print sum/k
- }
-
- ' test2
復制代碼- ./test.sh
- ###y = -0.3 + 1.3x
- ###y = 75.2 + -13x
- ###y = 77 + -33x
- 8.37082
- ###y = 0 + 1x
- 3.872988
復制代碼- cat test2
- 1 2 4 5 6 13 141 3 11 13 44 11
- 1 2 3 4 5
復制代碼 |
|