📄 3107002005_4th_jocabi&gs.cpp
字号:
// 3107002005_4th_jocabi.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream.h>
#include <math.h>
#define Nmax 1000000
#define delta 0.001
double a[5][5]={{28,-3,0,0,0},{-3,38,-10,0,0},{0,-10,25,-15,0},{0,-5,0,0,30},{0,0,-15,45,0}};
double b[5]={10,0,0,0,0};
double x[5]={1,1,1,1,1};double x0[5]={1,1,1,1,1};
int n1,n2;
void mainele()//进行列主元的选取
{
for(int i=0;i<5;i++)
for(int j=i+1;j<5;j++)
{
if(fabs(a[j][i])>fabs(a[i][i]))
for(int k=0;k<5;k++)
{
double qu=a[i][k];
a[i][k]=a[j][k];
a[j][k]=qu;
qu=b[i];
b[i]=b[j];
b[j]=qu;
}
}
}
int jocabi()//jocabi迭带
{
for (int k=0;k<Nmax;k++)
{
for(int i=0;i<5;i++)
{
double a_add=0;
for(int q=0;q<5;q++)
{
if(q!=i)
a_add=a_add+a[i][q]*x0[q];
}
x[i]=(b[i]-a_add)/a[i][i];
}
double e=0;
for(i=0;i<5;i++)
{
if(fabs(x[i]-x0[i])>e)
{
e=fabs(x[i]-x0[i]);
}
}
if (e<delta)
return 1;
for(i=0;i<5;i++)
x0[i]=x[i];
n1=k;
}
return n1;
}
int GS()
{
for(int i=0;i<5;i++)
x0[i]=x[i];
for(int k=0;k<5;k++)
{
for(i=0;i<5;i++)
{
double qu=0;
for(int j=0;j<5;j++)
{
if(j!=i)
qu=qu+a[i][j]*x[j];
}
x[i]=(b[i]-qu)/a[i][i];
}
double e=0;
for(i=0;i<5;i++)
{
if(fabs(x[i]-x0[i])>e)
{
e=fabs(x[i]-x0[i]);
}
}
if (e<delta)
return 1;
for(i=0;i<5;i++)
x0[i]=x[i];
n2=k;
}
return n2;
}
int main()
{
mainele();
jocabi();
cout<<"*******************************************************"<<endl;
cout<<"jocabi迭带的结果为"<<endl;
for(int i=0;i<5;i++)
cout<<x0[i]<<' ';
cout<<endl<<"迭带次数为"<<n1<<endl;
for( i=0;i<5;i++)
x0[i]=x[i]=1;
GS();
cout<<endl;
cout<<"*******************************************************"<<endl;
cout<<"GS迭带的结果为"<<endl;
for( i=0;i<5;i++)
cout<<x0[i]<<' ';
cout<<endl<<"迭带次数为"<<n2<<endl;
cout<<endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -