| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:[求助]帮忙改个程序
只看楼主 加入收藏
oror
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2004-10-31
收藏
 问题点数:0 回复次数:1 
[求助]帮忙改个程序

题:用最小二乖法做一個回归方程

1.写出回归方程 (10个点中有1个奇异点明显偏离曲线)y=kx+b. 求解出K和B 2.用C语言编程。

x=1, 2 , 3, 4, 5, 8, 10, 15, 20, 30

y=4, 4.6, 5.1, 5.4, 6.1, 8.4 ,8.6,11.0,13.4,18.6

以下了用VC做的.

哪位能帮我改成标准C 语言的???

2004-10-31 21:29
oror
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2004-10-31
收藏
得分:0 

#include "stdafx.h" float *Approx(float *x,float *y,int m,int n); float *ColPivot(float *a,int n); float power(int i,float v);

int main(int argc, char* argv[]) { int i; float *a; float x[16] ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; float y[16] ={4.00,6.40,8.00,8.80,9.22,9.50,9.70,9.86,10.00,10.20,10.32,10.42,10.50,10.55,10.58,10.60}; a = Approx(x,y,16,2); for(i=0;i<=2;i++) cout<<"a["<<i<<"] = "<<a[i]<<endl; printf("Hello World!\n"); return 0; }

float *Approx(float *x,float *y,int m,int n) { float *c,*a; int i,j,t; c=(float *)malloc((n+1)*(n+2)*sizeof(float)); for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { *(c+i*(n+2)+j)=0.0; for(t=0;t<=m-1;t++) *(c+i*(n+2)+j) += power(i+j,x[t]); } *(c+i*(n+2)+n+1)=0.0; for(j=0;j<=m-1;j++) *(c+i*(n+2)+n+1) += y[j]*power(i,x[j]); } a=ColPivot((float*)c,n+1); free(c); return a; }

float *ColPivot(float *a,int n) { int i,j,t,k; float *x,*c,p; x=(float*)malloc(n*sizeof(float)); c=(float*)malloc(n*(n+1)*sizeof(float));

for(i=0;i<=n-1;i++) for(j=0;j<=n;j++) *(c+i*(n+1)+j)=(*(a+i*(n+1)+j)); for(i=0;i<=n-2;i++) { k=i; for(j=i+1;j<=n-1;j++) if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i)))) k=j; if(k!=i) for(j=i;j<=n;j++) { p=*(c+i*(n+1)+j); *(c+i*(n+1)+j)=*(c+k*(n+1)+j); *(c+k*(n+1)+j)=p; } for(j=i+1;j<n;j++) { p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i)); for(t=i;t<n;t++) *(c+j*(n+1)+t)=*(c+j*(n+1)+t)-p*(*(c+i*(n+1)+t)); *(c+j*(n+1)+n) -= *(c+i*(n+1)+n)*p; } } for(i=n-1;i>=0;i--) { for(j=n-1;j>=i+1;j--) *(c+i*(n+1)+n)-=x[j]*(*(c+i*(n+1)+j)); x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i)); } free(c); return x; }

float power(int i,float v) { float a=1.0; while(i--) a*=v; return a; }

2004-10-31 21:30
快速回复:[求助]帮忙改个程序
数据加载中...
 
   



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

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