
Материалы III семестра / Vychmat_Obrazets_otcheta_laboratornoy_raboty
.doc
Министерство образование и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
“Тихоокеанский Государственный Университет”
Кафедра: ”Автоматика и системотехника”
Лабораторная работа №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(); //выход из программы
}
//---------------------------------------------------------------------------
Примеры: