| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 331 人关注过本帖
标题:高斯列主元消去法--为什么换行没有成功,但是能得到正确答案
只看楼主 加入收藏
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
高斯列主元消去法--为什么换行没有成功,但是能得到正确答案
#include<stdio.h>
#include<math.h>
    int main(void)
    {
        double a[50][50],x[50],temp,sum,s;
        int i,j,k,r,n;
        printf("请输入线性方程组的系数:\n");
        scanf("%d",&n);
        printf("请输入线性方程组的元素值:\n");
        for(i=0;i<n;i++)
        {
            for(j=0;j<=n;j++)
                scanf("%lf",&a[i][j]);
        }
        printf("刚才输入的矩阵为:\n");
        for(i=0;i<n;i++)
        {
            for(j=0;j<=n;j++)
            {
                printf("%10lf",a[i][j]);
            }
            printf("\n");
        }
        k=0;
        do
        {
            r=k;
            for(i=k;i<n;i++)
            {
                if(fabs(a[r][k])<fabs(a[i][k]))/*先进行比较,看看第一行第一列的元素是否比后面的大,行变化,列不变*/
                    r=i;/*如果第一行,第一列的元素已经是最大的则不用交换,r=i*/
                if(r>k)/*将第一行和后面的行交换,a[r][j]通过temp和a[k][j]交换*/
                    for(j=k;j<=n;j++)
                    {
                        temp=a[r][j];
                        a[r][j]=a[k][j];
                        a[k][j]=temp;
                    }
            }/*交换成功,接下来进行计算*/
            for(i=k+1;i<n;i++)
            {
                s=a[i][k]/a[k][k];
                for(j=k;j<=n;j++)
                {
                    a[i][j]=a[i][j]-s*a[k][j];
                }
            }
            k++;
        }
            while(k<n-1);/*循环结束条件*/
                printf("输出计算后的矩阵为:\n");
            for(i=0;i<n;i++)
            {
                for(j=0;j<=n;j++)
                {
                    printf("%10lf",a[i][j]);
                }
                printf("\n");
            }
            for(k=n-1;k>=0;k--)
            {
                sum=0;
                for(j=k+1;j<n;j++)
                    sum+=a[k][j]*x[j];
                x[k]=(a[k][n]-sum)/a[k][k];
            }
            for(k=0;k<n;k++)
            printf("x[%d]=%lf\n",k,x[k]);
            return 0;
    }
            


搜索更多相关主题的帖子: 正确答案 include 元素 
2012-12-19 16:47
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
收藏
得分:0 
a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]
a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]
a[2][0] a[2][1] a[2][2] a[2][3] a[2][4]
a[3][0] a[3][1] a[3][2] a[3][3] a[3][4]

a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]
        a[1][1] a[1][2] a[1][3] a[1][4]
        a[2][1] a[2][2] a[2][3] a[2][4]
        a[3][1] a[3][2] a[3][3] a[3][4]

a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]
        a[1][1] a[1][2] a[1][3] a[1][4]
                a[2][2] a[2][3] a[2][4]
                a[3][2] a[3][3] a[3][4]

a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]
        a[1][1] a[1][2] a[1][3] a[1][4]
                a[2][2] a[2][3] a[2][4]
                        a[3][3] a[3][4]

拿这个为例子,在红色部分选取最大的,第一个红色的如果已经是最大的,不用交换,如果不是最大的,将最大的那一行换到红色部分的最大行
大家帮忙看看,交换那一部分,应该怎么修改啊

菜鸟也疯狂
2012-12-19 17:41
w527705090
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:441
专家分:1882
注 册:2011-6-28
收藏
得分:20 
我还是没明白你说的换行是个什么规则。。。
你说的将最大的那一行换到红色部分的最大行,你这里指的是什么?

有心者,千方百计;无心者,千难万难。
2012-12-20 20:52
快速回复:高斯列主元消去法--为什么换行没有成功,但是能得到正确答案
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011784 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved