Релаксационный метод решения систем линейных уравнений

Автор работы: Пользователь скрыл имя, 18 Июня 2013 в 22:29, реферат

Описание работы

Численное решение СЛАУ – одна из наиболее часто встречающихся задач в научно-технических исследованиях. Такая задача возникает в математической физике (численное решение дифференциальных и интегральных уравнений), экономике, статистике. При этом прикладные задачи часто требуют решения больших и сверхбольших СЛАУ с числом неизвестных более 1000. К таким СЛАУ, например, приводит численное решение двумерных и особенно трехмерных задач математической физики, в которых условия физической и геометрической аппроксимации двумерной и трехмерной области диктуют использование достаточно мелкой расчетной сетки с большим числом расчетных узлов по линейному размеру.

Содержание работы

ВВЕДЕНИЕ
3
МЕТОДЫ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ.
5
Метод верхних релаксаций
13
1.2. Вычислительные погрешности метода верхних релаксаций.
14
1.3. Метод блочной релаксации
15
2. ПРАКТИЧЕСКАЯ ЧАСТЬ
2.1. РАЗБОР МЕТОДА РЕЛАКСАЦИИ ПЕРЕМЕННЫХ В СИСТЕМАХ ЛИНЕЙНЫХ УРАВНЕНИЙ НА ПРИМЕРАХ.
17
17
ЗАКЛЮЧЕНИЕ
26
СПИСОК ЛИТЕРАТУРЫ

Файлы: 1 файл

релаксационный метод.doc

— 1.14 Мб (Скачать файл)

Таблица №1

Подставляем результаты вычисленные в таблице №1. Подсчитав все приращения  ,  содержащее значение корней

Для проверки подставляем  найденные значения корней в исходное уравнение; в целом система решена точно.

Рисунок 1 – Решение  системы с помощью языка C++.

 

ТЕСТОВЫЙ ПРИМЕР №2: решить методом релаксаций систему

 


Вычисления производить с точностью до двух знаков после запятой.

РЕШЕНИЕ: Приводим систему(4) к виду, удобному для решения методом  релаксации

 


Задаем начальные приближения  корней нулевыми значениями

(2.3)


Находим значения невязок

Далее, решаем

    

Результаты подставляем  в таблицу №2

 

 

0

0,40

0

0,50

0

0,60

   

0,12

 

0,06

0,60

-0,60

   

0,52

 

0,56

 

0

   

0,06

0,56

-0,56

 

0,11

   

0,58

 

0

 

0,11

 

0,58

-0,58

 

0,06

 

0,12

   

0

 

0,06

0,23

0,12

   

0,05

 

0,02

 

-0,23

   

0,05

0,08

0,08

 

0

   

0,01

 

-0,08

 

0,02

 

0,06

0,06

 

0

 

0,02

   

-0,06

 

0,01

 

0,01

   

0

 

0,01

0,03

0,03

   

0,01

 

0

 

-0,03

   

0,01

0,01

0,01

 

0

   

0

 

-0,01

 

0

 

0,01

0,01

 

0

 

0

   

-0,01

 

0

 

0

   

0

 

0

 

0

0,65

 

0,65

 

0,86

 
             

Таблица №2

Подставляем результаты вычисленные в таблице №2. Подсчитав все приращения  ,  содержащее значение корней

Для проверки подставляем  найденные значения корней в исходное уравнение; в целом система решена точно.

 

 

 

 

 

 

 

 

 

 

 

 

Примеры:

 

 

ЗАКЛЮЧЕНИЕ

 

Можно утверждать, что почти любая задача вычислительной математики сводится в конечном итоге к решению полученной некоторым образом системы линейных или тензорных алгебраических уравнений (СЛАУ).

Но такие  системы уравнений могут быть, во-первых, очень большого размера, например, NxN=10000х10000, и даже более; во-вторых, система уравнений может оказаться недоопределенной; в-третьих, она может оказаться с линейно зависимыми уравнениями; в-четвертых, она может оказаться переопределённой и несовместной. Кроме того, в-пятых, вычислительная техника может иметь далеко не рекордное быстродействие и объём оперативной памяти, и заведомо конечную разрядность двоичного представления чисел и связанные с этим ненулевые вычислительные погрешности. Поэтому итерационные методы получили большое применение в решении СЛАУ. Современная вычислительная техника позволяет проводить исследование устойчивости и сходимости итерационного метода в зависимости от параметров задачи.

