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 游戏服务器开发实战》

  • 相关阅读:
    Python --- Python的简介
    Python---subline的安装与设置
    算法进阶指南(DFS和BFS)--- 小猫爬山
    算法进阶指南(递归)--- 递归实现排列型枚举
    算法进阶指南(递归)--- 递归实现组合型枚举
    算法进阶指南(递归)--- 递归实现指数型枚举
    linux命令行调试邮件服务器
    01_8_session
    01_7_cookies
    03_9_继承中的构造方法
  • 原文地址:https://www.cnblogs.com/hanxi/p/2439623.html
Copyright © 2011-2022 走看看