zoukankan      html  css  js  c++  java
  • 追赶法解方程

    //追赶法解方程组Pursue.cpp
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    
    class SolutionEquations
    {
    private:
        vector<double> a;
        vector<double> b;
        vector<double> c;
        vector<double> f;
        vector<double> x;
        
    public:
        void setABCF(vector<double> in_a, vector<double> in_b, vector<double> in_c, vector<double> in_f)
        {
            a = in_a;
            b = in_b;
            c = in_c;
            f = in_f;
        }
        //追赶法解方程组
        vector<double>& Pursue()
        {
            vector<double> bita;
            vector<double> y;
            int n = f.size();
            bita.push_back(c.at(0)/b.at(0));
            y.push_back(f.at(0)/b.at(0));
            for (int i=1; i<n-1; i++)
            {
                double alpha = b.at(i)-a.at(i)*bita.at(i-1);
                double tmp = c.at(i)/alpha;
                bita.push_back(tmp);
                tmp = (f.at(i)-a.at(i)*y.at(i-1))/alpha;
                y.push_back(tmp);
            }
            double alpha = b.at(n-1)-a.at(n-1)*bita.at(n-2);
            double tmp = (f.at(n-1)-a.at(n-1)*y.at(n-2))/alpha;
            y.push_back(tmp);
    
            x.push_back(y.at(n-1));
            for (int i=n-2,k=0; i>=0; i--,k++)
            {
                double tmp = y.at(i)-bita.at(i)*x.at(k);
                x.push_back(tmp);
            }
            reverse(x.begin(),x.end());
            return x;
        }
    };
    
    int main()
    {
        SolutionEquations solution;
        vector<double> a;
        vector<double> b;
        vector<double> c;
        vector<double> f;
    
        a.push_back(0);
        a.push_back(-1);
        a.push_back(-2);
        a.push_back(-3);
        b.push_back(2);
        b.push_back(3);
        b.push_back(4);
        b.push_back(5);
        c.push_back(-1);
        c.push_back(-2);
        c.push_back(-3);
        f.push_back(6);
        f.push_back(1);
        f.push_back(-2);
        f.push_back(1);
        
        solution.setABCF(a,b,c,f);
            
        vector<double>x = solution.Pursue();
        
        for (int i=0; i<x.size(); i++)
        {
            cout << "x=" << x.at(i) << endl;
        }
        
    }


     

    作者:涵曦www.hanxi.cc
    出处:hanxi.cnblogs.com
    GitHub:github.com/hanxi
    Email:im.hanxi@gmail.com
    文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    《 Skynet 游戏服务器开发实战》

  • 相关阅读:
    MFC菜单快捷键的应用
    TDD in C++
    Mapping
    初入股市者怎样看盘
    C++随笔分类列表(高级)
    C++代码优化
    IT生活
    十一年炒股的感悟
    框架设计(第2版)CLR Via C#(1)
    Visual Assist X自己常用的快捷功能
  • 原文地址:https://www.cnblogs.com/hanxi/p/2439623.html
Copyright © 2011-2022 走看看