雅克比迭代

    基本思想:
    对线性方程组AX=b的系数矩阵A可逆且主对角元素均不为0,令D=diag(a11,a22,a33,…ann),并将A分解成A=(A-D)+D,从而方程组可写为DX=(D-A)X+b,令X=B1X+f1,其中B1=I-AD-1,f1=bD-1,以B1为迭代矩阵的迭代法公式:X(k+1)=B1X(k)+f1,称为雅克比迭代法。
    eg:
    这里写图片描述

    #include "stdafx.h"
    #include<stdio.h>
    #include<math.h>
    int main()
    {
        /*x0[..]和x1[..]分别表示第k次和第k+1次迭代结果,且初始x[0]=0*/
       double e,m,q,A[12][12],x0[12],x1[12];
       int n,i,j,k;
       printf("请输入方程组的阶数(小于等于10):\n");
       scanf("%d",&n);
       //存入增广矩阵
       for(i=1;i<=n;i++)
       {
           printf("请输入增广矩的第%d行:\n",i);//逐行输入增广矩阵
           for(j=1;j<=n+1;j++)
           scanf("%lf",&A[i][j]);
           x0[i]=0.0;        //对x0[i]赋初值
       }
       //误差限输入
    printf("请输入误差限e:\n");
    scanf("%lf",&e);
    
    /*按照迭代公式x1[i]=(A[i][n+1]-A[i][j]*x0[j)/A[i][i](1<=i<=n,j!=i,k=0,1,2,3...)计算求解*/
    for(i=1;i<=n;i++)
    {
        m=0.0;
        for(j=1;j<=i-1;j++)
            m=m+A[i][j]*x0[j];
        for(j=i+1;j<=n;j++)
            m=m+A[i][j]*x0[j];
        x1[i]=(A[i][n+1]-m)/A[i][i];
    }
    q=0.0;//q为x1[..]与x0[..]间的误差
    for(i=1;i<=n;i++)
        q=q+fabs(x1[i]-x0[i]); //控制精度
     /*当不满足精度要求则执行迭代过程*/
    while(q>e)      
    {
        //更新第k次
       for(i=1;i<=n;i++)
         x0[i]=x1[i];
       /*按照迭代公式x1[i]=(A[i][n+1]-A[i][j]*x0[j)/A[i][i](1<=i<=n,j!=i,k=0,1,2,3...)计算求解*/
       for(i=1;i<=n;i++)
       {
         m=0.0;
         for(j=1;j<=i-1;j++)//每一次加都是缺少主元素,我只能用两个循环来实现跳跃
            m=m+A[i][j]*x0[j];
         for(j=i+1;j<=n;j++)
            m=m+A[i][j]*x0[j];
         x1[i]=(A[i][n+1]-m)/A[i][i];
       }
       q=0.0;
       for(i=1;i<=n;i++)
       q=q+fabs(x1[i]-x0[i]);
    }//while
    printf("线性方程组的解为:\n");
    for(i=1;i<=n;i++)
        printf("x[%d]=%.4lf\n",i,x1[i]);
    return 0;
    }
    
    
    • 0
      点赞
    • 4
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值