Студопедия

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

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

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






Пример решения СЛАУ в системе Mathcad






ЛАБОРАТОРНАЯ РАБОТА 4

ИССЛЕДОВАНИЕ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ (СЛАУ) МЕТОДОМ ГАУССА

 

ЗАДАНИЕ

1. Решить СЛАУ в Mathcad’ е по заданному из таблицы варианту.

2. Составить алгоритм и написать код для решения СЛАУ методом Гаусса с частичным выбором ведущего коэффициента по столбцу. Заданный вариант использовать для тестирования.

3. Получить зависимости временных затрат от размера системы и усредненной точности решения от размера системы и типа представления (float, double, long double) коэффициентов.

Таблица

№ варианта Матрица коэффициентов системы A Столбец свободных членов b
  1.84 2.32 1.83 2.25 2.60 2.06 2.53 2.82 2.24 -6.09 -6.98 -5.52
  2.58 1.32 2.09 2.93 1.55 2.25 3.13 1.58 2.34 -6.66 -3.58 -5.01
  2.18 2.17 3.15 2.44 2.31 3.22 2.49 2.49 3.17 -4.34 -3.91 -5.27
  1.54 3.69 2.45 1.70 3.73 2.43 1.62 3.59 2.25 -1.97 -3.74 -2.26
  1.53 2.35 3.83 1.61 2.31 3.73 1.43 2.07 3.45 -5.13 -3.69 -5.98
  2.36 2.51 2.59 2.37 2.40 2.41 2.13 2.10 2.06 1.48 1.92 2.16
  3.43 4.17 4.30 3.38 4.00 4.10 3.09 3.65 3.67 5.52 6.93 7.29
  3.88 3.00 2.67 3.78 2.79 2.37 3.45 2.39 1.96 10.41 8.36 7.62
  3.40 2.64 4.64 3.26 2.39 4.32 2.90 1.96 3.85 13.05 10.30 17.89
  2.53 3.95 2.78 2.36 4.11 2.43 1.93 3.66 1.94 12.66 21.97 13.93
  2.16 3.55 4.85 1.96 3.23 4.47 1.56 2.78 3.97 13.16 21.73 29.75
  2.69 2.73 2.93 2.47 2.39 2.52 2.07 1.92 2.02 19.37 19.43 20.80
  3.72 4.47 4.96 3.47 4.10 4.53 3.06 3.63 4.01 30.74 36.80 40.79
  4.35 4.04 3.14 4.39 3.65 2.69 3.67 3.17 2.17 40.15 36.82 28.10
  4.07 2.84 4.99 3.79 2.44 4.50 3.37 1.95 3.97 40.77 27.68 49.37
  3.19 4.43 3.40 2.89 4.02 2.92 2.47 3.53 2.40 33.91 47.21 32.92
  2.57 4.47 4.89 2.26 4.03 4.40 1.84 3.57 3.87 28.66 50.27 55.03
  2.83 3.00 3.72 2.50 2.55 3.21 2.08 2.07 2.68 33.28 33.59 43.43
  3.78 4.33 4.76 3.44 3.88 4.24 3.02 3.39 3.72 46.81 53.43 58.73
  4.59 4.83 4.06 4.24 4.36 3.53 3.82 3.88 3.01 59.54 62.33 52.11
  4.56 3.21 4.58 4.20 2.73 4.04 3.78 2.25 3.52 61.86 42.98 61.67
  3.75 4.18 4.43 3.39 3.70 3.88 2.97 3.22 3.36 53.38 59.28 62.62
  2.95 5.11 4.38 2.58 4.62 3.82 2.16 4.14 3.30 44.16 46.68 65.34
  2.93 3.47 4.78 2.55 2.98 4.22 2.14 2.50 3.70 46.41 54.78 75.81
  3.74 4.02 4.18 3.36 3.51 3.61 2.94 3.04 3.09 63.26 67.51 70.03
  4.67 5.30 5.11 4.28 4.79 4.54 3.87 4.32 4.03 84.43 95.45 91.69
  4.90 3.79 4.01 4.50 3.27 3.43 4.09 2.81 2.91 94.18 71.57 75.45
  4.25 3.86 5.40 3.84 3.34 4.82 3.43 2.87 4.30 86.07 77.12 108.97
  3.35 5.41 3.88 2.94 4.88 3.30 2.53 4.41 2.78 70.69 115.38 81.07
  3.05 4.14 5.63 2.64 3.61 5.03 2.23 3.14 4.52 67.17 91.43 125.40

 

 

