logo

Chiziqli algebraik tenglamalar tizimini yechishning bosh elementlar usuli uchun dastur ishlab chiqish

Загружено в:

19.11.2024

Скачано:

0

Размер:

123.4013671875 KB
 “ Chiziqli algebraik tenglamalar tizimini yechishning bosh elementlar
usuli uchun dastur ishlab chiqish ” 
Reja:
I.KIRISH
II.ASOSIY QISM
     1.Algebraik chiziqli tenglamalar tizimni yechishning nazariy asosi
          2.Chiziqli   algebraik   tizimni   yechish   jarayoni   c++   dasturlash   tili   yordamida
avtomatlashtirish
     3.Chiziqli algebraik tenglamalar tizimlariga ishlatiladigan operatorlar
III.XULOSA
IV.FOYDANILGAN ADABIYOTLAR
1 Kirish
Chiziqli algebraik tenglamalar tizimini yechish matematik va amaliy fanlarning muhim
qismidir.   Bu   jarayon   ko'plab   ilmiy,   muhandislik,   iqtisodiyot   va   kompyuter   fanlari
sohalarida   keng   qo'llaniladi.   Chiziqli   tenglamalar   tizimlari,   ayniqsa,   katta   hajmli
ma'lumotlar   bilan   ishlashda,   modellarni   qurishda   va   ularga   asoslangan   tahlillarni
o'tkazishda zarurdir.
Ushbu   kurs   ishining   asosiy   maqsadi   -   chiziqli   algebraik   tenglamalar   tizimini   yechish
uchun   bosh   elementlar   usuli   yordamida   C++   dasturlash   tilida   dastur   ishlab   chiqishdir.
Bosh elementlar usuli, yoki Gauss-Jordan eliminatsiya usuli, chiziqli tenglamalar tizimini
yechishning   eng   keng   tarqalgan   va   samarali   usullaridan   biridir.   Bu   usul   yordamida
tenglamalar   tizimini   yechish   jarayoni   ko'plab   algoritmik   yondashuvlarga   asoslanadi   va
natijada bir necha muhim matematik amallarni o'z ichiga oladi.
Chiziqli   algebra   vektorlar   va   matrikslar   bilan   ishlashni   o'rganadigan   matematik
bo'limdir. Bu fan:
 Vektorlar va ularning xossalari,
 Matrikslar va ular bilan amallar,
Tenglamalar  tizimlari   va  ularni  yechish  usullari  kabi  asosiy  tushunchalarni   o'z  ichiga
oladi.
Vektorlar   va   matrikslar   chiziqli   algebraik   tizimlarning   asosiy   elementlaridir.   Ular
yordamida   matematik   modellar   quriladi   va   ularning   echimlari   topiladi.   Vektorlar   bir
o'lchovli   massivlar   bo'lib,   ularni   yig'ish,   ayirish,   skalyar   va   vektor   ko'paytirish   kabi
amallar   orqali   ishlatish   mumkin.   Matrikslar   esa   ikki   o'lchovli   massivlardir   va   ular   bilan
yanada   murakkab   amallar   bajarish   mumkin,   jumladan,   ko'paytirish,   transponatsiya,
inversiya va determinant hisoblash.
 Matriksni   uchburchak   shakliga   keltirish   -   asosiy   elementlarni   qo'llab,   pastki
uchburchak matritsani nolga aylantirish.
 Qaytib   kelish   -   yuqori   uchburchak   matritsani   birlik   matritsaga   aylantirish   va
natijada tenglamalar tizimini yechish.
2  Bu   usul   chiziqli   algebraik   tenglamalar   tizimini   yechish   uchun   juda   samarali
hisoblanadi, chunki u ko'plab muammolarni sodda va tez yechishga imkon beradi.
Kurs   ishi   davomida,   C++   dasturlash   tilida   chiziqli   algebraik   tenglamalar   tizimini
yechish uchun dastur ishlab chiqiladi. C++ tili bu maqsad uchun tanlandi, chunki u yuqori
tezlik  va  samaradorlik  bilan  ishlaydi,  shuningdek,   obyektga  yo'naltirilgan  dasturlashning
kuchli tomonlarini taklif etadi. Dastur quyidagi funksiyalarga ega bo'lishi kerak:
 Matrikslarni yaratish va ularning elementlari bilan ishlash,
 Gauss-Jordan   eliminatsiya   usulini   qo'llash   orqali   chiziqli   tenglamalar   tizimini
yechish,
 Natijalarni chiqarish va ularni tahlil qilish.
