求一元线性回归分析的c语言代码

[复制链接]
查看11 | 回复1 | 2008-5-12 01:26:15 | 显示全部楼层 |阅读模式
一元线性回归:y=a*x+b其中(x,y)给定值,还有a,b未知。一元线性那么你就要假定a或b为某个常数。在此只考虑整数范围。例:y=11,x=20、假定b=0时a=5.5 (抛弃)1、假定b=1时a=52、假定b=2时a=4.5 (抛弃)3、假定b=3时a=44、假定b=4时a=3.5 (抛弃)5、假定b=5时a=36、假定b=6时a=2.5 (抛弃)7、假定b=7时a=28、假定b=8时a=1.5 (抛弃)9、假定b=9时a=110、假定b=10时a=0.5 (抛弃)11、假定b=11时a=0从以上实例可以看出给定(x,y)后,a,b取值有6组,显示a和b都被固定在了某一值域内。所以在写代码时应假设a或b从某一数值到某一数值。说了这么些也不知道你看懂没?
回复

使用道具 举报

千问 | 2008-5-12 01:26:15 | 显示全部楼层
//利用最小二乘法进行线形拟合#include"stdio.h"#include"math.h"#define max_size 100void main(){ float data[max_size][2]; //用data数组来存放x,y的值. float x_sum=0,y_sum=0; float x_avg,y_avg; float x,y; float Lxy=0,Lxx=0,Lyy=0; float r; float a,b; int i; int count=0;next: printf("输入至少2组x,y的值,输入格式为 x,y"); printf("输入 -999,-999 表示输入结束!\n"); while(1) {scanf("%f,%f",&x,&y);//实数最好不直接用"=="或"!="比较大小。if(fabs(x+999)==0&&fabs(y+999)==0) break;data[count][0]=x;data[count][1]=y;count++; }
for(i=0;i0.5){
printf("数据的线形关系较好。\n"); a=Lxy/Lxx; b=y_avg-a*x_avg; } else {printf("数据的线形关系不好!请重新输入数据!\n");goto next; } printf("线形拟合的结果为:\n"); if(fabs(b)==0)printf("y=%3.1fx\n",a); else if(b>0)
printf("y=%3.1fx+%3.2f\n",a,b); else if(b<0)printf("y=%3.1fx%3.2f\n",a,b); printf("相关系数为:%3.1f\n",r);}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行