资源简介
控制台应用程序,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
- 上一篇:C语言实现LZW编码
- 下一篇:C程序设计语言(第2版·新版)
相关资源
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
评论
共有 条评论