Ushbu   kurs   ishi   chiziqli   algebraik   tenglamalar   tizimini   yechish   uchun   zamonaviy
dasturlash texnikalari va algoritmlarini qo'llashni o'rganishni maqsad qiladi va talabalarga
matematik muammolarni yechish bo'yicha amaliy ko'nikmalar beradi.
3 II-BOB. ASOSIY QISM
1.Algebraik chiziqli tenglamalar tizimni yechishning nazariy asosi
Noma’lumlar   soni   n   ta   bo`lgan   m   ta   chiziqli   tenglamalar   sistemasining   umumiy
ko`rinishi quyidagicha:
bu yerda aij – no`malumlar oldidagi koeffisentlar; bi lar esa tizimning – ozod hadlari (i
= 1,2,…m, j = 1,2,…n.) deyiladi. Bu yerda m –tenglamalar soni, n- no`malumlar soni x1
x2   ,....xn   bu   no`malumlarni   aniqlash   kerak.   aij   –   no`malumlar   oldidagi   koeffisentlar
indekslari tenglamaning nomeri (i) va aij – no`malumning indeks nomeri (j). Tizim (1) –
bir jinsli deb nomlanadi agar uning ozod hadlari nolga teng bo’lsa (b1=b2=……=bm=0),
teskari holatda-bir jinislimas. Tizim (1) kvadratli deb nomlanadi agar m tenglamalar soni
nomolimlar soni n ga teng bolsa. Tizim (1) ning yechimi shunday c1, c2, ......, cn n sonlar
toplami   dur   har   bitasi   ci   tizimning   xi   nomolimi   orniga   qoyilganda   (1)   tizimning   barcha
tenglamalarin   birdaylikga   aylantirsa.   Tizim   (1)   mos   deb   nomlanadi   agar   u   hesh
bolmaganda   bitta   echimga   ega   bolsa   va   mos   emas   deb   nomlanadi,   agar   u   bitta   ham
echimga ega bolmasa. Moslik tizim (1) bitta yoki undan ham kob echimlarga ega bolishi
mumkin. Moslik  (1)  turdagi  tizim  aniqlangan  deb  nomlanadi,  agar   u bitta  yechimga  ega
bolsa.   Agar   u   hesh   bolmaganda   ikkita   yechimga   ega   bolsa,   unda   u   aniqlanmagan   deb
nomlanadi. Agar (1) mos tizimning yechimlarining c1 (1), c2 (1), …, cn (1) va c1 (2), c2
(2)  … cn (2) hesh bolmasa bittasining tengligi c1 (1) = c1 (2), c2 (1) = c2 (2), …, cn (1) =
cn   (2)   Bajarilmasa   unda   ular   har-hil   deb   nomlanadi.   Agar   tenlamalar   soni   nomolimlar
sonidan kob bolsa unda u qayta aniqlangan deb nomlanadi.
Chiziqli   tenglamalar   tizimining   yechimlari   tenglamalar   tizimida   x1,   x2,   ...,   xn   lar
o`rniga mos ravishda 0 0 2 0 1  ,..., n x x x o`zgarmas sonlarni qo`yish natijasida berilgan
tenglamar   tizimi   ayniyatlar   tizimiga   aylansa,   u   holda   0   0   2   0   1   ,   ,...,   n   x   x   x   lar   (1)
tizimning   yechimi   deb   ataladi.   Kamida   bitta   yechimga   ega   tenglamalar   tizimi
4 birgaklikdagi   tenglamalar   tizimi   deyiladi.   Yechimga   ega   bo`lmagan   tenglamar   tizimi
birgalikda   emas   deb   ataladi.   Agar   ikkita   tenglamalr   tizimi   bir   xil   yechimga   ega   bo`lsa,
yoki ikkisi ham yechimga ega bo’lmasa ular teng kuchli deb ataladi.
2.Chiziqli   algebraik   tizimni   yechish   jarayoni   c++   dasturlash   tili   yordamida
avtomatlashtirish.
Chiziqli tenglamalar tizimlarini yechish usullar:    Kramer usili 
    Gauss usili
Kramer   usuli.   Gabriel   Cramer   –   Shvtsariya   matematigi.   1704   yili   31   iyulda
Shvtsariyaning Jeneva shaharida dunyaga kelgan va 4 yanvarda 1752 yili Fransiyada vafot
etgan. Chiziqli algebraning yaratuvchilaridan biri.
Kramer   usuli,   chiziqli   tenglamalar   tizimlarini   yechish   uchun   foydalaniladi.   Agar
tenglama   kvadrat   matritsadan   iborat   bo'lsa   va   bu   matritsaning   determinanti   0   ga   teng
bo'lmasa, yani, unikallik yechimi mavjud bo'lsa, Kramer usuli foydalaniladi.
Kramer   usuli,   sistemdagi   har   bir   noma'lumning   qiymatini   topish   uchun
determinantlardan   foydalanadi.   Har   bir   noma'lum   xix_ixi   uchun,   berilgan   sistemning
barcha determinantalari AiA_iAi  bo'lib, unga mos determinantlar orqali quyidagi formula
orqali topiladi:
xi=det (Ai)det(A)x_i = \frac{\text{det}(A_i)}{\text{det}(A)}xi =det(A)det(Ai )
Bu   formulada   AAA   matritsasi   barcha   koeffitsientlarni   o'z   ichiga   olgan   matritsa,   va
AiA_iAi   esa   AAA   ning   iii-chi   ustunining   burchaklarni   berilganlar   vektori   bilan
almashtirilgan matritsadur.
Kramer usuli quyidagi holatlarda foydalaniladi:
1. Tizimda noma'lumlar soni berilgan tenglamalar mavjud bo'lsa.
2. Tenglamalar kvadrat matritsa shaklida berilgan bo'lsa.
3. Matritsaning determinanti 0 ga teng bo'lmagan bo'lsa.
5 Agar yuqorida keltirilgan shartlar qanoatlantirilmasa, yoki matritsaning determinanti 0
ga teng bo'lsa, bu usul yechimni topishda xatolik yuzaga kelishi mumkinligi bor 
Kramer usulining afzalliklari va kamchiliklari quyidagicha:
Afzalligi Kamchiligi
      1.Oddiy   va   tushunarli
hisoblanishi:   Kramer   usuli   oddiy
matematik   amaliyotlar   bilan   ishlaydi,
shuning   uchun   uning   qoidalarini
tushunish   va   amalga   oshirish   oson   va
tushunarli.
    2.Kichik   o'lchamli   matritsalar