Наиболее эффективно метод релаксаций применяется при решении множества близких алгебраических систем линейных уравнений. На первом этапе проводится решение одной из систем с различными значениями итерационного параметра w и из анализа скорости сходимости итерационного процесса выбирается оптимальное значение этого параметра. Затем все остальные системы решаются с выбранным значением w.

Еще одно достоинство  итерационного метода верхних релаксаций состоит в том, что при его  реализации на ЭВМ алгоритм вычислений имеет простой вид и позволяет  использовать всего один массив для  неизвестного вектора.

Я научился решать систем линейных уравнений методом релаксации(ослабления) переменных, и закрепил приобретённые навыки разработкой программы на языке C++ .

СПИСОК ЛИТЕРАТУРЫ

 

  1. Воеводин В.В. «Вычислительные основы линейной алгебры». Москва «Наука», 1977.
  2. Фаддеев Д.К., Фаддеева В.Н. «Вычислительные методы линейной алгебры». Москва «Физматгиз», 1963.
  3. Самарский А.А., Гулин А.В.» Численные методы». Москва «Наука», 1989.
  4. Самарский А.А., Николаев Е.С. «Методы решения сеточных уравнений». Москва «Наука», 1978.
  5. Самарский А.А. «Введение в численные методы». Москва «Наука», 1987.
  6. Стренг Г. «Линейная алгебра и ее применение». Москва «Мир», 1980.
  7. Карманов В.Г. «Математическое программирование». Москва «Наука», 1989.
  8. Алексеев Е.Р. «Программирование на С++». Москва «НТ Пресс», 2007.
  9. http://www.exponenta.ru/   -  сайт посвящен решению математических задач в прикладных программных пакетах.
  10. Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. - М.: Наука, 1987.- 600 с.

 

ПРИЛОЖЕНИЕ

Листинг программы

#include <stdio.h>

#include "iostream.h"

#include <math.h>

#include <conio.h>

int maximal(int n,double R0[]);

int main(){

int i,j,n,f,k,iter;

double S,det;

cout << "Vvedite razmernost' matritci(matricta kvadratnaya)= ";

cin>>n;

double *x=new double [n];

double **b=new double *[n];

for(i=0;i<n;i++)

  b[i]=new double[n+1];

double **a=new double *[n];

for(i=0;i<n;i++)

  a[i]=new double[n+1];

cout<<"vvedite kolichestvo iteratcii:";

cin>>iter;

cout<<"vvedite rasshirenuy matrictu:\n";

for(i=0;i<n;i++){

for(j=0;j<=n;j++)

cin>>b[i][j];

}

cout<<"Podgotovka matritci k relaksatcii...\n";

for(i=0;i<n;i++){

for(j=0;j<n;j++)

  a[i][j]=-b[i][j]/b[i][i];

a[i][n]=b[i][n]/b[i][i];

}

for(i=0;i<n;i++){

for(j=0;j<n+1;j++)

cout<<"  "<<a[i][j]<<" || ";

cout<<"\n";

}

double *x0=new double [n];

for(i=0;i<n;i++)

  x[i]=0.0;

double *R0=new double [n];

cout<<"vvedite znachenia nachaln pribligenii:\n";

for(i=0;i<n;i++)

cin>>x0[i];

S=0.0;

for(i=0;i<n;i++){

for(j=0;j<n;j++)

  S=S+a[i][j]*x0[i];

}

for(i=0;i<n;i++){

R0[i]=a[i][n]-x0[i]+S;

cout<<"R("<<i<<")="<<R0[i]<<" | ";

}

f=maximal(n,R0);

det=R0[f];

for(k=0;k<iter;k++){

cout<<"det{"<<k<<"}="<<det<<"\n";

for(i=0;i<n;i++){

if(i!=f) R0[i]=R0[i]+a[i][f]*det;

else R0[i]=R0[i]-det;

}

for(i=0;i<n;i++)

cout<<"R["<<i+1<<"]="<<R0[i]<<"    ";

x[f]=x[f]+det;

f=maximal(n,R0);

det=R0[f];

 

cout<<"\n";

for(i=0;i<n;i++)

  cout<<"X{"<<i+1<<"}="<<x[i]<<"\n"; }

delete []x;

delete []R0;

delete []x0;

delete []a;

}

 

int maximal(int n,double R0[]){

int i,f;

f=0,0;

for(i=0;i<n-1;i++){

  if(R0[i+1]>R0[i]) f=i+1;

}

getchar();

return f;

 

}

1 Релаксация (relaxation) - уменьшение напряжения, ослабление (физ. процесс возвращения в состояние равновесия).




Информация о работе Релаксационный метод решения систем линейных уравнений