| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:高撕消元
只看楼主 加入收藏
daringqq
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-9
收藏
 问题点数:0 回复次数:3 
高撕消元
谁写过啊
搜索更多相关主题的帖子: 高撕 
2006-05-09 12:35
hulidetian
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-5-11
收藏
得分:0 
不太好 不过可以用 在c++的平台上

#include "iostream.h"
void main()
{float a[5][6],t,x[5],g,s;
int i,j,k,m,h,l,p;
cout<<"请输入k的值:";
cin>>k;
cout<<"请输入个"<<k*(k+1)<<"个数:";

for(i=0;i<k;i++)
for(m=0;m<k+1;m++)
cin>>a[i][m];

for(i=0;i<k;i++)
{for(m=0;m<k+1;m++)
cout<<a[i][m]<<"\t";
cout<<"\n";}


for(h=0;h<k;h++)
{if(a[h][h]==0)
for(j=h+1;j<=k-1;j++)
{if(a[j][h]!=0)
for(m=0;m<=k;m++)
{t=a[h][m];
a[h][m]=a[j][m];
a[j][m]=t;}
else continue;}

for(i=h;i<k;i++)
{t=a[i+1][h];
for(j=0;j<k+1;j++)
{a[i+1][j]-=a[h][j]*(t/a[h][h]);}}}


cout<<"消元后得:"<<"\n";
for(i=0;i<k;i++)
{for(m=0;m<k+1;m++)
cout<<a[i][m]<<"\t";
cout<<"\n";
}

for(l=k-1;i>=0;i--)
for(p=l;l>=0;l--)
if(a[l][p]!=0)
{x[k-1]=a[k-1][k]/a[k-1][k-1];
for(i=k-2;i>=0;i--)
{g=0;
for(j=k-1;j>i;j--)
{g+=x[j]*a[i][j];}
x[i]=(a[i][k]-g)/a[i][i];
}
cout<<"解如下:";
cout<<"x["<<l<<"]"<<"="<<x[l]<<"\t";}

else {cout<<"无解";break;}
}

2006-05-11 23:53
yuanhong
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-4-2
收藏
得分:0 

高斯列主元消去
#include"iostream"
#include"iomanip"
#include"cmath"
using namespace std;
#define N 15
class Gauss
{
public:
Gauss(){cout<<"please input the number:"<<endl;
cin>>n;
cout<<"please int the matrix a:"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
cout<<"please input the matrix b:"<<endl;
for(i=0;i<n;i++)
cin>>b[i];
k=0;
}
int choose();
int xiaoyuan();
void huidai();
void slove();
private:
int i,j,k,n;
double a[N][N],b[N];
};
int Gauss::choose()
{
double d=a[k][k];
int l;
i=k+1;l=k;
for(;i<n;i++)
{ if(fabs(a[i][k])>fabs(d))
{
d=a[i][k];
l=i;
}
}
if(d==0)
{
cout<<"choose failed"<<endl;
return 0;
}
else
{if(l!=k)
{
double t;
for(j=k;j<n;j++)
{
t=a[l][j];
a[l][j]=a[k][j];
a[k][j]=t;
}
t=b[k];b[k]=b[l];b[l]=t;
return 1;
}
else return 1;
}
}
int Gauss::xiaoyuan()
{
int p=choose();
if(p==0) return 0;
else
{
for(j=k+1;j<n;j++)
a[k][j]=a[k][j]/a[k][k];
b[k]=b[k]/a[k][k];


for(i=k+1;i<n;i++)
{
float temp=a[i][k];
for(j=k+1;j<n;j++)
a[i][j]=a[i][j]-temp*a[k][j];


b[i]=b[i]-temp*b[k];
}
return 1;
}
}
void Gauss::huidai()
{
for(i=n-1;i>=0;i--)
{
double num=0;
for(j=i+1;j<n;j++)
num+=a[i][j]*b[j];
b[i]=b[i]-num;
}
}
void Gauss::slove()
{
int q=1;
while((q!=0)&&(k<n))
{

q=xiaoyuan();
k++;
}
if(q==0) return;
huidai();
cout<<endl;
for(i=0;i<n;i++)
cout<<setw(10)<<b[i];
cout<<endl;
}
int main()
{ Gauss a;
a.slove();
return 1;
}