uchun   samarali:   Agar   matritsa
kichik o'lchamli bo'lsa, Kramer usuli
samarali   natijalarni   beradi.   Bu
holatda   determinantalarni   hisoblash
oson bo'ladi.
    3.Oddiy   qoidalarga   asoslangan:
Kramer   usuli   aslida   ko'plab
foydalanuvchilar   uchun   "o'ylab
ko'rish"   uchun   samarali   bo'ladi,
chunki   u   oddiy   qoidalarga
asoslangan. 1.Katta   o'lchamli   matritsalar
uchun   murakkablik:   Agar   matritsa
katta   o'lchamli   bo'lsa   (masalan,
10n≥10),   determinantalarni
hisoblash   murakkablashadi   va
kompyuter   resurslarini   ko'p   qo'lga
kiritadi.
2.Determinant   0   ga   teng
bo'lgan  holatlar:   Agar   matritsaning
determinanti 0 ga teng bo'lsa, bu usul
ishlamaydi   va   yechim   topilmaydi.
Bu holatda boshqa yechim usullariga
qaray olishingiz kerak.
3.Yechimlarni   topish   uchun
ko'p   xususiyatlar   kerak:   Agar
matritsa   katta   o'lchamli   bo'lsa,
yechimlarni   topish   uchun   ko'p
xususiyatlarga   ega   bo'lish   kerak
bo'ladi,   shuning   uchun   hisoblash
vaqt   va   kompyuter   resurslarini   talab
qiladi.
6 Kramer usuli boshqacha yechim usullariga qaraganda oddiy va tushunarli bo'lishi bilan
ham, kamchiliklari ham mavjud bo'lgan samarali usuldir. U matematik tushunchalari bilan
ishlaydigan oddiy tenglama tizimlarini yechishda qo'llaniladi.
Chiziqli tenglamalar tizimining Kramer uslibi bilan yechilishining algoritimining blok
sxemasi rasmda ketirilgan.
1-rasm. Kramer uslibi bilan yechilishining algoritimining blok sxemasi rasmda
ketirilgan.
Bu   dastur   matritsa   va   burchaklarni   o'zlashtirib,   Kramer   usuli   orqali   noma'lumlar
qiymatlarini topadi va chiqaradi.
#include <iostream>
#include <vector>
using namespace std;
// Determinant hisoblash funksiyasi
7 double determinant (const vector<vector<double>>& matrix) {
    int n = matrix.size ();
    vector<vector<double>> temp = matrix;
    double det = 1;
    for (int i = 0; i < n; i++) {
        int maxRow = i;
        for (int k = i + 1; k < n; k++) {
            if (abs(temp[k][i]) > abs(temp[maxRow][i])) { // std::abs dan foydalanish
                maxRow = k;
            }
        }
        if (i != maxRow) {
            swap(temp[i], temp[maxRow]);
            det = -det;
        }
        det *= temp[i][i];
        for (int k = i + 1; k < n; k++) {
            double factor = temp[k][i] / temp[i][i];
            for (int j = i; j < n; j++) {
                temp[k][j] -= factor * temp[i][j];
            }
        }
    }
    return det;
}
// Kramer usuli yordamida chiziqli tenglamalar tizimini yechish
vector<double> cramer(vector<vector<double>> A, vector<double> B) {
    int n = A.size();
    double detA = determinant(A);
8     if (detA == 0) {
        cerr << "System has no unique solution" << endl;
        exit(1);
    }
    vector<double> X(n);
    for (int i = 0; i < n; i++) {
        vector<vector<double>> Ai = A;
        for (int j = 0; j < n; j++) {
            Ai[j][i] = B[j];
        }
        X[i] = determinant(Ai) / detA;
    }
    return X;
}
int main () {
    vector<vector<double>> A = {
        {2, -1, 0},
        {-1, 2, -1},
        {0, -1, 2}
    };
    vector<double> B = {1, 0, 1};
    vector<double> X = cramer(A, B);
    for (int i = 0; i < X.size(); i++) {
        cout << "x[" << i << "] = " << X[i] << endl;
    }
    return 0;
}
9 Gauss   eliminatsiya   usuli,   chiziqli   tenglamalar   tizimini   yechish   uchun   keng
qo'llaniladigan bir matematik usuldir. Bu usul matritsani uchburchak ko'rinishga keltirib,
keyin   orqadan   o'rinli   (back-substitution)   yechim   topishga   asoslangan.   Ushbu   usul   bilan
matritsa burchaklari dastlabki shaklda beriladi, keyin esa matritsaning burchaklari yuqori
burchaklarga   o'xshash   ko'rinishda   tartiblangan   va   elementar   qator   operatsiyalari
qo'llanilarak   uchburchak   ko'rinishga   keltiriladi.   Keyin   matritsa   orqali   noma'lumlar
qiymatlari topiladi.
Uchburchak ko'rinishga keltirish (Eliminatsiya):
 Berilgan matritsa va burchaklar qatorlar (satriks) shaklida beriladi.
 Matritsaning   birinchi   qatoridan   boshlab,   har   bir   qator   uchun   o'zining
elementlarini   keyingi   qatorlardan   ajratib   ko'paytirib   chiqish,   shundaylikcha   matritsa
uchburchak ko'rinishga keltiriladi.
 Uchburchak   ko'rinishga   keltirilgandan   so'ng   matritsaning   asosiy   diagonal
elementlari   (katta   elementlar)   yuqori   tomonida   joylashadi   va   pastki   tomonida   0   bo'lgan
kvadrat shaklda matritsa qoladi.
Orqadan o'rinli yechim topish:
 Uchburchak   ko'rinishdagi   matritsa   yordamida,   noma'lumlar   qiymatlari   orqadan
