线性回归c语言
❶ 用c语言编制最小二乘法多元线性回归的通用程序,并对数据进行回归分析
就用MATLAB来做就是了撒
两个函数都可以做回归的,一个是regress,一个是stepwise
当然,你也可以把数据写成矩阵的形式,y=[],x=[],我可以给你算
❷ 急求一元线性回归的C语言程序!!!
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
voidanalysis(double*x,double*y,intn){
doubled1,d2,d3,a,b;
doublesumx,sumy,sumxx,sumyy,sumxy,mx,my,mxx,myy,mxy;
inti;
//变量的初始化
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=%fmy=%f ",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=%fmyy=%fmxy=%f ",mxx,myy,mxy);
//
a=(n*sumxy-sumx*sumy)/(n*sumxx-sumx*sumx);
b=(sumxx*sumy-sumx*sumxy)/(n*sumxx-sumx*sumx);
printf("a=%fb=%f ",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);
}
doubler=d1/sqrt(d2*d3);
//
printf("相关系数r=%f ",r);
//
double*yy=(double*)malloc(sizeof(double)*n);
doublesumerrorsquare=0,error;
for(i=0;i<n;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 ",error);
}
intmain(){
doublex[4]={1.0,3.0,3.0,9.0};
doubley[4]={11.0,12.0,13.0,14.0};
analysis(x,y,4);
return0;
}
❸ C语言 多元线性回归算法
从键盘输入abcd,
float x,y,z,M;
M=a*x+b*y+c*x+d
输出M
你要的是这个意思吗?
❹ 急!!!关于C语言编程 线性回归法建立数学模型
就是二分法查找法:
k跟数组的中间的元素temp比较,确定在哪部分,若k>temp1,则再跟后部分数组的中间元素temp2比较.否则跟前部分数组的中间元素temp2。循环下去。直到中间元素等于k;
就是循环确定区间再比较再确定区间. 当然算法再优化一下
❺ 怎样用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语言代码
//利用最小二乘法进行线形拟合
#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)==0&&fabs(y+999)==0) break;
data[count][0]=x;
data[count][1]=y;
count++;
}
for(i=0;i<count;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;i<count;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(r>0.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);
}