Метод Зейделя
Метод Зейделя представляет собой некоторую модификацию метода итерации. Основная его идея заключается в том, что при вычислении (k+1)-го приближения неизвестной хi учитываются уже вычисленные ранее (k+1)-е приближения неизвестных х1, x2, ...,xi-1.
Пусть дана приведенная линейная система
(i=1,2,….,n). |
Выберем произвольно начальные приближения корней
стараясь, конечно, чтобы они в какой-то мере соответствовали искомым неизвестным
x1, x2, …. , xn
Далее, предполагая, что k-е приближения хi(k) корней известны, согласно Зейделю будем строить (k+1)-е приближения корней по следующим формулам:
k=(0,1,2…).
Процесс Зейделя может сходиться даже в том случае, если расходится процесс итерации. Однако это бывает не всегда. Возможны случаи, когда процесс Зейделя сходится медленнее процесса итерации. Более того, могут быть случаи, когда процесс итерации сходится, а процесс Зейделя расходится.
Fortran
Метод Крамера
1 |
2-5 |
6 |
9 72 |
|
|
|
dimension a(4,5), res(4), matrix(4,4) real det, modDet, startDet integer counter do i=1,4 write(*,*)"Input string ",i do j=1,5 write(*,*)" Input element ",j read(*,*)a(i,j) enddo enddo det=startDet(matrix, a); if(det.EQ.0.0)then write(*,*)'Error: null det' goto 1 end if do m=1,4 res(m)=modDet(matrix, a, m)/det enddo do i=1,4 write(*,*)res(i) enddo 1 end
subroutine det_(matrix, handle) real tmp, summ, matrix(4,4), handle integer counter counter=0 do i=1,3 if(matrix(i,i).EQ.0.0) then do j=i+1,4 if(matrix(j,i).NE.0.0) then do k=1,5 tmp=matrix(i,k) matrix(i,k)=matrix(j,k) matrix(j,k)=tmp counter=counter+1 enddo end if enddo end if do j=i+1,4 factor=-(matrix(j,i)/matrix(i,i)) do k=1,5 matrix(j,k)=matrix(j,k)+matrix(i,k)*factor enddo enddo enddo summ=matrix(1,1) do i=2,4 summ=summ*matrix(i,i) enddo handle=-1**counter*summ end subroutine det_
function startDet(matrix, a) real matrix(4,4), a(4,5), startDet do i=1,4 do j=1,4 matrix(i,j)=a(i,j); enddo enddo call det_(matrix, startDet) end function startDet
function modDet(matrix, a, num) real a(4,5), matrix(4,4), modDet integer num do i=1,4 do j=1,4 if(j.NE.num)then matrix(i,j)=a(i,j) else matrix(i,j)=a(i,n) end if enddo enddo call det_(matrix, modDet) end function modDet
|
Метод Гаусса
1 |
2-5 |
6 |
9 72 |
|
|
|
program gauss real temp, e integer i, j, k, N real, allocatable :: matrix(:,:), x(:) print*, "Enter the the number of x=" read*, N allocate (matrix(N,N)) allocate (x(N)) print*, "Enter the coefficients" do i=1, N do j=1, N+1 print*, "A[",i,"][",j,"]" read*, matrix(i,j) enddo enddo do i=1,N if(matrix(i,i)==0) then print*,'input error (matrix(i,i)=0)' stop endif enddo do i = 1,N write(*,*) (matrix(i,j), j=1,N+1) end do !прямой ход do i = 1,N do j = i+1,N temp = (matrix(j,i))/(matrix(i,i)) do k = 1,N+1 matrix(j,k)=matrix(j,k)-matrix(i,k)*temp end do end do end do !обратный ход x(N) = matrix(N,N+1)/matrix(N,N) do i = N-1,1,-1 temp = 0.0 do j = i+1, N temp = temp + matrix(i,j)*x(j) end do temp = matrix(i,N+1) - temp x(i) = temp/matrix(i,i) end do !ответ do i=1, n print*,"x(",i,")=",x(i) enddo end program
|
Метод простых итераций
1 |
2-5 |
6 |
9 72 |
|
|
|
program iter implicit none character*64 file_name real matrix(100,101), x(100), x_old(100), summa, eps integer i, j, k, N write(*,*) "Enter file name: " read(*, *) file_name !чтение матрицы из файла open(3, FILE = file_name) read(3,*) N !размерность матрицы do i = 1,N read(3,*) (matrix(i,j), j=1,N+1) end do !печать матрицы do i = 1,N write(*,*) (matrix(i,j), j=1,N+1) x(i) = 0.0 x_old(i) = 1.0 end do write(*,*) "Entereps: " read(*,*) eps
!проверка на сходимость do i = 1,N summa=0.0 do j = 1,N summa = summa + abs(matrix(i,j)) end do summa = summa - abs(matrix(i,i)); if (summa > abs(matrix(i,i))) then stop 'diverges' end if end do
!делать итерации, пока не будет достигнута точность do while(.true.) do i = 1,N ! проверка, не достигнута ли заданная точность if(abs(x(i) - x_old(i)) < eps) then do k=1, N print*,"x(",k,")=",x(k) enddo stop end if end do do i = 1,N x_old(i) = x(i) end do do i = 1,N summa = 0.0; do j = 1,N if (i /= j) then summa = summa + (x_old(j)*matrix(i,j)); end if end do x(i) = (matrix(i,N+1)-summa)/matrix(i,i); end do end do end program
|
Метод Зейделя
1 |
2-5 |
6 |
9 72 |
|
|
|
program zeid implicit none character*64 file_name real matrix(100,101), x(100), x_old(100), summa, eps integer i, j, k, N write(*,*) "Enter file name: " read(*, *) file_name !чтение матрицы из файла open(3, FILE = file_name) read(3,*) N !размерностьматрицы do i = 1,N read(3,*) (matrix(i,j), j=1,N+1) end do !печать матрицы do i = 1,N write(*,*) (matrix(i,j), j=1,N+1) x(i) = 0.0 x_old(i) = 1.0 end do write(*,*) "Entereps: " read(*,*) eps
!проверка на сходимость do i = 1,N summa=0.0 do j = 1,N summa = summa + abs(matrix(i,j)) end do summa = summa - abs(matrix(i,i)); if (summa > abs(matrix(i,i))) then stop 'diverges' end if end do
!делать итерации, пока не будет достигнута точность do while(.true.) do i = 1,N ! проверка, не достигнута ли заданная точность if(abs(x(i) - x_old(i)) < eps) then do k=1, N print*,"x(",k,")=",x(k) enddo stop end if end do do i = 1,N x_old(i) = x(i) end do do i = 1,N summa = 0.0; do j = 1,N if (i /= j) then summa = summa + (x(j)*matrix(i,j)); end if end do x(i) = (matrix(i,N+1)-summa)/matrix(i,i); end do end do end program
|
Метод главных элементов
1 |
2-5 |
6 |
9 72 |
|
|
|
real a(3,3), b(3), det_k real koef det_k=1 do i=1,3 write(*,*)"Input string ",i do j=1,4 write(*,*)" Input element ",j if(j.EQ.4)then read(*,*)b(i) else read(*,*)a(i,j) end if enddo enddo do i=1,3 do j=i+1,3 koef=a(i,i)/a(j,i) det_k=det_k*koef do k=i,3 a(j,k)=a(j,k)*koef enddo b(j)=b(j)*koef enddo do j=i+1,3 do k=i,3 a(j,k)=a(j,k)-a(i,k) enddo b(j)=b(j)-b(i) enddo enddo do i=3,2,-1 do j=1,3 koef=a(i,i)/a(j,i) det_k=det_k*koef do k=1,3 a(j,k)=a(j,k)*koef enddo b(j)=b(j)*koef enddo do k=1,i-1 a(k,i)=a(k,i)-a(i,i) b(k)=b(k)-b(i) enddo enddo do i=1,3 write(*,*)b(i)/a(i,i) enddo end |
Метод квадратных корней
1 |
2-5 |
6 |
9 72 |
|
|
|
complex::matrix(3,4),t(3,4),x1,x2,x3,summ=(0.0,0.0) do i=1,3 write(*,'(a,i1,a)')"Input string ",i,":" do j=1,4 write(*,'(6x,a,i1,a)',advance='no')"element ",j," = " read(*,*)matrix(i,j) enddo enddo t(1,1)=matrix(1,1)**(1.0/2.0) do j=2,4 t(1,j)=matrix(1,j)/t(1,1) enddo do i=2,3 do k=1,i-1 summ=summ+t(k,i)**2.0 enddo t(i,i)=(matrix(i,i)-summ)**(1.0/2.0) summ=(0.0,0.0) do j=i+1,4 do k=1,i-1 summ=summ+t(k,i)*t(k,j) enddo t(i,j)=(matrix(i,j)-summ)/t(i,i) enddo enddo x3=t(3,4)/t(3,3) x2=(t(2,4)-t(2,3)*x3)/t(2,2) x1=(t(1,4)-t(1,3)*x3-t(1,2)*x2)/t(1,1) end |
Схема Халецкого
1 |
2-5 |
6 |
9 72 |
|
|
|
dimension matrix(4,5), t(4,5) real summ summ=0.0 do i=1,4 write(*,*)"Input string ",i do j=1,5 write(*,*)" Input element ",j read(*,*)matrix(i,j) enddo enddo do i=1,4 t(i,1)=matrix(i,1); enddo do j=2,5 t(1,j)=matrix(1,j)/t(1,1); enddo do i=2,4 do j=2,i do k=1,j-1 summ=summ+t(i,k)*t(k,j) enddo t(i,j)=matrix(i,j)-summ; enddo summ=0.0 do j=i+1,5 do k=1,j-1 summ=summ+t(i,k)*t(k,j) enddo t(i,j)=(matrix(i,j)-summ)/t(i,j) enddo enddo do i=1,4 do j=1,5 write(*,*)t(i,j)," " enddo enddo end |
C ++
Метод Халецкого
#include<iostream>
using namespace std;
int main()
{
while(true)
{
cout.precision(4);
double** matrix=new double*[4];
for(int i=0; i<4; i++)
matrix[i]=new double[5];
cout << "Fill matrix:" << endl;
for(int i=0; i<4; i++)
{
cout << "String " << i+1 << endl;
for(int j=0; j<4; j++)
{
cout << "\telement " << j+1 << ": ";
cin >> matrix[i][j];
};
};
cout << "Fill free members:" << endl;
for(int i=0; i<4; i++)
{
cout << "Coll " << i+1 << ": ";
cin >> matrix[i][4];
};
double** t=new double*[4];
for(int i=0; i<4; i++)
t[i]=new double[5];
for(int i=0; i<4; i++)
t[i][0]=matrix[i][0];
for(int j=1; j<5; j++)
t[0][j]=matrix[0][j]/t[0][0];
for(int i=1; i<4; i++)
{
for(int j=1; j<=i; j++)
{
double sum=0.0;
for(int k=0; k<j; k++)
{
sum=sum+t[i][k]*t[k][j];
};
t[i][j]=matrix[i][j]-sum;
};
for(int j=i+1; j<5; j++)
{
double sum=0.0;
for(int k=0; k<i; k++)
{
sum=sum+t[i][k]*t[k][j];
};
t[i][j]=(matrix[i][j]-sum)/t[i][i];
};
};
for(int i=0; i<4; i++)
{
for(int j=0; j<5; j++)
cout << t[i][j] << "\t";
cout << endl;
};
double x4=t[3][4];
double x3=t[2][4]-t[2][3]*x4;
double x2=t[1][4]-t[1][2]*x3-t[1][3]*x4;
double x1=t[0][4]-t[0][1]*x2-t[0][2]*x3-t[0][3]*x4;
cout << x1 << "_" << x2 << "_" << x3 << "_" << x4 << endl;
};
return 0;
}
Метод квадратных корней
#include<iostream>
#include<complex>
#include<math.h>
using namespace std;
int main()
{
while(true)
{
cout.precision(4);
//double matrix[3][4];
complex<double>** matrix=new complex<double>*[3];
for(int i=0; i<3; i++)
matrix[i]=new complex<double>[4];
cout << "Fill matrix:" << endl;
for(int i=0; i<3; i++)
{
cout << "String " << i+1 << endl;
for(int j=0; j<3; j++)
{
cout << "\telement " << j+1 << ": ";
cin >> matrix[i][j];
};
};
cout << "Fill free members:" << endl;
for(int i=0; i<3; i++)
{
cout << "Coll " << i+1 << ": ";
cin >> matrix[i][3];
};
complex<double>** t=new complex<double>*[3];
for(int i=0; i<3; i++)
t[i]=new complex<double>[4];
t[0][0]=pow(matrix[0][0], (double)1/2);
for(int j=1; j<4; j++)
t[0][j]=matrix[0][j]/t[0][0];
for(int i=1; i<3; i++)
{
complex<double> sum(0.0, 0.0);
for(int k=0; k<i; k++)
{
sum=sum+pow(t[k][i],2.0);
};
t[i][i]=pow(matrix[i][i]-sum,(double)1/2);
for(int j=i+1; j<4; j++)
{
complex<double> sum(0.0,0.0);
for(int k=0; k<i; k++)
{
sum=sum+(t[k][i]*t[k][j]);
};
t[i][j]=(matrix[i][j]-sum)/t[i][i];
};
};
for(int i=0; i<3; i++)
{
for(int j=0; j<4; j++)
cout << t[i][j] << "\t";
cout << endl;
};
complex<double> x1(0.0,0.0);
complex<double> x2(0.0,0.0);
complex<double> x3(0.0,0.0);
x3=t[2][3]/t[2][2];
x2=(t[1][3]-t[1][2]*x3)/t[1][1];
x1=(t[0][3]-t[0][2]*x3*t[0][1]*x2)/t[0][0];
};
return 0;
}
Метод Гаусса
#include <cstdio>
#include "class_system.h"
//#include "check.cpp"
int gauss(array b, int n) {
cout<<"\nFirst:\n";
double** detMatr=new double*[n];
for(int i=0; i<n; i++)
detMatr[i]=new double[n];
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
detMatr[i][j] = b.A[i][j];
if(checkdeterm(detMatr, n)) {
double matrix2[n][n+1];
for(int i=0; i<n; i++)
for(int j=0; j<n+1; j++)
matrix2[i][j]=0;
for(int i=0; i<n-1; i++) {
for(int k=0; k<n; k++)
for(int j=0; j<n+1; j++)
matrix2[k][j]=0;
double tmp=b.A[i][i];
for(int j=0; j<n+1; j++)
b.A[i][j]=b.A[i][j]/tmp;
for(int k=i; k<n-1; k++) {
double devider=b.A[k+1][i]/b.A[i][i];
for(int l=0; l<n+1; l++) {
matrix2[k+1][l]=b.A[i][l]*devider;
};
};
for(int k=i+1; k<n; k++) {
for(int l=0; l<n+1; l++) {
b.A[k][l]=b.A[k][l]-matrix2[k][l];
};
};
if(i+2<n)
if(b.A[(i+2)% n ][(i+1)% n]==1 && b.A[(i+1)% n][(i+1)% n]!=1) {
double tmp[n+1];
for(int k=0; k<n+1; k++)
tmp[k]=b.A[i+1][k];
for(int k=0; k<n+1; k++)
b.A[i+1][k]=b.A[i+2][k];
for(int k=0; k<n+1; k++)
b.A[i+2][k]=tmp[k];
};
};
double tmp=b.A[n-1][n-1];
for(int j=0; j<n+1; j++)
b.A[n-1][j]=b.A[n-1][j]/tmp;
for(int k=0; k<n; k++) {
for(int l=0; l<n+1; l++) {
cout << b.A[k][l] << '\t';
};
cout << endl;
};
}
else
{
};
}
void array::gauss_2() {
cout<<"\nSecond:\n";
float tmp,xx[inp_size+1];
int i,j,k;
for(i=0;i<inp_size;i++) {
tmp=A[i][i];
for(j=inp_size;j>=i;j--) A[i][j]/=tmp;
for(j=i+1;j<inp_size;j++) {
tmp=A[j][i];
for(k=inp_size;k>=i;k--)
A[j][k]-=tmp*A[i][k];
}
}
xx[inp_size-1]=A[inp_size-1][inp_size];
for(i=inp_size-2;i>=0;i--) {
xx[i]=A[i][inp_size];
for(j=i+1;j<inp_size;j++)
xx[i]-=A[i][j]*xx[j];
}
printf("\nUnknowns:\n");
for (i=0;i<inp_size;i++)
printf("x%d=%3.3f\n",i+1,xx[i]);
}
Метод Крамера
#include <iostream>
#include <math.h>
using namespace std;
const int nMax = 100;
int n = 0;
double SoLE[nMax][nMax + 1];
double result[nMax];
bool agreed = false;
double factor;
double e = 0.0001;
double matrix[nMax][nMax];
double temp, sum, counter, det;
int i, j, k, m;
double Det()
{
counter = 0;
for(i = 0; i < n - 1; i++)
{
if(matrix[i][i] == 0)
{
for(j = i + 1; j < n && matrix[i][i] == 0; j++)
{
if(matrix[j][i] != 0)
{
for(k = 0; k < n + 1; k++)
{
temp = matrix[i][k];
matrix[i][k] = matrix[j][k];
matrix[j][k] = temp;
counter++;
}
}
}
}
for(j = i + 1; j < n; j++)
{
factor = -(matrix[j][i]/matrix[i][i]);
for(k = 0; k < n + 1; k++)
{
matrix[j][k] += matrix[i][k]*factor;
}
}
}
sum = matrix[0][0];
for(i = 1; i < n; i++)
{
sum *= matrix[i][i];
}
return pow(-1, counter)*sum;
}
double startdDet()
{
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
matrix[i][j] = SoLE[i][j];
}
}
return Det();
}
double modDet(int num)
{
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if(j != num)
{
matrix[i][j] = SoLE[i][j];
}
else
{
matrix[i][j] = SoLE[i][n];
}
}
}
return Det();
}
void Cramer()
{
det = startdDet();
if(det == 0)
{
cout <<"determinant is 0."<< endl;
agreed = false;
}
else
{
for(m = 0; m < n; m++)
{
result[m] = modDet(m)/det;
}
cout << endl;
agreed = true;
}
}
int main()
{
do
{
cout <<"Enter number of equations (1 - 100): ";
cin >> n;
}
while(n < 1 || n > 100);
cout <<"--------------------------"<< endl;
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
cout <<"Input a("<< i + 1<<','<< j + 1 <<"): ";
cin >> SoLE[i][j];
}
cout <<"Input b("<< i + 1 <<"): ";
cin >> SoLE[i][n];
}
Cramer();
cout <<"--------------------------"<< endl;
if(agreed)
{
for(i = 0; i < n; i++)
{
cout <<"X("<< i + 1 <<") = "<< result[i] << endl;
}
}
else
{
cout <<"impossible to solve the system of linear equations with this method."<< endl;
}
cout << endl;
return 1;
}
Метод главных элементов
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
const int n = 3;
double det_k = 1;
double a[n][n];
double b[n];
cout.precision(3);
for(int i=0; i<n; i++)
{
cout << "input string " << i+1 << endl;
for(int j=0; j<n; j++)
{
cout << "\telemet " << j+1 << ": ";
cin >> a[i][j];
};
};
for(int i=0; i<n; i++)
cin>>b[i];
for(int i = 0; i < n; i++)
{
for(int j = i+1; j < n; j++)
{
double koef = a[i][i] / a[j][i];
det_k *= koef;
for(int k = i; k < n; k++)
{
a[j][k] *= koef;
}
b[j] *= koef;
}
for(int j = i+1; j < n; j++)
{
for(int k = i; k < n; k++)
{
a[j][k] -= a[i][k];
}
b[j] -= b[i];
}
}
cout<<endl<<"Triangle matrix:\n";
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
cout<<a[i][j]<<" ";
cout<<" | "<<b[i]<<endl;
}
for(int i = n-1; i > 0; i--)
{
for(int j = 0; j <= i-1; j++)
{
double koef = a[i][i]/a[j][i];
det_k *= koef;
for(int k = 0; k < n; k++)
a[j][k] *= koef;
b[j] *= koef;
}
for(int k = 0; k < i; k++)
{
a[k][i] -= a[i][i];
b[k] -= b[i];
}
}
cout<<endl<<"Diag matrix:\n";
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
cout<<a[i][j]<<" ";
cout<<" | "<<b[i]<<endl;
}
cout<<"Solve:\n";
for(int i = 0; i < n; i++)
{
cout<<"x"<<i<<" = "<< b[i]/a[i][i]<<endl;
}
return 0;
}
Метод итерации
#include <cstdlib>
#include <cmath>
#include "class_system.h"
//#include "check.cpp"
using namespace std;
int iter(array b, int n) {
cout<<"\n[First]\n";
double eps;
cout << "Enter observational error: ";
cin >> eps;
for(int i=0; i<n; i++) {
double sum=0.0;
for(int j=0; j<n; j++) {
if(i!=j)
sum+=fabs(b.A[i][j]);
};
if(fabs(b.A[i][i])<sum) {
FILE* f=freopen("resultFile", "w", stdout);
cout << "Not equation" << endl;
return 1;
};
};
double* oldResult=new double[n];
double* newResult=new double[n];
for(int i=0; i<n; i++)
oldResult[i]=0;
int k=0;
while(true) {
for(int i=0; i<n; i++) {
double sum=b.A[i][n];
for(int j=0; j<n; j++)
if(i!=j)
sum+= (-oldResult[j]);
newResult[i]=(sum)/b.A[i][i];
};
if(epsChecking(oldResult, newResult, n)) {
for(int i=0; i<n; i++)
oldResult[i]=newResult[i];
k++;
}
else {
FILE* f=freopen("resultFile", "w", stdout);
for(int i=0; i< n; i++)
cout << newResult[i] << " ";
return 0;
};
};
}
void array::iter_2() {
cout<<"\n\n[Second]\n";
double eps = 0.0001; // Engineer accuracy.
double a[inp_size][inp_size]; // Original matrix.
double b[inp_size]; // Column of free terms.
for(int i=0;i<inp_size;i++) {
for(int j(0);j<inp_size;j++) {
a[i][j]=A[i][j];
}
}
for (int i=0;i<inp_size;i++) {
b[i]=A[i][inp_size+1];
}
double alpha[inp_size][inp_size]; // Buffer matrix.
double beta[inp_size]; // buffer column.
for(int i=0;i<inp_size;i++) {
for(int j=0;j<inp_size;j++) {
if(i==j) alpha[i][j]=0;
else alpha[i][j]=-a[i][j]/a[i][i];
beta[i]=b[i]/a[i][i];
cout<<alpha[i][j]<<" ";
}
cout<<endl;
}
double next[inp_size];
int stepIter=0;
int quantity=0;
double prev[inp_size];
for(int i=0;i<inp_size;i++) {
prev[i] = beta[i];
cout<<beta[i]<<" ";
}
for(stepIter;stepIter<5;stepIter++) {
cout << "\nStep " << stepIter << endl;
for(int index=0;index<inp_size;index++) {
next[index] += beta[index];
for(int j=0;j<inp_size;j++) {
next[index] += prev[j] * alpha[index][j];
}
cout << " = " << next[index] <<" ";
cout<<endl;
if(abs(next[index]-prev[index]) < eps) {
quantity++;
if(quantity == inp_size) {
cout<<"|X(k+1)-X(k)|< eps"<<endl;
break;
}
}
}
for(int i=0;i<inp_size;i++) {
prev[i] = next[i];
next[i] = 0;}
quantity=0;
}
cout << "The number of iterations: " << stepIter << endl;
}
Метод Зейделя
#include <cstdlib>
#include <cmath>
#include "class_system.h"
using namespace std;
int zeidel(array b, int size) {
double eps;
cout << "Enter observational error: ";
cin >> eps;
for(int i=0; i<size; i++) {
double sum=0.0;
for(int j=0; j<size; j++) {
if(i!=j)
sum+=fabs(b.A[i][j]);
};
if(fabs(b.A[i][i])<sum) {
FILE* f=freopen("resultFile", "w", stdout);
cout << "Not equation" << endl;
return 1;
};
};
double* oldResult=new double[size];
double* newResult=new double[size];
for(int i=0; i<size; i++)
oldResult[i]=0;
int k=0;
while(true) {
for(int i=0; i<size; i++) {
double sum=b.A[i][size];
for(int j=0; j<size; j++) {
if(i!=j) {
sum+=(-oldResult[j]);
};
};
newResult[i]=(sum)/b.A[i][i];
oldResult[i]=newResult[i];
};
if(epsChecking(oldResult, newResult, size)) {
for(int i=0; i<size; i++)
oldResult[i]=newResult[i];
k++;
}
else {
FILE* f=freopen("resultFile", "w", stdout);
for(int i=0; i< size; i++)
cout << newResult[i] << " ";
return 0;
};
};
}
Вывод
Существует множество методов решения систем линейных уравнений. Мы изучили метод Гаусса, метод простой итерации, метод Зейделя, метод Крамера, метод Халецкого, метод главных элементов и метод квадратных корней.
Наиболее распространенным приемом решения систем линейных уравнений является метод Гаусса. Но метод Гаусса – частный случай метода главных элементов. Схема Халецкого удобна для работы на вычислительных машинах. При большом числе неизвестных удобнее использовать метод итерации.
Метод удобнее выбирать в зависимости от того, какого вида СЛАУ нужно решить.