大家帮我看看这段程序有没有错,谢谢!
程序如下,是用来解线性方程的,用的是高斯赛德乐迭代法做的在算三个未知量的时是和答案一致的,四个未知量就有出入,做六个未知量就出错了.
谁能告诉我错在哪里了,是题错还是程序错了.
刚开始学,不足之处请指教。
#include<iomanip.h>
#include<math.h>
#define NN 50
void main()
{
cout.setf(ios::fixed,ios::floatfield);
cout<<setprecision(8)<<1.23456789*2.34512344;
int i,j,k;
double e,c,T,r;
//double x,A,B;
//题目如下:任选一个
//double x={0,0,0,0},A={{0,0,0,0},{0,10,-2,-1},{0,-2,10,-1},{0,-1,-2,5}},B={0,3,15,10};
double x={0,0,0,0},A={{0,0,0,0},{0,10,-1,-2},{0,-1,10,-2},{0,-1,-1,5}},B={0,7.2,8.3,4.2};
//double x={0,0,0,0,0},A={{0,0,0,0,0},{0,-5,1,1,2},{0,2,8,1,3},{0,1,-2,-4,-1},{0,-1,3,2,7}},B={0,-2,-6,6,12};
//double x={0,0,0,0,0,0,0},A={{0,0,0,0,0,0,0},{0,1,-1,0,-1,0,0},{0,2,4,-1,0,-1,0},{0,4,-1,4,-1,0,-1},{0,8,0,-1,4,-1,0},{0,12,-1,0,-1,4,-1},{0,16,0,-1,0,-1,4}},B={0,0,5,-2,5,-2,6};
//double x={0,0,0,0,0},A={{0,0,0,0,0},{0,1,0.333,1.5,-0.333},{0,-2.01,1.45,0.50,2.95},{0,4.32,-1.95,0.007,2.08},{0,5.11,-4.00,3.33,-1.11}},B={0,3.00,2.62,0.130,3.77};
//double x={0,0,0,0},A={{0,0,0,0},{0,10,3,1},{0,2,-10,3},{0,1,3,10}},B={0,14,-5,14};
int N;
cout<<"请输入N值:";
cin>>N;
cout<<endl<<"请输入e值:";
cin>>e;
/*cout<<endl<<"请输入按行系数矩阵值:";
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
{
cin>>A;
}
cout<<endl;
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
cout<<A<<' ';
}
cout<<endl;
}
cout<<endl<<"请输入方程值:";
for(i=1;i<=N;i++)cin>>B;
for(i=1;i<=N;i++)cout<<endl<<B<<' ';
cout<<endl<<"x的初始值:";
for(i=1;i<=N;i++)cin>>x;*/
//cout<<"k"<<setw(9);
//for(i=1;i<=N;i++)cout<<"x["<<i<<"]"<<setw(9);
r=e;
for(k=1;r>=e;k++)
{
r=0;
i=1;
for(i=1;i<=N;i++)
{
T=x;
c=0;
for(j=1;j<=N;j++)
{
if(j!=i)c+=(A*x);
cout<<"第"<<i<<"_"<<j<<"次的C值:"<<c<<endl;
}
//c1=0;
//for(j=1;j<=i-1;j++)c1+=(A*x);
x=(B-c)/A;
cout<<"第"<<i<<"次的x值:"<<x<<endl;
if((fabs(x-T))>r)r=fabs(x-T);
cout<<"第"<<i<<"次的R值:"<<r<<endl;
}
cout<<endl;
//cout<<"k="<<k<<":"<<setw(9);
//cout.setf(ios::fixed,ios::floatfield);
for(i=1;i<=N;i++)cout<<"k="<<k<<":"<<x<<' ';//<<setw(10);
}cout<<endl;
} 高斯赛德乐迭代法
把这个算法弄上来看看 放屁啊 这么长的程序还是把我杀了好拉. <P>楼主这个问题提的真有建设性啊!!!!</P><P>(要想知道自己的程序是否有错,你编译一下,然后运行一下不就行了吗?!!!)</P> 不要这样说楼主,其实楼主没有电脑,自己大脑编译速度太慢,所以就想把这个程序放到我们的大脑里编译一下,而已! <P>太混乱了,没有能力看下去</P><P>不过如果说4个就不能算了,首先你要弄清楚是否一定有解,不是所有方程用G-S都能算出来的,要先判断是否收敛先,对于发散的数据自然无法迭代出解来了,所以首先算其普半径确定有解先。</P>
页:
[1]