Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






САНКТ-ПЕТЕРБУРГСКИЙ

КОЛЛЕДЖ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Лабораторные работы по численным методам

(Вариант № 9)

 

 

Выполнила

студентка группы № 394 СПбКИТ

Каштанова Анна

Преподаватель

Матысик И. А.

 

Тема Дата Оценка Подпись преподавателя
             
         
         
  Решение нелинейных уравнений методом деления отрезка пополам        
         
         
         
         
         
         
         

Лабораторная работа № 1

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

 

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

 

Дана система линейных уравнений:

..........

 

 

 

 

 

 

 

Данная система называется линейной, потому что она не содержит тригонометрических, логарифмическиx, показательныx функций, и потому что x входят в степень не выше первой.

 

Необходимо решить систему линейных уравнений методом Гаусса, т. е. привести матрицу коэффициентов к треугольному виду (прямой ход), выразить и найти неизвестные – xn (обратный ход).

 

Иначе систему можно записать так: Anxn* Xn = Bn

 

Anxn – двумерный массив

Xn и Bn – одномерные массивы

 

I этап – Прямой ход:

 

Anxn Xn Bn Преобразование к треугольному виду

A’nxn X’n B'n

 

II этап – Обратный ход:

 

A’nn* Xn = B'n

Xn = B’n / A’nn

 

 

Исходные данные:

 

 

Алгоритм решения:

 

1) Задать N – количество уравнений в системе

 

2) Задать исходные данные к задаче:

float A[N][N] = {{..,..,..,.., },

{..,..,..,.., },

{..,..,..,.., },

{..,..,..,.., }};

float B[N] = {..,..,..,.., };

 

3) Реализация метода Гаусса:

Прямой ход:

 

н. ц. i = 1, n

н. ц. j = i + 1, n

h = aji / aii

н. ц. k = 1, n

ajk = ajk – h*aik

к. ц. k

bj = bj – h*bi

к. ц. j

к. ц. i

 

Обратный ход: Xn = Bn / Ann

 

н. ц. i = n – 1, 1

float h = bi

н. ц. j = i + 1, n

h = h – xj*aij

к. ц. j

xi = h / aii

к. ц. i

 

5) Вывод результатов решений (Xn).

 

6) Проверка результатов.

Текст программы:

 

#include< conio.h>

#include< iostream.h>

float **A, *B, h, *X, **a, *q;

int n;

void main(void)

{

int i, j, k;

clrscr();

cout< < " Vvod 0 (n=) "; cin> > n; //выводит текущий пример по 0 или задаём

if(n==0) размер и вводим матрицы

{

n=4;

A=new float *[n]; for(i=0; i< n; i++) A[i]=new float[n];

B=new float [n];

X=new float [n]; for(i=0; i< n; i++) X[i]=0;

a=new float *[n]; for(i=0; i< n; i++) a[i]=new float[n];

q=new float [n]; for(i=0; i< n; i++) q[i]=0;

float A1[4][4]={0.81, 0.07, -0.38, 0.21, //исходные данные

-0.33, 0.41, 0.00, 1.00,

-0.51, 0.07, 0.91, 0.11,

0.22, 0.92, -0.11, -0.33};

float B1[4]={-0.81, -1.21, 1.71, -0.64};

cout< < " \nVvod A[4][4]: \n\n";

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

{

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

{A[i][j]=A1[i][j]; //копируем в A

cout< < A[i][j]< < " "; }

cout< < " \n"; }

cout< < " \nVvod B[4]: \n\n";

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

{B[i]=B1[i];

cout< < B[i]< < " "; }

cout< < " \n"; }

else

{

A=new float *[n]; for(i=0; i< n; i++) A[i]=new float[n];

B=new float [n];

X=new float [n]; for(i=0; i< n; i++) X[i]=0;

a=new float *[n]; for(i=0; i< n; i++) a[i]=new float[n];

q=new float [n]; for(i=0; i< n; i++) q[i]=0;

cout< < " \nVvod A[" < < n< < " ][" < < n< < " ]: \n\n";

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

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

cin> > A[i][j];

cout< < " \n";

cout< < " \nVvod B[" < < n< < " ]: \n\n";

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

cin> > B[i]; }

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

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

a[i][j]=A[i][j]; //копирует А в а, чтобы потом сделать проверку

for(i=0; i< n; i++) //прямой ход - приводим к треугольному виду

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

{h=A[j][i]/A[i][i];

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

A[j][k]=A[j][k]-h*A[i][k];

B[j]=B[j]-h*B[i]; }

cout< < " \n";

for(i=n-1; i> =0; i--) //обратный ход - находим решение

{h=B[i];

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

h=h-X[j]*A[i][j];

X[i]=h/A[i][i]; }

cout< < " Resenie: \n\n";

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

cout< < X[i]< < " ";

cout< < " \n";

cout< < " \nProverka: \n\n";

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

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

q[i]+=(a[i][j]*X[j]);

cout< < q[i]< < " "; }

for(i=0; i< n; i++) delete[] A[i]; delete[] A; //освобождает место в

delete[] B; оперативной памяти

delete[] X;

for(i=0; i< n; i++) delete[] a[i]; delete[] a;

delete[] q;

getch();

}

 

Скриншот результата программы:

 

 

Результаты работы программы и проверка:

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.