1. Для проектирования приложения логично использовать три формы согласно пунктам задания.

2. Создайте новый проект командой Файл/Новый/Приложение.

3. Сохраните файлы модуля и проекта командой Файл / Сохранить все под именами LR4_1 и PR_LR4. Командой Файл/Новый/Форма добавьте к проекту две формы, сохранив их модули под именами LR4_2 и LR4_3. Теперь перейдем к проектированию приложения. В результате проектирования получим формы, представленные на рис.4.4, 4.5, 4.6. В свойство Caption форм впишите соответствующие заголовки.

4. Начните проектирование с первой формы (рис.4.4). (Для перехода с одной формы на другую используйте быструю кнопку Вид формы, для перехода с модуля на модуль - Вид модуля, а с формы на модуль – Переключатель Форма/Модуль.) Перенесите на форму 3 кнопки (страница Стандарт) с надписями соответственно: Button1 – ТЕСТИРУЕМАЯ СЛАУ 3-ГО ПОРЯДКА, Button2 - РЕШЕНИЕ, Button3 – ТЕСТИРОВАНИЕ СЛАУ n – ПОРЯДКА. Для размещения системы перенесите на форму компонент StringGrid1 (страница Дополнительно). Установите следующие значения свойств компонента StringGrid1: ColCount – 8, DefaultColWidth -40, FixedCols – 0, FixedRows – 0, Font – черный, обычный, размер 8, RowCount – 3. Для вывода на экран результатов тестирования перенесите на форму компонент StringGrid2 и три метки: LabeledEdit1, LabeledEdit2 и LabeledEdit3 (страница Дополнительно). Установите следующие значения свойств компонента StringGrid2: ColCount – 2, DefaultColWidth -48, FixedCols – 1, FixedRows – 0, Font – черный, обычный, размер 8, RowCount – 3. Для всех трех меток свойству LabelPosition присвойте значение lpLeft (из выпадающего списка), а свойству Font – обычный, размер 8. Раскрывая свойство EditLabel, для всех трех меток установите подсвойство Font – черный, жирный, размер 8, а в подсвойстве Caption впишите соответственно невязка, кол-во умн+дел, кол-во сл+выч.

 

Рис.4.4 – первая форма по окончании проектирования

 

5. Для выполнения п.1 задания файл LR4_1.cpp может быть таким:

#include < vcl.h>

#pragma hdrstop

 

#include " LR4_1.h"

#include " LR4_2.h"

#include < math.h>

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

#pragma package(smart_init)

#pragma link " CSPIN"

#pragma resource " *.dfm"

TForm1 *Form1;

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

__fastcall TForm1:: TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

const int n=3;

const float a[][4]={{3.05, 2.64, 2.23, 67.17}, {4.14, 3.61, 3.14, 91.43},

{5.63, 5.03, 4.52, 125.40}};

float x[3];

void __fastcall TForm1:: Button1Click(TObject *Sender)

{AnsiString s;

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

if(j< 2)s=" + ";

else s=" ";

for(int i=0; i< 3; i++){

StringGrid1-> Cells[2*j][i]=FloatToStrF(a[i][j], ffFixed, 5, 2)

+" * ";

StringGrid1-> Cells[2*j+1][i]=" x[" +IntToStr(j)+" ]" +s; }

for(int i=0; i< 3; i++){

StringGrid1-> Cells[6][i]=" = ";

StringGrid1-> Cells[7][i]=FloatToStrF(a[i][3], ffFixed, 5, 2); }}

}

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

void __fastcall gauss(float& nev, int& mul, int& ad)

{ int i, j, k, l;

float a1[3][4], c, b, s;

// копирование исходной матрицы во вспомогательную матрицу

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

for(j=0; j< n+1; j++) a1[i][j]=a[i][j];

// решение СЛАУ

mul=ad=0;

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

c=a1[i][i];

for(j=i; j< n+1; j++) {a1[i][j]/=c; mul++; }

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

b=a1[k][i];

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

{a1[k][l]-=b*a1[i][l]; ad++; mul++; }}}