o'rinli yechim topiladi.
 Yechimlar orqali hisoblangan noma'lumlar original tenglama qo'yilgan matritsa
yoki satriksni qo'lga solish orqali tekshiriladi.
10 Afzalligi Kamchiligi
1. Oddiy va oson hisoblanadi.
2. Qattiq   matritsalarni   yechishda
samarali va ishonchli.
3. Ko'p   ma'lumotni   o'z   ichiga
oladi. 1. Agar   matritsa   determinanti   0
bo'lsa, usul ishlay olmaydi.
2. O'lchamlari   katta   matritsalarni
yechishda   ishlab   chiqarish
resurslari va vaqt talab qiladi.
3. Qadamli   operatsiyalar   yakuniy
natijani   ta'minlashda   xatolar
tufayli hisoblanishi mumkin.
Chiziqli   tenglamalar   tizimining   Gauss   uslibi   bilan   yechilishining   algoritimining   asosi
blok   sxemasi   birinchi   rasmda   ketirilgan.   Ikkinchi,   uchunchi,   tortinchi,   beshinchi   va
oltinchi rasimlarda uslubning alohida bloklari keltirilgan.
11 Aniqroq   tushuntirish   maqsadida,   quyidagi   C++   kodlarida   Gauss   eliminatsiya   usulini
amalga   oshirishni   ko'rsataman.   Bu   dastur   matritsa   va   burchaklarni   o'zlashtirib,   Gauss
eliminatsiya usuli orqali noma'lumlar qiymatlarini topadi va chiqaradi.
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// Gauss eliminatsiya usuli yordamida chiziqli tenglamalar tizimini yechish
void gaussElimination(vector<vector<double>>& A, vector<double>& b) {
    int n = A.size();
    // Uchburchak ko'rinishga keltirish
    for (int i = 0; i < n; i++) {
        // Pivot elementini topish
        int maxRow = i;
        for (int k = i + 1; k < n; k++) {
            if (fabs(A[k][i]) > fabs(A[maxRow][i])) {
                maxRow = k;
            }
        }
12          // Qatorlarni almashtirish
        swap(A[maxRow], A[i]);
        swap(b[maxRow], b[i]);
        // Qatorlarni modifikatsiya qilish
        for (int k = i + 1; k < n; k++) {
            double factor = A[k][i] / A[i][i];
            for (int j = i; j < n; j++) {
                A[k][j] -= factor * A[i][j];
            }
            b[k] -= factor * b[i];
        }
    }
    // Orqadan o'rinli yechim topish
    vector<double> x(n);
    for (int i = n - 1; i >= 0; i--) {
        x[i] = b[i];
        for (int j = i + 1; j < n; j++) {
            x[i] -= A[i][j] * x[j];
        }
13         x[i] /= A[i][i];
    }
    // Yechimni chiqarish
    for (int i = 0; i < n; i++) {
        cout << "x[" << i << "] = " << x[i] << endl;
    }
}
int main () {
    vector<vector<double>> A = {
        {2, -1, 0},
        {-1, 2, -1},
        {0, -1, 2}
    };
    vector<double> b = {1, 0, 1};
    gauss Elimination (A, b);
    return 0;
14 }
Bu dastur   gaussElimination   funksiyasini chaqiradi, matritsa va burchaklarni argument
sifatida   qabul   qiladi   va   natijani   konsolga   chiqaradi.   Asosiy   funksiya   matritsa   va
burchaklar   ko'rib   chiqiladi.   Funksiya   uchburchak   ko'rinishga   keltiradi   va   matritsani
elementar qator operatsiyalari yordamida yechim topadi. Natijada, noma'lumlar qiymatlari
konsolga   chiqariladi.  
Yakobi usuli chiziqli algebraik tenglamalar tizimini yechishda quyidagi afzalliklarga ega:
1. Oddiylik va qulaylik : Yakobi usuli odatda ko'p darajali tenglamalar sistemasini
yechish uchun ishlatiladi va unda ko'p takrorlanuvchi amallar bor. Uning algoritmi oddiy
va qulaydir, shuning uchun unga qo'llanish oson.
2. Stabil va ishonchli : Agar ma'lumotlar matritsasi (A) qarorli bo'lsa, Yakobi usuli
ustuvor va ishonchli natijalarni beradi.
3. Paralellik :   Yakobi   usuli   barcha   o'zgaruvchilarning   yangi   qiymatlarini   bir
vaqtning   o'zida   hisoblay   oladi.   Shuning   uchun,   agar   kompyuterda   ko'p   protsessorni
ishlatish mumkin bo'lsa, usulni paralellikka olib borish mumkin.
Bunday afzalliklarga qaramasdan, Yakobi usulining quyidagi kamchiliklari bor:
1. Tezlik :   Ko'p   takrorlanuvchi   ishlar   uchun,   Yakobi   usuli   bo'sh   vaqtning
qisqartirilishi uchun maqbul bo'lmaydi. Boshqa algoritmalar ko'proq darajada tezlikka ega
bo'lishi mumkin.
2. Qirqish :  Agar   matritsalar   sistema  yorqin va  diagonal   ustunli  bo'lmasa,   Yakobi
usuli   tez   yolg'iz   chiqishga   ega   bo'lishi   mumkin.   Bunday   holatlar   uchun,   boshqa   usullar
afzalroq bo'ladi.
15 3. Convergence : Ba'zi  holatlarda, ma'lumotlar matritsasi  yakunlanuvchisiz vaqtda
ushbu   usul   yaxshi   natijalarni   bermaydi.   Bunday   holatlarda,   boshqa   algoritmalar   yordam
berishi mumkin.
Yakobi   usuli,   odatda   matritsalar   sistemalarining   ilg'or   yechimlarini   izlashda   birinchi
tanlov   sifatida   ishlatiladi.   Agar   sistem   uzun   vaqtdan   beri   orqali   yechib   qolgan   bo'lsa,
boshqa usullarni sinash maslahat beriladi.
Yakobi usuli, lineyka aljoritmalar bo'yicha eng mashhur va kuchli algoritmalar dan biri
hisoblanadi.   Bu   usul   bilan,   chiziqli   algebraik   tenglamalar   sistemasini   yechish   uchun
yaxshi natijalarga erishish mumkin.
Yakobi   usulining   C++   da   aloqasi,   shu   usulni   amalga   oshirish   uchun   kerakli   kodni
yozishdir.   Bundan   tashqari,   bu   usulni   C++   da   amalga   oshirish   uchun   mos   keladigan
funktsiyalarni yaratish va ularni kerakli qilib ishlatish kerak.
Quyidagi   kodda,   Yakobi   usulining   biror   bir   matritsa   uchun   amalga   oshirilishi
keltirilgan:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
const double EPSILON = 0.0001; // Heshlash belgilari orasidagi farq
// Matritsa klassi
class Matrix {
private:
16     vector<vector<double>> elements;
public:
    // Constructor
    Matrix(vector<vector<double>> elems) : elements(elems) {}
    // Getter method to access elements
    double get (int row, int col) const {
        return elements[row][col];
    }
    // Setter method to modify elements
    void set (int row, int col, double value) {
        elements[row][col] = value;
    }
    // Method to get the number of rows
    int nomer Rows () const {
        return elements.size ();
    }
    // Method to get the number of columns
    int numCols () const {
        if (elements.empty ()) {
17             return 0;
        }
         return elements[0].size();
    }
    // Method to print the matrix
    void print() const {
        for (int i = 0; i < elements.size(); ++i) {
            for (int j = 0; j < elements[i].size(); ++j) {
                cout << elements[i][j] << " ";
            }
            cout << endl;
        }
    }
};
// Yakobi usulini amalga oshiruvchi funksiya
vector<double> jacobiMethod(const Matrix& A, const vector<double>& B, int 
maxIterations) {
    int n = A.numRows();
    vector<double> X(n, 0); // Boshlang'ich qiymatlar X = [0, 0, ..., 0]
    vector<double> newX(n, 0); // Yangi qiymatlar
    for (int iter = 0; iter < maxIterations; ++iter) {
        for (int i = 0; i < n; ++i) {
            double sum = 0.0;
            for (int j = 0; j < n; ++j) {
                if (j != i) {
18                     sum += A.get(i, j) * X[j];
                }
            }
            newX[i] = (B[i] - sum) / A.get(i, i);
        }
        // Farqni hisoblash
        double maxDiff = 0.0;
        for (int i = 0; i < n; ++i) {
            maxDiff = max (maxDiff, abs(newX[i] - X[i]));
        }
        // Farq epsilon dan katta bo'lsa, natijani qaytarish
        if (maxDiff < EPSILON) {
            return newX;
        }
        // Yangi qiymatlarni o'zgartirish
        X = newX;
    }
    // MaxIterations ga yetganda natija qaytariladi
    return newX;
19 }
int main () {
    vector<vector<double>> A = {{4, -1, 0}, {-1, 4, -1}, {0, -1, 4}};
    vector<double> B = {11, -1, -2};
    Matrix matA(A);
    vector<double> result = jacobi Method (matA, B, 25);
    cout << "Yechish natijasi: ";
    for (double x: result) {
        cout << x << " ";
    }
    cout << endl;
    return 0;
}
Ushbu   kod   matritsa   sistemani   Yakobi   usuli   orqali   yechish   uchun   ishlatiladi.   Yakobi
usulining   prinsipi   shundayki,   har   bir   o'zgaruvchining   (x_i)   yangi   qiymatini   o'z   o'rniga,
boshqa   o'zgaruvchilarning   oldingi   qiymatlaridan   foydalanarak   hisoblaydi.   Algoritmda
belgilangan   eng   yuqori   tartibdagi   farq   epsilon   (EPSILON)   belgisidan   kichik   bo'lganda,
20 natija   qaytariladi.   Agar   farq   epsilon   dan   katta   bo'lsa,   algoritm   ko'rsatilgan   maksimum
takrorlash soniga yetganda qaytaradi.
3.Chiziqli algebraik tenglamalar tizimlariga ishlatiladigan operatorlar.
  C++   bu   Obyektga   yonaltirilgan   dasturlashnin   tili   bolip   hisoblanadi.   C++   tili
