24小时热门版块排行榜    

查看: 517  |  回复: 0
当前主题已经存档。

zhanglei02

木虫 (小有名气)

[交流] 【软件学习】最小二乘法源程序(C++版本已搜无重复)

今天为了处理试验数据找了好久才找到,拿来和大家分享.还未调试.

源码如下:

//*****************************************************************//
//                  物理实验数据处理软件                      //
//*****************************************************************//
//--------------------------------------------------------------------
#include
#include
#include
//--------------------------------------------------------------------
using namespace std;
//--------------------------------------------------------------------
class Item
{
public:
    get_data();
    double dX;
    double dY;
};
//--------------------------------------------------------------------
class Experiment
{
public:
    Experiment();
    void calculator();
    void display();
    ~Experiment();
private:
    double A;                        
    Item *Result;
    int length;
};
//--------------------------------------------------------------------
Item :: get_data()
{
    cout << "Please enter the experiment data." << endl;
    cout << "Please enter the X:" << endl;
    cin >> dX;
    cout << "Please enter the Y." << endl;
    cin >> dY;
}
//--------------------------------------------------------------------
Experiment :: Experiment()
{
    cout << "请输入数据的组数,就是有多少组数据:" << endl;
    cin >> length;
    const int _number = length;
    Result = new Item[_number];
    //对子对象的赋值
    for(int counter = 0; counter < _number; ++counter)
    {
        Result[counter].get_data();
    }

}
//--------------------------------------------------------------------
//************以下是线性回归的模块*****************************//
void Experiment :: calculator()
{
    const int _n = length;
    double *X_1 = new double[_n];                     
    double *Y_1 = new double[_n];               
    {
        T_1[counter_1] = Result[counter_1].dT;
        R_1[counter_1] = Result[counter_1].dR;
    }                           
               
    //以下是线性回归的实现
         double middle_1 = 0;
    double middle_2 = 0;
    double middle_3 = 0;
    double middle_5 = 0;
    double number = double(_n);
    for(int counter_2 = 0; counter_2 < number; ++counter_2)        
    {
    middle_1 += (X_1[counter_2] / number);
    middle_2 += (Y_1[counter_2] / number);
    middle_3 += (X_1[counter_2] * Y_1[counter_2]) / number;
    middle_5 += (X_1[counter_2] * X_1[counter_2]) / number;
    }

    double middle_4 = (middle_1 * middle_1);
    double final_one = ((middle_1 * middle_2 - middle_3)
                             / (middle_4 - middle_5));
    A = final_one;                        //A表示斜率

         delete [] X_1;
    delete [] Y_1;
    cout << "Calculator had been called." << endl;
}
//--------------------------------------------------------------------
void Experiment :: display()
{
    cout << "The A which is resolved by this Experiment is :" << endl;
    cout << "-----------------" <     cout << "-------" << setw(6) << A << "------" <     cout << "-----------------" < }
//--------------------------------------------------------------------
Experiment ::~Experiment()
{
    delete Result;
}
//--------------------------------------------------------------------
int main()
{
    Experiment Careful;
    Careful.calculator();
    Careful.display();
    return 0;
}
//--------------------------------------------------------------------


转至编程爱好者网站   http://www.programfan.com/
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zhanglei02 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见