x[n-1]=a1[n-1][n]/a1[n-1][n-1]; mul++;

for(k=n-2; k> =0; k--){

s=0;

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

{s+=a1[k][j]*x[j]; ad++; mul++; }

x[k]=a1[k][n]-s; ad++; }

// вычисление невязки

c=0;

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

b=0;

for(int j=0; j< n; j++) b+=a[i][j]*x[j];

c+=pow(b-a[i][n], 2); }

nev=sqrt(c)/n;

}

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

void __fastcall TForm1:: Button2Click(TObject *Sender)

{int mul, ad;

float nev;

gauss(nev, mul, ad);

for(int i=0; i< 3; i++){

StringGrid2-> Cells[0][i]=" x[" +IntToStr(i)+" ] = ";

StringGrid2-> Cells[1][i]=FloatToStrF(x[i], ffFixed, 7, 5); }

LabeledEdit1-> Text=FloatToStrF(nev, ffExponent, 4, 2);

LabeledEdit2-> Text=IntToStr(mul);

LabeledEdit3-> Text=IntToStr(ad);

}

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

void __fastcall TForm1:: Button3Click(TObject *Sender)

{

Form2-> Show();

Form2-> StringGrid1-> Cells[0][0]=" n";

Form2-> StringGrid1-> Cells[1][0]=" k";

Form2-> StringGrid1-> Cells[2][0]=" mul";

Form2-> StringGrid1-> Cells[3][0]=" ad";

Form2-> StringGrid1-> Cells[4][0]=" nev_f";

Form2-> StringGrid1-> Cells[5][0]=" nev_d";

Form2-> StringGrid1-> Cells[6][0]=" nev_ld";

}

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

6. Перенесите на 2-ю форму (рис.4.5) 11 меток Label (страница Стандарт), в свойство Caption (надпись) которых в порядке их номеров впишите значения порядок СЛАУ, мин, макс, шаг, кол-во СЛАУ, диапазон коэфф-тов, макс, мин, диапазон правых частей, макс, мин; 3 кнопки Button (страница Стандарт), с надписями решение, график, сброс. Во всех компонентах на форме шрифт имеет размер 8. Для задания параметров СЛАУ перенесите на форму 8 компонентов ввода целых чисел – CSpinEdit (страница Примеры). Свойства MaxValue, MinValue, Value установите соответственно: CSpinEdit1 (порядок СЛАУ, мин) – 100, 1, 3; CSpinEdit2 (порядок СЛАУ, макс) – 1000, 2, 10; CSpinEdit3 (порядок СЛАУ, шаг) – 100, 1, 1; CSpinEdit4 (кол-во СЛАУ) – 100, 1, 1; CSpinEdit5 (диапазон коэфф-тов, макс) – 10, 0, 5; CSpinEdit6 (диапазон коэфф-тов, мин) – 0, -10, -5; CSpinEdit7 (диапазон правых частей, макс) 100, 1, 20; CSpinEdit8 (диапазон правых частей, мин) – 0, -100, -20.Для вывода результатов решения СЛАУв таблицу перенесите на форму компонент StringGrid1 (страница Дополнительно). Установите следующие значения свойств компонента StringGrid1: ColCount – 7, DefaultColWidth -48, FixedCols – 0, FixedRows – 1, Font – черный, обычный, размер 8, RowCount – 100. Для отображения процесса решения СЛАУперенесите в нижнюю часть формы компонент ProgressBar1 (страница Win32).

 

Рис.4.5 – вторая форма по окончании проектирования

 

7. Для выполнения п.1 задания файл LR4_2.cpp может быть таким:

#include < vcl.h>

#pragma hdrstop

 

#include " LR4_2.h"

#include " LR4_3.h"

#include " LR4_1.h"

#include < math.h>

#include < time.h>

#include < stdlib.h>

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

#pragma package(smart_init)

#pragma link " CSPIN"

#pragma resource " *.dfm"

TForm2 *Form2;

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

__fastcall TForm2:: TForm2(TComponent* Owner)

: TForm(Owner)

{

}

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

template< class T>

