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

Материалы III семестра / Vychmat_Obrazets_otcheta_laboratornoy_raboty

.doc
Скачиваний:
9
Добавлен:
15.05.2015
Размер:
174.59 Кб
Скачать

Министерство образование и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

“Тихоокеанский Государственный Университет”

Кафедра: ”Автоматика и системотехника”

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

“РЕШЕНИЕ СИСТЕМ

ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ”

Зачетная книжка №: 120700507

Выполнил:

студент группы ИС-21

Довжик А.В.

Проверил:

Доцент кафедры «АиС»

Епанешникова И.В.

Хабаровск

2013

Цель и задачи работы: изучение прямых и итерационных методов решения систем линейных алгебраических уравнений.

Задание: Написать программу для решения систем линейных алгебраических уравнений произвольной размерности по методу Гаусса.

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

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

double **a; //создание двумерного массива

double *b; //создание одномерного массива

double *x; // -||-

int n; //создание переменной n для ввода размерности

void straight_motion(double **a, double *b, int n) //функция прямого хода (сортровка)

{

double t; //введение переменной t

for(int k=0; k < n-1 ; k++) //цикл по размерности k

{

for(int i = k+1; i < n; i++) //цикл по размерности i

{

t = a[i][k] / a[k][k]; //присвоение значения разности переменной t

a[i][k] = 0;

b[i] = b[i]-t*b[k] ;

if(t != 0) //условие t!=0

for(int j=k+1; j<n; j++) //цикл по размерности j

{

a[i][j]=a[i][j]-t*a[k][j]; // отсортированная матрица

}

}

}

}

void reverse_motion(int n, double **a, double *b, double *x) //функция обратного хода (нахождение значений х)

{

double s; //создание переменной s

//int k,j;

for(int k = n-1; k>=0; k--)//цикл по переменной k

{

s=0;

for(int j=k+1; j<n; j++) //цикл по переменной j

{

s=s+a[k][j]*x[j]; //присвоение элементу s значения суммы

}

x[k]=(b[k]-s)/a[k][k]; //заполнение массива значениями x

}

}

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::b1Click(TObject *Sender)

{

a=new double *[n]; //объявление двумерного массива

for(int i=0;i<n;i++) //цикл по переменной i

a[i]=new double [n]; //выделение памяти под массив

b=new double [n]; //объявление одномерного массива

x=new double [n]; //объявление одномерного массива

for(int i=0;i<n;i++) //цикл по переменной i

{

b[i]=StrToFloat(sg2->Cells[0][i]); // заполнение матрици

for(int j=0;j<n;j++) //цикл по переменной j

{

a[i][j]=StrToFloat(sg1->Cells[j][i]); // заполнение матрицы

}

}

for(int i=0;i<n;i++) //цикл по переменной i

{

sg3->Cells[n][i]=FloatToStr(b[i]); //вывод матрицы в StringGrid3

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

{

sg3->Cells[j][i]=FloatToStr(a[i][j]); //вывод матрицы в StringGrid3

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

n=StrToInt(Edit1->Text); //считывание значение размерности с Edit1

sg1->RowCount=n; //

sg1->ColCount=n; //

sg2->RowCount=n; //

sg2->ColCount=1; // формирование размерности StringGrid's

sg3->RowCount=n; //

sg3->ColCount=n+1; //

sg4->ColCount=1; //

sg4->RowCount=n; //

}

//---------------------------------------------------------------------------

void __fastcall TForm1::b2Click(TObject *Sender)

{

straight_motion(a,b,n); //вызов функции сортировки

reverse_motion(n,a,b,x);//вызов функции нахождения х

for(int i=0;i<n;i++) //цикл по переменной i

sg4->Cells[0][i]=FloatToStr(x[i]); //вывод в StringGrid4 значений х

SB1->Visible = true; //отображение кнопки выхода из программы

}

//---------------------------------------------------------------------------

void __fastcall TForm1::SB1Click(TObject *Sender)

{

Application->Terminate(); //выход из программы

}

//---------------------------------------------------------------------------

Примеры: