数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 6569|回复: 1

我写的C++版通用列主高斯消去程序,大家多多指教

[复制链接]
发表于 2007-10-30 16:37:08 | 显示全部楼层 |阅读模式
#include<iostream>
#include<cmath>
#include<malloc.h>
using namespace std;
void main()
{
int i,j,n;
float **a,*b,*x;
cout<<"请输入系数矩阵的规模n:"<<endl;
cin>>n;
a=(float **)malloc(n*sizeof(float *));
b=(float *)malloc(n*sizeof(float));
x=b;
for(i=0;i<n;i++)
  a=(float *)malloc(n*sizeof(float));
cout<<"矩阵初始化A:"<<endl;               //矩阵形式AX=B
for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  cin>>a[j];
cout<<"矩阵初始化B:"<<endl;
for(i=0;i<n;i++)
  cin>>b;
int k=0,l;float d,t=1;
while(k!=n-1)
{
  d=a[k][k];
  l=k;
  i=k+1;
  while(i!=n)
  {
   if(fabs(a[k])>fabs(d))
   {
    d=a[k];
    l=i;
   }
   i++;
  }
  if(d==0)
  {
   cout<<"矩阵奇异!";
   break;
  }
  else
   if(k!=l)
   {   
    for(j=k;j<n;j++)
    {
     t=a[l][j];
        a[l][j]=a[k][j];
        a[k][j]=t;
    }
    t=b[l];
    b[l]=b[k];
    b[k]=t;
   }
   for(i=k+1;i<n;i++)
    a[k]=a[k]/a[k][k];
   for(i=k+1;i<n;i++)
    for(j=k+1;j<n;j++)
     a[j]=a[j]-a[k]*a[k][j];
    for(i=k+1;i<n;i++)
     b=b-a[k]*b[k];
    for(i=0;i<n;i++)
     for(j=0;j<n;j++)
      if(i==j)t*=a[j];
      if(t==0)
      {
       cout<<"系数矩阵退化原方程有无穷解"<<endl;
       break;
      }
    k++;
}
if(t!=0)
{
  b[n-1]=b[n-1]/a[n-1][n-1];
     for(i=n-2;i>=0;i--)
  {
  float sum=0.0;
  for(j=i+1;j<n;j++)
   sum+=a[j]*b[j];
  b=(b-sum)/a;
  }
     cout<<"输出结果:"<<endl;
     for(i=0;i<n;i++)
  {
  cout<<"x["<<i<<"]=";
  cout<<x<<endl;
  }
   
}
}
发表于 2008-1-2 16:46:32 | 显示全部楼层
我用下。。。。。
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-26 19:20 , Processed in 0.069967 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表