void __fastcall gauss_1(float**b, int n, T& nev, int& mul, int& ad)

{ T c, z, d, s;

int max;

T* x=new T[n];

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

for(int i=0; i< n; i++) a[i]=new T[n+1];

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

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

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

mul=ad=0;

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

max=i;

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

if(fabs(a[k][i])> fabs(a[max][i])) max=k;

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

{z=a[i][j]; a[i][j]=a[max][j]; a[max][j]=z; }

c=a[i][i];

for(int j=i; j< n+1; j++) {a[i][j]/=c; mul++; }

for(int k=i+1; k< n; k++){

d=a[k][i];

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

{a[k][l]-=d*a[i][l]; mul++; ad++; }}}

x[n-1]=a[n-1][n]/a[n-1][n-1]; mul++;

for(int k=n-2; k> =0; k--){

s=0;

for(int j=k+1; j< n; j++) {s+=a[k][j]*x[j]; mul++; ad++; }

x[k]=a[k][n]-s; ad++; }

// вычисление невязки

c=0;

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

d=0;

for(int j=0; j< n; j++) d+=b[i][j]*x[j];

c+=pow(d-b[i][n], 2); }

nev=sqrt(c)/n;

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

delete[]a; a=0;

delete[]x; x=0;

}

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

int pk=1;

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

void __fastcall TForm2:: Button1Click(TObject *Sender)

{

Form3-> Series1-> Clear();

Form3-> Series2-> Clear();

Form3-> Series3-> Clear();

Form3-> Series4-> Clear();

Form3-> Series5-> Clear();

int count=0, current=0;

for(int n=CSpinEdit1-> Value; n< =CSpinEdit2-> Value;

n+=CSpinEdit3-> Value)

count+=n; count*=CSpinEdit4-> Value;

float**b, w, z;

int mul, smul, ad, sad;

float nev_f, snev_f;

double nev_d, snev_d;

long double nev_ld, snev_ld;

int k=CSpinEdit4-> Value;

for(int n=CSpinEdit1-> Value;

n< =CSpinEdit2-> Value; n+=CSpinEdit3-> Value){

b=new float*[n];

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

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

smul=0; sad=0; snev_f=0; snev_d=0; snev_ld=0;

for(int kc=0; kc< k; kc++){

srand(time(NULL));

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

w=rand()%(CSpinEdit7-> Value-CSpinEdit8-> Value+1)+CSpinEdit8-> Value

+(float)random(CSpinEdit7-> Value-CSpinEdit8-> Value+1)

/(CSpinEdit7-> Value-CSpinEdit8-> Value)-0.5;

if(w> CSpinEdit7-> Value)w=CSpinEdit7-> Value;

if(w< CSpinEdit8-> Value)w=CSpinEdit8-> Value;

b[i][n]=w;

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

z=rand()%(CSpinEdit5-> Value-CSpinEdit6-> Value+1)+CSpinEdit6-> Value

+(float)random(CSpinEdit5-> Value-CSpinEdit6-> Value+1)

/(CSpinEdit5-> Value-CSpinEdit6-> Value)-0.5;

if(z> CSpinEdit5-> Value)z=CSpinEdit5-> Value;

if(z< CSpinEdit6-> Value)z=CSpinEdit6-> Value;

b[i][j]=z; }}

gauss_1(b, n, nev_f, mul, ad);

snev_f+=nev_f; smul+=mul; sad+=ad;

gauss_1(b, n, nev_d, mul, ad);

snev_d+=nev_d;

gauss_1(b, n, nev_ld, mul, ad);

snev_ld+=nev_ld;

current+=n;

ProgressBar1-> Position=100*current/count; }

StringGrid1-> Cells[0][pk]=IntToStr(n);

StringGrid1-> Cells[1][pk]=IntToStr(k);

StringGrid1-> Cells[2][pk]=IntToStr(smul);

StringGrid1-> Cells[3][pk]=IntToStr(sad);

StringGrid1-> Cells[4][pk]=FloatToStrF(snev_f/k, ffExponent, 5, 4);

StringGrid1-> Cells[5][pk]=FloatToStrF(snev_d/k, ffExponent, 5, 4);

StringGrid1-> Cells[6][pk]=FloatToStrF(snev_ld/k, ffExponent, 5, 4);

