资源简介

vs2010工程C++实现 利用最小二乘法实现多元一次方程线性拟合。 利用递归方法求逆矩阵,所以高阶矩阵(9阶以上)会比较慢。

资源截图

代码片段和文件信息

// regression.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include “regression.h“
#include 
#include 
#include 
#include 


int _tmain(int argc _TCHAR* argv[])
{
    FILE *fp;
    char fbuffer[200];
    int rowcolumn;
    double data[31][31];
    row = 0;
    column = 0;
errno_t err;
    err = fopen_s(&fp“test.txt““r“);
    if(err != 0){
        return 1;
    }
    while(!feof(fp)){
        int dnum;
        if(fgets(fbuffersizeof(fbuffer)fp) != NULL){
            char *p_buf*p_datasep;
            p_buf = fbuffer;
            dnum = 0;
            while(1){
                if((p_datasep = strchr(p_buf‘‘)) != NULL){
                    *p_datasep = ‘\0‘;
                    data[row][dnum] = atof(p_buf);
                    p_buf = p_datasep+1;
                    dnum++;
                }
                else{
                    if(strlen(p_buf) > 0){
                        //*p_datasep = ‘\0‘;
                        data[row][dnum] = atof(p_buf);
                        p_buf = p_datasep+1;
                        dnum++;
                    }
                    break;
                }
                if(dnum > 30){
                    std::cout<<“数据越界,最大矩阵30*30“<                    return 1;
                }
            }
            row++;
            if(row > 30){
                std::cout<<“数据越界,最大矩阵30*30“<                return 1;
            }
        }
        if(column == 0){
            column = dnum;
        }
        else{
if(column != dnum){
std::cout<<“矩阵列数不一致“< return 2;
}
        }
    }
fclose(fp);
    if((row == 0)||(column==0)){
        std::cout<<“矩阵为空“<        return 3;
    }
    //计算耗时(小于1小时内有效)
SYSTEMTIME  time;
long t_timet_time2;
int hour;
GetSystemTime( &time );
hour = time.wHour;
t_time = time.wMinute*60000;
t_time += time.wSecond*1000;
t_time += time.wMilliseconds;

    regression regress(rowcolumn);
    for(int i=0;i        for(int j=0;j            regress(ij) = data[i][j];
        }
    }
    regress.lineregression();
GetSystemTime( &time );
t_time2 = time.wMinute*60000;
t_time2 += time.wSecond*1000;
t_time2 += time.wMilliseconds;
    if(hour != time.wHour){
        t_time2 += 3600000;
    }

for(int i=0;i printf(“%f\t“regress.calculate_rst(i));
}
printf(“\n“);
printf(“Spend %ld milliseconds\n“t_time2-t_time);
getchar();
return 0;
}


评论

共有 条评论