2006-05-15 22:53
jzb929
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-4-12
收藏
得分:0 

void Guass()
{
double a[n][n+1]={0};
int k,i0;
double p,t,li,ep,sum;
printf("输入%d*%d的矩阵:\n",n,n+1);//输入系数矩阵
for(int i=0;i<n;i++)
for(int j=0;j<n+1;j++)
scanf("%lf",&a[i][j]);
printf("%d*%d的矩阵为:\n",n,n+1);
for(i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
printf("%5.2lf ",a[i][j]);
printf("\n");
}
/*消元*/
printf("输入ep:\n");
scanf("%d",&ep);
for(k=0;k<=n;k++)
{
p=0;
i0=k;
for(i=k;i<n;i++)//选主元
{
if(fabs(a[i][k])>p)
{
p=fabs(a[i][k]);
i0=i;
}
if(fabs(a[i0][k])<ep)printf("中断!\n");
}
for(int j=k;j<=n;j++)//换行
{
t=a[k][j];
a[k][j]=a[i0][j];
a[i0][j]=t;
}
for(i=k+1;i<=n;i++)//消元
{
li=a[i][k]/a[k][k];
a[i][k]=0;
for(j=k+1;j<=n;j++)
{
a[i][j]=a[i][j]-a[k][j]*li;
}
}
}
printf("高斯列主元法%d*%d的矩阵为:\n",n,n+1);
for(i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
printf("%5.2lf ",a[i][j]);
printf("\n");
}
a[n-1][n]=a[n-1][n]/a[n-1][n-1];//回代
for(i=n-2;i>=0;i--)
{
sum=0;
for(int j=i+1;j<n;j++)
{
sum=sum+a[i][j]*a[j][n];
}
a[i][n]=(a[i][n]-sum)/a[i][i];
}
for(i=0;i<n;i++)
{
printf("x%d=%5.2lf ",i+1,a[i][n]);
printf("\n");
}
}
double Guass_Seidel()
{
double c[n][n],d[n],x[n];
double a[n][n+1]={0};
int k,Nmax;
double ep,emax,s,t;
printf("输入%d*%d的矩阵:\n",n,n+1);//输入系数矩阵
for(int i=0;i<n;i++)
for(int j=0;j<n+1;j++)
scanf("%lf",&a[i][j]);
printf("%d*%d的矩阵为:\n",n,n+1);
for(i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
printf("%5.2lf ",a[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
{
t=a[i][i];
for(int j=0;j<n+1;j++)
a[i][j]=a[i][j]/t;
a[i][i]=0;
}
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
c[i][j]=-a[i][j];


printf("C:\n");
for(i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%5.2lf ",c[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
d[i]=a[i][n];
printf("d:\n");
for(i=0;i<n;i++)
printf("%5.2lf\n",d[i]);
printf("输入ep和最大迭代次数Nmax:\n");
scanf("%lf lf",&ep,&Nmax);
printf("输入x0(%d个):\n",n);
for(i=0;i<n;i++)
scanf("%lf",&x[i]);
k=0;
do
{ emax=0;
for(i=0;i<n;i++)
{
s=d[i];
for(int j=0;j<n;j++)
s=s+c[i][j]*x[j];
if(fabs(s-x[i])>emax)
emax=fabs(s-x[i]);
x[i]=s;
}
k=k+1;
}while(emax>ep&&k>Nmax);
if(k<Nmax){printf("发散\n");return 0;}
for(i=0;i<n;i++)
{
printf("x%d=%5.2lf ",i+1,x[i]);
printf("\n");
}
return 0;


}

2006-05-24 15:55
快速回复:高撕消元
数据加载中...
 
   



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

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