Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отчет

.docx
Скачиваний:
19
Добавлен:
09.04.2015
Размер:
66.93 Кб
Скачать

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПРИБОРОСТРОЕНИЯ И ИНФОРМАТИКИ

Кафедра ИТ-4 «Персональные компьютеры и сети»

Дисциплина 14337 « Вычислительная математика»

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе на тему:

«Разработать программу для численного решения СЛАУ методом прогонки с организацией хранения матрицы в виде одномерного массива.»

Студент _______________________________________________________

инициалы, фамилия

подпись, дата

Группа _____ курс___ шифр___________ форма обучения _____________

Работа защищена на оценку________________________ «___» __________ 2014г.

Преподавательд.т.н., проф. А.Е. Александров

Москва-2014

Постановка задачи.

Разработать программу для численного решения СЛАУ методом прогонки с организацией хранения матрицы в виде одномерного массива.

Модель решения задачи.

Метод прогонки или алгоритм Томаса используется для решения систем линейных уравнений вида , где A -трёхдиагональная матрица.

Система уравнений  равносильна соотношению

Метод прогонки основывается на предположении, что искомые неизвестные связаны рекуррентным соотношением:

 где 

Используя это соотношение, выразим xi-1 и xi через xi+1 и подставим в уравнение (1):

,

где Fi — правая часть i-го уравнения. Это соотношение будет выполняться независимо от решения, если потребовать

Отсюда следует:

Из первого уравнения получим:

После нахождения прогоночных коэффициентов  и , используя уравнение (2), получим решение системы. При этом,

 

Другим способом объяснения существа метода прогонки, более близким к терминологии конечно-разностных методов и объясняющим происхождение его названия, является следующий: преобразуем уравнение (1) к эквивалентному ему уравнению

c надиагональной (наддиагональной) матрицей

.

Вычисления проводятся в два этапа. На первом этапе вычисляются компоненты матрицы  и вектора , начиная с  до 

и

На втором этапе, для  вычисляется решение:

Код программы.

#include <math.h>

#include <iostream>

#include <conio.h>

using namespace std;

double** A;

double* B;

double* eps;

double* X;

double* et;

double z;

int n1,k,n,i;

int main()

{

cout<<"Vvedite Razmer matrici:";

cin>>n1;

B=new double[n1];

eps=new double[n1];

X=new double[n1];

et=new double[n1];

A=new double*[n1];

for(int i=0;i<n1;i++)

A[i]=new double[n1];

cout<<"Vvedite "<<n1<<" strok po "<<n1<<" 4isel:"<<endl;

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

for (k=0;k<n1;k++)

cin>>A[i][k];

cout<<"Matrix A:"<<endl;

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

{

for (k=0;k<n1;k++)

cout<<A[i][k]<<"\t ";

cout<<endl;

}

cout<<"Vvedite "<<n1<<" 4isel:"<<endl;

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

cin>>B[i];

cout<<"Matrix B:"<<endl;

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

cout<<B[i]<<endl;

n=n1-1;

eps[0]=-A[0][1]/A[0][0];

et[0]=B[0]/A[0][0];

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

{

z=A[i][i]+A[i][i-1]*eps[i-1];

eps[i]=-A[i][i+1]/z;

et[i]=(B[i]-A[i][i-1]*et[i-1])/z;

}

X[n]=(B[n]-A[n][n-1]*et[n-1])/(A[n][n]+A[n][n-1]*eps[n-1]);

for(i=n-1;i>=0;i--)

X[i]=eps[i]*X[i+1]+et[i];

cout<<"Matrix X:"<<endl;

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

cout<<X[i]<<endl;

getch();

delete[] B;

delete[] eps;

delete[] et;

delete[] X;

for(int i=0;i<n1;i++)

delete[] A[i];

delete[] A;

return 0;

getch();

return 0;

}

Решение системы уравнений методом прогонки. Прямой ход прогонки. Вычислим прогоночные коэффициенты:     Обратный ход прогонки. Находим значения неизвестных:  , Ответ:       .

Заключение.

Одним из самых распространенных методов решения систем линейных уравнений является метод прогонки. Условие преобладания диагональных элементов обеспечивает также устойчивость метода прогонки относительно погрешностей округлений. Последнее обстоятельство позволяет использовать метод прогонки для решения больших систем уравнений. Метод прогонки оказывается устойчивым даже при нарушении условия преобладания диагональных элементов.

В ходе выполнения курсовой работы я написал программу на языке программирования С++. Также мы выполнил тестовый пример для проверки метода прогонки