精华内容
下载资源
问答
  • 三对角矩阵

    千次阅读 2018-05-25 11:08:00
    **三对角矩阵(tridiagonal):**M是一个三对角矩阵,当且仅当|i-j|>1时,M(i,j)=0。 在一个rows×rows的三对角矩阵中,非0元素排列在如下三条对角线上: 1)主对角线—— i=j 2)主对角线之下的对角线(称低对角线)...

    **三对角矩阵(tridiagonal):**M是一个三对角矩阵,当且仅当|i-j|>1时,M(i,j)=0。
    在一个rows×rows的三对角矩阵中,非0元素排列在如下三条对角线上:
    1)主对角线——i=j
    2)主对角线之下的对角线(称低对角线)——i=j+1
    3)主对角线之上的对角线(称高对角线)——i=j-1
    这三条对角线的元素总数为3rows-2。可以用一个容量为3rows-2的一维数组element来描述三对角矩阵。
    三对角矩阵
    tridiagonalMatrix.cpp

    /*
     * 三对角矩阵的测试函数
     * tridiagonalMatrix.cpp
    */
    #include<iostream>
    #include"tridiagonalmatrix.h"
    
    using namespace std;
    
    int main(void)
    {
        tridiagonalMatrix<int> x(20);
        x.set(1,1,22);
        x.set(5,5,44);
        x.set(8,5,0);
        x.set(7,8,55);
    
        cout<< x.get(7,8)<<endl;
        cout << x.get(5,5) <<endl;
        cout << x.get(1,1) <<endl;
        cout << x.get(10,1) <<endl;
        cout << x.get(1,5) <<endl;
    
        return 0;
    }
    

    tridiagonalMatrix.h

    /*
     * 三对角矩阵
     * tridiagonalMatrix.h
    */
    #ifndef TRIDIAGONALMATRIX_H
    #define TRIDIAGONALMATRIX_H
    
    #include"myexceptions.h"
    using namespace std;
    
    template<class T>
    class tridiagonalMatrix
    {
    public:
      //构造函数和析构函数
        tridiagonalMatrix(int theN = 10);
        ~tridiagonalMatrix(){delete [] element;}
        T get(int,int)const;//获取元素
        void set(int,int,const T&);//设置元素值
    private:
        T* element;
        int n;
    };
    
    /*
     * 类中函数的具体实现
    */
    
    //构造函数
    template<class T>
    tridiagonalMatrix<T>::tridiagonalMatrix(int theN)
    {
        if(theN < 1)
            throw illegalParameterValue("Matrix size must be > 0");
    
        n = theN;
        element = new T[n*3-2];//三对角数组的最大非零元素个数为n*3-2
    }
    
    //get()函数实现
    template<class T>
    T tridiagonalMatrix<T>::get(int i, int j) const
    {
        if(i < 1 || j < 1 || i > n || j > n)
            throw matrixIndexOutOfBounds();
    
        switch (i - j) {
        case 1:
            return element[i - 2];
        case 0:
            return element[n + i - 2];
        case -1:
            return element[2 * n + i - 2];
        default:
            return 0;
        }
    }
    
    
    //set()函数的具体实现
    template<class T>
    void tridiagonalMatrix<T>::set(int i, int j, const T& newValue)
    {
        if(i < 1 || j < 1 || i > n || j > n)
            throw matrixIndexOutOfBounds();
        switch (i - j)
        {
        //数组存储元素是从最下面的对角线开始存的,依次的存储顺序是:
        //下对角线,主对角线,上对角线
        //所以才会有下面的数组计算方式
        case 1:
            element[i - 2] = newValue;//下对角线
            break;
        case 0:
            element[n + i - 2] = newValue;//主对角线
            break;
        case -1:
            element[2 * n + i - 2] = newValue;//上对角线
            break;
        default:if(newValue != 0)
                throw illegalParameterValue
                    ("non-tridiagonal elements must be zero");
            break;
        }
    }
    
    #endif // TRIDIAGONALMATRIX_H
    

    myExceptions.h

    /*
     * 异常类
     * myExceptions.h
    */
    #ifndef MYEXCEPTIONS_H
    #define MYEXCEPTIONS_H
    
    #include<string>
    using namespace std;
    
    //参数值不合法
    class illegalParameterValue
    {
      public:
        illegalParameterValue(string theMessage = "Illegal parameter value")
        {
            message = theMessage;
        }
        void outputMessage()
        {
            cout << message <<endl;
        }
    private:
        string message;
    };
    
    //数组索引越界
    class matrixIndexOutOfBounds
    {
    public:
        matrixIndexOutOfBounds(string theMessage = "Matrix index out of bounds")
        {
            message = theMessage;
        }
        void outputMessage()
        {
            cout << message <<endl;
        }
    private:
        string message;
    };
    
    //数组大小不匹配
    //其实这个异常这里用不到,只有在矩阵的加减法和乘法的时候才会用到
    class matrixSizeMismatch
    {
    public:
        matrixSizeMismatch(string theMessage =
                "The size of the two matrics doesn't match")
        {
            message = theMessage;
        }
        void outputMessage()
        {
            cout << message <<endl;
        }
    private:
        string message;
    };
    #endif // MYEXCEPTIONS_H
    

    转载于:https://my.oschina.net/u/1771419/blog/1818524

    展开全文
  • 每隔一段时间,我需要生成一个三对角矩阵,其中对角线上的元素是重复的。 有时生成相同形式的块三对角矩阵很好。 全(blktridiag(2,-1,-1,5)) 答案 = 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 ...
  • 三对角矩阵

    2018-09-27 08:56:54
    三对角矩阵,样条曲线解法中的关键步骤。C++实现。易于学习和复制。
  • 生成三对角矩阵

    2016-04-07 09:11:14
    一个小小小程序,生成一个三对角矩阵
  • 三对角矩阵(特殊矩阵)

    千次阅读 多人点赞 2018-11-02 23:18:14
    特殊矩阵之三对角矩阵 一开始在网上搜了好多,结果题目和答案不对应,有的答案直接不对,没办法,看的书然后自己慢慢分析做的。具体如下: 一个三对角矩阵的非零系数在三条对角线上:主对角线、低对角线、高对角线。...

    特殊矩阵之三对角矩阵

    一开始在网上搜了好多,结果题目和答案不对应,有的答案直接不对,没办法,看的书然后自己慢慢分析做的。具体如下:

    一个三对角矩阵的非零系数在三条对角线上:主对角线、低对角线、高对角线。其余元素全为0。

    三对角矩阵的特点:
    三对角矩阵M是一个对角矩阵,当且仅当
    时,有M(i,j)=0。在一个nxn的三对角矩阵T中,非0元素排列在如下的三条对角线上:
    (1)主对角线即i=j;
    (2)主对角线之下的对角线(称低对角线)即i=j+1;
    (3)主对角线之上的对角线(称高对角线)即i=j-1。
    这三条对角线上的元素总数为3n-2,故可以使用一个拥有3n-2个位置的一维数组来描述T,因为仅需要存储三条对角线上的元素

    设有三对角矩阵(aijnxn,将其三条对角线上的元素朱行地存于向量B[3n-1]中(其中零号单元存放三对角线外的常量C),使得B[K]=aij,求:
    (1) 用i j 表示k的下标变换公式;
    (2)用k表示i及j的下标变换公式;

    自己画的,有错误还请指出。

    上面图片中的四阶矩阵,是一个三对角矩阵,每个元素的位置都在图中标出,转化成一维数组的位置也已经标出。

    所以此题的答案为:

    (1)
    k=2*i + j + 1, |i-j| <= 1
    k=0 , 其它

    (2)
    i = (k-j-1)/2;
    j = k-2i-1;

    如果还有不明白的地方,可以在下方留言。

    展开全文
  • 利用递归方法,将高阶分块周期三对角矩阵的求逆转化为低阶分块周期三对角矩阵的求逆,给出了求分块周期三对角矩阵的逆矩阵的一种新算法。通过算法的计算量的比较,新算法比直接求逆算法的计算量小。新算法的算法...
  • matlab求解三对角矩阵,利用追赶法求解,程序中给了简便的例子
  • 对称矩阵 n阶矩阵中任意一个元素aij都有aij=aji,则为对称矩阵 只存储主对角线+下三角区(按行优先存储在一维数组中) 数组大小:(1+n)*n/2 ...三对角矩阵 稀疏矩阵 三元表(行,列,值) 十字链表 ...

    对称矩阵

    n阶矩阵中任意一个元素aij都有aij=aji,则为对称矩阵

    只存储主对角线+下三角区按行优先存储在一维数组中)

    数组大小(1+n)*n/2

    在这里插入图片描述

    三角矩阵

    在这里插入图片描述

    三对角矩阵

    在这里插入图片描述


    在这里插入图片描述

    稀疏矩阵

    1. 三元表(行,列,值)

    2. 十字链表

      在这里插入图片描述

    展开全文
  • 追赶法解三对角矩阵

    2017-03-10 21:34:53
    追赶法解三对角矩阵
  • 三对角矩阵压缩

    千次阅读 2016-11-21 16:10:59
    三对角矩阵压缩在一个100阶的**三对角矩阵**M,其元素mi,j(1≤i≤100,1≤j≤100)m_{i,j}(1\leq i\leq 100, 1\leq j \leq 100),按照行优先顺序存入下标从0开始的一维数组N中,元素m30,30m_{30,30}在N中的下标是:BA....

    三对角矩阵压缩

    在一个100阶的三对角矩阵M,其元素mi,j(1≤i≤100,1≤j≤100)m_{i,j}(1\leq i\leq 100, 1\leq j \leq 100)mi,j(1i100,1j100),按照行优先顺序存入下标从0开始的一维数组N中,元素m30,30m_{30,30}m30,30在N中的下标是:B

    A. 86 B. 87 C. 88 D. 89

    首先需要对三对角矩阵要有清晰的认识:

    这里写图片描述

    除了第一行和最后一行是每行2个元素外,中间的每行都是三个元素。

    因此,m30,30m_{30,30}m30,30,就是2+3*28+2 = 88
    这是从1开始编号的,那么从0开始编号就是87号。

    2019.10 Update:

    第一届PAT算法直播课培训班招募帖,欢迎点击查看详情、

    END.

    展开全文
  • 根据分块三对角矩阵逆矩阵的特殊结构,利用其LU和UL分解,并使用Sheman-Morrison-Woodbury公式,得到一个求分块周期三对角矩阵逆矩阵的新算法,并由该算法得到求周期三对角矩阵和对称周期三对角矩阵逆矩阵的新算法。...
  • 研究了严格对角占优三对角矩阵逆元素的估计问题.利用严格对角占优和三对角矩阵的某些特性,推导出严格对角占优三对角矩阵逆元素的统一估计式.在这个估计式中,严格对角占优三对角矩阵不必是非负矩阵,因而,这个结论的...
  • 三对角矩阵持征对的计算复杂性一般为O(n2)(n为矩阵的阶)。利用一类三对角矩阵持征对的局限性质,采用分段快速算法,其计算复杂性仅为O(n)。该算法适用于持征对具局限性的一类大型非对称三对角矩阵,且具有较高的精度;...
  • 特殊矩阵——三对角矩阵(Tridiagonal Matrix) 注:压缩存储的矩阵可以分为特殊矩阵和稀疏矩阵。对于那些具有相同元素或零元素在矩阵中分布具有一定规律的矩阵,被称之为特殊矩阵。对于那些零元素数据远远多于非零...
  • 20180316 三对角矩阵

    2018-03-16 16:33:00
    将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1..298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()供选择的答案: 198 195 197答案 B 错选 D 三对角矩阵 先...
  • 此算法可以求三对角矩阵在压缩存储下的转置矩阵
  • 当系数矩阵为三对角矩阵时,利用追赶法求解矩阵方程组Ax=b,效率更高,里面附有详细的注释,新手阅读也没有任何问题
  • 三对角矩阵:M是一个三对角矩阵,当且仅当|i-j|>1时,M(i,j)=0 下三角矩阵:M是一个下三角矩阵,当且仅当i<j时,M(i,j)=0 上三角矩阵:M是一个上三角矩阵,当且仅当i>j时,M(i,j)=0 对...
  • 通过用求解带有不同边界条件的差分方程的办法来求解特殊三对角矩阵的特征值,并将三对角矩阵的特殊性归结为边界条件的不同,由此给出三对角矩阵特征值的计算公式,并研究其在偏微分方程数值解数值格式稳定性中的应用.
  • 三对角矩阵的压缩

    千次阅读 2019-05-08 17:50:21
    三对角矩阵,从第二行开始选中的元素的个数都为3个。对于a[i,j]将要存储的位置k, 首先前(i-1)行元素的个数是(i-2)*3 +2(第一行元素的个数为2),又a[i,j]属于第i行 被选中元素的第j-i+1个元素,所以k= (i-2)3 +2 + j...
  • 1.02.TDMA 三对角矩阵求解器-Thomas算法
  • 二分法求解对称三对角矩阵的特征值二分法求解对称三对角矩阵的特征值二分法求解对称三对角矩阵的特征值二分法求解对称三对角矩阵的特征值二分法求解对称三对角矩阵的特征值二分法求解对称三对角矩阵的特征值二分法...
  • TDMA 在 CFD 中经常使用,因此它有助于用户计算大量矩阵解。
  • 三对角矩阵压缩存储--注意对角元素的下标 对角矩阵的压缩存储  对角矩阵是指所有非零元素全部集中在中心几条对角线上的矩阵。下面以三对角矩阵(所有非零元素集中在中心三条对角线上)为例描述对角矩阵的压缩存储...
  • 因为我们讨论的是次对角线元素均不为零的三对角矩阵,所以我们可以得到aij=aji≠0,i≠ja_{ij}=a_{ji}\ne0,i\ne jaij​=aji​​=0,i​=j,从aij≠0a_{ij}\ne 0aij​​=0我们可以得到该对称三对角矩阵对应的有向...
  • 这是 Thomas 算法的实现(用于求解 nxn 三对角矩阵方程)
  • 解决三对角线性系统 为了 使用三对角矩阵算法(即托马斯算法)。 句法 x = tridiagonal(A,d) 描述 x = tridiagonal(A,d)求解三对角线形系统 为了 (一个 向量),其中 是一个三对角矩阵, 。 。 三对角...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,182
精华内容 872
关键字:

三对角矩阵