| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 931 人关注过本帖
标题:请大家帮我看一下这个程序为什么不对?(高斯列主元消去法解方程组)
只看楼主 加入收藏
wbcxf
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-11-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
请大家帮我看一下这个程序为什么不对?(高斯列主元消去法解方程组)
#include<iostream>
#include<math.h>
using namespace std;
const int N=9;
double X[N],Y[N]={-15,27,-23,0,-20,12,-7,7,10};
double A[N][N]={{31,-13,0,0,0,-10,0,0,0},{-13,35,-9,0,-11,0,0,0,0},
                           {0,-9,31,-10,0,0,0,0,0},{0,0,-10,79,-30,0,0,0,-9},
                            {0,0,0,-30,57,-7,0,-5,0},{0,0,0,0,-7,47,-30,0,0},
                            {0,0,0,0,0,-30,41,0,0},{0,0,0,0,-5,0,0,27,-2},
                             {0,0,0,-9,0,0,0,-2,29}};
void SortFun()  //选主元,化成三角矩阵。
{
    double  ta,tb,m;
    int max,i,k,j;
    for(k=0;k<N;k++)
      {
          max=k;
          for(i=k+1;i<N;i++)
          {
              if(fabs(A[i][k])>fabs(A[max][k]))
                  max=i;
          }
          if(i!=k)
          {
              for(j=0;j<N;j++)
              {
                ta=A[k][j];A[k][j]=A[max][j];A[max][j]=ta;
              }
              tb=Y[k];Y[k]=Y[max];Y[max]=tb;
          }
          for(i=k+1;i<N;i++)
          {
            m=A[i][k]/A[k][k];
            for(j=k;j<N;j++)
               A[i][j]=A[i][j]-A[k][j]*m;
               Y[i]=Y[i]-m*Y[k];
          }
       }
return;
}

void FigurFun()  //求解过程
{
    X[N-1]=Y[N-1]/A[N-1][N-1];
    double sum=0;
    for(int i=N-2;i>=0;i--)
      {
        for(int j=i+1;j<N;j++)
        {
          sum+=A[i][j]*X[j];
        }
        X[i]=(Y[i]-sum)/A[i][i];
     }
    return;
}
void main(void)
{
    SortFun();                        
    FigurFun();
    cout << "The final A is:" << endl;
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
        {
            cout <<  A[i][j];
            cout << "  ";
            if((j+1)%9==0)
            cout << endl;
        }
        cout << "The final Y is:" << endl;
    for(int i=0;i<N;i++)
    {
        cout << "   ";
         cout << Y[i];
    }
    cout << endl <<  "The root is:" << endl;
    for(int i=0;i<N;i++)
       {
        cout << X[i] << "     ";
        if((i+1)%3==0) cout << endl;
       }
}
搜索更多相关主题的帖子: 消去法 高斯 解方程 
2009-11-23 11:23
ltyjyufo
Rank: 9Rank: 9Rank: 9
来 自:未来
等 级:蜘蛛侠
威 望:2
帖 子:353
专家分:1166
注 册:2009-10-25
收藏
得分:20 
在main()函数里有两个地方的变量“i”是重复定义。。。。
就是这两个:for(int i=0;i<N;i++)
    {
        cout << "   ";
         cout << Y[i];
    }
    cout << endl <<  "The root is:" << endl;
    for(int i=0;i<N;i++)
       {
        cout << X[i] << "     ";
        if((i+1)%3==0) cout << endl;
       }

你把那两个for循环里的“i”换成不同的就可以了。。。
  你的输出控制不是很好,所以输出的结果很乱。。。。改进一下啊。。。

[ 本帖最后由 ltyjyufo 于 2009-11-23 16:32 编辑 ]

翱翔天空的雄鹰固然令人羡慕,却容易被禁锢于牢笼之中,只有那夜色中的蝙蝠才是真正自由的飞翔者....
2009-11-23 16:30
wbcxf
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-11-16
收藏
得分:0 
谢谢,我编译到是没问题,是解出来的结果不对,改完后还一样啊,不知道是算法哪弄错了。
2009-11-23 18:58
快速回复:请大家帮我看一下这个程序为什么不对?(高斯列主元消去法解方程组)
数据加载中...
 
   



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

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