以下是使用高斯塞德尔迭代法求解三元一次方程组的C程序:

#include <stdio.h>
#include <math.h>

#define N 3    // 方程组的未知数个数
#define MAX_ITER 1000    // 最大迭代次数
#define EPSILON 1e-5    // 精度要求

int main()
{
    double A[N][N+1] = {{2, -1, 0, 1},
                        {-1, 2, -1, 0},
                        {0, -1, 2, 1}};    // 系数矩阵
    double x[N] = {0};    // 初始解
    double x_new[N] = {0};    // 新解
    int iter = 0;    // 迭代次数

    // 进行迭代计算
    while (iter < MAX_ITER)
    {
        double max_error = 0;    // 最大误差
        for (int i = 0; i < N; i++)
        {
            x_new[i] = A[i][N];    // 先赋值为常数项
            for (int j = 0; j < N; j++)
            {
                if (i != j)
                {
                    x_new[i] -= A[i][j] * x[j];    // 减去其他未知数的系数乘以当前未知数的值
                }
            }
            x_new[i] /= A[i][i];    // 除以当前未知数的系数
            double error = fabs(x_new[i] - x[i]);    // 计算误差
            if (error > max_error)
            {
                max_error = error;    // 更新最大误差
            }
            x[i] = x_new[i];    // 更新解
        }
        iter++;    // 迭代次数加1
        if (max_error < EPSILON)
        {
            break;    // 达到精度要求,停止迭代
        }
    }

    // 输出结果
    if (iter < MAX_ITER)
    {
        printf("Solution:\n");
        for (int i = 0; i < N; i++)
        {
            printf("x[%d] = %.6f\n", i, x[i]);
        }
        printf("Number of iterations: %d\n", iter);
    }
    else
    {
        printf("Failed to converge within %d iterations.\n", MAX_ITER);
    }

    return 0;
}

程序中使用了一个while循环进行迭代计算,每次循环都计算新的解,并判断误差是否达到精度要求。如果达到了精度要求,就停止迭代并输出结果;如果迭代次数达到了最大次数但还没有达到精度要求,就认为迭代失败。

在程序中,我们通过一个N×(N+1)的矩阵A来表示三元一次方程组的系数矩阵和常数项。在每次迭代中,我们都遍历矩阵A的每一行,计算新的解,并更新当前解。在计算新的解时,我们先将当前未知数的系数乘以当前解,然后减去其他未知数的系数乘以它们的解,最后除以当前未知数的系数,得到新的解。计算误差时,我们使用fabs函数计算绝对值

给我一个高斯塞德尔迭代法C程序求解三元一次方程组要求精度小于10的-5次方

原文地址: https://www.cveoy.top/t/topic/dT36 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录