dasturlashning protseduralik va obyektli yonaltirilgan paragdigmalarin qollaydi. Obyektni
yonaltirilgan dasturlash bu dasturlashga yonaluvshi yangi uslub. Bu dasturlash o’z ichiga
sturukturali dasturlashning eng yaqshi hossalarini o’zi ishiga olib, uni yangi fikirlar bilan
toliqtiradi.   Bu   yonalish   dasturlarni   yaratishga   yangi   yonalishni   yaratadi.   Obiektni
yonaltirilgan dasturlashda eng avzal tushincha bu obiekt (object) tushinchasi. Obiekt bu –
logikaliq birlik, o’z ichiga mag’lumotlarni va bu maglumotlarni qayta ishlab chiqaruvchi
metodlarni   oluvchi.   C++   tilida   bunday   qayta   ishlash   qoydalari   bolib   funktsiyalar,   yani
obiekt   C++   o’z   ishida   maglumotlarni   va   shu   maglumotlarni   qayta   ishlab   chiqiuvshi
funktsiyalarni   birlashtiradi.   C++   tilining   asosiy   tushinshalarning   biri   bolib   klass
tushinchasi   hisoblanadi.   C++   tilida   obektni   aniqlash   uchin   dastlab   uning   kalit   so’zi
yordamida   formasini   aniqlash   kerak.   Klassning   analogiyasi   bolib   struktura   topiladi.
Obyektga   uni   yaratganda   klass   foydalangan   holdagina   xotira   ajratiladi.   C++   tilining
hohlagan   obekti   birday   atributlarga   va   chu   klassning   boshqa   obektlari   bilan
funktsiyanalistiga   ega.   O’z   klasslarin   yaratishda   va   chu   klasslarning   obektlarning   huliq
atvori   uchun   toliq   javobgarlikni   dasturshining   zimasinda.   Belgili   bir   oraliqda   ishlash
davomida   dasturchi   standart   klasslarning   kutib   xonalariga   keng   kirishga   ruxsat   oladi.
Odatta   obekt   belgili   bir   hollatta   boladi   bu   hollatni   uning   atributlarni   mazmunlari   bilan
aniqlanadi.   Obektli   klassning   funktsiyanalisti   bu   klassning   nusqasining   ustida
operyatsiyalarning imkonyatlari bilan aniqlanadi.
Chiziqli   algebraik   tenglamalar   tizimlarida  operatorlar   matematik   amallarni   bajarishda
ishlatiladi.   C++   dasturlash   tili   operatorlarni   o'zgartirishga   imkoniyat   beradi,   shuning
uchun   bu   operatorlar   C++   tilidagi   obyektlar   (masalan,   vektorlar   va   matrislar)   ustida
xususiy ishlarni bajarish uchun ishlatiladi.
Quyidagi operatorlar odatda chiziqli algebraik tenglamalar tizimlarida ishlatiladi:
21 1. Qo'shish (+) : Vektorlar va matrislar orasida qo'shish amaliyatini bajaradi.
2. Ayirish (-) : Vektorlar va matrislar orasida ayirish amaliyatini bajaradi.
3. Ko'paytirish   (*) :   Skalarni   vektor   yoki   matrisga   ko'paytirish   amaliyatini
bajaradi.
4. Bo'lish (/) : Vektorni skalar (son) bilan bo'lish amaliyatini bajaradi.
C++   dasturlash   tili   operatorlar   yukori   amallarni   o'z   ichiga   olgan   xususiy   funksiyalar
orqali   yozilgan   klasslar   yoki   strukturalar   bilan   birga   ishlatiladi.   Bu   usul   obyektlarni
standart   algebraik   amallarni   bajarish   uchun   tayyorlaydi   va   dasturlashda   matematik
amallarni bajarishni osonlashtiradi.
Masalan,   quyidagi   C++   kodida,   vektorlar   uchun   qo'shish   (+)   va   ko'paytirish   (*)
operatorlaridan foydalanish ko'rsatilgan:
#include <iostream>
#include <vector>
using namespace std;
class Vector {
private:
    vector<double> elements;
public:
    // Constructor
    Vector(vector<double> elems): elements(elems) {}
    // Getter method to access elements
    double get (int index) const {
        return elements[index];
    }
    // Setter method to modify elements
    void set (int index, double value) {
        elements[index] = value;
    }
    // Method to get the size of the vector
22     int size () const {
        return element.size ();
    }
    // Operator overloading for vector addition
    Vector operator+ (const Vector& other) const {
        if (size ()!= other.size()) {
            cerr << "Vector sizes don't match for addition" << endl;
            exit (1);
        }
        vector<double> result;
        for (int i = 0; i < size (); ++i) {
            result.push_back(elements[i] + other.elements[i]);
        }
        return Vector(result);
    }
    // Operator overloading for scalar multiplication
    Vector operator*(double scalar) const {
        vector<double> result;
        for (int i = 0; i < size (); ++i) {
            result.push_back(elements[i] * scalar);
        }
        return Vector(result);
    }
};
int main () {
    Vector vec1({1, 4, 3});
    Vector vec2({4, 5, 6});
    // Vector addition
    Vector resultAdd = vec1 + vec2;
23     // Scalar multiplication
    Vector resultMult = vec1 * 2.0;
    return 0;
}
Ushbu   kodda,   Vector   klassida   operator+   va   operator*   funksiyalari   qo'shilgan.   Bu
funksiyalar   vektorlar   orasida   qo'shish   va   skalar   (son)   bilan   ko'paytirish   amallarini
bajaradi.
24 XULOSA
Men ushbu kurs ishini yozish mobaynida algebraik tenglamalar tizimini 
yechishning bosh elementar usuli dasturlashda qo’llaniladigan asosiy qisimlari haqida 
batafsil malumotga ega bo’ldim. Algebraik tenglamalar tizimini yechishning bosh 
elementar usulini asosiy 2 ta qismga bo’lib o’rgandik.
1.kramer 
2.gauss usuli hisoblanadi.
3.yakobri usuli.
Kramer usuli chiziqli tenglamalar tizimini yechish, determenetlar va matrisalar 
ustida kerakli amalarni basharishda keng qo’llaniladi. Guass usuli bu matrisani burchak 
usuliga keltirib hisoblash ishlarini amalga oshirdik. Bu usul afzalliklari tez va oson 
hisoblaydi. Bu ikki usul yordamida vektorlar va matrisalar ustida kerakli hamma 
amallarni bajarish ishlari olib borildi. Vektorlar ustida amalga oshirilgan amallarni 
vector kutubxonasi e’lon qilib keyin kerkli ishlarni amalga oshirdim.
Bu kursh ishida asosiy keltirilgan malumotlar chiziqli algebraik tenglamalar 
tizimini yechishning 3 ta usuli haqida malumot berilgan va ayrim dasturlar tuzganman.
 
