Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ИССЛЕДОВАНИЕ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ (СЛАУ) МЕТОДОМ ГАУССА
ЗАДАНИЕ
Таблица
№ варианта |
Матрица коэффициентов системы A |
Столбец свободных членов b |
||
1 |
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 |
2.58 1.32 2.09 |
2.93 1.55 2.25 |
3.13 1.58 2.34 |
-6.66 -3.58 -5.01 |
3 |
2.18 2.17 3.15 |
2.44 2.31 3.22 |
2.49 2.49 3.17 |
-4.34 -3.91 -5.27 |
4 |
1.54 3.69 2.45 |
1.70 3.73 2.43 |
1.62 3.59 2.25 |
-1.97 -3.74 -2.26 |
5 |
1.53 2.35 3.83 |
1.61 2.31 3.73 |
1.43 2.07 3.45 |
-5.13 -3.69 -5.98 |
6 |
2.36 2.51 2.59 |
2.37 2.40 2.41 |
2.13 2.10 2.06 |
1.48 1.92 2.16 |
7 |
3.43 4.17 4.30 |
3.38 4.00 4.10 |
3.09 3.65 3.67 |
5.52 6.93 7.29 |
8 |
3.88 3.00 2.67 |
3.78 2.79 2.37 |
3.45 2.39 1.96 |
10.41 8.36 7.62 |
9 |
3.40 2.64 4.64 |
3.26 2.39 4.32 |
2.90 1.96 3.85 |
13.05 10.30 17.89 |
10 |
2.53 3.95 2.78 |
2.36 4.11 2.43 |
1.93 3.66 1.94 |
12.66 21.97 13.93 |
11 |
2.16 3.55 4.85 |
1.96 3.23 4.47 |
1.56 2.78 3.97 |
13.16 21.73 29.75 |
12 |
2.69 2.73 2.93 |
2.47 2.39 2.52 |
2.07 1.92 2.02 |
19.37 19.43 20.80 |
13 |
3.72 4.47 4.96 |
3.47 4.10 4.53 |
3.06 3.63 4.01 |
30.74 36.80 40.79 |
14 |
4.35 4.04 3.14 |
4.39 3.65 2.69 |
3.67 3.17 2.17 |
40.15 36.82 28.10 |
15 |
4.07 2.84 4.99 |
3.79 2.44 4.50 |
3.37 1.95 3.97 |
40.77 27.68 49.37 |
16 |
3.19 4.43 3.40 |
2.89 4.02 2.92 |
2.47 3.53 2.40 |
33.91 47.21 32.92 |
17 |
2.57 4.47 4.89 |
2.26 4.03 4.40 |
1.84 3.57 3.87 |
28.66 50.27 55.03 |
18 |
2.83 3.00 3.72 |
2.50 2.55 3.21 |
2.08 2.07 2.68 |
33.28 33.59 43.43 |
19 |
3.78 4.33 4.76 |
3.44 3.88 4.24 |
3.02 3.39 3.72 |
46.81 53.43 58.73 |
20 |
4.59 4.83 4.06 |
4.24 4.36 3.53 |
3.82 3.88 3.01 |
59.54 62.33 52.11 |
21 |
4.56 3.21 4.58 |
4.20 2.73 4.04 |
3.78 2.25 3.52 |
61.86 42.98 61.67 |
22 |
3.75 4.18 4.43 |
3.39 3.70 3.88 |
2.97 3.22 3.36 |
53.38 59.28 62.62 |
23 |
2.95 5.11 4.38 |
2.58 4.62 3.82 |
2.16 4.14 3.30 |
44.16 46.68 65.34 |
24 |
2.93 3.47 4.78 |
2.55 2.98 4.22 |
2.14 2.50 3.70 |
46.41 54.78 75.81 |
25 |
3.74 4.02 4.18 |
3.36 3.51 3.61 |
2.94 3.04 3.09 |
63.26 67.51 70.03 |
26 |
4.67 5.30 5.11 |
4.28 4.79 4.54 |
3.87 4.32 4.03 |
84.43 95.45 91.69 |
27 |
4.90 3.79 4.01 |
4.50 3.27 3.43 |
4.09 2.81 2.91 |
94.18 71.57 75.45 |
28 |
4.25 3.86 5.40 |
3.84 3.34 4.82 |
3.43 2.87 4.30 |
86.07 77.12 108.97 |
29 |
3.35 5.41 3.88 |
2.94 4.88 3.30 |
2.53 4.41 2.78 |
70.69 115.38 81.07 |
30 |
3.05 4.14 5.63 |
2.64 3.61 5.03 |
2.23 3.14 4.52 |
67.17 91.43 125.40 |
Рис.4.4 первая форма по окончании проектирования
#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";
}
//---------------------------------------------------------------------------
Рис.4.5 вторая форма по окончании проектирования
#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();
}
//---------------------------------------------------
Рис.4.6 третья форма по окончании проектирования
#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 результаты тестирования на третьей форме
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 усредняемых СЛАУ