• 大小: 6KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2023-12-31
  • 语言: C/C++
  • 标签: C++  

资源简介

控制台应用程序,C++实现多元线性回归,可指定任意几元,根据给定的数据矩阵,训练给出回归方程式

资源截图

代码片段和文件信息

#include “stdafx.h“
#include
#include 
using namespace std;

#define v_v_d vector>
#define v_d vector

// 解线性方程。data[count*(count+1)]矩阵数组;count:方程元数;
// Answer[count]:求解数组 。返回:0求解成功,-1无解或者无穷解

//重载的辅助函数
void j_memcpy(v_d::iterator  dat v_d d int n)
{
for (int i = 0; i < n; i++)
{
dat[i] = d[i];
}
}
void j_memcpy(v_d  &dat v_d d int n)
{
for (int i = 0; i < n; i++)
{
dat[i] = d[i];
}
}
void j_memcpy(v_d & dat v_d::iterator d int n)
{
for (int i = 0; i < n; i++)
{
dat[i] = d[i];
}
}
void j_memcpy(v_d::iterator  dat v_d::iterator d int n)
{
for (int i = 0; i < n; i++)
{
dat[i] = d[i];
}
}
void itSum(v_d::iterator & it int n v_d & data)
{
int t = 0;
while (it != data.end() && t++ < n) it++;
}

//迭代器版本
int LinearEquationsCjj(vector &data int count double *Answer)
{
int j m n;
vector ::iterator d = data.begin();
//double *d = data;
double tmp;
//double *d = data;
vector> dat;
dat = vector>(count);
//dat = (double**)malloc(count * sizeof(double*));
for (m = 0; m < count; m++ itSum(d count + 1 data))
{
dat[m] = vector(count + 1);
//dat[m] = (double*)malloc((count + 1) * sizeof(double));
j_memcpy(dat[m] d count + 1);
//memcpy(dat[m] d (count + 1) * sizeof(double));
}
vector jj = v_d(count + 1);
d = jj.begin();
//d = (double*)malloc((count + 1) * sizeof(double));
for (m = 0; m < count - 1; m++)
{
// 如果主对角线元素为0,行交换
for (n = m + 1; n < count && dat[m][m] == 0.0; n++)
{
if (dat[n][m] != 0.0)
{
j_memcpy(d dat[m] (count + 1));
j_memcpy(dat[m] dat[n] (count + 1));
j_memcpy(dat[n] d (count + 1));
//memcpy(d dat[m] (count + 1) * sizeof(double));
//memcpy(dat[m] dat[n] (count + 1) * sizeof(double));
//memcpy(dat[n] d (count + 1) * sizeof(double));
}
}
// 行交换后,主对角线元素仍然为0,无解,返回-1
if (dat[m][m] == 0.0)
{
//FreeData(dat d count);
return -1;
}
// 消元
for (n = m + 1; n < count; n++)
{
tmp = dat[n][m] / dat[m][m];
for (j = m; j <= count; j++)
dat[n][j] -= tmp * dat[m][j];
}
}
for (j = 0; j < count; j++)
d[j] = 0.0;
// 求得count - 1的元
Answer[count - 1] = dat[count - 1][count] / dat[count - 1][count - 1];
// 逐行代入求各元
for (m = count - 2; m >= 0; m--)
{
for (j = count - 1; j > m; j--)
d[m] += Answer[j] * dat[m][j];
Answer[m] = (dat[m][count] - d[m]) / dat[m][m];
}
//FreeData(dat d count);
return 0;
}
// 求多元回归方程:Y = B0 + B1X1 + B2X2 + ...BnXn
// data[rows*cols]二维数组;X1iX2i...XniYi (i=0 to rows-1)
// rows:数据行数;cols数据列数;Answer[cols]:返回回归系数数组(B0B1...Bn)
// 返回值:0求解成功,-1错误
//迭代器版本
int MultipleRegressionCjj(vector &data int ro

评论

共有 条评论