DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Розв’язування системи лінійних рівнянь.

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Програмного забезпечення (ПЗ)

Інформація про роботу

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Чисельні методи в інформатиці
Група:
КН-3

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет Львівська політехніка Кафедра ПЗ До лабораторної роботи № 2 З курсу “Чисельні методи” На тему: “ Розв’язування системи лінійних рівнянь ”. Виконав: Студент групи КН-3 Львів – 2008 Тема: Розв’язування системи лінійних рівнянь. Мета: Оволодіти засобами розв’язування системи лінійних рівнянь за допомогою різних методів .  Знайти розв’язок системи лінійних рівнянь з точністю до 10-3 методом Гаусса та методом LU-розкладу, порівняти результати, а також обчислити детермінант матриці коефіцієнтів та обернену до неї матрицю. Варіанти завдань:   В процесі розроблення лабораторної роботи було розроблено наступний програмний продукт:  //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" float *Gaus(float[3][4]); float *LU(float[3][3]); float *Iter(float[3][4], float); float det(float[3][3]); float *matr(float[3][4]); float A[3][3] = {{0.34, 0.71, 0.63}, {0.71, -0.65, -0.18}, {1.17, -2.35, 0.75} }; float B[] = {2.08, 0.17, 1.28 }; float AB[3][4] = {0.34, 0.71, 0.63, 2.08, 0.71, -0.65, -0.18, 0.17, 1.17, -2.35, 0.75, 1.28 }; TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- /*float *Gaus(float AB[3][4]) { float result[3], t1, t2; int i, j; t1 = AB[0][0]; for(i=0; i<4; i++) AB[0][i] = AB[0][i]/t1; t1 = AB[1][0]; t2 = AB[2][0]; for(i=0; i<4; i++) { AB[1][i] = AB[1][i] - AB[0][i]*t1; AB[2][i] = AB[2][i] - AB[0][i]*t2; } t1 = AB[1][1]; for(i=0; i<4; i++) AB[1][i] = AB[1][i]/t1; t1 = AB[2][1]; for(i=0; i<4; i++) AB[2][i] = AB[2][i] - AB[1][i]*t1; result[2] = AB[2][3]/AB[2][2]; result[1] = AB[1][3] - AB[1][2]*result[2]; result[0] = AB[0][3] - AB[0][2]*result[2] - AB[0][1]*result[1]; return result; } */ float *Gaus(float a[3][4]) { const n = 3; int l, i, k; float c, s; // float a[n][m]; float x[n]; /* for(i=0; i<n; i++) for(k=0; k<m; k++) scanf("%f", &a[i][k]);*/ for(l=0; l<n-1; l++) { c = a[l][l]; for(k=l+1; k<n+1; k++) { a[l][k] = -a[l][k]/c; for(i=l+1; i<n; i++) a[i][k] = a[i][k] + a[i][l]*a[l][k]; } } x[n-1] = a[n-1][n]/a[n-1][n-1]; for(i=n-2; i>=0; i--) { s =- a[i][n]; for(k=i+1; k<n; k++) s = s + a[i][k]*x[k]; x[i] = s; } return x; } float *LU(float A[3][3]) { const N=3; float L[N][N]; float U[N][N]; int i, j, k; float temp; float result[3]; for(i=0; i<N; i++) U[0][i] = A[0][i]; if(U[0][0] == 0) return NULL; for(i=1; i<N; i++) L[i][0] = A[i][0] / A[0][0]; for(i=1; i<N; i++) { for(j=0; j<N; j++) { if(j < i)U[i][j] = 0.0; else { temp = 0.0; for(k = 0; k < i; k++) temp += L[i][k] * U[k][j]; U[i][j] = A[i][j] - temp; } } for(j = 0; j < N; j++) { if(j < i + 1) { if(j == i) { L[j][i] = 1.0; } else { L[j][i] = 0.0; } } else { temp = 0.0; for(k = 0; k < i; k++) { temp += L[j][k] * U[k][i]; } if(U[i][i] != 0) { L[j][i] = (1 / U[i][i]) * (A[j][i] - temp); } else return NULL; } } } L[0][0] = 1.0; result[0] = A[0][3]; result[1] = A[1][3] - L[1][0] * result[0]; result[2] = A[2][3] - L[2][0] * result[0] - L[2][1] * result[1]; if(U[2][2] == 0 || U[1][1] == 0 || U[0][0] == 0) return NULL; result[2] = result[2] / U[2][2]; result[1] = (result[1] - result[2] * U[1][2]) / U[1][1]; result[0] = (result[0] - result[1] * U[0][1] - result[2] * U[0][2]) / U[0][0]; return result; } float *Iter(float a[3][4], float eps) { const N = 3; int i,j; float norma; double xn[N]={0}; float x[N]; float M[3][3]; float E[3][3] = {{1,0,0}, {0,1,0}, {0,0,1}}; for(i=0; i<3; i++) for(j=0; j<3; j++) M[i][j] = E[i][j] - a[i][j]; if(det(M) > 1.0) return NULL; do{ norma = 0.0; for(i=0; i<N; i++) { xn[i] = -B[i]; for(j=0; j<N; j++) { if(i!=j) xn[i] += a[i][j]*x[j]; } xn[i] /= -a[i][i]; } for(i=0; i<N; i++) { if(fabs(x[i]-xn[i]) > 1) return NULL; if(fabs(x[i]-xn[i]) > norma) norma = fabs(x[i] - xn[i]); x[i] = xn[i]; } } while(norma > eps); return x; } float det(float A[3][3]) { float det; det = A[0][0]*(A[1][1]*A[2][2] - A[2][1]*A[1][2]) - A[0][1]*(A[1][0]*A[2][2] - A[2][0]*A[1][2]) + A[0][2]*(A[1][0]*A[2][1] - A[2][0]*A[1][1]); return det; }; float *matr(float AB[3][4]) { float AA[4][3]; int i, j; for(i=0; i<3; i++) for(j=0; j<4; j++) AA[j][i] = AB[i][j]; return AA[0]; } void __fastcall TForm1::FormShow(TObject *Sender) { Form1->Label1->Caption = "0.34*x1 + 0.71*x2 + 0.63*x3 = 2.08\n" "0.71*x1 - 0.65*x2 - 0.18*x3 = 0.17\n" "1.17*x1 - 2.35*x2 + 0.75*x3 = 1.28\n"; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Label2->Caption = ""; ListBox1->Clear(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { float result[3], *temp; float tmp; int i, j; if(Form1->RadioButton1->Checked) { temp = new float[3]; temp = Gaus(AB); for(i=0; i<3; i++) result[i] = *(temp+i); delete temp; Label2->Caption = RadioButton1->Caption; for(i=0; i<3; i++) { Form1->ListBox1->AddItem("x" + IntToStr(i+1) + " = " + FloatToStr(result[i]), Form1->ListBox1); Application->ProcessMessages(); } return; } if(Form1->RadioButton2->Checked) { temp = new float[3]; temp = LU(A); for(i=0; i<3; i++) result[i] = *(temp+i); delete temp; Label2->Caption = RadioButton2->Caption; for(i=0; i<3; i++) { Form1->ListBox1->AddItem("x" + IntToStr(i+1) + " = " + FloatToStr(result[i]), Form1->ListBox1); Application->ProcessMessages(); } return; } if(Form1->RadioButton3->Checked) { temp = new float[3]; temp = Iter(AB, 0.001); Label2->Caption = RadioButton3->Caption; if(temp == NULL) { // ShowMessage("Процес рожбіжний!"); ListBox1->AddItem("Процес рожбіжний!", ListBox1); delete temp; return; } for(i=0; i<3; i++) result[i] = *(temp+i); delete temp; for(i=0; i<3; i++) { Form1->ListBox1->AddItem("x" + IntToStr(i+1) + " = " + FloatToStr(result[i]), Form1->ListBox1); Application->ProcessMessages(); } return; } if(Form1->RadioButton4->Checked) { Label2->Caption = RadioButton4->Caption; ListBox1->AddItem(FloatToStr(det(A)), ListBox1); return; } if(Form1->RadioButton5->Checked) { temp = new float[3]; for(i=0; i<4; i++) { temp = matr(AB); for(j=0; j<3; j++) result[i] = *(temp+i); for(j=0; j<3; j++) { Form1->ListBox1->AddItem(FloatToStr(result[i]) + " ", ListBox1); Application->ProcessMessages(); } Form1->ListBox1->AddItem("\n", ListBox1); Application->ProcessMessages(); } } } //---------------------------------------------------------------------------  Висновок: На цих лабораторній роботі я оволодів засобами розв’язування систем лінійних рівнянь за допомогою різних методів .
Антиботан аватар за замовчуванням

2015

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!