Численные методы решения прикладных задач - page 47

47
double
e=0.001;
bool
shod(
double
a[4][4]){
bool
s0=fabs(a[0][0])>fabs(a[0][1])+fabs(a[0][2])+fabs(a[0][3]);
bool
s1=fabs(a[1][1])>fabs(a[1][0])+fabs(a[1][2])+fabs(a[1][3]);
bool
s2=fabs(a[2][2])>fabs(a[2][0])+fabs(a[2][1])+fabs(a[2][3]);
bool
s3=fabs(a[3][3])>fabs(a[3][0])+fabs(a[3][1])+fabs(a[3][2]);
if
(s0 && s1 && s2 && s3)
returntrue
;
elsereturnfalse
;
}
bool
toch(
double
b[4],
double
c[4]){
int
i=0;
for
(i=0; i<4; i++){
if
(fabs(b[i]-c[i])>e){
returnfalse
;
}
}
returntrue
;
}
void
pr_iter(){
double
x0[4]={-1,-1,-1,-1};
int
k_iter=0, i;
if
(shod(a)==
true
){
while
(toch(x0,x)==
false
){
k_iter++;
for
(i=0; i<4; i++){
x0[i]=x[i];
}
x[0]=(b[0]-a[0][1]*x0[1]-a[0][2]*x0[2]-a[0][3]*x0[3])/a[0][0];
x[1]=(b[1]-a[1][0]*x0[0]-a[1][2]*x0[2]-a[1][3]*x0[3])/a[1][1];
x[2]=(b[2]-a[2][0]*x0[0]-a[2][1]*x0[1]-a[2][3]*x0[3])/a[2][2];
x[3]=(b[3]-a[3][0]*x0[0]-a[3][1]*x0[1]-a[3][2]*x0[2])/a[3][3];
}
}
cout<<
"Metod prostoi iteracii: k = "
<<k_iter<<endl;
for
(i=0; i<4; i++){
cout<<
"\tx["
<<i+1<<
"] = "
<<x[i]<<endl;
}
}
void
zeid(){
double
x0[4]={-1,-1,-1,-1};
int
k_iter=0, i;
for
(i=0; i<4; i++) x[i]=0;
if
(shod(a)==
true
){
while
(toch(x0,x)==
false
){
k_iter++;
for
(i=0; i<4; i++){
x0[i]=x[i];
}
x[0]=(b[0]-a[0][1]*x0[1]-a[0][2]*x0[2]-a[0][3]*x0[3])/a[0][0];
x[1]=(b[1]-a[1][0]*x[0]-a[1][2]*x0[2]-a[1][3]*x0[3])/a[1][1];
x[2]=(b[2]-a[2][0]*x[0]-a[2][1]*x[1]-a[2][3]*x0[3])/a[2][2];
x[3]=(b[3]-a[3][0]*x[0]-a[3][1]*x[1]-a[3][2]*x[2])/a[3][3];
}
}
cout<<
"Metod Zeidelya: k = "
<<k_iter<<endl;
for
(i=0; i<4; i++){
cout<<
"\tx["
<<i+1<<
"] = "
<<x[i]<<endl;
}
}
int
main(){
pr_iter();
zeid();
return
0;}
I...,37,38,39,40,41,42,43,44,45,46 48,49,50,51,52,53,54,55,56,57,...284
Powered by FlippingBook