资源简介
控制台应用程序,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++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
评论
共有 条评论