Form3-> Series1-> AddXY(n, smul, " ", clBlack);

Form3-> Series2-> AddXY(n, sad, " ", clBlack);

Form3-> Series3-> AddXY(n, snev_f/k*1.0e6, " ", clBlack);

Form3-> Series4-> AddXY(n, snev_d/k*1.0e15, " ", clBlack);

Form3-> Series5-> AddXY(n, snev_ld/k*1.0e18, " ", clBlack);

pk++;

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

delete[]b; b=0; }

}

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

void __fastcall TForm2:: Button2Click(TObject *Sender)

{

for(int i=1; i< StringGrid1-> RowCount; i++)

for(int j=0; j< StringGrid1-> ColCount; j++)

StringGrid1-> Cells[j][i]=" ";

ProgressBar1-> Position=0;

Form3-> Series1-> Clear();

Form3-> Series2-> Clear();

Form3-> Series3-> Clear();

Form3-> Series4-> Clear();

Form3-> Series5-> Clear();

pk=1;

}

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

void __fastcall TForm2:: Button3Click(TObject *Sender)

{

Form3-> Show();

}

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

8. Для графического представления результатов исследования решения СЛАУ методом Гаусса с выбором ведущего коэффициента по столбцу на форму 3 перенесите (рис.4.6) компоненты Chart1 и Chart2 (страница Additional). Зададим свойства компонента Chart1. Щелкните правой кнопкой мыши на компоненте Chart1 и в появившемся меню выберите Edit Chart …. На экране появится окно Редактора Диаграмм (Editing Chart1) с открытой страницей Chart, которая имеет несколько закладок. В данный момент открыта закладка Series. Щелкните на кнопке Add… - добавить серию. В появившемся окне выберите тип графика – Line и выключите индикатор 3D. Кнопкой Title … вызовите Change Series Title, где дайте заголовок первому графику – кол-во умн+дел. Действуя подобным образом, добавьте Series 2 и дайте заголовок второму графику – кол-во сл+выч. На вкладке Legend в группе кнопок Position нажмите кнопку Top. Цвет фона Back Color.. установите белый. На закладке Panel, нажав кнопку Panel Color…, выберите белый цвет. Перейдите на закладку Titles. В окне редактирования, которое в данный момент соответствует Title – заголовку графика, сотрите TChart и напишите (шрифт Font… - черный, жирный, размер 8) ЗАВИСИМОСТЬ ВРЕМ ЗАТРАТ ОТ ПОРЯДКА СЛАУ. Цвет фона Back Color.. установите белый.В выпадающем списке от окна редактирования Title перейдите в окно редактирования Foot и напишите тем же шрифтом nПОРЯДОК СЛАУ. В группе кнопок Alignment нажмите кнопку Right. Цвет фона Back Color.. также установите белый. Перейдите со страницы Chart на страницу Series. Здесь на закладке Format задайте параметры линий графиков. Требуемый график (кол-во умн+дел, кол-во сл+выч) выбирается из выпадающего списка. Для графика кол-во сл+выч в группе Line нажмите кнопку Border… и в группе кнопок Style включите кнопку Dot, а остальные значения параметров графиков оставьте заданными по умолчанию. Нажмите кнопку Close и выйдите из режима редактирования компонента Chart1.

9. Изложенную последовательность действий используйте и для компонента Chart2. Отличия: 3 графика – невязка (float)*1.0e6 (толщина линии Width – 2), невязка (double)*1.0e15 (толщина линии Width – 1, стиль Style – solid), невязка (long double)*1.0e18 (толщина линии Width – 1, стиль Style – Dot). Кроме того, на этой форме следует разместить 2 кнопки Button (страница Стандарт), с надписями таблица, конец. Кнопка таблица нужна для возврата на вторую форму, а кнопка конец – для перехода от выполнения приложения к его редактированию.

 

Рис.4.6 – третья форма по окончании проектирования

 

10. Файл LR4_3.cpp имеет вид:

#include < vcl.h>

#pragma hdrstop

 

#include " LR4_3.h"

#include " LR4_2.h"

#include " LR4_1.h"

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

#pragma package(smart_init)

#pragma resource " *.dfm"

TForm3 *Form3;

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

