zoukankan      html  css  js  c++  java
  • gaussjordan消元

    复习线性代数看到的,晚上无聊就把它写成代码而已。

    matrix很做作的用了下boost的matrix

    不知道对不,只做了很简单的测试。

    #include <iostream>
    #include <boost/numeric/ublas/matrix.hpp>
    #include <boost/numeric/ublas/io.hpp>
    
    using namespace std;
    using namespace boost::numeric::ublas;
    
    template<class T>
    void swap_elem(T& a , T& b)
    {
        T tmp;
        tmp = a;a=b;b=tmp;
    }
    void swap_row(matrix<double> &mat ,int t ,int  k)
    {
        double tmp;
        int n = mat.size2();
        for(int i = 0 ; i < n ; i++){
        swap_elem(mat(t,i) , mat(k,i));
        }
        
    }
    
    void gauss_jordan(matrix<double> &mat)
    {
        int m = mat.size1();
        int n = mat.size2();
        for(int i = 0 , j = 0 ; i < m && j < n ; )
        {
        int k = i;
        for(; k < m ; k ++)
        {
            if( mat(k , j) !=0 ) break;
        }
        if (k == m){
            j ++;
        }else{
            if(k != i) swap_row(mat , k , i);
            double tmp = 0;
    
            tmp = 1.0/mat(i,j);
            
            for(k = j ; k < n ; k++)
            mat(i,k) = mat(i,k) * tmp;
    
            for(k = 0 ; k < m ; k++)
            {
            if(k == i) continue;
            if(mat(k , j) == 0) continue;
            
            tmp = -mat(k , j);
            for(int t = j ; t < n ; t++)
                mat(k,t) = mat(k,t) + mat(i,t) * tmp;
            }
            i++ ; j++;
        }
        }
    }
    int main()
    {
    /*    matrix<double> mat(3,3);
        mat(0,0)=1;mat(0,1)=1;mat(0,2)=0;
        mat(1,0)=1;mat(1,1)=-1;mat(1,2)=1;
        mat(2,0)=4;mat(2,1)=2;mat(2,2)=1;
    */
        matrix<double> mat(3,4);
        mat(0,0)=2;mat(0,1)=2;mat(0,2)=-2;mat(0,3)=5;
        mat(1,0)=7;mat(1,1)=7;mat(1,2)=1;mat(1,3)=10;
        mat(2,0)=5;mat(2,1)=5;mat(2,2)=-1;mat(2,3)=5;
    //    mat(0,1) = 1;mat(0,0)=1;
    //   mat(1,1) = 2;mat(1,0)=2;
    //    swap_row(mat , 0 , 1);
        gauss_jordan(mat);
        cout<< mat <<endl;
        return 0;
    }
    by 1957
  • 相关阅读:
    isa与hasa的关系
    两道笔试题的解法
    无耻的WoW打钱工作室
    我正处于恶性循环中——读wowar上的一篇帖子有感
    snippets from ObjectOriented Thought Process (1)
    使用C#获取当前Windows所设定的时区
    用ASP.NET模拟Windows Service来实现定时提醒之类的功能
    乱说 缓存
    认识数据库连接
    网站sql注入的技巧与防范
  • 原文地址:https://www.cnblogs.com/x1957/p/2644734.html
Copyright © 2011-2022 走看看