?? 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 + -