__fastcall TForm3:: TForm3(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm3:: Button1Click(TObject *Sender)

{

Form2-> Show();

}

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

void __fastcall TForm3:: Button2Click(TObject *Sender)

{

Close();

Form2-> Close();

Form1-> Close();

}

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

 

Рис.4.7 – результаты тестирования на первой форме

 

 

Рис.4.8 – результаты тестирования на второй форме

 

Рис.4.9 – результаты тестирования на третьей форме

 

11. Для построения графиков зависимостей невязок, которые для разных типов коэффициентов СЛАУ отличаются друг от друга на несколько порядков, необходимо все невязки сблизить при помощи множителей. Величины множителей устанавливаются при решении СЛАУ. Запустим приложение на выполнение, нажав быстрые кнопки Сохранить все и Запуск. После щелчков на кнопках первой формы - ТЕСТИРУЕМАЯ СЛАУ 3-ГО ПОРЯДКА, РЕШЕНИЕ, ТЕСТИРОВАНИЕ СЛАУ n – ПОРЯДКА, и щелчка на кнопке РЕШЕНИЕ второй формы получим результаты выполнения задания (рис.4.7, рис.4.8).

12. Полученные результаты позволяют внести множители в соответствующие операторы:

Form3-> Series3-> AddXY(n, snev_f/k*1.0e6, " ", clBlack);

Form3-> Series4-> AddXY(n, snev_d/k*1.0e15, " ", clBlack);

Form3-> Series5-> AddXY(n, snev_ld/k*1.0e18, " ", clBlack);

После этого графики зависимостей могут иметь вид (рис.4.9).


Рис.4.10 – результаты при 10 усредняемых СЛАУ

 

Рис.4.11 – результаты при 100 усредняемых СЛАУ

 

13. Последовательно нажимая кнопки решение, графики, таблица, сброс, решение, ….., убедитесь, что зависимости невязок от порядка системы случайны. Чтобы установить вид функциональных зависимостей, необходимо увеличить количество обрабатываемых СЛАУ заданного порядка для получения средних значений. Представление о характере зависимостей и вычислительных затратах при этом дают графики на рис.4.10 и на рис.4.11, полученные при 10 и 100 СЛАУ задаваемого порядка от 10 до 100 с шагом 10. Очевидно, что временные затраты для установления вида функциональных зависимостей значительны.

14. Щелчком на кнопке конец перейдите из режима выполнения в режим проектирования приложения.

Содержание отчета

1. Задание.

2. Формулы с пояснениями.

3. Решение СЛАУ в Mathcad’ е.

4. Блок-схемы алгоритмов с комментариями.

5. Таблицы идентификаторов.

6. Код с комментариями.

7. Результаты выполнения работы в виде таблиц и графиков.

8. Библиографический список.

Контрольные вопросы

1. Когда целесообразно применять метод Гаусса?

2. Какова цель прямого хода в методе Гаусса?

3. Как выполняется обратный ход метода Гаусса?

4. На каком ходе, прямом или обратном, необходимо учитывать условия применения метода Гаусса?

5. Объясните алгоритм схемы единственного деления.

6. Объясните алгоритм схемы с частичным выбором ведущего коэффициента по столбцу.

7. Расскажите о достоинствах и недостатках схемы с полным выбором ведущего коэффициента.

8. Расскажите о методе Жордана-Гаусса.

9. Объясните зависимость временных затрат от размера системы.

10. Объясните зависимость ошибок от размера системы.

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

12. Объясните изменение хода зависимости усредненных ошибок от размера системы при увеличении количества усредняемых систем.


ЛАБОРАТОРНАЯ РАБОТА 5

ИССЛЕДОВАНИЕ МЕТОДОВ РЕШЕНИЯ СЛАУ

И ОПЕРАЦИЙ С МАТРИЦАМИ

 

ЗАДАНИЕ

1. По заданному варианту разработать алгоритм, написать и отладить код.

2. Составить тест для проверки алгоритма, получить результаты в виде таблиц и графиков.

1. Обращение матриц методом окаймления. Исследовать точность и время обращения от размера матрицы.

2. Обращение матриц методом Ершова. Исследовать точность и время обращения от размера матрицы.

3. Обращение матриц методом Фаддеева. Исследовать точность и время обращения от размера матрицы.

4. Обращение матриц через единичную матрицу (по определению). Исследовать точность и время обращения от размера матрицы.

5. Обращение матриц через присоединенную матрицу. Исследовать точность и время обращения от размера матрицы.

6. Разложение неособенной квадратной матрицы в произведение двух треугольных матриц. Исследовать точность и время разложения от размера матрицы.

7. Разложение неособенной квадратной матрицы в произведение нижней треугольной матрицы с единичной диагональю и матрицы с ортогональными строками. Исследовать точность и время разложения от размера матрицы.

8. Разложение неособенной симметрической матрицы в произведение двух треугольных, транспонированных между собой матриц. Исследовать точность и время разложения от размера матрицы.

9. Решение СЛАУ методом Гаусса с приведением матрицы коэффициентов к обратной матрице. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

10. Решение СЛАУ методом ортогонализации строк матрицы коэффициентов. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

11. Решение СЛАУ методом Жордана-Гаусса. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

12. Решение СЛАУ с ленточными матрицами коэффициентов. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

13. Решение СЛАУ методом Холецкого. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

14. Решение СЛАУ методом квадратного корня. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

15. Решение СЛАУ методом Гаусса с полным выбором ведущего коэффициента. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

16. Вычислить матричное выражение двумя методами: непосредственно по записи; методом, обеспечивающим минимальные временные затраты. Сравнить методы по зависимостям временных затрат от размера матриц. , где – матрицы размера .

17. Вычислить матричное выражение двумя методами: непосредственно по записи; методом, обеспечивающим минимальные временные затраты. Сравнить методы по зависимостям временных затрат от размера матриц. , где – матрицы размера .

18. Вычислить матричное выражение двумя методами: непосредственно по записи; методом, обеспечивающим минимальные временные затраты. Сравнить методы по зависимостям временных затрат от размера матриц. , где , - симметрическая матрица размера , - матрица общего вида размера .

19. Вычислить матричное выражение двумя методами: непосредственно по записи; методом, обеспечивающим минимальные временные затраты. Сравнить методы по зависимостям временных затрат от размера матриц. , где - квадратные матрицы с элементами: при , при ; при , при .

20. Вычислить матричное выражение двумя методами: непосредственно по записи; методом, обеспечивающим минимальные временные затраты. Сравнить методы по зависимостям временных затрат от размера матриц. , где - матрицы общего вида размером .

21. Вычислить определитель симметрической положительно определенной матрицы путем ее разложения на две взаимно транспонированные треугольные матрицы. Получить зависимости затрат машинного времени от размера матрицы.

22. Вычислить определитель матрицы по методу Гаусса. Получить зависимости затрат машинного времени от размера матрицы.

23. Вычислить определитель матрицы через перестановки элементов матрицы. Получить зависимости затрат машинного времени от размера матрицы.

24. Вычислить определитель матрицы путем ее разложения на нижнюю и верхнюю треугольные матрицы. Получить зависимости затрат машинного времени от размера матрицы.

25. Решение СЛАУ методом простой итерации (метод Якоби). Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

26. Решение СЛАУ итерационным методом Гаусса-Зейделя. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

27. Решение СЛАУ методом - разложения. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

28. Решение СЛАУ методом прогонки. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

29. Решение СЛАУ с симметрической положительно определенной матрицей коэффициентов итерационным методом релаксации. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

30. Решение СЛАУ методом вращений. Сравнить по эффективности с методом Гаусса с частичным выбором ведущего коэффициента.

 

Содержание отчета

1. Задание.

2. Формулы с пояснениями.

3. Блок-схемы алгоритмов с комментариями.

4. Таблицы идентификаторов.

5. Код с комментариями.

6. Результаты выполнения работы в виде таблиц и графиков.

7. Библиографический список.

 

Контрольные вопросы

1. Расскажите о методе решения задачи.

2. Объясните алгоритм и докажите правильность выбранного способа тестирования.

3. Объясните полученные результаты.

 

ЧИСЛЕННЫЕ МЕТОДЫ АППРОКСИМАЦИИ

ПО КРИТЕРИЮ НАИМЕНЬШИХ КВАДРАТОВ

 






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