关闭

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

标签: 数值计算
631人阅读 评论(0) 收藏 举报
分类:

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

一、题目


二、代码
#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;
}

三、结果


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:21547次
    • 积分:541
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论