该程序一运行就显示exe停止工作。各位帮忙解答一下。。
求帮忙看看程序。作用是输入两个变量x1,x2的值,得出y值。机器学习入门。线性回归方程和梯度下降函数。
问题是:该程序一运行就显示exe停止工作。是什么原因?没报错
#include<iostream.h>
#include<iomanip.h>
double hypothesis() //定义假设函数h()
{
int x3[35],x4[35];
double theta[2];
double hypothesis;
for(int i=0;i<35;i++)
{ hypothesis=theta[0]+theta[1]*x3[i]+theta[2]*x4[i];
return 0 ;
}
};
void main()
{
int y[]={399900,329900,369000,232000,539900,299900,314900,198999,212000,242500,
239999,347000,329999,699900,259900,449900,299900,199900,499998,599000,
252900,255000,242900,259900,573900,249900,464500,469000,475000,299900,
349900,169900,314900,579900,285900}; // 定义y数组
int x1[]={2104,1600,2400,1416,3000,1985,1534,1427,1380,1494,1940,2000,
1890,4478,1268,2300,1320,1236,2609,3031,1767,1888,1604,1962,
3890,1100,1458,2526,2200,2637,1839,1000,2040,3137,1811}; // 定义第一列x1变量
int x2[]={3,3,3,2,4,4,3,3,3,3,4,3,3,5,3,4,2,3,4,4,3,2,3,4,3,3,3,3,3,3,2,1,4,3,4}; // 定义第二列x2变量
int w1=0,w2=0,w3=0; //w1代表x1的平均值,w2代表x2的平均值,w3代表y的平均值
for(int i=1;i<=35;i++)
{
w1=w1+x1[i];
w2=w2+x2[i];
w3=w3+y[i];
}
w1=w1/35;
w2=w2/35;
w3=w3/35;
int f1=0,f2=0,f3=0; //f1代表x1的标准差,f2代表x2的标准差,f3代表x3的标准差
for(i=1;i<=35;i++)
{
f1=f1+(x1[i]-w1)*(x1[i]-w1);
f2=f2+(x2[i]-w2)*(x2[i]-w2);
f3=f3+(y[i]-w3)*(y[i]-w3);
}
int x3[35];
int x4[35];
int y1[35];
x3[i]=(x1[i]-w1)/f1;
x4[i]=(x2[i]-w2)/f2;
y1[i]=(y[i]-w3)/f3;
double theta[2];
theta[0]=theta[1]=theta[2]=3;
double sum,sum1,sum2; // 中间变量,用于迭代求和
sum=sum1=sum2=0;
double t,t1,t2; // i代表第几个训练集;
double J; // 参数 J 用来放代价函数值
double a; // 学习率,开始时先假设为0.3
cout<<"请输入学习率a=";
cin>>a;
for(i=1;i<=35;i++)
{
hypothesis( );
t=hypothesis( )-y1[i];
sum=sum+t; // 求和
}
J=sum/(2*35); // 求代价函数值
do{
for(i=1;i<=35;i++) //不断改变theta值直到代价函数值为0
{
hypothesis( );
t=hypothesis( )-y1[i];
t1=t*x3[i];
sum1=sum1+t1;
t2=t*x4[i];
sum2=sum2+t2;
sum=sum+t;
}
theta[0]=theta[0]-sum/(a*35);
theta[1]=theta[1]-sum1/(a*35);
theta[2]=theta[2]-sum2/(a*35);
for(i=1;i<=35;i++)
{
hypothesis( );
t=hypothesis( )-y1[i];
sum=sum+t; // 求和
} // Question1:返回J函数
J=sum/(2*35);
}
while(J==0);
cout<<"theta[0]="<<setprecision(6)<<theta[0]<<endl;
cout<<"theta[1]="<<setprecision(6)<<theta[1]<<endl;
cout<<"theta[2]="<<setprecision(6)<<theta[2]<<endl;
int m,n;
double h;
cout<<"请输入x1,x2的值";
cin>>m;
cin>>n;
h=theta[0]+theta[1]*m+theta[2]*n;
cout<<"得出的y值为:"<<h<<endl;
}