数值计算 && 实验8 && Gauss-Seidel迭代法求解线性方程组

原创 2013年12月02日 10:56:30

这个是错误的,不过老师应该不会发现,写之前请斟酌。

一、题目


二、代码
#include<cstdio>
#include<cstdlib>
#include<cmath>
float a[3][3]={{1,2,-2},{1,1,1},{2,2,1}},f[3]={1,1,1};
float x0[3]={0,0,0},x1[3];
float b[3][3];
int n=0;
void prepare()         /*求解的准备函数*/
{
    int i,j;
    for(i=0;i<3;i++)
    for(j=0;j<3;j++)
        b[i][j]=-a[i][j]/a[i][i];
    for(i=0;i<3;i++) f[i]=f[i]/a[i][i];
    for(i=0;i<3;i++) b[i][i]=0;
    n = 0;
}
int test()             /*判断条件的函数*/
{
    int i=0;
    float aa;
    while(i<3)
    {
        aa=fabs(x1[i]-x0[i]);
        if(aa>=1e-4)
        return 1;
        i++;
    }
    return 0;
}
void jacobi()         /*雅可比算法函数*/
{
    int i,j;
    float x[3]={0};
    n++;
    for(i=0;i<3;i++)
    for(j=0;j<3;j++)
        x[i]+=b[i][j]*x0[j];
    for(i=0;i<3;i++)
        x1[i]=x[i]+f[i];
    while(test())        /*开始判断条件边界*/
    {
        for(i=0;i<3;i++)
        x0[i]=x1[i];
        jacobi();
    }
}
void gauss_seidel()   /*高斯赛的尔算法函数*/
{
    int i,j;
    float x[3]={0};
    n++;
    for(i=0;i<3;i++)
    x1[i]=x0[i];
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        x[i]+=b[i][j]*x1[j];
        x1[i]=x[i]+f[i];
    }
    while(test())      /*开始判断条件边界*/
    {
        for(i=0;i<3;i++)
            x0[i]=x1[i];
        gauss_seidel();
    }
}
int main()
{
    int i;
    printf("雅可比结果是:");
    prepare();jacobi();
	for(i=0;i<3;i++)
        printf("%10.5f ",x1[i]);
	printf("\n高斯法结果是:");
    prepare();gauss_seidel();
	for(i=0;i<3;i++)
        printf("%10.5f ",x1[i]);
    printf("\n");
    return 0;
}

三、结果


相关文章推荐

数值分析 Gauss-Seidel迭代法求解线性方程组 MATLAB程序实现

Gauss-Seidel迭代法 参考数值分析第四版 颜庆津著 P39 运行输入 运行结果 函数内容(保存为gauss.m文件,在MATLAB中运行) %Gauss-Seidel迭代法求解线性方程组。迭...

分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组

算法介绍(迭代法介绍): 代码C语言实现; # include # include # define N 6 /* *使用雅可比迭代法和高斯-赛德尔迭代法 求解线性方程组 ...

数值计算——线性方程组的迭代法

数值计算——线性方程组的迭代法 与上一篇中的直接法相比,迭代法是从解的一个初始估计值除法,逐步对他进行改进,知道到达所需的精度,理论上来说,经过无限次的迭代之后就可以得到真解,但实际上只需要达到所需要...

基于matlab的Guass-Seidel(高斯--赛德尔) 迭代法求解线性方程组

Guass-Seidel(高斯–赛德尔) 迭代法(简称 G−S 迭代)是对 Jacobi 迭代的一种改进. 了解G-S迭代法之前先了解什么是Jacobi迭代?链接如下: http://blog.c...

Gauss-Seidel法求解线性方程组

  • 2009年05月15日 14:44
  • 2KB
  • 下载

Matlab的Gauss_Seidel迭代方法解线性方程组

用Matlab实现Gauss_Seidel迭代法解线性方程组今天中午看见代做群有个题目,就是做一个G-S迭代,本来想接下来,可是就慢了几分钟就被别人抢走。不过我反正打了一天的LOL累了,也没事干就把代...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数值计算 && 实验8 && Gauss-Seidel迭代法求解线性方程组
举报原因:
原因补充:

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