資源簡介
控制臺應用程序,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? {
dat[i]?=?d[i];
}
}
void?j_memcpy(v_d??&dat?v_d?d?int?n)
{
for?(int?i?=?0;?i? {
dat[i]?=?d[i];
}
}
void?j_memcpy(v_d?&?dat?v_d::iterator?d?int?n)
{
for?(int?i?=?0;?i? {
dat[i]?=?d[i];
}
}
void?j_memcpy(v_d::iterator??dat?v_d::iterator?d?int?n)
{
for?(int?i?=?0;?i? {
dat[i]?=?d[i];
}
}
void?itSum(v_d::iterator?&?it?int?n?v_d?&?data)
{
int?t?=?0;
while?(it?!=?data.end()?&&?t++?}
//迭代器版本
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? {
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? {
//?如果主對角線元素為0,行交換
for?(n?=?m?+?1;?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? {
tmp?=?dat[n][m]?/?dat[m][m];
for?(j?=?m;?j?<=?count;?j++)
dat[n][j]?-=?tmp?*?dat[m][j];
}
}
for?(j?=?0;?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版·新版)
評論
共有 條評論