25 Foydanilgan   adabiyotlar
1.   Р.Лафоре   Объектно-ориентированное   программирование   в   С++   //   «Питер»   -
Санкт-Петербург, 2008. 
2.   SH . A . Nazirov ,   R . V . Qobulov .   Obyektga   mo ’ ljallangan   dasturlash   //   G ’ afur   G ‘ ulom
nomidagi   nashriyot - matbuot   ijodiy   uyi   Toshkent ,2007 
3. Sh . A . Sadullayeva ,   A . Z . Maxmudov .   C ++   DA   DASTURLASH   fanidan   o ‘ quv
qo ‘ llanma ,  Toshkent  2017;
4. A . X . Nishanov ,   U . U . Turapov .   “ C ++   tilida   dasturlash   asoslari   fani   bo ‘ yicha   o ‘ quv -
uslubiy   majmua ”.  Toshkent -2016;
5. J . Axmadaliyev ,   R . Holdarboyev .   “   C ++   tilini   o ‘ rganish   bo ‘ yicha   o ‘ quv - uslubiy
majmua ”.  Andijon -2015;
Internet saytlar
1. https://www.geeksforgeeks.org/difference-between-inheritance-and-   
polymorphism/
2. https://www.geeksforgeeks.org/application-of-oops-in-cpp/   
3. https://eng.libretexts.org/Courses/Delta_College/C_-_Data_Structures/   
05%3A_Polymorphism/5.4%3A_Difference_between_Inheritance_and_Polymorphism
26

