C语言实现雅可比迭代(计算方法)

#include <stdio.h>
#include <stdlib.h>
#define MAX 10

double A[MAX][MAX];
double b[MAX];
double X[MAX];
double Y[MAX];
double X0[MAX];
int NUM;
double epsilon=1e-5;

void Input_Matrix()//输入矩阵
{
    int i,j;
    printf("系数矩阵A的阶数:\n");
    scanf("%d",&NUM);
    for(i=1; i<=NUM; i++)
    {
        printf("系数矩阵A的第%d行元素:\n",i);
        for(j=1; j<=NUM; j++)
            scanf("%lf",&A[i-1][j-1]);
    }
    printf("右端项b:\n");
    for(i=1; i<=NUM; i++)
    {
        scanf("%lf",&b[i-1]);
    }
    printf("输入的系数矩阵A:\n");
    for(i=0; i<NUM; i++)
    {
        for(j=0; j<NUM; j++)
            printf("%.4lf\t",A[i][j]);
        printf("\n");
    }
    printf("输入的右端项b:\n");
    for(i=0; i<NUM; i++)
        printf("%.4lf\n",b[i]);
    printf("\n");
    printf("输入初值X0:\n");
    for(i=1; i<=NUM; i++)
    {
        scanf("%lf",&X0[i-1]);
    }
}

double NF2()
{
    int i;
    double z,sum1=0;
    for(i=0; i<NUM; i++)
    {
        sum1+=pow(Y[i]-X[i],2);
    }
    z=sqrt(sum1);
    return z;
}

int main()
{
    int i,j;
    double sum;
    Input_Matrix();
    //雅可比迭代法
    for(i=0; i<NUM; i++)
    {
        Y[i]=X0[i];
    }
    printf("\n");
    printf("雅可比迭代法\n");
    printf("迭代过程如下:\n");
    do
    {
        for(i=0; i<NUM; i++)
        {
            X[i]=Y[i];
        }
        for(i=0; i<NUM; i++)
        {
            sum=0;
            for(j=0; j<NUM; j++)
            {
                if(j!=i)
                    sum+=A[i][j]*X[j];
            }
            Y[i]=(b[i]-sum)/A[i][i];
        }
        for(i=0; i<NUM; i++)
        {
            printf("%lf\t",Y[i]);
        }
        printf("\n");
    }
    while(NF2()>epsilon);
    printf("解出方程组的解:\n");
    for(i=0; i<NUM; i++)
    {
        printf("%lf\t",Y[i]);
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值