c语言线性回归函数,c++实现线性回归

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

//利用最小二乘法进行线形拟合

创新互联公司主要从事成都网站设计、网站制作、外贸营销网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务兴海,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

#include"stdio.h"

#include"math.h"

#define max_size 100

void 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)==0fabs(y+999)==0) break;

data[count][0]=x;

data[count][1]=y;

count++;

}

for(i=0;icount;i++)

{

x_sum=data[i][0]+x_sum;

y_sum=data[i][1]+y_sum;

}

x_avg=x_sum/count;

y_avg=y_sum/count;

for(i=0;icount;i++)

{

Lxy=(data[i][0]-x_avg)*(data[i][1]-y_avg)+Lxy;

Lxx=(data[i][0]-x_avg)*(data[i][0]-x_avg)+Lxx;

Lyy=(data[i][1]-y_avg)*(data[i][1]-y_avg)+Lyy;

}

//r用于计算相关系数,相关系数越接近1,表示相关性越好.

r=Lxy/sqrt(Lxx*Lyy);

if(r0.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(b0)

printf("y=%3.1fx+%3.2f\n",a,b);

else if(b0)

printf("y=%3.1fx%3.2f\n",a,b);

printf("相关系数为:%3.1f\n",r);

}

用C语言编制最小二乘法多元线性回归的通用程序,并对数据进行回归分析

就用MATLAB来做就是了撒

两个函数都可以做回归的,一个是regress,一个是stepwise

当然,你也可以把数据写成矩阵的形式,y=[],x=[],我可以给你算

急求一元线性回归的C语言程序!!!

#include math.h

#include stdio.h

#include stdlib.h

void analysis(double * x, double * y, int n) {

double d1, d2, d3,a,b;

double sumx,sumy,sumxx,sumyy,sumxy,mx,my,mxx,myy,mxy;

int i;

// 变量的初始化

d1 = d2 = d3 =sumx=sumy=sumxx=sumyy=sumxy=0.0;

// 计算x、y的平均值

for (i = 0; i  n; i++) {

sumx += x[i];

sumy += y[i];

}

mx = sumx / n;

my = sumy / n;

printf("mx=%f my=%f\n",mx,my);

// 计算x、y平和x*y的平均值

for (i = 0; i  n; i++) {

sumxx += x[i]*x[i];

sumyy += y[i]*y[i];

sumxy += x[i]*y[i];

}

mxx = sumxx / n;

myy = sumyy / n;

mxy = sumxy / n;

printf("mxx=%f myy=%f mxy=%f\n",mxx,myy,mxy);

//

a=(n*sumxy-sumx*sumy)/(n*sumxx-sumx*sumx);

b=(sumxx*sumy-sumx*sumxy)/(n*sumxx-sumx*sumx);

printf("a=%f b=%f\n",a,b);

// 计算相关系数的数据组成部分

for (i = 0; i  n; i++) {

d1 += (x[i] - mx) * (y[i] - my);

d2 += (x[i] - mx) * (x[i] - mx);

d3 += (y[i] - my) * (y[i] - my);

}

double r = d1 / sqrt(d2 * d3);

//

printf("相关系数r=%f\n",r);

//

double *yy=(double*)malloc(sizeof(double)*n);

double sumerrorsquare=0,error;

for(i=0;in;i++) {

yy[i]=a*x[i]+b;

sumerrorsquare+=(yy[i]-y[i])*(yy[i]-y[i]);

}

error=sqrt(sumerrorsquare/(n-1));

printf("标准偏差s(y)=%f\n",error);

}

int  main(){

double x[4]={1.0,3.0,3.0,9.0};

double y[4]={11.0,12.0,13.0,14.0};

analysis(x,y,4);

return 0;

}

怎样用c程序编多元线性回归

Dim a() As String, b() As String

Private Sub Command1_Click()

Dim temp1 As String

Dim i As Integer, k As Integer

temp1 = Text1.Text

a = Split(temp1, ",")

lenolds = Len("-")

For i = 0 To UBound(a)

s = a(i)

j = InStr(s, "-")

Do While j 0

ReDim Preserve b(i, k)

b(i, k) = Val(Left(s, j + lenolds))

s = Left(s, j - 1) + "-" + Mid(s, j + lenolds + 1)

k = k + 1

j = InStr(s, "-")

Loop

ReDim Preserve b(i, k)

b(i, k) = s

Next i

For i = 0 To UBound(a)

For j = 0 To k

Text2.Text = Text2.Text + b(i, j)

Next j

Next i

End Sub

C语言 多元线性回归算法

从键盘输入abcd,

float x,y,z,M;

M=a*x+b*y+c*x+d

输出M

你要的是这个意思吗?

c语言 线性回归

一元线性回归:y=a*x+b

其中(x,y)给定值,还有a,b未知。

一元线性那么你就要假定a或b为某个常数。

在此只考虑整数范围。

例:y=11,x=2

0、假定b=0时

a=5.5

(抛弃)

1、假定b=1时

a=5

2、假定b=2时

a=4.5

(抛弃)

3、假定b=3时

a=4

4、假定b=4时

a=3.5

(抛弃)

5、假定b=5时

a=3

6、假定b=6时

a=2.5

(抛弃)

7、假定b=7时

a=2

8、假定b=8时

a=1.5

(抛弃)

9、假定b=9时

a=1

10、假定b=10时

a=0.5

(抛弃)

11、假定b=11时

a=0

从以上实例可以看出给定(x,y)后,a,b取值有6组,显示a和b都被固定在了某一值域内。

所以在写代码时应假设a或b从某一数值到某一数值。

说了这么些也不知道你看懂没?


文章标题:c语言线性回归函数,c++实现线性回归
地址分享:http://pwwzsj.com/article/hcoocp.html