“ Chiziqli algebraik tenglamalar tizimini yechishning bosh elementlar usuli uchun dastur ishlab chiqish ” Reja: I.KIRISH II.ASOSIY QISM 1.Algebraik chiziqli tenglamalar tizimni yechishning nazariy asosi 2.Chiziqli algebraik tizimni yechish jarayoni c++ dasturlash tili yordamida avtomatlashtirish 3.Chiziqli algebraik tenglamalar tizimlariga ishlatiladigan operatorlar III.XULOSA IV.FOYDANILGAN ADABIYOTLAR 1

Kirish Chiziqli algebraik tenglamalar tizimini yechish matematik va amaliy fanlarning muhim qismidir. Bu jarayon ko'plab ilmiy, muhandislik, iqtisodiyot va kompyuter fanlari sohalarida keng qo'llaniladi. Chiziqli tenglamalar tizimlari, ayniqsa, katta hajmli ma'lumotlar bilan ishlashda, modellarni qurishda va ularga asoslangan tahlillarni o'tkazishda zarurdir. Ushbu kurs ishining asosiy maqsadi - chiziqli algebraik tenglamalar tizimini yechish uchun bosh elementlar usuli yordamida C++ dasturlash tilida dastur ishlab chiqishdir. Bosh elementlar usuli, yoki Gauss-Jordan eliminatsiya usuli, chiziqli tenglamalar tizimini yechishning eng keng tarqalgan va samarali usullaridan biridir. Bu usul yordamida tenglamalar tizimini yechish jarayoni ko'plab algoritmik yondashuvlarga asoslanadi va natijada bir necha muhim matematik amallarni o'z ichiga oladi. Chiziqli algebra vektorlar va matrikslar bilan ishlashni o'rganadigan matematik bo'limdir. Bu fan:  Vektorlar va ularning xossalari,  Matrikslar va ular bilan amallar, Tenglamalar tizimlari va ularni yechish usullari kabi asosiy tushunchalarni o'z ichiga oladi. Vektorlar va matrikslar chiziqli algebraik tizimlarning asosiy elementlaridir. Ular yordamida matematik modellar quriladi va ularning echimlari topiladi. Vektorlar bir o'lchovli massivlar bo'lib, ularni yig'ish, ayirish, skalyar va vektor ko'paytirish kabi amallar orqali ishlatish mumkin. Matrikslar esa ikki o'lchovli massivlardir va ular bilan yanada murakkab amallar bajarish mumkin, jumladan, ko'paytirish, transponatsiya, inversiya va determinant hisoblash.  Matriksni uchburchak shakliga keltirish - asosiy elementlarni qo'llab, pastki uchburchak matritsani nolga aylantirish.  Qaytib kelish - yuqori uchburchak matritsani birlik matritsaga aylantirish va natijada tenglamalar tizimini yechish. 2

 Bu usul chiziqli algebraik tenglamalar tizimini yechish uchun juda samarali hisoblanadi, chunki u ko'plab muammolarni sodda va tez yechishga imkon beradi. Kurs ishi davomida, C++ dasturlash tilida chiziqli algebraik tenglamalar tizimini yechish uchun dastur ishlab chiqiladi. C++ tili bu maqsad uchun tanlandi, chunki u yuqori tezlik va samaradorlik bilan ishlaydi, shuningdek, obyektga yo'naltirilgan dasturlashning kuchli tomonlarini taklif etadi. Dastur quyidagi funksiyalarga ega bo'lishi kerak:  Matrikslarni yaratish va ularning elementlari bilan ishlash,  Gauss-Jordan eliminatsiya usulini qo'llash orqali chiziqli tenglamalar tizimini yechish,  Natijalarni chiqarish va ularni tahlil qilish. Ushbu kurs ishi chiziqli algebraik tenglamalar tizimini yechish uchun zamonaviy dasturlash texnikalari va algoritmlarini qo'llashni o'rganishni maqsad qiladi va talabalarga matematik muammolarni yechish bo'yicha amaliy ko'nikmalar beradi. 3

