线性代数模板

原创 2018年04月17日 15:22:01

矩阵

使用double作为元素类型,根据自己的需求调整。

struct Matrix:vector<vector<double> >//继承vector
{
    Matrix(int x,int y,double z=0)//初始化,默认0矩阵
    {
        assign(x,vector<double>(y,z));
    }
    int r_size()const//行数row_size
    {
        return size();
    }
    int c_size()const//列数col_size
    {
        return empty()?0:front().size();//列数要考虑空矩阵的情况
    }
};
Matrix operator*(const Matrix &m,const Matrix &n)//常量引用避免拷贝
{
    if(m.c_size()!=n.r_size())return Matrix(0,0);//非法运算返回空矩阵
    Matrix ans(m.r_size(),n.c_size());
    for(int i=0; i!=ans.r_size(); ++i)
        for(int j=0; j!=ans.c_size(); ++j)
            for(int k=0; k!=m.c_size(); ++k)
                ans[i][j]+=m[i][k]*n[k][j];
    return ans;
}
Matrix pow(const Matrix &m,int k)
{
    if(k==2)return m*m;
    if(k==0)//返回对应的单位(对角)矩阵
    {
        Matrix ans(r_size(),r_size());
        for(int i=0; i!=ans.r_size(); ++i)
            ans[i][i]=1;
        return ans;
    }
    if(k%2)return pow(m,k-1)*m;
    return pow(pow(m,k/2),2);
}
double det(Matrix a,int n)//矩阵a的n阶行列式
{
    double ans=1;
    for(int i=0; i<n; ++i)
    {
        for(int j=i+1; j<n; ++j)
            while(fabs(a[j][i])>EPS)
            {
                double t=a[i][i]/a[j][i];
                for(int k=i; k<n; ++k)
                {
                    a[i][k]-=t*a[j][k];
                    swap(a[i][k],a[j][k]);
                }
            }
        ans*=a[i][i];
        if(fabs(ans)<EPS)return 0;
    }
    return ans;
}
void gauss_elimination(Matrix &A,int n)//A为增广矩阵,要求n*n的系数矩阵可逆,运行结束后A[i][n]为第i个未知数的值
{
    for(int i=0; i<n; ++i)//消元
    {
        int r=i;//选一行r和第i行交换
        for(int j=i+1; j<n; ++j)
            if(fabs(A[r][i])<fabs(A[j][i]))
                r=j;
        if(r!=i)swap(A[i],A[r]);
        for(int j=n; j>=i; --j)//与i+1~n行进行消元,必须倒序循环 
            for(int k=i+1; k<n; ++k)
                A[k][j]-=A[k][i]*A[i][j]/A[i][i];
    }
    for(int i=n-1; i>=0; --i)//回代
    {
        for(int j=i+1; j<n; ++j)
            A[i][n]-=A[j][n]*A[i][j];
        A[i][n]/=A[i][i];
    }
}
版权声明:本文为博主原创文章,转载需注明来源。 https://blog.csdn.net/w_weilan/article/details/79975433

线性代数(武大版)答案

  • 2010年01月15日 23:55
  • 941KB
  • 下载

线性代数第六版 课件ppt

  • 2016年03月14日 18:40
  • 14.28MB
  • 下载

【数学:线性代数】如何生动有趣的入门线性代数

转载:http://blog.csdn.net/u010751535/article/details/52856123#%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95 ...
  • SMF0504
  • SMF0504
  • 2016-10-31 15:44:20
  • 2158

[线性代数] 常用定义与公式

前言前言前言前言
  • oscar999
  • oscar999
  • 2015-06-12 08:56:35
  • 4784

线性代数导论35——线性代数全总结

本文是Gilbert Strang的线性代数导论课程笔记。课程地址:http://v.163.com/special/opencourse/daishu.html   第三十五课时:线性代数全总结 ...
  • suqier1314520
  • suqier1314520
  • 2013-11-14 11:52:26
  • 8866

YJango:线性代数入门

矩阵乘法 向量点乘 矩阵乘向量 向量乘矩阵 矩阵乘矩阵 矩阵的静态信息 坐标值与坐标系: 坐标值的两种看法: 矩阵的动态信息 向量空间 子空间 线性无关 张成 基(基底) 维度 秩 ...
  • u010751535
  • u010751535
  • 2016-10-19 08:27:40
  • 7437

中文版线性代数PDF

  • 2013年06月01日 18:23
  • 49.64MB
  • 下载

[转]理解矩阵(一)--个人觉得是最好的,线性代数都弱爆了

前不久chensh出于不可告人的目的,要充当老师,教别人线性代数。于是我被揪住就线性代数中一些务虚性的问题与他讨论了几次。很明显,chensh觉得,要让自己在讲线性代数的时候不被那位强势的学生认为是神...
  • xiaoweimy804
  • xiaoweimy804
  • 2014-04-28 14:13:40
  • 2051

线性代数学习笔记1

本人机器学习小白一枚,目前认识到数学对于理解算法和应用算法到特定的数据集上太重要了。很喜欢MIT的线性代数课程,以MIT课程的内容为主,做一些学习总结。旨在于总结自己学过的知识、受到的启发、加强自己的...
  • ls317842927
  • ls317842927
  • 2016-08-29 10:15:31
  • 2133

线性代数的直观理解 -- Intuition in Linear Algebra

受《理解线性代数》启发,结合自身学习的经验,直观的总结我对线性代数的理解。强调直观是因为在这里不纠缠于数学的严谨性,所以如果追求数学严谨性和证明的还是去看教材比较好。统计的目标是对数表内各种数据进行挖...
  • majestyhao
  • majestyhao
  • 2015-03-08 08:58:38
  • 3027
收藏助手
不良信息举报
您举报文章:线性代数模板
举报原因:
原因补充:

(最多只允许输入30个字)