精华内容
下载资源
问答
  • 高斯消元法理解关灯问题

    千次阅读 2016-03-09 14:40:41
    高斯消元法处理关灯问题







    这个输入部分的处理要注意:


    for (i = 0; i < 5; i++) //行 
            {
                for (j = 0; j < 6; j++)  //列 
                {
                    if (i-1>=0) a[i*6+j][(i-1)*6+j]=1; //计算上面的位置
                    if (i+1<=4) a[i*6+j][(i+1)*6+j]=1;//计算下面的位置
                    if (j-1>=0) a[i*6+j][i*6+j-1]=1;//计算左面的位置
                    if (j+1<=5) a[i*6+j][i*6+j+1]=1; //计算右面的位置
                    a[i*6+j][i*6+j]=1;//别忘了计算自己
                    cin>>a[i*6+j][30];
                }
            }














    展开全文
  • 数论和组合数学:高斯消元法、积性函数的应用、欧拉定理、费马小定理、威尔逊定理、群论基础、polya定理与计数问题、catalan数。 计算几何:多边形间并蹱...大一上学期:c语言基础语法必须全部学会,提前完成c语言...

    o55g08d9dv.jpg广告关闭

    腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!

    数论和组合数学:高斯消元法、积性函数的应用、欧拉定理、费马小定理、威尔逊定理、群论基础、polya定理与计数问题、catalan数。 计算几何:多边形间并蹱...大一上学期:c语言基础语法必须全部学会,提前完成c语言课程设计。 简单数学题:求最大公约数、筛法求素数、康托展开、同余定理、次方求模等。 计算机课...

    qr分解计算起来更麻烦,在课程中并没有介绍,不过还是老话,计算机最不怕的就是清晰的计算。 qr分解的大意是,任何一个列满轶的矩阵a,都可以分解为一个标准正交向量q和一个上三角矩阵r的乘积形式。 上三角矩阵前面见过,就是我们使用高斯消元的中间步骤产物u。 sympy和numpy中都内置了qr分解算法,请看示例...

    4su3gem3vp.png

    function高斯核函数gaussian mixture model高斯混合模型general problemsolving通用问题求解generalization泛化generalizationerror泛化误差...equilibrium纳什均衡natural language generationnlg自然语言生成natural languageprocessing自然语言处理negative class负类negative correlation负相关...

    fdmp0odn3r.png

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    2qzs5x7ff1.jpeg

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技 术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    s9lowjg3ha.png

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    0tfqa)1-q(a)ftq(b)1-q(b)ttq(a)q(b)1-q(a)q(b)softmax节点神经网络节点使用一个多层感知器实现了从连续父节点向离散子节点的映射。 高斯节点将连续值的...global_joint_inf_engine()信念传播推理引擎belprop_inf_engine()变量消元推理引擎var_elim_inf_engine()采样传播引擎gibbs_sampling_inf_engine 5、 参数...

    博弈论 gaussian kernel function 高斯核函数 gaussian mixture model 高斯混合模型general problem solving 通用问题求解 generalization 泛化 ...自然语言生成 natural language processing 自然语言处理 negative class 负类negative correlation 负相关法 negative log likelihood 负对数似然 ...

    qu6l23m03b.jpeg

    transg模型考虑到了关系r 的不同语义,使用高斯混合模型来描述知识库中每个三元组(h,r,t)头实体与尾实体之间的关系,具有较高的实体区分度。 5)kg2e模型...知识融合是高层次的知识组织,使来自不同知识源的知识在同一框架规范下进行异构数据整合、消歧、加工、推理验证、更新等步骤,达到数据、信息、方法、经验...

    vnwyiram1p.png

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    e8nj9l6omv.jpeg

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    p5io3gvlyn.png

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    aoseyi379p.png

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    xqnny273xn.png

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    ziqkx2v6hw.jpeg

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    qbbih7gtjr.jpeg

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    44lpv8b99c.jpeg

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    byvpii7lvn.jpeg

    但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。 “核”事实上就是一种特殊的函数,最典型的特征...自然语言处理技术主要是让机器理解人类的语言的一门领域。 在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外...

    展开全文
  • 高斯消元法模板

    2016-08-17 18:32:58
    高斯消元法可以用来求解...理解高斯消元法的原理,代码很容易看懂,代码里在关键地方有注释…… 代码如下: #include #include #include #include #include using namespace std; const double EPS=1e-8; #define ma

    高斯消元法可以用来求解线性方程组,在线性代数中学过,如果不了解,可参见高斯消元法-百度百科高斯消元法-维基百科

    求解的过程中,在消去某个未知数时,打算保留该未知数的式子的对应未知数系数可能为0,在这种情况下,只要调整方程的顺序,使得对应的系数不为0就可以了(另外,为了减小误差,应该选择要消去的未知数系数的绝对值尽可能大的方程,该方法被称为列主元高斯消元法)。

    时间复杂度为O(n^3)。

    理解了高斯消元法的原理,代码很容易看懂,代码里在关键地方有注释……

    代码如下:

    1.二维数组

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const double EPS=1e-8;
    #define maxn 105
    double A[maxn][maxn];
    double B[maxn][maxn+1];
    double x[maxn];
    double b[maxn];
    int n;
    //求解Ax=b,其中A是方阵
    void gauss_jordan()
    {
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                B[i][j]=A[i][j];
            }
        }
        for(int i=0;i<n;i++){
            B[i][n]=b[i];
        }
        for(int i=0;i<n;i++){
            //把正在处理的未知数系数的绝对值最大的式子换到第i行
            int pivot=i;
            for(int j=i;j<n;j++){
                if(abs(B[j][i]>abs(B[pivot][i]))) pivot=j;
            }
            for(int j=0;j<=n;j++){
                swap(B[i][j],B[pivot][j]);
            }
            //无解或者无穷多解
            if(abs(B[i][i])<EPS) return;
            //把正在处理的未知数的系数变成1
            for(int j=i+1;j<=n;j++){
                B[i][j]/=B[i][i];
            }
            for(int j=0;j<n;j++){
                if(i!=j){
                    //从第j个式子中消去第i个未知数
                    for(int k=i+1;k<=n;k++){
                        B[j][k]-=B[j][i]*B[i][k];
                    }
                }
            }
        }
        for(int i=0;i<n;i++){
            x[i]=B[i][n];
        }
        return;
    }
    int main()
    {
        cin>>n;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                cin>>A[i][j];
            }
        }
        for(int i=0;i<n;i++){
            cin>>b[i];
        }
        gauss_jordan();
        for(int i=0;i<n;i++){
            cout<<x[i]<<" ";
        }
        printf("\n");
        return 0;
    }

    2.vector数组

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    using namespace std;
    const double EPS= 1e-8 ;
    typedef vector<double> vec;
    typedef vector<vec> mat;
    //求解Ax=b,其中A是方阵
    //当方程组无解或有无穷多解时,返回一个长度为0的数组
    vec gauss_jordan(const mat& A,const vec& b){
        int n=A.size();
        mat B(n,vec(n+1));
        //把A复制给B
        for (int i=0;i<n;i++)
            for (int j=0;j<n;j++) B[i][j]=A[i][j];
        //把正在处理的未知数系数的绝对值最大的式子换到第i行
        for (int i=0;i<n;i++) B[i][n]=b[i];
        for (int i=0;i<n;i++){
            int pivot=i;
            for (int j=i;j<n;j++){
                if (abs(B[j][i])>abs(B[pivot][i])) pivot=j;
            }
            swap(B[i],B[pivot]);
    
            //无解或有无穷多解
            if (abs(B[i][i])<EPS) return vec();
    
            //把正在处理的未知数系数变为1
            for (int j=i+1;j<=n;j++) B[i][j]/=B[i][i];
            for (int j=0;j<n;j++){
                if (i!=j){
                    //从第j个式子中消去第i个未知数
                    for (int k=i+1;k<=n;k++) B[j][k]-=B[j][i]*B[i][k];
                }
            }
        }
        vec x(n);
        //存放在右边的b就是答案
        for (int i=0;i<n;i++) x[i]=B[i][n];
        return x;
    }
    int main()
    {
        int n;
        cin>>n;
        mat A(n,vec(n));
        vec b(n);
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                cin>>A[i][j];
            }
        }
        for(int i=0;i<n;i++){
            cin>>b[i];
        }
        vec x=gauss_jordan(A,b);
        for(int i=0;i<n;i++){
            cout<<x[i]<<" ";
        }
        cout<<endl;
        return 0;
    }
    展开全文
  • 课堂笔记整理:割圆术计算圆周率的矩阵方法,高斯消元法及其Python求解。割圆术历史上阿基米德使用了接多边形利用周长计算圆周率的割圆术,刘徽和祖冲之使用了接多边形利用面积计算圆周率的割圆术。这里以周长法为例...

    课堂笔记整理:割圆术计算圆周率的矩阵方法,高斯消元法及其Python求解。

    割圆术

    历史上阿基米德使用了接多边形利用周长计算圆周率的割圆术,刘徽和祖冲之使用了接多边形利用面积计算圆周率的割圆术。这里以周长法为例。

    设圆直径

    equation?tex=d%3D1 ,圆的周长介于内接正

    equation?tex=k 边形与外接正

    equation?tex=k 边形之间:

    equation?tex=%5Cpi_%7Bk%7D%3Dk+l_%7Bk%7D+

    equation?tex=k+l_%7Bk%7D%5E%7B%5Cmathrm%7Bin%7D%7D%3C%5Cpi%3Ck+l_%7Bk%7D%5E%7B%5Cmathrm%7Bcir%7D%7D

    其中

    equation?tex=%5Cpi+_k 为正

    equation?tex=k 边形的周长。

    阿基米德通过割正96边形得到圆周率介于

    equation?tex=3.140845

    equation?tex=3.142857 之间。

    矩阵加速

    根据“正多边形周长逼近圆周率”的思想,可以考虑把正多边形的周长按边数

    equation?tex=k 的倒数进行展开:

    equation?tex=%5Cpi_%7Bk%7D%3D%5Cpi_%7B%5Cinfty%7D%2B%5Cfrac%7Bc_%7B1%7D%7D%7Bk%7D%2B%5Cfrac%7Bc_%7B2%7D%7D%7Bk%5E%7B2%7D%7D%2B%5Cfrac%7Bc_%7B3%7D%7D%7Bk%5E%7B3%7D%7D%2B%5Ccdots

    其中

    equation?tex=%5Cpi+_k 为正多边形周长,展开式的第一项

    equation?tex=%5Cpi+_%5Cinfty 为圆周率精确值,与

    equation?tex=k 无关,可以理解为分母上为

    equation?tex=k

    equation?tex=0 阶,因此即为

    equation?tex=%5Cpi+_%5Cinfty。第二项为

    equation?tex=%5Cfrac%7B1%7D%7Bk%7D 的一阶项,相应展开系数为

    equation?tex=c_1......以此类推。

    在实际求解中,不可能展开到无穷多阶,因此需要取截断,例如此处只取4项,即展开到

    equation?tex=%5Cfrac%7B1%7D%7Bk%7D

    equation?tex=3 次方阶。

    对圆内接正

    equation?tex=k_1 边形,可得展开式:

    equation?tex=%5Cpi_%7B%5Cinfty%7D%2Bc_%7B1%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B1%7D%7D%2Bc_%7B2%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B1%7D%5E%7B2%7D%7D%2Bc_%7B3%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B1%7D%5E%7B3%7D%7D%3D%5Cpi_%7Bk_%7B1%7D%7D

    同理,对圆内接正

    equation?tex=k_2

    equation?tex=k_3

    equation?tex=k_4 边形,可得展开式

    equation?tex=%5Cpi_%7B%5Cinfty%7D%2Bc_%7B1%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B2%7D%7D%2Bc_%7B2%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B2%7D%5E%7B2%7D%7D%2Bc_%7B3%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B2%7D%5E%7B3%7D%7D%3D%5Cpi_%7Bk_%7B2%7D%7D

    equation?tex=%5Cpi_%7B%5Cinfty%7D%2Bc_%7B1%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B3%7D%7D%2Bc_%7B2%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B3%7D%5E%7B2%7D%7D%2Bc_%7B3%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B3%7D%5E%7B3%7D%7D%3D%5Cpi_%7Bk_%7B3%7D%7D

    equation?tex=%5Cpi_%7B%5Cinfty%7D%2Bc_%7B1%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B4%7D%7D%2Bc_%7B2%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B4%7D%5E%7B2%7D%7D%2Bc_%7B3%7D+%5Ccdot+%5Cfrac%7B1%7D%7Bk_%7B4%7D%5E%7B3%7D%7D%3D%5Cpi_%7Bk_%7B4%7D%7D

    将该方程组写为矩阵形式:

    equation?tex=%5Cleft%5B%5Cbegin%7Barray%7D%7Bcccc%7D+%5Cmathbf%7B1%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B1%7D%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B1%7D%7D%5E%7B2%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B1%7D%7D%5E%7B3%7D%7D+%5C%5C+%5Cmathbf%7B1%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B2%7D%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B2%7D%7D%5E%7B2%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B2%7D%7D%5E%7B3%7D%7D+%5C%5C+%5Cmathbf%7B1%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B3%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B3%7D%5E%7B2%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B3%7D%5E%7B3%7D%7D+%5C%5C+%5Cmathbf%7B1%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B4%7D%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B4%7D%7D%5E%7B2%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B4%7D%5E%7B3%7D%7D+%5Cend%7Barray%7D%5Cright%5D++%5Cleft%5B%5Cbegin%7Barray%7D%7Bl%7D+%5Cpi_%7B%5Cinfty%7D+%5C%5C+c_%7B1%7D+%5C%5C+c_%7B2%7D+%5C%5C+c_%7B3%7D+%5Cend%7Barray%7D%5Cright%5D%3D%5Cleft%5B%5Cbegin%7Barray%7D%7Bl%7D+%5Cpi_%7Bk_%7B1%7D%7D+%5C%5C+%5Cpi_%7Bk_%7B2%7D%7D+%5C%5C+%5Cpi_%7Bk_%7B3%7D%7D+%5C%5C+%5Cpi_%7Bk_%7B4%7D%7D+%5Cend%7Barray%7D%5Cright%5D

    4个方程对应4个未知数:

    equation?tex=%5Cpi_%5Cinfty

    equation?tex=c_1

    equation?tex=c_2

    equation?tex=c_3 ,求解即可得到圆周率的值。

    下面使用高斯消元法进行求解。

    高斯消元法

    高斯消元法的思想是通过初等变换进行逐次消元,把方程组转化为等价的上三角方程组,之后从最后一个未知数开始逐次回带进行求解。

    对于

    equation?tex=n%5Ctimes+n 矩阵方程:

    equation?tex=%5Cleft%5B%5Cbegin%7Barray%7D%7Bccccc%7D+A_%7B11%7D+%26+A_%7B12%7D+%26+A_%7B13%7D+%26+%5Cdots+%26+A_%7B1+n%7D+%5C%5C+A_%7B21%7D+%26+A_%7B22%7D+%26+A_%7B23%7D+%26+%5Cdots+%26+A_%7B2+n%7D+%5C%5C+A_%7B31%7D+%26+A_%7B32%7D+%26+A_%7B33%7D+%26+%5Cdots+%26+A_%7B3+n%7D+%5C%5C+%5Cvdots+%26+%5Cvdots+%26+%5Cvdots+%26+%5Cddots+%26+%5Cvdots+%5C%5C+A_%7Bn+1%7D+%26+A_%7Bn+2%7D+%26+A_%7Bn+3%7D+%26+%5Cdots+%26+A_%7Bn+n%7D+%5Cend%7Barray%7D%5Cright%5D%5Cleft%5B%5Cbegin%7Barray%7D%7Bc%7D+x_%7B1%7D+%5C%5C+x_%7B2%7D+%5C%5C+x_%7B3%7D+%5C%5C+%5Cvdots+%5C%5C+x_%7Bn%7D+%5Cend%7Barray%7D%5Cright%5D%3D%5Cleft%5B%5Cbegin%7Barray%7D%7Bc%7D+b_%7B1%7D+%5C%5C+b_%7B2%7D+%5C%5C+b_%7B3%7D+%5C%5C+%5Cvdots+%5C%5C+b_%7Bn%7D+%5Cend%7Barray%7D%5Cright%5D

    将第1行乘消元系数

    equation?tex=-%5Cfrac%7BA_%7Bi1%7D%7D%7BA_%7B11%7D%7D 之后加到第

    equation?tex=i 行,可以消去

    equation?tex=A_%7Bi1%7D 项。对第2行到第n行进行该操作,可以将第1个元消去,使矩阵第1列中第1行以下元素全为0。

    之后开始消第2个元:将第2行乘

    equation?tex=-%5Cfrac%7BA_%7Bi2%7D%7D%7BA_%7B22%7D%7D 加到第i行,可以消去

    equation?tex=A_%7Bi2%7D 项。对第3行到第n行进行该操作,可以将第2个元消去,使矩阵第2列中第2行以下元素全为0。

    ......

    重复操作

    equation?tex=%28n-1%29 次,可以把系数矩阵化为上三角矩阵。

    为更清楚地展示高斯消元法的原理,此处使用for循环进行描述。一般而言,使用numpy中的矩阵写法比for循环高效很多。

    在逐次消元中,对第

    equation?tex=i%EF%BC%88i%3D1%2C2...n-1%EF%BC%89 个元进行消元操作,为第一层for循环。对第

    equation?tex=i 个元的操作过程中,将第

    equation?tex=i 列中

    equation?tex=A_%7Bii%7D 以下的元素

    equation?tex=A_%7Bji%7D 都消为0,为第二层for循环。在初等行变换中,

    equation?tex=A_%7Bji%7D 所在第

    equation?tex=j 行的每一个元素

    equation?tex=A_%7Bjk%7D%2Ck%3Di%2Ci%2B1...n 都需要进行相应的变换,为第三层for循环。列矢量

    equation?tex=%5Cmathbf%7Bb%7D 中每一行元素

    equation?tex=b_%7Bj%7D 也相应进行变换,

    equation?tex=b_j 每个元素单独为1行,因此跟随第

    equation?tex=j 的变换,位于第2层循环内。

    化为上三角矩阵后,可以由第

    equation?tex=n 行解得

    equation?tex=x_n ,而

    equation?tex=x_n 代入第

    equation?tex=%28n-1%29 行,可以解得

    equation?tex=x_%7Bn-1%7D ,将

    equation?tex=x_%7Bn%7D

    equation?tex=x_%7Bn-1%7D 代入第

    equation?tex=%28n-2%29 行......以此类推,得到方程的解。这一过程同样可以用for循环写,回带求解是逐次消元之后的步骤,因此该循环位于逐次消元的3重循环之外。

    Python计算圆周率

    def Gaussian(A, B): # 定义高斯消元函数

    dimen = len(A)

    for i in range(1, dimen): # 处理第i个元

    for j in range(i, dimen):

    ratio = A[j][i-1] / A[i-1][i-1] # 消元系数

    for k in range(i-1, dimen):

    A[j][k] = A[j][k] - A[i-1][k] * ratio # 消元

    B[j] = B[j] - B[i-1] * ratio

    B[dimen-1] = B[dimen-1] / A[dimen-1][dimen-1]

    for i in range(dimen-2, -1, -1):

    for j in range(dimen-1, i, -1):

    B[i] = B[i] - A[i][j] * B[j]

    B[i] = B[i] / A[i][i]

    pi = B[i]

    print('pi = ' + str(pi))

    return B

    编写函数时,有几个地方容易踩坑:range(a, b,1) 函数产生从

    equation?tex=a 开始逐个递增1直到

    equation?tex=b-1 的列表,range(b, a, -1) 产生从

    equation?tex=b 开始逐个递减1直到

    equation?tex=a%2B1 的列表,而矩阵的行(列)角标从0开始。

    回到计算圆周率的矩阵方程:

    equation?tex=%5Cleft%5B%5Cbegin%7Barray%7D%7Bcccc%7D+%5Cmathbf%7B1%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B1%7D%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B1%7D%7D%5E%7B2%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B1%7D%7D%5E%7B3%7D%7D+%5C%5C+%5Cmathbf%7B1%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B2%7D%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B2%7D%7D%5E%7B2%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B2%7D%7D%5E%7B3%7D%7D+%5C%5C+%5Cmathbf%7B1%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B3%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B3%7D%5E%7B2%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B3%7D%5E%7B3%7D%7D+%5C%5C+%5Cmathbf%7B1%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B4%7D%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B%5Cmathbf%7B4%7D%7D%5E%7B2%7D%7D+%26+%5Cfrac%7B%5Cmathbf%7B1%7D%7D%7B%5Cmathbf%7Bk%7D_%7B4%7D%5E%7B3%7D%7D+%5Cend%7Barray%7D%5Cright%5D++%5Cleft%5B%5Cbegin%7Barray%7D%7Bl%7D+%5Cpi_%7B%5Cinfty%7D+%5C%5C+c_%7B1%7D+%5C%5C+c_%7B2%7D+%5C%5C+c_%7B3%7D+%5Cend%7Barray%7D%5Cright%5D%3D%5Cleft%5B%5Cbegin%7Barray%7D%7Bl%7D+%5Cpi_%7Bk_%7B1%7D%7D+%5C%5C+%5Cpi_%7Bk_%7B2%7D%7D+%5C%5C+%5Cpi_%7Bk_%7B3%7D%7D+%5C%5C+%5Cpi_%7Bk_%7B4%7D%7D+%5Cend%7Barray%7D%5Cright%5D

    equation?tex=k_1%3D8%2Ck_2%3D16%2Ck_3%3D32%2Ck_4%3D64 ,即内接正8、16、32、64边形,根据割圆术可得相应多边形周长为:

    equation?tex=3.061467%2C+3.121445%2C+3.136548%2C+3.140331 ,使用高斯消元法求解为:

    A = [[1, 1 / 8 ** 2, 1 / 8 ** 3, 1 / 8 ** 4], [1, 1 / 16 ** 2, 1 / 16 ** 3, 1 / 16 ** 4], [1, 1 / 32 ** 2, 1 / 32 ** 3, 1 / 32 ** 4], [1, 1 / 64 ** 2, 1 / 64 ** 3, 1 / 64 ** 4]]

    B = [3.061467, 3.121445, 3.136548, 3.140331]

    Gaussian(A, B)

    输出:

    pi = 3.14159273968254

    同理,取外接正8、16、32、64边形,根据割圆术可得相应多边形周长为:

    equation?tex=3.313708%2C+3.182598%2C+3.151725%2C+3.144118 ,计算得:

    pi = 3.1415906412698416

    相比之下,阿基米德割圆周长为正96边形,得到圆周率位于

    equation?tex=3.140+845 ~

    equation?tex=3.142+857 之间(与

    equation?tex=%5Cpi 前3位数字相符),刘徽割圆面积为正192边形,得到圆周率位于

    equation?tex=3.141+0 ~

    equation?tex=3.1427 之间(与

    equation?tex=%5Cpi 前3位数字相符)。

    使用矩阵改进的割圆术,在最多割圆为正64边形的情况下,可以求得圆周率位于

    equation?tex=3.14159273968254 ~

    equation?tex=3.1415906412698416 之间(与

    equation?tex=%5Cpi 前6位数字相符),而祖冲之得到类似精度的圆周率

    equation?tex=3.141+596 ~

    equation?tex=3.141+597 (与

    equation?tex=%5Cpi 前6位数字相符),则割圆为正24576边形。

    Reference:

    2、周善贵,《计算物理》课程讲义

    展开全文
  • 高斯消元法

    2020-11-10 15:38:17
    上一课介绍的解线性方程组的方法,叫作高斯消元法。不过虽然冠以数学王子高斯之名,但是各个国家的古代数学中均已涉及该方法。比如中国的《九章算术》: 我们以一个线性方程组为例,来介绍下高斯消元法的通用...
  • 高斯消元法求解方程组的解(c语言版),用c语言实现了高斯消元法求解方程组的解的过程。结合程序有助于理解此方法的原理和过程
  • 高斯消元法用于讨论线性方程组的解。 1、概念 齐次线性方程组:所有方程的常数项均为0 非齐次线性方程组:方程的常数项不均为0 线性方程组的各项系数构成系数矩阵 线性方程组的各项系数和常数项构成增广矩阵 ...
  • 【模板】高斯消元法

    2020-08-22 14:52:32
    P3389 【模板】高斯消元法,模板题,我用了高斯-约旦消元法
  • 高斯消元法c++编程

    2013-07-09 15:33:41
    代码附带注释,易于理解解线性方程组的学习非常有用处。程序代码为c++编写。
  • 高斯消元法对于学过线性代数的我们算是一个比较熟悉的名词,一般高斯消元法是用来求解线性方程的组的一个算法,今天我们就来复习一下高斯消元法。 忘了?没有关系,我们慢慢来。 什么是高斯消元法,怎么用? ...
  • 我一般用高斯-约旦消元法,这种方法是直接转换成单位矩阵求解,减少回带次数,提高精确度,实现方式如下: 下方是一个方程 把它转换成矩阵形式就是: 我们可以这样其进行变换: 在第一行找到第一个元素,向...
  • 算法--高斯消元法

    2019-07-30 08:05:20
    有一种隐忍其实是蕴藏着的一种力量,有一种静默其实是惊天的告白。...可是理解思路只是第一步,最关键的还是由代码实现,下面有高斯消元法的详细解释,然后再贴一个模板,用的时候方便些。 点我...
  • 深入理解高斯消元法:解方程、线性相关和有解的条件|线性代数笔记 本文透彻讲解高斯消元法的各种意义和过程,不局限于它的解方程功能,探索更深刻的含义。先讲解解方程的过程,再介绍相关的概念、解读背后的原理。...
  • 高斯消元法讲解

    2021-05-29 17:27:36
    高斯消元的本质就是化简成一个阶梯式的行列式。 首先线性方程组的解有以下三种情况: 无解 有无穷多个解 有唯一解 高斯消元的步骤分为以下四步: 枚举每一行找到当前行(包括当前行)下面的,当前列的绝对值最大的...
  • 高斯消元法(一):简介

    千次阅读 2017-12-06 23:19:36
    简介高斯消去
  • 高斯消元法(Gauss Elimination)

    千次阅读 2018-08-07 14:47:29
    高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵。 高斯消元法的原理是: 若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组。 所以我们...
  • 高斯消元法 求线性方程组 方程组采用随机数的方式进行赋值 注释较多 方便理解
  • 高斯消元法与LU分解

    千次阅读 2019-04-22 18:27:24
    1.高斯消去 有一般方程:Ax=b; 图1 ​​ 正常思路消元到最后,可以求出,回带之前的方程,可以解出. 图2 但是一旦数据规模大了,那么便很麻烦,很难求解。 ...
  • 基于matlab的数值分析算法的程序设计,利用该软件内核包含的关键而复杂的数值算法,大大提高编程效率。充分利用软件,通过实验加强对于数值计算典型特征的理解
  • 高斯消元法解方程

    千次阅读 2011-05-27 17:17:00
     高斯消元法可用来找出下列方程组的解或其解的限制: 2x + y - z = 8 (L1) -3x - y + 2z = -11 (L2) -2x + y + 2z = -3 (L3) 这个算法的原理是: 首先,要将L1 以下的等式中的x 消除,然后再将L2 以下的...
  • 数论--高斯消元法

    2017-09-09 12:08:00
    高斯消元是一个常用的解n元一次方程组的方法。 1.处理数据: 我们设方程Ai−>ai1x1+ai2x2+…ainxn=bi 那么对于A1−An这n个方程,我们可以将它们放在一个矩阵里,方便操作。 例如这样: 2x1+4x2=10 −3x1+2...
  • 当然,为了学习还是用高斯消元法做的。  Discuss也有人讨论了,4不是质数,求解过程中不能模4,不一定有解的问题。按照我的理解,题目既然说了有唯一解,就不用考虑这个问题了。  另外,寻找当前列的对应行时不能...
  • 关于高斯消元法,代码注释已经很详细了,gauss函数实际是一个通用的求解函数,如果无解返回-1,有解返回矩阵的秩 数组a,行表示开关,列表示方案(每个开关“领衔”一种方案,所以行列数相等) 为什么能消元,可以...

空空如也

空空如也

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

对高斯消元法的理解