II-BOB. ASOSIY QISM 1.Algebraik chiziqli tenglamalar tizimni yechishning nazariy asosi Noma’lumlar soni n ta bo`lgan m ta chiziqli tenglamalar sistemasining umumiy ko`rinishi quyidagicha: bu yerda aij – no`malumlar oldidagi koeffisentlar; bi lar esa tizimning – ozod hadlari (i = 1,2,…m, j = 1,2,…n.) deyiladi. Bu yerda m –tenglamalar soni, n- no`malumlar soni x1 x2 ,....xn bu no`malumlarni aniqlash kerak. aij – no`malumlar oldidagi koeffisentlar indekslari tenglamaning nomeri (i) va aij – no`malumning indeks nomeri (j). Tizim (1) – bir jinsli deb nomlanadi agar uning ozod hadlari nolga teng bo’lsa (b1=b2=……=bm=0), teskari holatda-bir jinislimas. Tizim (1) kvadratli deb nomlanadi agar m tenglamalar soni nomolimlar soni n ga teng bolsa. Tizim (1) ning yechimi shunday c1, c2, ......, cn n sonlar toplami dur har bitasi ci tizimning xi nomolimi orniga qoyilganda (1) tizimning barcha tenglamalarin birdaylikga aylantirsa. Tizim (1) mos deb nomlanadi agar u hesh bolmaganda bitta echimga ega bolsa va mos emas deb nomlanadi, agar u bitta ham echimga ega bolmasa. Moslik tizim (1) bitta yoki undan ham kob echimlarga ega bolishi mumkin. Moslik (1) turdagi tizim aniqlangan deb nomlanadi, agar u bitta yechimga ega bolsa. Agar u hesh bolmaganda ikkita yechimga ega bolsa, unda u aniqlanmagan deb nomlanadi. Agar (1) mos tizimning yechimlarining c1 (1), c2 (1), …, cn (1) va c1 (2), c2 (2) … cn (2) hesh bolmasa bittasining tengligi c1 (1) = c1 (2), c2 (1) = c2 (2), …, cn (1) = cn (2) Bajarilmasa unda ular har-hil deb nomlanadi. Agar tenlamalar soni nomolimlar sonidan kob bolsa unda u qayta aniqlangan deb nomlanadi. Chiziqli tenglamalar tizimining yechimlari tenglamalar tizimida x1, x2, ..., xn lar o`rniga mos ravishda 0 0 2 0 1 ,..., n x x x o`zgarmas sonlarni qo`yish natijasida berilgan tenglamar tizimi ayniyatlar tizimiga aylansa, u holda 0 0 2 0 1 , ,..., n x x x lar (1) tizimning yechimi deb ataladi. Kamida bitta yechimga ega tenglamalar tizimi 4

birgaklikdagi tenglamalar tizimi deyiladi. Yechimga ega bo`lmagan tenglamar tizimi birgalikda emas deb ataladi. Agar ikkita tenglamalr tizimi bir xil yechimga ega bo`lsa, yoki ikkisi ham yechimga ega bo’lmasa ular teng kuchli deb ataladi. 2.Chiziqli algebraik tizimni yechish jarayoni c++ dasturlash tili yordamida avtomatlashtirish. Chiziqli tenglamalar tizimlarini yechish usullar:  Kramer usili  Gauss usili Kramer usuli. Gabriel Cramer – Shvtsariya matematigi. 1704 yili 31 iyulda Shvtsariyaning Jeneva shaharida dunyaga kelgan va 4 yanvarda 1752 yili Fransiyada vafot etgan. Chiziqli algebraning yaratuvchilaridan biri. Kramer usuli, chiziqli tenglamalar tizimlarini yechish uchun foydalaniladi. Agar tenglama kvadrat matritsadan iborat bo'lsa va bu matritsaning determinanti 0 ga teng bo'lmasa, yani, unikallik yechimi mavjud bo'lsa, Kramer usuli foydalaniladi. Kramer usuli, sistemdagi har bir noma'lumning qiymatini topish uchun determinantlardan foydalanadi. Har bir noma'lum xix_ixi uchun, berilgan sistemning barcha determinantalari AiA_iAi bo'lib, unga mos determinantlar orqali quyidagi formula orqali topiladi: xi=det (Ai)det(A)x_i = \frac{\text{det}(A_i)}{\text{det}(A)}xi =det(A)det(Ai ) Bu formulada AAA matritsasi barcha koeffitsientlarni o'z ichiga olgan matritsa, va AiA_iAi esa AAA ning iii-chi ustunining burchaklarni berilganlar vektori bilan almashtirilgan matritsadur. Kramer usuli quyidagi holatlarda foydalaniladi: 1. Tizimda noma'lumlar soni berilgan tenglamalar mavjud bo'lsa. 2. Tenglamalar kvadrat matritsa shaklida berilgan bo'lsa. 3. Matritsaning determinanti 0 ga teng bo'lmagan bo'lsa. 5